@valyrianjs/terminal 0.2.0 → 0.2.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/dist/ansi.d.ts +2 -0
- package/dist/ansi.d.ts.map +1 -1
- package/dist/ansi.js +12 -0
- package/dist/ansi.js.map +1 -1
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +6 -2
- package/dist/events.js.map +1 -1
- package/dist/keymap.d.ts.map +1 -1
- package/dist/keymap.js +4 -2
- package/dist/keymap.js.map +1 -1
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +2 -1
- package/dist/layout.js.map +1 -1
- package/dist/mouse.d.ts +6 -0
- package/dist/mouse.d.ts.map +1 -1
- package/dist/mouse.js +30 -16
- package/dist/mouse.js.map +1 -1
- package/dist/primitives.d.ts.map +1 -1
- package/dist/primitives.js +8 -1
- package/dist/primitives.js.map +1 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +184 -27
- package/dist/render.js.map +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +13 -5
- package/dist/runtime.js.map +1 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +323 -83
- package/dist/session.js.map +1 -1
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +3 -0
- package/dist/theme.js.map +1 -1
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +18 -4
- package/dist/tree.js.map +1 -1
- package/dist/types.d.ts +38 -4
- package/dist/types.d.ts.map +1 -1
- package/docs/api-reference.md +13 -6
- package/docs/cookbook.md +1 -1
- package/docs/interaction-model.md +7 -5
- package/docs/primitive-gallery.md +7 -3
- package/llms-full.txt +28 -15
- package/package.json +1 -1
- package/src/ansi.ts +12 -0
- package/src/events.ts +4 -2
- package/src/keymap.ts +4 -2
- package/src/layout.ts +2 -1
- package/src/mouse.ts +31 -15
- package/src/primitives.ts +8 -1
- package/src/render.ts +199 -28
- package/src/runtime.ts +13 -5
- package/src/session.ts +341 -79
- package/src/theme.ts +3 -0
- package/src/tree.ts +19 -4
- package/src/types.ts +45 -3
package/dist/runtime.js
CHANGED
|
@@ -101,15 +101,23 @@ function normalizeValyrianInput(input) {
|
|
|
101
101
|
return input;
|
|
102
102
|
}
|
|
103
103
|
const props = { ...((input.props && input.props.__terminalProps) || input.props || {}) };
|
|
104
|
-
const
|
|
105
|
-
|
|
104
|
+
const rawChildren = Array.isArray(input.children) ? input.children : [];
|
|
105
|
+
const isListComponentWithRenderChild = typeof input.tag === "function" && input.tag.name === "TerminalList" && rawChildren.length === 1 && typeof rawChildren[0] === "function";
|
|
106
|
+
if (isListComponentWithRenderChild) {
|
|
107
|
+
props.__childrenRenderer = rawChildren[0];
|
|
108
|
+
}
|
|
109
|
+
const tag = typeof input.tag === "string" ? input.tag : wrapComponent(input.tag);
|
|
110
|
+
const children = isListComponentWithRenderChild || (tag === "terminal-list" && rawChildren.length === 1 && typeof rawChildren[0] === "function")
|
|
111
|
+
? []
|
|
112
|
+
: rawChildren.map((child) => {
|
|
106
113
|
if (props["v-for"] && typeof child === "function") {
|
|
107
114
|
return (...args) => normalizeValyrianInput(child(...args));
|
|
108
115
|
}
|
|
109
116
|
return normalizeValyrianInput(child);
|
|
110
|
-
})
|
|
111
|
-
|
|
112
|
-
|
|
117
|
+
});
|
|
118
|
+
if (tag === "terminal-list" && rawChildren.length === 1 && typeof rawChildren[0] === "function") {
|
|
119
|
+
props.__childrenRenderer = rawChildren[0];
|
|
120
|
+
}
|
|
113
121
|
if (typeof tag === "string" && isTerminalTag(tag)) {
|
|
114
122
|
const terminalProps = { ...props };
|
|
115
123
|
if (typeof props.style === "object") {
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAWV,oBAAoB,EAMpB,eAAe,EAEhB,MAAM,YAAY,CAAC;AAqLpB,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,GAAE,oBAAyB,GAAG,eAAe,CA06C7F"}
|
package/dist/session.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { ANSI_ENTER_ALTERNATE_SCREEN, ANSI_EXIT_ALTERNATE_SCREEN, ANSI_HIDE_CURSOR, ANSI_SHOW_CURSOR, createAnsiDiffWriter, formatPlainFrame, toAnsiFrame } from "./ansi.js";
|
|
1
|
+
import { ANSI_DISABLE_MOUSE_REPORTING, ANSI_ENABLE_MOUSE_REPORTING, ANSI_ENTER_ALTERNATE_SCREEN, ANSI_EXIT_ALTERNATE_SCREEN, ANSI_HIDE_CURSOR, ANSI_SHOW_CURSOR, createAnsiDiffWriter, formatPlainFrame, toAnsiFrame } from "./ansi.js";
|
|
2
2
|
import { createSystemClipboardAdapter } from "./clipboard.js";
|
|
3
3
|
import { createEditorState, insertEditorText, moveEditorCursor, removeEditorBackward, removeEditorForward } from "./editor-state.js";
|
|
4
4
|
import { copySelection, hasSelection, insertText, moveCursorEnd, moveCursorHome, moveCursorLeft, moveCursorRight, moveCursorWordLeft, moveCursorWordRight, normalizeInputState, parseTerminalKey, removeBackward, removeForward, selectAll } from "./events.js";
|
|
5
5
|
import { createResolvedTerminalKeymap, resolveTerminalKeyBinding } from "./keymap.js";
|
|
6
6
|
import { mergeVertical } from "./layout.js";
|
|
7
|
-
import { cursorFromHitbox, parseTerminalInput, resolvePointerTarget } from "./mouse.js";
|
|
7
|
+
import { cursorFromHitbox, parseTerminalInput, parseTerminalMousePrefix, resolvePointerTarget } from "./mouse.js";
|
|
8
8
|
import { createOutputWriter } from "./output-writer.js";
|
|
9
9
|
import { parseBracketedPaste } from "./paste.js";
|
|
10
10
|
import { renderTerminalFrame } from "./render.js";
|
|
@@ -25,6 +25,10 @@ const KNOWN_TERMINAL_KEY_SEQUENCES = [
|
|
|
25
25
|
"\u001b[1;3C",
|
|
26
26
|
"\u001b[1;3D",
|
|
27
27
|
"\u001b[3~",
|
|
28
|
+
"\u001b[5~",
|
|
29
|
+
"\u001b[6~",
|
|
30
|
+
"\u001b[1~",
|
|
31
|
+
"\u001b[4~",
|
|
28
32
|
"\u001b[Z",
|
|
29
33
|
"\u001b[A",
|
|
30
34
|
"\u001b[B",
|
|
@@ -84,6 +88,7 @@ function resolveRuntimeOptions(options) {
|
|
|
84
88
|
stdout,
|
|
85
89
|
alternateScreen: options.alternateScreen ?? ownsInteractiveTTY,
|
|
86
90
|
hideCursor: options.hideCursor ?? ownsInteractiveTTY,
|
|
91
|
+
mouseReporting: ownsInteractiveTTY,
|
|
87
92
|
writesAnsi: runtime === "app" && Boolean(stdout)
|
|
88
93
|
};
|
|
89
94
|
}
|
|
@@ -95,7 +100,7 @@ function resolveTerminalSize(options, stdout) {
|
|
|
95
100
|
rows: validateTerminalDimension("rows", rows)
|
|
96
101
|
};
|
|
97
102
|
}
|
|
98
|
-
function applyInteractiveState(nodes, focusedId, inputStateById, editorStateById, listIndexById, scrollOffsetById, listHoverById, scrollHoverRowById) {
|
|
103
|
+
function applyInteractiveState(nodes, focusedId, inputStateById, editorStateById, listIndexById, listSelectedIndexById, listViewportOffsetById, scrollOffsetById, listHoverById, scrollHoverRowById) {
|
|
99
104
|
for (let i = 0; i < nodes.length; i += 1) {
|
|
100
105
|
const node = nodes[i];
|
|
101
106
|
if (node.type !== "element") {
|
|
@@ -117,7 +122,23 @@ function applyInteractiveState(nodes, focusedId, inputStateById, editorStateById
|
|
|
117
122
|
node.props.__editorState = current;
|
|
118
123
|
}
|
|
119
124
|
if (node.tag === "terminal-list" && id) {
|
|
120
|
-
node.props.
|
|
125
|
+
const items = Array.isArray(node.props.items) ? node.props.items : [];
|
|
126
|
+
const activeIndex = listIndexById.get(id) || 0;
|
|
127
|
+
const clampedActiveIndex = Math.max(0, Math.min(Math.max(0, items.length - 1), activeIndex));
|
|
128
|
+
if (!listIndexById.has(id)) {
|
|
129
|
+
listIndexById.set(id, clampedActiveIndex);
|
|
130
|
+
}
|
|
131
|
+
const selectedIndex = node.props.showActive === false
|
|
132
|
+
? null
|
|
133
|
+
: listSelectedIndexById.has(id)
|
|
134
|
+
? listSelectedIndexById.get(id)
|
|
135
|
+
: clampedActiveIndex;
|
|
136
|
+
if (!listSelectedIndexById.has(id)) {
|
|
137
|
+
listSelectedIndexById.set(id, selectedIndex === null ? null : Math.max(0, Math.min(Math.max(0, items.length - 1), selectedIndex)));
|
|
138
|
+
}
|
|
139
|
+
node.props.__activeIndex = clampedActiveIndex;
|
|
140
|
+
node.props.__selectedIndex = selectedIndex === null ? null : Math.max(0, Math.min(Math.max(0, items.length - 1), selectedIndex));
|
|
141
|
+
node.props.__scrollOffset = listViewportOffsetById.get(id) || 0;
|
|
121
142
|
if (listHoverById.has(id)) {
|
|
122
143
|
node.props.__hoveredIndex = listHoverById.get(id);
|
|
123
144
|
}
|
|
@@ -128,7 +149,7 @@ function applyInteractiveState(nodes, focusedId, inputStateById, editorStateById
|
|
|
128
149
|
node.props.__hoveredRow = scrollHoverRowById.get(id);
|
|
129
150
|
}
|
|
130
151
|
}
|
|
131
|
-
applyInteractiveState(node.children, focusedId, inputStateById, editorStateById, listIndexById, scrollOffsetById, listHoverById, scrollHoverRowById);
|
|
152
|
+
applyInteractiveState(node.children, focusedId, inputStateById, editorStateById, listIndexById, listSelectedIndexById, listViewportOffsetById, scrollOffsetById, listHoverById, scrollHoverRowById);
|
|
132
153
|
}
|
|
133
154
|
}
|
|
134
155
|
export function mountTerminal(input, options = {}) {
|
|
@@ -148,6 +169,8 @@ export function mountTerminal(input, options = {}) {
|
|
|
148
169
|
const inputStateById = new Map();
|
|
149
170
|
const editorStateById = new Map();
|
|
150
171
|
const listIndexById = new Map();
|
|
172
|
+
const listSelectedIndexById = new Map();
|
|
173
|
+
const listViewportOffsetById = new Map();
|
|
151
174
|
const scrollOffsetById = new Map();
|
|
152
175
|
const listHoverById = new Map();
|
|
153
176
|
const scrollHoverRowById = new Map();
|
|
@@ -161,7 +184,7 @@ export function mountTerminal(input, options = {}) {
|
|
|
161
184
|
renderNow();
|
|
162
185
|
});
|
|
163
186
|
let currentTree = terminalRuntime.project();
|
|
164
|
-
applyInteractiveState(currentTree, focusedId, inputStateById, editorStateById, listIndexById, scrollOffsetById, listHoverById, scrollHoverRowById);
|
|
187
|
+
applyInteractiveState(currentTree, focusedId, inputStateById, editorStateById, listIndexById, listSelectedIndexById, listViewportOffsetById, scrollOffsetById, listHoverById, scrollHoverRowById);
|
|
165
188
|
let currentFrame = renderTreeFrame(currentTree);
|
|
166
189
|
let currentOutput = formatPlainFrame(currentFrame, { theme: options.theme }).trimEnd();
|
|
167
190
|
let currentHitboxes = currentFrame.hitboxes;
|
|
@@ -186,6 +209,9 @@ export function mountTerminal(input, options = {}) {
|
|
|
186
209
|
if (runtimeOptions.hideCursor) {
|
|
187
210
|
writes.push(ANSI_HIDE_CURSOR);
|
|
188
211
|
}
|
|
212
|
+
if (runtimeOptions.mouseReporting) {
|
|
213
|
+
writes.push(ANSI_ENABLE_MOUSE_REPORTING);
|
|
214
|
+
}
|
|
189
215
|
if (writes.length > 0) {
|
|
190
216
|
outputWriter.write(writes.join(""), { force: true });
|
|
191
217
|
}
|
|
@@ -195,6 +221,9 @@ export function mountTerminal(input, options = {}) {
|
|
|
195
221
|
return;
|
|
196
222
|
}
|
|
197
223
|
const writes = [];
|
|
224
|
+
if (runtimeOptions.mouseReporting) {
|
|
225
|
+
writes.push(ANSI_DISABLE_MOUSE_REPORTING);
|
|
226
|
+
}
|
|
198
227
|
if (runtimeOptions.hideCursor) {
|
|
199
228
|
writes.push(ANSI_SHOW_CURSOR);
|
|
200
229
|
}
|
|
@@ -223,7 +252,7 @@ export function mountTerminal(input, options = {}) {
|
|
|
223
252
|
focusedId = activeFocusables[0]?.props.id || null;
|
|
224
253
|
}
|
|
225
254
|
skipFocusContainmentOnce = false;
|
|
226
|
-
applyInteractiveState(currentTree, focusedId, inputStateById, editorStateById, listIndexById, scrollOffsetById, listHoverById, scrollHoverRowById);
|
|
255
|
+
applyInteractiveState(currentTree, focusedId, inputStateById, editorStateById, listIndexById, listSelectedIndexById, listViewportOffsetById, scrollOffsetById, listHoverById, scrollHoverRowById);
|
|
227
256
|
currentFrame = renderTreeFrame(currentTree);
|
|
228
257
|
currentOutput = formatPlainFrame(currentFrame, { theme: options.theme }).trimEnd();
|
|
229
258
|
currentHitboxes = currentFrame.hitboxes;
|
|
@@ -362,10 +391,18 @@ export function mountTerminal(input, options = {}) {
|
|
|
362
391
|
return 1;
|
|
363
392
|
}
|
|
364
393
|
function sourceRowFromHitbox(node, hitbox, y) {
|
|
365
|
-
|
|
394
|
+
if (node.tag === "terminal-list" && typeof hitbox.__listItemIndex === "number" && y >= hitbox.y1 && y <= hitbox.y2) {
|
|
395
|
+
return Math.max(1, Math.min(rowCountForNode(node), hitbox.__listItemIndex + 1));
|
|
396
|
+
}
|
|
397
|
+
const sourceY = hitbox.contentY ?? hitbox.y1;
|
|
398
|
+
const visibleRow = Math.max(1, y - sourceY + 1);
|
|
366
399
|
if (node.tag !== "terminal-list") {
|
|
367
400
|
return Math.max(1, Math.min(rowCountForNode(node), visibleRow));
|
|
368
401
|
}
|
|
402
|
+
const mappedIndex = hitbox.itemIndexes?.[visibleRow - 1];
|
|
403
|
+
if (typeof mappedIndex === "number") {
|
|
404
|
+
return Math.max(1, Math.min(rowCountForNode(node), mappedIndex + 1));
|
|
405
|
+
}
|
|
369
406
|
return Math.max(1, Math.min(rowCountForNode(node), visibleRow + (hitbox.itemOffset || 0)));
|
|
370
407
|
}
|
|
371
408
|
function shouldPointerCapture(node) {
|
|
@@ -406,6 +443,100 @@ export function mountTerminal(input, options = {}) {
|
|
|
406
443
|
emitCaptureEvent(next, "capturestart", source, row ?? hoveredRowForNode(next), x, y);
|
|
407
444
|
}
|
|
408
445
|
}
|
|
446
|
+
function listItemKey(node, index) {
|
|
447
|
+
const items = Array.isArray(node.props.items) ? node.props.items : [];
|
|
448
|
+
const item = items[index];
|
|
449
|
+
if (typeof node.props.itemKey === "function" && typeof item !== "undefined") {
|
|
450
|
+
const key = node.props.itemKey(item, index);
|
|
451
|
+
if (typeof key === "string" || typeof key === "number") {
|
|
452
|
+
return String(key);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
return undefined;
|
|
456
|
+
}
|
|
457
|
+
function listViewportRows(node) {
|
|
458
|
+
const context = renderContext();
|
|
459
|
+
const items = Array.isArray(node.props.items) ? node.props.items : [];
|
|
460
|
+
const hitbox = node.props.id ? currentHitboxes.find((box) => box.id === node.props.id) : null;
|
|
461
|
+
const overscan = typeof node.props.overscan === "number" ? Math.max(0, Math.floor(node.props.overscan)) : 0;
|
|
462
|
+
const renderedRows = hitbox ? Math.max(1, hitbox.y2 - hitbox.y1 + 1 - overscan * 2) : null;
|
|
463
|
+
const sourceRows = Number(node.props.height || renderedRows || context.rows || items.length || 1);
|
|
464
|
+
if (!Number.isFinite(sourceRows) || !Number.isInteger(sourceRows) || sourceRows <= 0) {
|
|
465
|
+
return Math.max(1, items.length || 1);
|
|
466
|
+
}
|
|
467
|
+
return Math.max(1, Math.min(items.length || 1, sourceRows));
|
|
468
|
+
}
|
|
469
|
+
function clampListIndex(node, index) {
|
|
470
|
+
const items = Array.isArray(node.props.items) ? node.props.items : [];
|
|
471
|
+
if (items.length === 0) {
|
|
472
|
+
return 0;
|
|
473
|
+
}
|
|
474
|
+
return Math.max(0, Math.min(items.length - 1, index));
|
|
475
|
+
}
|
|
476
|
+
function currentListActiveIndex(node) {
|
|
477
|
+
return clampListIndex(node, listIndexById.get(node.props.id || "") || 0);
|
|
478
|
+
}
|
|
479
|
+
function currentListSelectedIndex(node) {
|
|
480
|
+
const id = node.props.id || "";
|
|
481
|
+
if (node.props.showActive === false) {
|
|
482
|
+
return null;
|
|
483
|
+
}
|
|
484
|
+
if (listSelectedIndexById.has(id)) {
|
|
485
|
+
const selectedIndex = listSelectedIndexById.get(id);
|
|
486
|
+
return typeof selectedIndex === "number" ? clampListIndex(node, selectedIndex) : null;
|
|
487
|
+
}
|
|
488
|
+
return currentListActiveIndex(node);
|
|
489
|
+
}
|
|
490
|
+
function currentListViewportOffset(node) {
|
|
491
|
+
const id = node.props.id || "";
|
|
492
|
+
return Math.max(0, Math.min(listMaxViewportOffset(node), listViewportOffsetById.get(id) || 0));
|
|
493
|
+
}
|
|
494
|
+
function listStatePayload(node) {
|
|
495
|
+
return {
|
|
496
|
+
activeIndex: currentListActiveIndex(node),
|
|
497
|
+
selectedIndex: currentListSelectedIndex(node),
|
|
498
|
+
viewportOffset: currentListViewportOffset(node),
|
|
499
|
+
viewportRows: listViewportRows(node)
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
function listMaxViewportOffset(node) {
|
|
503
|
+
const items = Array.isArray(node.props.items) ? node.props.items : [];
|
|
504
|
+
return Math.max(0, items.length - listViewportRows(node));
|
|
505
|
+
}
|
|
506
|
+
function setListViewportOffset(node, offset, emit = true) {
|
|
507
|
+
const id = node.props.id;
|
|
508
|
+
if (!id) {
|
|
509
|
+
return;
|
|
510
|
+
}
|
|
511
|
+
const nextOffset = Math.max(0, Math.min(listMaxViewportOffset(node), offset));
|
|
512
|
+
const previous = listViewportOffsetById.get(id) || 0;
|
|
513
|
+
listViewportOffsetById.set(id, nextOffset);
|
|
514
|
+
if (emit && nextOffset !== previous) {
|
|
515
|
+
const payload = {
|
|
516
|
+
type: "viewportchange",
|
|
517
|
+
id,
|
|
518
|
+
offset: nextOffset,
|
|
519
|
+
rows: listViewportRows(node),
|
|
520
|
+
...listStatePayload(node)
|
|
521
|
+
};
|
|
522
|
+
dispatchNodeEvent(node, "viewportchange", payload);
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
function ensureListActiveVisible(node, activeIndex) {
|
|
526
|
+
const id = node.props.id;
|
|
527
|
+
if (!id || !node.props.virtualized) {
|
|
528
|
+
return;
|
|
529
|
+
}
|
|
530
|
+
const currentOffset = listViewportOffsetById.get(id) || 0;
|
|
531
|
+
const rows = listViewportRows(node);
|
|
532
|
+
if (activeIndex < currentOffset) {
|
|
533
|
+
setListViewportOffset(node, activeIndex);
|
|
534
|
+
return;
|
|
535
|
+
}
|
|
536
|
+
if (activeIndex >= currentOffset + rows) {
|
|
537
|
+
setListViewportOffset(node, activeIndex - rows + 1);
|
|
538
|
+
}
|
|
539
|
+
}
|
|
409
540
|
function dispatchListPressEvent(node, type, index) {
|
|
410
541
|
const id = node.props.id;
|
|
411
542
|
if (!id) {
|
|
@@ -415,7 +546,10 @@ export function mountTerminal(input, options = {}) {
|
|
|
415
546
|
if (typeof items[index] === "undefined") {
|
|
416
547
|
return false;
|
|
417
548
|
}
|
|
418
|
-
const
|
|
549
|
+
const key = listItemKey(node, index);
|
|
550
|
+
const payload = typeof key === "undefined"
|
|
551
|
+
? { type, id, index, value: items[index], ...listStatePayload(node) }
|
|
552
|
+
: { type, id, index, key, value: items[index], ...listStatePayload(node) };
|
|
419
553
|
return dispatchNodeEvent(node, type, payload);
|
|
420
554
|
}
|
|
421
555
|
function dispatchButtonPressEvent(node, type) {
|
|
@@ -425,6 +559,13 @@ export function mountTerminal(input, options = {}) {
|
|
|
425
559
|
}
|
|
426
560
|
return dispatchNodeEvent(node, type, { type, id });
|
|
427
561
|
}
|
|
562
|
+
function dispatchHitboxButtonPressEvent(hitbox, type) {
|
|
563
|
+
if (type !== "press" || typeof hitbox.__pressHandler !== "function") {
|
|
564
|
+
return false;
|
|
565
|
+
}
|
|
566
|
+
hitbox.__pressHandler({ type, id: hitbox.id });
|
|
567
|
+
return true;
|
|
568
|
+
}
|
|
428
569
|
function dispatchListPointerPressEvent(node, type, row) {
|
|
429
570
|
const items = Array.isArray(node.props.items) ? node.props.items : [];
|
|
430
571
|
const index = Math.max(0, Math.min(items.length - 1, row - 1));
|
|
@@ -461,7 +602,10 @@ export function mountTerminal(input, options = {}) {
|
|
|
461
602
|
if (typeof items[index] === "undefined") {
|
|
462
603
|
return;
|
|
463
604
|
}
|
|
464
|
-
const
|
|
605
|
+
const key = listItemKey(node, index);
|
|
606
|
+
const payload = typeof key === "undefined"
|
|
607
|
+
? { type, id: node.props.id, row: index + 1, index, value: items[index], x, y }
|
|
608
|
+
: { type, id: node.props.id, row: index + 1, index, key, value: items[index], x, y };
|
|
465
609
|
dispatchNodeEvent(node, type, payload);
|
|
466
610
|
return;
|
|
467
611
|
}
|
|
@@ -551,28 +695,74 @@ export function mountTerminal(input, options = {}) {
|
|
|
551
695
|
setSemanticHoverFromHitbox(hitbox.id, x, y);
|
|
552
696
|
return rerender();
|
|
553
697
|
}
|
|
554
|
-
function
|
|
698
|
+
function moveListActiveTo(node, nextIndex) {
|
|
555
699
|
const id = node.props.id;
|
|
556
700
|
if (!id) {
|
|
557
701
|
return currentOutput;
|
|
558
702
|
}
|
|
559
703
|
const items = Array.isArray(node.props.items) ? node.props.items : [];
|
|
560
|
-
const
|
|
561
|
-
|
|
704
|
+
const clampedIndex = clampListIndex(node, nextIndex);
|
|
705
|
+
listIndexById.set(id, clampedIndex);
|
|
706
|
+
ensureListActiveVisible(node, clampedIndex);
|
|
707
|
+
const key = listItemKey(node, clampedIndex);
|
|
708
|
+
const payload = typeof key === "undefined"
|
|
709
|
+
? { type: "change", id, index: clampedIndex, value: items[clampedIndex], ...listStatePayload(node) }
|
|
710
|
+
: { type: "change", id, index: clampedIndex, key, value: items[clampedIndex], ...listStatePayload(node) };
|
|
711
|
+
dispatchNodeEvent(node, "change", payload);
|
|
712
|
+
return rerender();
|
|
713
|
+
}
|
|
714
|
+
function changeListSelection(node, direction) {
|
|
715
|
+
return moveListActiveTo(node, currentListActiveIndex(node) + direction);
|
|
716
|
+
}
|
|
717
|
+
function pageListSelection(node, direction) {
|
|
718
|
+
const id = node.props.id;
|
|
719
|
+
if (!id) {
|
|
720
|
+
return currentOutput;
|
|
721
|
+
}
|
|
722
|
+
const nextIndex = clampListIndex(node, currentListActiveIndex(node) + direction * listViewportRows(node));
|
|
562
723
|
listIndexById.set(id, nextIndex);
|
|
563
|
-
|
|
724
|
+
setListViewportOffset(node, nextIndex);
|
|
725
|
+
const items = Array.isArray(node.props.items) ? node.props.items : [];
|
|
726
|
+
const key = listItemKey(node, nextIndex);
|
|
727
|
+
const payload = typeof key === "undefined"
|
|
728
|
+
? { type: "change", id, index: nextIndex, value: items[nextIndex], ...listStatePayload(node) }
|
|
729
|
+
: { type: "change", id, index: nextIndex, key, value: items[nextIndex], ...listStatePayload(node) };
|
|
564
730
|
dispatchNodeEvent(node, "change", payload);
|
|
565
731
|
return rerender();
|
|
566
732
|
}
|
|
733
|
+
function moveListSelectionToBoundary(node, boundary) {
|
|
734
|
+
const items = Array.isArray(node.props.items) ? node.props.items : [];
|
|
735
|
+
return moveListActiveTo(node, boundary === "start" ? 0 : Math.max(0, items.length - 1));
|
|
736
|
+
}
|
|
567
737
|
function pressListSelection(node) {
|
|
568
738
|
const id = node.props.id;
|
|
569
739
|
if (!id) {
|
|
570
740
|
return currentOutput;
|
|
571
741
|
}
|
|
572
|
-
const currentIndex =
|
|
742
|
+
const currentIndex = currentListActiveIndex(node);
|
|
743
|
+
if (node.props.showActive !== false) {
|
|
744
|
+
listSelectedIndexById.set(id, currentIndex);
|
|
745
|
+
}
|
|
573
746
|
dispatchListPressEvent(node, "press", currentIndex);
|
|
574
747
|
return rerender();
|
|
575
748
|
}
|
|
749
|
+
function pressListPointerSelection(node, row) {
|
|
750
|
+
const id = node.props.id;
|
|
751
|
+
if (!id) {
|
|
752
|
+
return currentOutput;
|
|
753
|
+
}
|
|
754
|
+
const items = Array.isArray(node.props.items) ? node.props.items : [];
|
|
755
|
+
const index = Math.max(0, Math.min(items.length - 1, row - 1));
|
|
756
|
+
if (typeof items[index] === "undefined") {
|
|
757
|
+
return currentOutput;
|
|
758
|
+
}
|
|
759
|
+
listIndexById.set(id, index);
|
|
760
|
+
if (node.props.showActive !== false) {
|
|
761
|
+
listSelectedIndexById.set(id, index);
|
|
762
|
+
}
|
|
763
|
+
dispatchListPressEvent(node, "press", index);
|
|
764
|
+
return rerender();
|
|
765
|
+
}
|
|
576
766
|
function scrollFocusedNode(node, direction) {
|
|
577
767
|
const id = node.props.id;
|
|
578
768
|
if (!id) {
|
|
@@ -597,7 +787,9 @@ export function mountTerminal(input, options = {}) {
|
|
|
597
787
|
return scrollFocusedNode(node, direction);
|
|
598
788
|
}
|
|
599
789
|
if (node?.tag === "terminal-list" && node.props.virtualized) {
|
|
600
|
-
|
|
790
|
+
const currentOffset = listViewportOffsetById.get(node.props.id || "") || 0;
|
|
791
|
+
setListViewportOffset(node, currentOffset + direction);
|
|
792
|
+
return rerender();
|
|
601
793
|
}
|
|
602
794
|
return rerender();
|
|
603
795
|
}
|
|
@@ -763,6 +955,14 @@ export function mountTerminal(input, options = {}) {
|
|
|
763
955
|
return node?.tag === "terminal-list" ? changeListSelection(node, -1) : currentOutput;
|
|
764
956
|
case "list.next":
|
|
765
957
|
return node?.tag === "terminal-list" ? changeListSelection(node, 1) : currentOutput;
|
|
958
|
+
case "list.pageUp":
|
|
959
|
+
return node?.tag === "terminal-list" ? pageListSelection(node, -1) : currentOutput;
|
|
960
|
+
case "list.pageDown":
|
|
961
|
+
return node?.tag === "terminal-list" ? pageListSelection(node, 1) : currentOutput;
|
|
962
|
+
case "list.home":
|
|
963
|
+
return node?.tag === "terminal-list" ? moveListSelectionToBoundary(node, "start") : currentOutput;
|
|
964
|
+
case "list.end":
|
|
965
|
+
return node?.tag === "terminal-list" ? moveListSelectionToBoundary(node, "end") : currentOutput;
|
|
766
966
|
case "list.press":
|
|
767
967
|
return node?.tag === "terminal-list" ? pressListSelection(node) : currentOutput;
|
|
768
968
|
case "scroll.up":
|
|
@@ -798,6 +998,19 @@ export function mountTerminal(input, options = {}) {
|
|
|
798
998
|
return;
|
|
799
999
|
}
|
|
800
1000
|
terminalSize = nextSize;
|
|
1001
|
+
const focusedNode = findFocused(currentTree, focusedId);
|
|
1002
|
+
if (focusedNode?.tag === "terminal-list" && focusedNode.props.id && focusedNode.props.virtualized) {
|
|
1003
|
+
const items = Array.isArray(focusedNode.props.items) ? focusedNode.props.items : [];
|
|
1004
|
+
const rows = Math.max(1, Math.min(items.length || 1, Number(focusedNode.props.height || terminalSize.rows || items.length || 1)));
|
|
1005
|
+
const activeIndex = currentListActiveIndex(focusedNode);
|
|
1006
|
+
const currentOffset = listViewportOffsetById.get(focusedNode.props.id) || 0;
|
|
1007
|
+
if (activeIndex < currentOffset) {
|
|
1008
|
+
listViewportOffsetById.set(focusedNode.props.id, activeIndex);
|
|
1009
|
+
}
|
|
1010
|
+
else if (activeIndex >= currentOffset + rows) {
|
|
1011
|
+
listViewportOffsetById.set(focusedNode.props.id, Math.max(0, activeIndex - rows + 1));
|
|
1012
|
+
}
|
|
1013
|
+
}
|
|
801
1014
|
rerender();
|
|
802
1015
|
},
|
|
803
1016
|
update() {
|
|
@@ -888,7 +1101,14 @@ export function mountTerminal(input, options = {}) {
|
|
|
888
1101
|
return currentOutput;
|
|
889
1102
|
}
|
|
890
1103
|
if (hitbox.tag === "terminal-button") {
|
|
891
|
-
|
|
1104
|
+
const node = findFocusableById(currentTree, hitbox.id);
|
|
1105
|
+
if (node?.tag === "terminal-button") {
|
|
1106
|
+
return this.click(hitbox.id);
|
|
1107
|
+
}
|
|
1108
|
+
if (dispatchHitboxButtonPressEvent(hitbox, "press")) {
|
|
1109
|
+
return rerender();
|
|
1110
|
+
}
|
|
1111
|
+
return currentOutput;
|
|
892
1112
|
}
|
|
893
1113
|
setSemanticHoverFromHitbox(hitbox.id, x, y);
|
|
894
1114
|
focusedId = hitbox.id;
|
|
@@ -896,6 +1116,12 @@ export function mountTerminal(input, options = {}) {
|
|
|
896
1116
|
mouseSelectionId = hitbox.id;
|
|
897
1117
|
return setCursorFromHitbox(hitbox.id, x, false);
|
|
898
1118
|
}
|
|
1119
|
+
if (hitbox.tag === "terminal-list") {
|
|
1120
|
+
const node = findFocusableById(currentTree, hitbox.id);
|
|
1121
|
+
if (node?.tag === "terminal-list") {
|
|
1122
|
+
return pressListPointerSelection(node, sourceRowFromHitbox(node, hitbox, y));
|
|
1123
|
+
}
|
|
1124
|
+
}
|
|
899
1125
|
rerender();
|
|
900
1126
|
return currentOutput;
|
|
901
1127
|
},
|
|
@@ -1082,6 +1308,79 @@ export function mountTerminal(input, options = {}) {
|
|
|
1082
1308
|
}
|
|
1083
1309
|
return currentOutput;
|
|
1084
1310
|
}
|
|
1311
|
+
function processParsedMouseInput(parsed) {
|
|
1312
|
+
if (parsed.action === "press") {
|
|
1313
|
+
const hitbox = resolvePointerTarget(currentHitboxes, parsed.x, parsed.y);
|
|
1314
|
+
if (isContextMouseButton(parsed.button)) {
|
|
1315
|
+
lastPrimaryPress = null;
|
|
1316
|
+
contextPressAt(parsed.x, parsed.y);
|
|
1317
|
+
return;
|
|
1318
|
+
}
|
|
1319
|
+
if (hitbox?.tag === "terminal-input") {
|
|
1320
|
+
mouseSelectionId = hitbox.id;
|
|
1321
|
+
}
|
|
1322
|
+
const node = hitbox ? findFocusableById(currentTree, hitbox.id) : null;
|
|
1323
|
+
if (hitbox && node && shouldPointerCapture(node)) {
|
|
1324
|
+
setPointerCapture(hitbox.id, "press", sourceRowFromHitbox(node, hitbox, parsed.y), parsed.x, parsed.y);
|
|
1325
|
+
}
|
|
1326
|
+
const isPrimaryPress = isPrimaryMouseButton(parsed.button);
|
|
1327
|
+
const isDoublePressEligible = Boolean(hitbox
|
|
1328
|
+
&& node
|
|
1329
|
+
&& (hitbox.tag === "terminal-button" || hitbox.tag === "terminal-list"));
|
|
1330
|
+
const primaryPressRow = hitbox && node && hitbox.tag === "terminal-list"
|
|
1331
|
+
? sourceRowFromHitbox(node, hitbox, parsed.y)
|
|
1332
|
+
: null;
|
|
1333
|
+
const shouldDispatchDoublePress = Boolean(isPrimaryPress
|
|
1334
|
+
&& isDoublePressEligible
|
|
1335
|
+
&& hitbox
|
|
1336
|
+
&& isDoublePrimaryPress(hitbox, primaryPressRow));
|
|
1337
|
+
if (isPrimaryPress && !isDoublePressEligible) {
|
|
1338
|
+
lastPrimaryPress = null;
|
|
1339
|
+
}
|
|
1340
|
+
if (hitbox && shouldDispatchDoublePress && hitbox.tag === "terminal-list") {
|
|
1341
|
+
doublePressAt(hitbox, parsed.x, parsed.y);
|
|
1342
|
+
}
|
|
1343
|
+
else {
|
|
1344
|
+
session.clickAt(parsed.x, parsed.y);
|
|
1345
|
+
if (hitbox && shouldDispatchDoublePress) {
|
|
1346
|
+
doublePressAt(hitbox, parsed.x, parsed.y);
|
|
1347
|
+
}
|
|
1348
|
+
}
|
|
1349
|
+
}
|
|
1350
|
+
else if (parsed.action === "drag") {
|
|
1351
|
+
if (mouseSelectionId) {
|
|
1352
|
+
setCursorFromHitbox(mouseSelectionId, parsed.x, true);
|
|
1353
|
+
}
|
|
1354
|
+
else {
|
|
1355
|
+
hoverAt(parsed.x, parsed.y);
|
|
1356
|
+
}
|
|
1357
|
+
}
|
|
1358
|
+
else if (parsed.action === "release") {
|
|
1359
|
+
mouseSelectionId = null;
|
|
1360
|
+
const capturedId = pointerCaptureId;
|
|
1361
|
+
const releaseHitbox = resolvePointerTarget(currentHitboxes, parsed.x, parsed.y);
|
|
1362
|
+
const releaseNode = releaseHitbox ? findFocusableById(currentTree, releaseHitbox.id) : null;
|
|
1363
|
+
const releaseRow = releaseHitbox && releaseNode
|
|
1364
|
+
? sourceRowFromHitbox(releaseNode, releaseHitbox, parsed.y)
|
|
1365
|
+
: null;
|
|
1366
|
+
setPointerCapture(null, "release", capturedId && releaseHitbox?.id === capturedId ? releaseRow : null, parsed.x, parsed.y);
|
|
1367
|
+
const hitbox = resolvePointerTarget(currentHitboxes, parsed.x, parsed.y);
|
|
1368
|
+
if (capturedId && hitbox && hitbox.id === capturedId && (hitbox.tag === "terminal-list" || hitbox.tag === "terminal-scroll")) {
|
|
1369
|
+
setSemanticHoverFromHitbox(hitbox.id, parsed.x, parsed.y);
|
|
1370
|
+
rerender();
|
|
1371
|
+
}
|
|
1372
|
+
else {
|
|
1373
|
+
clearSemanticHover(undefined, parsed.x, parsed.y);
|
|
1374
|
+
rerender();
|
|
1375
|
+
}
|
|
1376
|
+
}
|
|
1377
|
+
else if (parsed.action === "wheel-up") {
|
|
1378
|
+
wheelAt(parsed.x, parsed.y, -1);
|
|
1379
|
+
}
|
|
1380
|
+
else if (parsed.action === "wheel-down") {
|
|
1381
|
+
wheelAt(parsed.x, parsed.y, 1);
|
|
1382
|
+
}
|
|
1383
|
+
}
|
|
1085
1384
|
function processInputStream(value) {
|
|
1086
1385
|
if (!value) {
|
|
1087
1386
|
return;
|
|
@@ -1133,74 +1432,15 @@ export function mountTerminal(input, options = {}) {
|
|
|
1133
1432
|
processInputStream(paste.rest);
|
|
1134
1433
|
return;
|
|
1135
1434
|
}
|
|
1435
|
+
const parsedMouse = parseTerminalMousePrefix(value);
|
|
1436
|
+
if (parsedMouse) {
|
|
1437
|
+
processParsedMouseInput(parsedMouse.input);
|
|
1438
|
+
processInputStream(parsedMouse.rest);
|
|
1439
|
+
return;
|
|
1440
|
+
}
|
|
1136
1441
|
const parsed = parseTerminalInput(value);
|
|
1137
1442
|
if (parsed.type === "mouse") {
|
|
1138
|
-
|
|
1139
|
-
const hitbox = resolvePointerTarget(currentHitboxes, parsed.x, parsed.y);
|
|
1140
|
-
if (isContextMouseButton(parsed.button)) {
|
|
1141
|
-
lastPrimaryPress = null;
|
|
1142
|
-
contextPressAt(parsed.x, parsed.y);
|
|
1143
|
-
return;
|
|
1144
|
-
}
|
|
1145
|
-
if (hitbox?.tag === "terminal-input") {
|
|
1146
|
-
mouseSelectionId = hitbox.id;
|
|
1147
|
-
}
|
|
1148
|
-
const node = hitbox ? findFocusableById(currentTree, hitbox.id) : null;
|
|
1149
|
-
if (hitbox && node && shouldPointerCapture(node)) {
|
|
1150
|
-
setPointerCapture(hitbox.id, "press", sourceRowFromHitbox(node, hitbox, parsed.y), parsed.x, parsed.y);
|
|
1151
|
-
}
|
|
1152
|
-
const isPrimaryPress = isPrimaryMouseButton(parsed.button);
|
|
1153
|
-
const isDoublePressEligible = Boolean(hitbox
|
|
1154
|
-
&& node
|
|
1155
|
-
&& (hitbox.tag === "terminal-button" || hitbox.tag === "terminal-list"));
|
|
1156
|
-
const primaryPressRow = hitbox && node && hitbox.tag === "terminal-list"
|
|
1157
|
-
? sourceRowFromHitbox(node, hitbox, parsed.y)
|
|
1158
|
-
: null;
|
|
1159
|
-
const shouldDispatchDoublePress = Boolean(isPrimaryPress
|
|
1160
|
-
&& isDoublePressEligible
|
|
1161
|
-
&& hitbox
|
|
1162
|
-
&& isDoublePrimaryPress(hitbox, primaryPressRow));
|
|
1163
|
-
if (isPrimaryPress && !isDoublePressEligible) {
|
|
1164
|
-
lastPrimaryPress = null;
|
|
1165
|
-
}
|
|
1166
|
-
session.clickAt(parsed.x, parsed.y);
|
|
1167
|
-
if (hitbox && shouldDispatchDoublePress) {
|
|
1168
|
-
doublePressAt(hitbox, parsed.x, parsed.y);
|
|
1169
|
-
}
|
|
1170
|
-
}
|
|
1171
|
-
else if (parsed.action === "drag") {
|
|
1172
|
-
if (mouseSelectionId) {
|
|
1173
|
-
setCursorFromHitbox(mouseSelectionId, parsed.x, true);
|
|
1174
|
-
}
|
|
1175
|
-
else {
|
|
1176
|
-
hoverAt(parsed.x, parsed.y);
|
|
1177
|
-
}
|
|
1178
|
-
}
|
|
1179
|
-
else if (parsed.action === "release") {
|
|
1180
|
-
mouseSelectionId = null;
|
|
1181
|
-
const capturedId = pointerCaptureId;
|
|
1182
|
-
const releaseHitbox = resolvePointerTarget(currentHitboxes, parsed.x, parsed.y);
|
|
1183
|
-
const releaseNode = releaseHitbox ? findFocusableById(currentTree, releaseHitbox.id) : null;
|
|
1184
|
-
const releaseRow = releaseHitbox && releaseNode
|
|
1185
|
-
? sourceRowFromHitbox(releaseNode, releaseHitbox, parsed.y)
|
|
1186
|
-
: null;
|
|
1187
|
-
setPointerCapture(null, "release", capturedId && releaseHitbox?.id === capturedId ? releaseRow : null, parsed.x, parsed.y);
|
|
1188
|
-
const hitbox = resolvePointerTarget(currentHitboxes, parsed.x, parsed.y);
|
|
1189
|
-
if (capturedId && hitbox && hitbox.id === capturedId && (hitbox.tag === "terminal-list" || hitbox.tag === "terminal-scroll")) {
|
|
1190
|
-
setSemanticHoverFromHitbox(hitbox.id, parsed.x, parsed.y);
|
|
1191
|
-
rerender();
|
|
1192
|
-
}
|
|
1193
|
-
else {
|
|
1194
|
-
clearSemanticHover(undefined, parsed.x, parsed.y);
|
|
1195
|
-
rerender();
|
|
1196
|
-
}
|
|
1197
|
-
}
|
|
1198
|
-
else if (parsed.action === "wheel-up") {
|
|
1199
|
-
wheelAt(parsed.x, parsed.y, -1);
|
|
1200
|
-
}
|
|
1201
|
-
else if (parsed.action === "wheel-down") {
|
|
1202
|
-
wheelAt(parsed.x, parsed.y, 1);
|
|
1203
|
-
}
|
|
1443
|
+
processParsedMouseInput(parsed);
|
|
1204
1444
|
return;
|
|
1205
1445
|
}
|
|
1206
1446
|
processKeyStream(value);
|