@suds-cli/viewport 0.0.0 → 0.1.0-alpha.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/README.md +6 -7
- package/dist/index.cjs +308 -0
- package/dist/index.cjs.map +1 -0
- package/dist/{model.d.ts → index.d.cts} +48 -6
- package/dist/index.d.ts +131 -4
- package/dist/index.js +302 -3
- package/dist/index.js.map +1 -1
- package/package.json +29 -16
- package/dist/index.d.ts.map +0 -1
- package/dist/keymap.d.ts +0 -19
- package/dist/keymap.d.ts.map +0 -1
- package/dist/keymap.js +0 -14
- package/dist/keymap.js.map +0 -1
- package/dist/messages.d.ts +0 -22
- package/dist/messages.d.ts.map +0 -1
- package/dist/messages.js +0 -29
- package/dist/messages.js.map +0 -1
- package/dist/model.d.ts.map +0 -1
- package/dist/model.js +0 -287
- package/dist/model.js.map +0 -1
package/dist/model.js
DELETED
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
import { Style } from "@suds-cli/chapstick";
|
|
2
|
-
import { matches } from "@suds-cli/key";
|
|
3
|
-
import { KeyMsg, MouseAction, MouseButton, MouseMsg, } from "@suds-cli/tea";
|
|
4
|
-
import { defaultKeyMap } from "./keymap.js";
|
|
5
|
-
import { ScrollMsg, SyncMsg } from "./messages.js";
|
|
6
|
-
/**
|
|
7
|
-
* Scrollable window onto a list of lines.
|
|
8
|
-
* @public
|
|
9
|
-
*/
|
|
10
|
-
export class ViewportModel {
|
|
11
|
-
width;
|
|
12
|
-
height;
|
|
13
|
-
keyMap;
|
|
14
|
-
mouseWheelEnabled;
|
|
15
|
-
mouseWheelDelta;
|
|
16
|
-
yOffset;
|
|
17
|
-
lines;
|
|
18
|
-
style;
|
|
19
|
-
constructor(options) {
|
|
20
|
-
this.width = Math.max(0, options.width);
|
|
21
|
-
this.height = Math.max(0, options.height);
|
|
22
|
-
this.keyMap = options.keyMap;
|
|
23
|
-
this.mouseWheelEnabled = options.mouseWheelEnabled;
|
|
24
|
-
this.mouseWheelDelta = Math.max(0, options.mouseWheelDelta);
|
|
25
|
-
this.yOffset = Math.max(0, options.yOffset);
|
|
26
|
-
this.lines = options.lines;
|
|
27
|
-
this.style = options.style;
|
|
28
|
-
}
|
|
29
|
-
/** Create a new viewport with defaults. */
|
|
30
|
-
static new(options = {}) {
|
|
31
|
-
return new ViewportModel({
|
|
32
|
-
width: options.width ?? 0,
|
|
33
|
-
height: options.height ?? 0,
|
|
34
|
-
keyMap: options.keyMap ?? defaultKeyMap,
|
|
35
|
-
mouseWheelEnabled: options.mouseWheelEnabled ?? true,
|
|
36
|
-
mouseWheelDelta: options.mouseWheelDelta ?? 3,
|
|
37
|
-
yOffset: 0,
|
|
38
|
-
lines: [],
|
|
39
|
-
style: options.style ?? new Style(),
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
/** Split string content into lines and store it. */
|
|
43
|
-
setContent(content) {
|
|
44
|
-
const normalized = content.replace(/\r\n/g, "\n");
|
|
45
|
-
return this.setContentLines(normalized.split("\n"));
|
|
46
|
-
}
|
|
47
|
-
/** Replace content with a line array. Y offset is clamped if needed. */
|
|
48
|
-
setContentLines(lines) {
|
|
49
|
-
const copy = [...lines];
|
|
50
|
-
const nextOffset = this.clampOffset(this.yOffset, copy, this.height);
|
|
51
|
-
return this.with({ lines: copy, yOffset: nextOffset });
|
|
52
|
-
}
|
|
53
|
-
/** Change width. */
|
|
54
|
-
setWidth(width) {
|
|
55
|
-
if (width === this.width)
|
|
56
|
-
return this;
|
|
57
|
-
return this.with({ width: Math.max(0, width) });
|
|
58
|
-
}
|
|
59
|
-
/** Change height (and clamp offset if new height is smaller). */
|
|
60
|
-
setHeight(height) {
|
|
61
|
-
const normalized = Math.max(0, height);
|
|
62
|
-
if (normalized === this.height)
|
|
63
|
-
return this;
|
|
64
|
-
const nextOffset = this.clampOffset(this.yOffset, this.lines, normalized);
|
|
65
|
-
return this.with({ height: normalized, yOffset: nextOffset });
|
|
66
|
-
}
|
|
67
|
-
/** Scroll upward by the given number of lines. */
|
|
68
|
-
scrollUp(lines) {
|
|
69
|
-
if (lines <= 0)
|
|
70
|
-
return this;
|
|
71
|
-
const nextOffset = Math.max(0, this.yOffset - lines);
|
|
72
|
-
if (nextOffset === this.yOffset)
|
|
73
|
-
return this;
|
|
74
|
-
return this.with({ yOffset: nextOffset });
|
|
75
|
-
}
|
|
76
|
-
/** Scroll downward by the given number of lines. */
|
|
77
|
-
scrollDown(lines) {
|
|
78
|
-
if (lines <= 0)
|
|
79
|
-
return this;
|
|
80
|
-
const maxOffset = this.maxYOffset();
|
|
81
|
-
const nextOffset = Math.min(this.yOffset + lines, maxOffset);
|
|
82
|
-
if (nextOffset === this.yOffset)
|
|
83
|
-
return this;
|
|
84
|
-
return this.with({ yOffset: nextOffset });
|
|
85
|
-
}
|
|
86
|
-
/** Jump to the top. */
|
|
87
|
-
scrollToTop() {
|
|
88
|
-
if (this.atTop())
|
|
89
|
-
return this;
|
|
90
|
-
return this.with({ yOffset: 0 });
|
|
91
|
-
}
|
|
92
|
-
/** Jump to the bottom. */
|
|
93
|
-
scrollToBottom() {
|
|
94
|
-
const maxOffset = this.maxYOffset();
|
|
95
|
-
if (this.yOffset === maxOffset)
|
|
96
|
-
return this;
|
|
97
|
-
return this.with({ yOffset: maxOffset });
|
|
98
|
-
}
|
|
99
|
-
scrollPercent(percent) {
|
|
100
|
-
if (percent === undefined) {
|
|
101
|
-
if (this.height === 0 || this.lines.length === 0) {
|
|
102
|
-
return 1;
|
|
103
|
-
}
|
|
104
|
-
if (this.lines.length <= this.height) {
|
|
105
|
-
return 1;
|
|
106
|
-
}
|
|
107
|
-
const denom = Math.max(1, this.lines.length - this.height);
|
|
108
|
-
return clamp01(this.yOffset / denom);
|
|
109
|
-
}
|
|
110
|
-
const clamped = clamp01(percent);
|
|
111
|
-
const maxOffset = this.maxYOffset();
|
|
112
|
-
const targetOffset = Math.round(maxOffset * clamped);
|
|
113
|
-
if (targetOffset === this.yOffset)
|
|
114
|
-
return this;
|
|
115
|
-
return this.with({ yOffset: targetOffset });
|
|
116
|
-
}
|
|
117
|
-
/** True when Y offset is at the top. */
|
|
118
|
-
atTop() {
|
|
119
|
-
return this.yOffset <= 0;
|
|
120
|
-
}
|
|
121
|
-
/** True when Y offset is at the bottom. */
|
|
122
|
-
atBottom() {
|
|
123
|
-
return this.yOffset >= this.maxYOffset();
|
|
124
|
-
}
|
|
125
|
-
/** Number of visible lines (without padding). */
|
|
126
|
-
visibleLineCount() {
|
|
127
|
-
return Math.max(0, Math.min(this.height, this.lines.length - this.yOffset));
|
|
128
|
-
}
|
|
129
|
-
/** Total number of content lines. */
|
|
130
|
-
totalLineCount() {
|
|
131
|
-
return this.lines.length;
|
|
132
|
-
}
|
|
133
|
-
/** Move up by n lines (default: 1). */
|
|
134
|
-
lineUp(n = 1) {
|
|
135
|
-
return this.scrollUp(Math.max(1, n));
|
|
136
|
-
}
|
|
137
|
-
/** Move down by n lines (default: 1). */
|
|
138
|
-
lineDown(n = 1) {
|
|
139
|
-
return this.scrollDown(Math.max(1, n));
|
|
140
|
-
}
|
|
141
|
-
/** Move up by half the viewport height. */
|
|
142
|
-
halfViewUp() {
|
|
143
|
-
const delta = Math.max(1, Math.floor(this.height / 2));
|
|
144
|
-
return this.scrollUp(delta);
|
|
145
|
-
}
|
|
146
|
-
/** Move down by half the viewport height. */
|
|
147
|
-
halfViewDown() {
|
|
148
|
-
const delta = Math.max(1, Math.floor(this.height / 2));
|
|
149
|
-
return this.scrollDown(delta);
|
|
150
|
-
}
|
|
151
|
-
/** Move up by one viewport height. */
|
|
152
|
-
viewUp() {
|
|
153
|
-
return this.scrollUp(this.height);
|
|
154
|
-
}
|
|
155
|
-
/** Move down by one viewport height. */
|
|
156
|
-
viewDown() {
|
|
157
|
-
return this.scrollDown(this.height);
|
|
158
|
-
}
|
|
159
|
-
/** Go to a specific line (0-based). Optionally center it. */
|
|
160
|
-
gotoLine(line, centered = false) {
|
|
161
|
-
if (this.lines.length === 0 || this.height === 0) {
|
|
162
|
-
return this;
|
|
163
|
-
}
|
|
164
|
-
const maxIndex = Math.max(0, this.lines.length - 1);
|
|
165
|
-
const targetLine = clamp(Math.floor(line), 0, maxIndex);
|
|
166
|
-
const maxOffset = this.maxYOffset();
|
|
167
|
-
let yOffset = targetLine;
|
|
168
|
-
if (centered) {
|
|
169
|
-
yOffset = targetLine - Math.floor((this.height - 1) / 2);
|
|
170
|
-
}
|
|
171
|
-
const clamped = clamp(yOffset, 0, maxOffset);
|
|
172
|
-
if (clamped === this.yOffset)
|
|
173
|
-
return this;
|
|
174
|
-
return this.with({ yOffset: clamped });
|
|
175
|
-
}
|
|
176
|
-
/** Tea init hook (no-op). */
|
|
177
|
-
init() {
|
|
178
|
-
return null;
|
|
179
|
-
}
|
|
180
|
-
/** Handle key + mouse scrolling. */
|
|
181
|
-
update(msg) {
|
|
182
|
-
if (msg instanceof MouseMsg) {
|
|
183
|
-
return this.handleMouse(msg);
|
|
184
|
-
}
|
|
185
|
-
if (msg instanceof KeyMsg) {
|
|
186
|
-
return this.handleKey(msg);
|
|
187
|
-
}
|
|
188
|
-
return [this, null];
|
|
189
|
-
}
|
|
190
|
-
/** Render the visible window as a string (padded to height). */
|
|
191
|
-
view() {
|
|
192
|
-
return this.style.render(this.visibleLines().join("\n"));
|
|
193
|
-
}
|
|
194
|
-
/** Build a SyncMsg for high-level renderers. */
|
|
195
|
-
sync() {
|
|
196
|
-
const topLine = this.yOffset;
|
|
197
|
-
const bottomLine = clamp(this.yOffset + this.height - 1, topLine, Math.max(topLine, this.lines.length - 1));
|
|
198
|
-
return () => new SyncMsg(this.visibleLines(), topLine, bottomLine);
|
|
199
|
-
}
|
|
200
|
-
handleKey(msg) {
|
|
201
|
-
if (matches(msg, this.keyMap.down)) {
|
|
202
|
-
const next = this.lineDown();
|
|
203
|
-
return [next, next.scrollCmdIfChanged(this)];
|
|
204
|
-
}
|
|
205
|
-
if (matches(msg, this.keyMap.up)) {
|
|
206
|
-
const next = this.lineUp();
|
|
207
|
-
return [next, next.scrollCmdIfChanged(this)];
|
|
208
|
-
}
|
|
209
|
-
if (matches(msg, this.keyMap.pageDown)) {
|
|
210
|
-
const next = this.viewDown();
|
|
211
|
-
return [next, next.scrollCmdIfChanged(this)];
|
|
212
|
-
}
|
|
213
|
-
if (matches(msg, this.keyMap.pageUp)) {
|
|
214
|
-
const next = this.viewUp();
|
|
215
|
-
return [next, next.scrollCmdIfChanged(this)];
|
|
216
|
-
}
|
|
217
|
-
if (matches(msg, this.keyMap.halfPageDown)) {
|
|
218
|
-
const next = this.halfViewDown();
|
|
219
|
-
return [next, next.scrollCmdIfChanged(this)];
|
|
220
|
-
}
|
|
221
|
-
if (matches(msg, this.keyMap.halfPageUp)) {
|
|
222
|
-
const next = this.halfViewUp();
|
|
223
|
-
return [next, next.scrollCmdIfChanged(this)];
|
|
224
|
-
}
|
|
225
|
-
return [this, null];
|
|
226
|
-
}
|
|
227
|
-
handleMouse(msg) {
|
|
228
|
-
if (!this.mouseWheelEnabled ||
|
|
229
|
-
msg.event.action !== MouseAction.Press ||
|
|
230
|
-
this.height === 0) {
|
|
231
|
-
return [this, null];
|
|
232
|
-
}
|
|
233
|
-
if (msg.event.button === MouseButton.WheelUp) {
|
|
234
|
-
const next = this.scrollUp(this.mouseWheelDelta);
|
|
235
|
-
return [next, next.scrollCmdIfChanged(this)];
|
|
236
|
-
}
|
|
237
|
-
if (msg.event.button === MouseButton.WheelDown) {
|
|
238
|
-
const next = this.scrollDown(this.mouseWheelDelta);
|
|
239
|
-
return [next, next.scrollCmdIfChanged(this)];
|
|
240
|
-
}
|
|
241
|
-
return [this, null];
|
|
242
|
-
}
|
|
243
|
-
visibleLines() {
|
|
244
|
-
const start = this.yOffset;
|
|
245
|
-
const end = Math.min(start + this.height, this.lines.length);
|
|
246
|
-
const window = this.lines.slice(start, end);
|
|
247
|
-
while (window.length < this.height) {
|
|
248
|
-
window.push("");
|
|
249
|
-
}
|
|
250
|
-
return window;
|
|
251
|
-
}
|
|
252
|
-
maxYOffset(lines = this.lines, height = this.height) {
|
|
253
|
-
return Math.max(0, lines.length - height);
|
|
254
|
-
}
|
|
255
|
-
clampOffset(offset, lines, height) {
|
|
256
|
-
return clamp(offset, 0, this.maxYOffset(lines, height));
|
|
257
|
-
}
|
|
258
|
-
with(patch) {
|
|
259
|
-
return new ViewportModel({
|
|
260
|
-
width: patch.width ?? this.width,
|
|
261
|
-
height: patch.height ?? this.height,
|
|
262
|
-
keyMap: patch.keyMap ?? this.keyMap,
|
|
263
|
-
mouseWheelEnabled: patch.mouseWheelEnabled ?? this.mouseWheelEnabled,
|
|
264
|
-
mouseWheelDelta: patch.mouseWheelDelta ?? this.mouseWheelDelta,
|
|
265
|
-
yOffset: patch.yOffset ?? this.yOffset,
|
|
266
|
-
lines: patch.lines ?? this.lines,
|
|
267
|
-
style: patch.style ?? this.style,
|
|
268
|
-
});
|
|
269
|
-
}
|
|
270
|
-
scrollCmdIfChanged(previous) {
|
|
271
|
-
if (this === previous || this.yOffset === previous.yOffset) {
|
|
272
|
-
return null;
|
|
273
|
-
}
|
|
274
|
-
return () => new ScrollMsg(this.scrollPercent(), this.yOffset);
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
function clamp(value, min, max) {
|
|
278
|
-
if (max < min)
|
|
279
|
-
return min;
|
|
280
|
-
return Math.min(max, Math.max(min, value));
|
|
281
|
-
}
|
|
282
|
-
function clamp01(value) {
|
|
283
|
-
if (Number.isNaN(value))
|
|
284
|
-
return 0;
|
|
285
|
-
return clamp(value, 0, 1);
|
|
286
|
-
}
|
|
287
|
-
//# sourceMappingURL=model.js.map
|
package/dist/model.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|