@teaui/core 1.7.8 → 1.9.8
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/Buffer.d.ts +5 -0
- package/.dist/Buffer.js +23 -0
- package/.dist/Buffer.js.map +1 -1
- package/.dist/Color.js.map +1 -1
- package/.dist/Screen.d.ts +2 -1
- package/.dist/Screen.js +24 -10
- package/.dist/Screen.js.map +1 -1
- package/.dist/Theme.d.ts +7 -3
- package/.dist/Theme.js +42 -25
- package/.dist/Theme.js.map +1 -1
- package/.dist/UI.js +3 -1
- package/.dist/UI.js.map +1 -1
- package/.dist/View.d.ts +29 -0
- package/.dist/View.js +40 -2
- package/.dist/View.js.map +1 -1
- package/.dist/Viewport.d.ts +17 -3
- package/.dist/Viewport.js +21 -11
- package/.dist/Viewport.js.map +1 -1
- package/.dist/components/Alert.d.ts +76 -0
- package/.dist/components/Alert.js +133 -0
- package/.dist/components/Alert.js.map +1 -0
- package/.dist/components/Box.d.ts +6 -2
- package/.dist/components/Box.js +51 -14
- package/.dist/components/Box.js.map +1 -1
- package/.dist/components/Button.d.ts +5 -2
- package/.dist/components/Button.js +44 -13
- package/.dist/components/Button.js.map +1 -1
- package/.dist/components/Calendar.d.ts +4 -1
- package/.dist/components/Calendar.js +371 -137
- package/.dist/components/Calendar.js.map +1 -1
- package/.dist/components/Callout.d.ts +12 -0
- package/.dist/components/Callout.js +82 -0
- package/.dist/components/Callout.js.map +1 -0
- package/.dist/components/Checkbox.js +1 -1
- package/.dist/components/Checkbox.js.map +1 -1
- package/.dist/components/Drawer.d.ts +3 -0
- package/.dist/components/Drawer.js +71 -2
- package/.dist/components/Drawer.js.map +1 -1
- package/.dist/components/Dropdown.js +20 -12
- package/.dist/components/Dropdown.js.map +1 -1
- package/.dist/components/Header.d.ts +1 -1
- package/.dist/components/Header.js +12 -10
- package/.dist/components/Header.js.map +1 -1
- package/.dist/components/Input.d.ts +1 -0
- package/.dist/components/Input.js +39 -15
- package/.dist/components/Input.js.map +1 -1
- package/.dist/components/Legend.d.ts +20 -0
- package/.dist/components/Legend.js +180 -0
- package/.dist/components/Legend.js.map +1 -0
- package/.dist/components/Log.js +3 -4
- package/.dist/components/Log.js.map +1 -1
- package/.dist/components/Modal.js +1 -1
- package/.dist/components/Modal.js.map +1 -1
- package/.dist/components/Notification.d.ts +35 -0
- package/.dist/components/Notification.js +120 -0
- package/.dist/components/Notification.js.map +1 -0
- package/.dist/components/Page.d.ts +55 -0
- package/.dist/components/Page.js +374 -0
- package/.dist/components/Page.js.map +1 -0
- package/.dist/components/Progress.d.ts +15 -0
- package/.dist/components/Progress.js +62 -16
- package/.dist/components/Progress.js.map +1 -1
- package/.dist/components/Scrollable.d.ts +60 -15
- package/.dist/components/Scrollable.js +209 -58
- package/.dist/components/Scrollable.js.map +1 -1
- package/.dist/components/ScrollableList.d.ts +16 -9
- package/.dist/components/ScrollableList.js +50 -19
- package/.dist/components/ScrollableList.js.map +1 -1
- package/.dist/components/Slider.d.ts +2 -1
- package/.dist/components/Slider.js +151 -46
- package/.dist/components/Slider.js.map +1 -1
- package/.dist/components/Space.d.ts +0 -3
- package/.dist/components/Space.js +0 -1
- package/.dist/components/Space.js.map +1 -1
- package/.dist/components/Spinner.js +1 -1
- package/.dist/components/Spinner.js.map +1 -1
- package/.dist/components/Stack.js +33 -2
- package/.dist/components/Stack.js.map +1 -1
- package/.dist/components/Table.js +43 -60
- package/.dist/components/Table.js.map +1 -1
- package/.dist/components/Tabs.d.ts +8 -0
- package/.dist/components/Tabs.js +22 -5
- package/.dist/components/Tabs.js.map +1 -1
- package/.dist/components/ToggleGroup.js +1 -1
- package/.dist/components/ToggleGroup.js.map +1 -1
- package/.dist/components/ZStack.d.ts +9 -0
- package/.dist/components/ZStack.js +68 -5
- package/.dist/components/ZStack.js.map +1 -1
- package/.dist/components/index.d.ts +5 -2
- package/.dist/components/index.js +4 -1
- package/.dist/components/index.js.map +1 -1
- package/.dist/events/index.d.ts +6 -2
- package/.dist/events/key.d.ts +18 -4
- package/.dist/events/key.js +42 -6
- package/.dist/events/key.js.map +1 -1
- package/.dist/events/mouse.d.ts +1 -0
- package/.dist/events/mouse.js.map +1 -1
- package/.dist/events/translate.js +17 -4
- package/.dist/events/translate.js.map +1 -1
- package/.dist/index.d.ts +1 -1
- package/.dist/index.js.map +1 -1
- package/.dist/inspect.js +3 -0
- package/.dist/inspect.js.map +1 -1
- package/.dist/managers/FocusManager.d.ts +2 -1
- package/.dist/managers/FocusManager.js +39 -4
- package/.dist/managers/FocusManager.js.map +1 -1
- package/.dist/managers/MouseManager.js +2 -0
- package/.dist/managers/MouseManager.js.map +1 -1
- package/.dist/renderToAnsi.js +1 -1
- package/.dist/renderToAnsi.js.map +1 -1
- package/.dist/terminal.d.ts +1 -0
- package/.dist/testing.d.ts +29 -2
- package/.dist/testing.js +34 -27
- package/.dist/testing.js.map +1 -1
- package/package.json +5 -4
- package/.dist/components/Pin.d.ts +0 -25
- package/.dist/components/Pin.js +0 -80
- package/.dist/components/Pin.js.map +0 -1
|
@@ -2,12 +2,26 @@ import { Container } from '../Container.js';
|
|
|
2
2
|
import { Point, Rect, Size, interpolate } from '../geometry.js';
|
|
3
3
|
import { isMouseWheel } from '../events/index.js';
|
|
4
4
|
import { Style } from '../Style.js';
|
|
5
|
+
import { Stack } from './Stack.js';
|
|
6
|
+
function fromShorthand(props, direction, extraProps = {}) {
|
|
7
|
+
if (Array.isArray(props)) {
|
|
8
|
+
return { children: props, direction, ...extraProps };
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
return { ...props, direction, ...extraProps };
|
|
12
|
+
}
|
|
13
|
+
}
|
|
5
14
|
/**
|
|
6
|
-
* Scrollable
|
|
7
|
-
*
|
|
8
|
-
*
|
|
15
|
+
* Scrollable manages an internal Stack for layout and adds scroll offset,
|
|
16
|
+
* scrollbar rendering, and mouse wheel handling on top.
|
|
17
|
+
*
|
|
18
|
+
* Children added to the Scrollable are delegated to the internal Stack.
|
|
19
|
+
* Use `direction` to control layout (default: 'down'), or the static
|
|
20
|
+
* constructors `Scrollable.down()`, `Scrollable.right()`, etc.
|
|
9
21
|
*/
|
|
10
22
|
export class Scrollable extends Container {
|
|
23
|
+
#stack;
|
|
24
|
+
#scrollable = 'both';
|
|
11
25
|
#showScrollbars = true;
|
|
12
26
|
#scrollHeight = 1;
|
|
13
27
|
#scrollWidth = 2;
|
|
@@ -15,25 +29,95 @@ export class Scrollable extends Container {
|
|
|
15
29
|
#isAtBottom = true;
|
|
16
30
|
#contentOffset;
|
|
17
31
|
#contentSize = Size.zero;
|
|
32
|
+
#contentSizeOverride;
|
|
18
33
|
#visibleSize = Size.zero;
|
|
19
34
|
#prevMouseDown = undefined;
|
|
20
|
-
|
|
35
|
+
#onOffsetChange;
|
|
36
|
+
static down(props = {}, extraProps = {}) {
|
|
37
|
+
return new Scrollable(fromShorthand(props, 'down', extraProps));
|
|
38
|
+
}
|
|
39
|
+
static up(props = {}, extraProps = {}) {
|
|
40
|
+
return new Scrollable(fromShorthand(props, 'up', extraProps));
|
|
41
|
+
}
|
|
42
|
+
static right(props = {}, extraProps = {}) {
|
|
43
|
+
return new Scrollable(fromShorthand(props, 'right', extraProps));
|
|
44
|
+
}
|
|
45
|
+
static left(props = {}, extraProps = {}) {
|
|
46
|
+
return new Scrollable(fromShorthand(props, 'left', extraProps));
|
|
47
|
+
}
|
|
48
|
+
constructor({ children, child, direction, gap, ...props }) {
|
|
21
49
|
super(props);
|
|
50
|
+
this.#stack = new Stack({ direction: direction ?? 'down', gap });
|
|
51
|
+
// Add the Stack as the actual child of the Container
|
|
52
|
+
super.add(this.#stack);
|
|
22
53
|
this.#contentOffset = { x: 0, y: 0 };
|
|
23
54
|
this.#update(props);
|
|
55
|
+
// Add user children to the internal Stack
|
|
56
|
+
if (child) {
|
|
57
|
+
this.#stack.add(child);
|
|
58
|
+
}
|
|
59
|
+
if (children) {
|
|
60
|
+
for (const c of children) {
|
|
61
|
+
this.#stack.add(c);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
24
64
|
}
|
|
25
|
-
update(props) {
|
|
65
|
+
update({ children, child, direction, gap, ...props }) {
|
|
26
66
|
this.#update(props);
|
|
67
|
+
if (direction !== undefined) {
|
|
68
|
+
this.#stack.direction = direction;
|
|
69
|
+
}
|
|
70
|
+
if (gap !== undefined) {
|
|
71
|
+
this.#stack.gap = gap;
|
|
72
|
+
}
|
|
73
|
+
// Delegate child management to the internal Stack
|
|
74
|
+
if (child !== undefined || children !== undefined) {
|
|
75
|
+
const allChildren = [];
|
|
76
|
+
if (children) {
|
|
77
|
+
allChildren.push(...children);
|
|
78
|
+
}
|
|
79
|
+
if (child) {
|
|
80
|
+
allChildren.push(child);
|
|
81
|
+
}
|
|
82
|
+
this.#stack.update({
|
|
83
|
+
direction: direction ?? this.#stack.direction,
|
|
84
|
+
gap: gap ?? this.#stack.gap,
|
|
85
|
+
children: allChildren,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
27
88
|
super.update(props);
|
|
28
89
|
}
|
|
29
|
-
#update({
|
|
90
|
+
#update({ scrollable, showScrollbars, keepAtBottom, contentSize: contentSizeOverride, offset, onOffsetChange, }) {
|
|
91
|
+
this.#scrollable = scrollable ?? 'both';
|
|
30
92
|
this.#showScrollbars = showScrollbars ?? true;
|
|
31
|
-
this.#scrollHeight = scrollHeight ?? 1;
|
|
32
|
-
this.#scrollWidth = scrollWidth ?? 2;
|
|
33
93
|
this.#keepAtBottom = keepAtBottom ?? false;
|
|
94
|
+
this.#contentSizeOverride = contentSizeOverride;
|
|
95
|
+
this.#onOffsetChange = onOffsetChange;
|
|
96
|
+
if (offset) {
|
|
97
|
+
this.#contentOffset = { x: -offset.x, y: -offset.y };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Children are delegated to the internal Stack.
|
|
102
|
+
*/
|
|
103
|
+
add(child, at) {
|
|
104
|
+
this.#stack.add(child, at);
|
|
105
|
+
}
|
|
106
|
+
removeChild(child) {
|
|
107
|
+
this.#stack.removeChild(child);
|
|
108
|
+
}
|
|
109
|
+
removeAllChildren() {
|
|
110
|
+
this.#stack.removeAllChildren();
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Returns the children of the internal Stack (the user's children),
|
|
114
|
+
* not the Scrollable's direct children (which is just the Stack).
|
|
115
|
+
*/
|
|
116
|
+
get children() {
|
|
117
|
+
return this.#stack.children;
|
|
34
118
|
}
|
|
35
119
|
naturalSize(available) {
|
|
36
|
-
const size =
|
|
120
|
+
const size = this.#stack.naturalSize(available).mutableCopy();
|
|
37
121
|
size.width = Math.min(size.width, available.width);
|
|
38
122
|
size.height = Math.min(size.height, available.height);
|
|
39
123
|
return size;
|
|
@@ -80,23 +164,35 @@ export class Scrollable extends Container {
|
|
|
80
164
|
receiveMouseDown(event) {
|
|
81
165
|
const tooWide = this.#contentSize.width > this.contentSize.width;
|
|
82
166
|
const tooTall = this.#contentSize.height > this.contentSize.height;
|
|
167
|
+
const showVBar = this.#showVerticalScrollbar() && tooTall;
|
|
168
|
+
const showHBar = this.#showHorizontalScrollbar() && tooWide;
|
|
169
|
+
const visibleWidth = this.contentSize.width - (showVBar ? 1 : 0);
|
|
170
|
+
const visibleHeight = this.contentSize.height - (showHBar ? 1 : 0);
|
|
83
171
|
if (tooWide && this.#prevMouseDown === 'horizontal') {
|
|
84
|
-
const
|
|
85
|
-
const
|
|
172
|
+
const trackWidth = visibleWidth;
|
|
173
|
+
const maxOffsetX = Math.max(0, this.#contentSize.width - visibleWidth);
|
|
174
|
+
const thumbWidth = this.#scrollbarThumbLength(trackWidth, visibleWidth, this.#contentSize.width);
|
|
175
|
+
const maxScrollbarX = Math.max(0, trackWidth - thumbWidth);
|
|
176
|
+
const thumbX = Math.max(0, Math.min(maxScrollbarX, event.position.x - Math.floor(thumbWidth / 2)));
|
|
177
|
+
const offsetX = this.#scrollbarThumbPosition(thumbX, maxScrollbarX, maxOffsetX);
|
|
86
178
|
this.#contentOffset = {
|
|
87
|
-
x:
|
|
179
|
+
x: -offsetX,
|
|
88
180
|
y: this.#contentOffset.y,
|
|
89
181
|
};
|
|
90
182
|
}
|
|
91
183
|
else if (tooTall && this.#prevMouseDown === 'vertical') {
|
|
92
|
-
const
|
|
93
|
-
const
|
|
94
|
-
const
|
|
184
|
+
const trackHeight = visibleHeight;
|
|
185
|
+
const maxOffsetY = Math.max(0, this.#contentSize.height - visibleHeight);
|
|
186
|
+
const thumbHeight = this.#scrollbarThumbLength(trackHeight, visibleHeight, this.#contentSize.height);
|
|
187
|
+
const maxScrollbarY = Math.max(0, trackHeight - thumbHeight);
|
|
188
|
+
const thumbY = Math.max(0, Math.min(maxScrollbarY, event.position.y - Math.floor(thumbHeight / 2)));
|
|
189
|
+
const offsetY = this.#scrollbarThumbPosition(thumbY, maxScrollbarY, maxOffsetY);
|
|
190
|
+
const y = -offsetY;
|
|
95
191
|
this.#contentOffset = {
|
|
96
192
|
x: this.#contentOffset.x,
|
|
97
193
|
y,
|
|
98
194
|
};
|
|
99
|
-
this.#isAtBottom = y <=
|
|
195
|
+
this.#isAtBottom = y <= this.#maxOffsetY();
|
|
100
196
|
}
|
|
101
197
|
}
|
|
102
198
|
receiveWheel(event) {
|
|
@@ -135,6 +231,16 @@ export class Scrollable extends Container {
|
|
|
135
231
|
* to point to the top-most row.
|
|
136
232
|
*/
|
|
137
233
|
scrollBy(offsetX, offsetY) {
|
|
234
|
+
if (offsetX === 0 && offsetY === 0) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
// Restrict scrolling to allowed direction(s)
|
|
238
|
+
if (this.#scrollable === 'horizontal') {
|
|
239
|
+
offsetY = 0;
|
|
240
|
+
}
|
|
241
|
+
else if (this.#scrollable === 'vertical') {
|
|
242
|
+
offsetX = 0;
|
|
243
|
+
}
|
|
138
244
|
if (offsetX === 0 && offsetY === 0) {
|
|
139
245
|
return;
|
|
140
246
|
}
|
|
@@ -148,10 +254,38 @@ export class Scrollable extends Container {
|
|
|
148
254
|
this.#contentOffset = { x, y };
|
|
149
255
|
// Track whether we're at the bottom (for keepAtBottom)
|
|
150
256
|
this.#isAtBottom = y <= maxY;
|
|
257
|
+
this.#onOffsetChange?.(new Point(-x || 0, -y || 0));
|
|
258
|
+
}
|
|
259
|
+
#showHorizontalScrollbar() {
|
|
260
|
+
return (this.#showScrollbars === true || this.#showScrollbars === 'horizontal');
|
|
261
|
+
}
|
|
262
|
+
#showVerticalScrollbar() {
|
|
263
|
+
return this.#showScrollbars === true || this.#showScrollbars === 'vertical';
|
|
264
|
+
}
|
|
265
|
+
#scrollbarStyle() {
|
|
266
|
+
return new Style({
|
|
267
|
+
foreground: this.theme.darkenColor,
|
|
268
|
+
background: this.theme.darkenColor,
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
#scrollbarThumbStyle() {
|
|
272
|
+
return new Style({
|
|
273
|
+
foreground: this.theme.highlightColor,
|
|
274
|
+
background: this.theme.highlightColor,
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
#scrollbarThumbLength(trackLength, visibleLength, contentLength) {
|
|
278
|
+
const proportionalLength = Math.round((visibleLength / contentLength) * trackLength);
|
|
279
|
+
const maxLength = contentLength > visibleLength ? trackLength - 1 : trackLength;
|
|
280
|
+
return Math.max(1, Math.min(maxLength, proportionalLength));
|
|
281
|
+
}
|
|
282
|
+
#scrollbarThumbPosition(contentOffset, maxContentOffset, maxScrollbarOffset) {
|
|
283
|
+
return Math.round(interpolate(contentOffset, [0, maxContentOffset], [0, maxScrollbarOffset], true));
|
|
151
284
|
}
|
|
152
285
|
get contentSize() {
|
|
153
|
-
const
|
|
154
|
-
|
|
286
|
+
const deltaW = this.#showVerticalScrollbar() ? 1 : 0;
|
|
287
|
+
const deltaH = this.#showHorizontalScrollbar() ? 1 : 0;
|
|
288
|
+
return super.contentSize.shrink(deltaW, deltaH);
|
|
155
289
|
}
|
|
156
290
|
render(viewport) {
|
|
157
291
|
if (viewport.isEmpty) {
|
|
@@ -159,72 +293,89 @@ export class Scrollable extends Container {
|
|
|
159
293
|
}
|
|
160
294
|
viewport.registerMouse('mouse.wheel');
|
|
161
295
|
let contentSize = Size.zero.mutableCopy();
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
contentSize.height =
|
|
296
|
+
if (this.#contentSizeOverride) {
|
|
297
|
+
contentSize.width =
|
|
298
|
+
this.#contentSizeOverride.width ?? viewport.contentSize.width;
|
|
299
|
+
contentSize.height =
|
|
300
|
+
this.#contentSizeOverride.height ?? viewport.contentSize.height;
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
const stackSize = this.#stack.naturalSize(viewport.contentSize);
|
|
304
|
+
contentSize.width = stackSize.width;
|
|
305
|
+
contentSize.height = stackSize.height;
|
|
166
306
|
}
|
|
167
307
|
this.#contentSize = contentSize;
|
|
168
|
-
const
|
|
169
|
-
const
|
|
308
|
+
const canScrollHoriz = this.#scrollable !== 'vertical';
|
|
309
|
+
const canScrollVert = this.#scrollable !== 'horizontal';
|
|
310
|
+
const tooWide = canScrollHoriz && contentSize.width > viewport.contentSize.width;
|
|
311
|
+
const tooTall = canScrollVert && contentSize.height > viewport.contentSize.height;
|
|
170
312
|
// keepAtBottom: snap to end when content grows and we were at the bottom
|
|
171
313
|
if (this.#keepAtBottom && this.#isAtBottom && tooTall) {
|
|
172
314
|
const maxY = this.#maxOffsetY();
|
|
173
315
|
this.#contentOffset = { x: this.#contentOffset.x, y: maxY };
|
|
174
316
|
}
|
|
317
|
+
const showVBar = this.#showVerticalScrollbar() && tooTall;
|
|
318
|
+
const showHBar = this.#showHorizontalScrollbar() && tooWide;
|
|
175
319
|
// #contentOffset is _negative_ (indicates the amount to move the view away
|
|
176
320
|
// from the origin, which will always be up/left of 0,0)
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
321
|
+
// Children are laid out in a region that is at least as wide/tall as the
|
|
322
|
+
// content, and at least as wide/tall as the viewport (minus scrollbars).
|
|
323
|
+
// This ensures flex children expand to fill the visible area, while
|
|
324
|
+
// children that overflow extend beyond it.
|
|
325
|
+
const visibleWidth = viewport.contentSize.width - (showVBar ? 1 : 0);
|
|
326
|
+
const visibleHeight = viewport.contentSize.height - (showHBar ? 1 : 0);
|
|
327
|
+
// First clip to exclude scrollbar area — this ensures that the inner
|
|
328
|
+
// viewport's visibleRect does not include the scrollbar column/row.
|
|
329
|
+
// Without this, pinned children (which size to visibleRect) would
|
|
330
|
+
// overlap the scrollbar.
|
|
331
|
+
const scrollableArea = new Rect(Point.zero, new Size(visibleWidth, visibleHeight));
|
|
332
|
+
const outside = new Rect([this.#contentOffset.x, this.#contentOffset.y], [
|
|
333
|
+
Math.max(contentSize.width, visibleWidth),
|
|
334
|
+
Math.max(contentSize.height, visibleHeight),
|
|
335
|
+
]);
|
|
336
|
+
viewport.clipped(scrollableArea, contentViewport => {
|
|
337
|
+
contentViewport.clipped(outside, inside => {
|
|
338
|
+
this.#stack.render(inside);
|
|
339
|
+
});
|
|
184
340
|
});
|
|
341
|
+
// Note: #visibleSize is used in #maxOffsetX/#maxOffsetY calculations.
|
|
342
|
+
// The formula requires shrinking by overflow status (not scrollbar visibility)
|
|
343
|
+
// because the +1 correction in the offset formulas compensates for this.
|
|
185
344
|
this.#visibleSize = viewport.visibleRect.size.shrink(tooWide ? 1 : 0, tooTall ? 1 : 0);
|
|
186
|
-
if (
|
|
187
|
-
const scrollBar =
|
|
188
|
-
|
|
189
|
-
background: this.theme.darkenColor,
|
|
190
|
-
});
|
|
191
|
-
const scrollControl = new Style({
|
|
192
|
-
foreground: this.theme.highlightColor,
|
|
193
|
-
background: this.theme.highlightColor,
|
|
194
|
-
});
|
|
345
|
+
if (showVBar || showHBar) {
|
|
346
|
+
const scrollBar = this.#scrollbarStyle();
|
|
347
|
+
const scrollControl = this.#scrollbarThumbStyle();
|
|
195
348
|
// scrollMaxX: x of the last column of the view
|
|
196
349
|
// scrollMaxY: y of the last row of the view
|
|
197
350
|
// scrollMaxHorizX: horizontal scroll bar is drawn from 0 to scrollMaxHorizX
|
|
198
351
|
// scrollMaxHorizY: vertical scroll bar is drawn from 0 to scrollMaxHorizY
|
|
199
|
-
const scrollMaxX = viewport.contentSize.width - 1, scrollMaxY = viewport.contentSize.height - 1, scrollMaxHorizX = scrollMaxX - (
|
|
200
|
-
if (
|
|
352
|
+
const scrollMaxX = viewport.contentSize.width - 1, scrollMaxY = viewport.contentSize.height - 1, scrollMaxHorizX = scrollMaxX - (showVBar ? 1 : 0), scrollMaxVertY = scrollMaxY - (showHBar ? 1 : 0);
|
|
353
|
+
if (showHBar && showVBar) {
|
|
201
354
|
viewport.write('█', new Point(scrollMaxX, scrollMaxY), scrollBar);
|
|
202
355
|
}
|
|
203
|
-
if (
|
|
356
|
+
if (showHBar) {
|
|
204
357
|
viewport.registerMouse('mouse.button.left', new Rect(new Point(0, scrollMaxY), new Size(scrollMaxHorizX + 1, 1)));
|
|
358
|
+
const trackWidth = scrollMaxHorizX + 1;
|
|
359
|
+
const maxOffsetX = Math.max(0, contentSize.width - visibleWidth);
|
|
360
|
+
const thumbWidth = this.#scrollbarThumbLength(trackWidth, visibleWidth, contentSize.width);
|
|
361
|
+
const maxScrollbarX = Math.max(0, trackWidth - thumbWidth);
|
|
205
362
|
const contentOffsetX = -this.#contentOffset.x;
|
|
206
|
-
const viewX =
|
|
207
|
-
0,
|
|
208
|
-
contentSize.width -
|
|
209
|
-
viewport.contentSize.width +
|
|
210
|
-
(tooTall ? 1 : 0),
|
|
211
|
-
], [0, scrollMaxHorizX]));
|
|
363
|
+
const viewX = this.#scrollbarThumbPosition(contentOffsetX, maxOffsetX, maxScrollbarX);
|
|
212
364
|
for (let x = 0; x <= scrollMaxHorizX; x++) {
|
|
213
|
-
const inRange = x
|
|
365
|
+
const inRange = x >= viewX && x < viewX + thumbWidth;
|
|
214
366
|
viewport.write(inRange ? '█' : ' ', new Point(x, scrollMaxY), inRange ? scrollControl : scrollBar);
|
|
215
367
|
}
|
|
216
368
|
}
|
|
217
|
-
if (
|
|
369
|
+
if (showVBar) {
|
|
218
370
|
viewport.registerMouse('mouse.button.left', new Rect(new Point(scrollMaxX, 0), new Size(1, scrollMaxVertY + 1)));
|
|
371
|
+
const trackHeight = scrollMaxVertY + 1;
|
|
372
|
+
const maxOffsetY = Math.max(0, contentSize.height - visibleHeight);
|
|
373
|
+
const thumbHeight = this.#scrollbarThumbLength(trackHeight, visibleHeight, contentSize.height);
|
|
374
|
+
const maxScrollbarY = Math.max(0, trackHeight - thumbHeight);
|
|
219
375
|
const contentOffsetY = -this.#contentOffset.y;
|
|
220
|
-
const viewY =
|
|
221
|
-
0,
|
|
222
|
-
contentSize.height -
|
|
223
|
-
viewport.contentSize.height +
|
|
224
|
-
(tooWide ? 1 : 0),
|
|
225
|
-
], [0, scrollMaxVertY]));
|
|
376
|
+
const viewY = this.#scrollbarThumbPosition(contentOffsetY, maxOffsetY, maxScrollbarY);
|
|
226
377
|
for (let y = 0; y <= scrollMaxVertY; y++) {
|
|
227
|
-
const inRange = y
|
|
378
|
+
const inRange = y >= viewY && y < viewY + thumbHeight;
|
|
228
379
|
viewport.write(inRange ? '█' : ' ', new Point(scrollMaxX, y), inRange ? scrollControl : scrollBar);
|
|
229
380
|
}
|
|
230
381
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scrollable.js","sourceRoot":"","sources":["../../lib/components/Scrollable.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Scrollable.js","sourceRoot":"","sources":["../../lib/components/Scrollable.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,18 +4,19 @@ import { Container } from '../Container.js';
|
|
|
4
4
|
import { Size } from '../geometry.js';
|
|
5
5
|
import { type MouseEvent } from '../events/index.js';
|
|
6
6
|
interface Props<T> extends ViewProps {
|
|
7
|
-
|
|
8
|
-
renderItem
|
|
7
|
+
data: T[];
|
|
8
|
+
renderItem?: (item: T, row: number) => View;
|
|
9
|
+
/**
|
|
10
|
+
* Filter function that determines which items are visible.
|
|
11
|
+
* Return `true` to keep the item, `false` to hide it.
|
|
12
|
+
* Cached views are preserved when the filter changes (only cleared when `data` changes).
|
|
13
|
+
*/
|
|
14
|
+
filter?: (item: T) => boolean;
|
|
9
15
|
/**
|
|
10
16
|
* Show/hide the scrollbars
|
|
11
17
|
* @default true
|
|
12
18
|
*/
|
|
13
19
|
showScrollbars?: boolean;
|
|
14
|
-
/**
|
|
15
|
-
* How many rows to scroll by when using the mouse wheel.
|
|
16
|
-
* @default 1
|
|
17
|
-
*/
|
|
18
|
-
scrollHeight?: number;
|
|
19
20
|
/**
|
|
20
21
|
* Useful for log views
|
|
21
22
|
*/
|
|
@@ -27,7 +28,7 @@ interface ContentOffset {
|
|
|
27
28
|
}
|
|
28
29
|
export declare class ScrollableList<T> extends Container {
|
|
29
30
|
#private;
|
|
30
|
-
constructor({ renderItem,
|
|
31
|
+
constructor({ renderItem, data, filter, keepAtBottom, showScrollbars, ...viewProps }: Props<T>);
|
|
31
32
|
update(props: Props<T>): void;
|
|
32
33
|
naturalSize(available: Size): Size;
|
|
33
34
|
/**
|
|
@@ -59,7 +60,13 @@ export declare class ScrollableList<T> extends Container {
|
|
|
59
60
|
* to point to the top-most row.
|
|
60
61
|
*/
|
|
61
62
|
scrollBy(offset: number): void;
|
|
62
|
-
|
|
63
|
+
updateFilter(filter?: (item: T) => boolean): void;
|
|
64
|
+
/**
|
|
65
|
+
* Re-applies the current filter. Useful when the filter function captures
|
|
66
|
+
* external state that has changed without the function reference itself changing.
|
|
67
|
+
*/
|
|
68
|
+
refresh(): void;
|
|
69
|
+
updateData(data: T[]): void;
|
|
63
70
|
viewForRow(row: number): View | undefined;
|
|
64
71
|
sizeForRow(row: number, contentWidth: number, view: View): Size;
|
|
65
72
|
sizeForRow(row: number, contentWidth: number): Size | undefined;
|
|
@@ -3,36 +3,44 @@ import { Style } from '../Style.js';
|
|
|
3
3
|
import { Rect, Point, Size, interpolate } from '../geometry.js';
|
|
4
4
|
import { isMouseDragging } from '../events/index.js';
|
|
5
5
|
export class ScrollableList extends Container {
|
|
6
|
+
#data;
|
|
7
|
+
#filteredData;
|
|
6
8
|
/**
|
|
7
|
-
* Your function
|
|
8
|
-
* function will be cached until you call `scrollableList.invalidateCache()`
|
|
9
|
-
* `scrollableList.invalidateRow(row)`.
|
|
9
|
+
* Your renderItem function need not return "stable" views; the views returned by
|
|
10
|
+
* this function will be cached until you call `scrollableList.invalidateCache()`
|
|
11
|
+
* or `scrollableList.invalidateRow(row)`.
|
|
10
12
|
*/
|
|
11
|
-
#items;
|
|
12
13
|
#renderItem;
|
|
14
|
+
#filter;
|
|
13
15
|
#keepAtBottom;
|
|
14
16
|
#isAtBottom = true;
|
|
15
17
|
#showScrollbars;
|
|
16
|
-
#scrollHeight;
|
|
18
|
+
#scrollHeight = 1;
|
|
17
19
|
#contentOffset;
|
|
18
20
|
#maxWidth = 0;
|
|
19
21
|
#viewCache = new Map();
|
|
20
22
|
#sizeCache = new Map();
|
|
21
23
|
#totalHeight;
|
|
22
|
-
constructor({ renderItem,
|
|
24
|
+
constructor({ renderItem, data, filter, keepAtBottom, showScrollbars, ...viewProps }) {
|
|
23
25
|
super(viewProps);
|
|
24
26
|
this.#showScrollbars = showScrollbars ?? true;
|
|
25
27
|
this.#contentOffset = { row: 0, offset: 0 };
|
|
26
28
|
this.#renderItem = renderItem;
|
|
27
|
-
this.#
|
|
28
|
-
this.#
|
|
29
|
+
this.#filter = filter;
|
|
30
|
+
this.#data = data;
|
|
31
|
+
this.#filteredData = filter ? data.filter(filter) : data;
|
|
29
32
|
this.#keepAtBottom = keepAtBottom ?? false;
|
|
30
33
|
}
|
|
31
34
|
update(props) {
|
|
32
35
|
this.#update(props);
|
|
33
36
|
super.update(props);
|
|
34
37
|
}
|
|
35
|
-
#update({}) {
|
|
38
|
+
#update({ filter }) {
|
|
39
|
+
if (filter !== this.#filter) {
|
|
40
|
+
this.#filter = filter;
|
|
41
|
+
this.#applyFilter();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
36
44
|
naturalSize(available) {
|
|
37
45
|
let { row, offset: y } = this.#contentOffset;
|
|
38
46
|
const scrollWidth = this.#showScrollbars ? 1 : 0;
|
|
@@ -48,7 +56,7 @@ export class ScrollableList extends Container {
|
|
|
48
56
|
y += rowSize.height;
|
|
49
57
|
row += 1;
|
|
50
58
|
}
|
|
51
|
-
return new Size(this.#maxWidth + scrollWidth, available.height);
|
|
59
|
+
return new Size(this.#maxWidth + scrollWidth, Math.min(y, available.height));
|
|
52
60
|
}
|
|
53
61
|
/**
|
|
54
62
|
* Tells ScrollableList to re-fetch all rows.
|
|
@@ -100,7 +108,7 @@ export class ScrollableList extends Container {
|
|
|
100
108
|
const heightY = Math.round(interpolate(Math.max(0, Math.min(this.contentSize.height - 1, event.position.y)), [0, this.contentSize.height - 1], [0, maxY]));
|
|
101
109
|
this.#isAtBottom = heightY === maxY;
|
|
102
110
|
const cellWidth = this.contentSize.width;
|
|
103
|
-
for (let row = 0, y = 0; row < this.#
|
|
111
|
+
for (let row = 0, y = 0; row < this.#filteredData.length; row++) {
|
|
104
112
|
const rowHeight = this.sizeForRow(row, cellWidth)?.height;
|
|
105
113
|
if (rowHeight === undefined) {
|
|
106
114
|
break;
|
|
@@ -160,16 +168,39 @@ export class ScrollableList extends Container {
|
|
|
160
168
|
this.#contentOffset = { row: row, offset: nextOffset };
|
|
161
169
|
}
|
|
162
170
|
}
|
|
163
|
-
|
|
164
|
-
this.#
|
|
171
|
+
#applyFilter() {
|
|
172
|
+
this.#filteredData = this.#filter
|
|
173
|
+
? this.#data.filter(this.#filter)
|
|
174
|
+
: this.#data;
|
|
175
|
+
this.#contentOffset = { row: 0, offset: 0 };
|
|
176
|
+
this.invalidateAllRows('size');
|
|
177
|
+
super.invalidateSize();
|
|
178
|
+
}
|
|
179
|
+
updateFilter(filter) {
|
|
180
|
+
this.#filter = filter;
|
|
181
|
+
this.#applyFilter();
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Re-applies the current filter. Useful when the filter function captures
|
|
185
|
+
* external state that has changed without the function reference itself changing.
|
|
186
|
+
*/
|
|
187
|
+
refresh() {
|
|
188
|
+
this.#applyFilter();
|
|
189
|
+
}
|
|
190
|
+
updateData(data) {
|
|
191
|
+
this.#data = data;
|
|
192
|
+
this.#filteredData = this.#filter ? data.filter(this.#filter) : data;
|
|
165
193
|
this.invalidateAllRows('view');
|
|
166
194
|
this.invalidateSize();
|
|
167
195
|
}
|
|
168
196
|
viewForRow(row) {
|
|
169
|
-
if (row < 0 || row >= this.#
|
|
197
|
+
if (row < 0 || row >= this.#filteredData.length) {
|
|
170
198
|
return;
|
|
171
199
|
}
|
|
172
|
-
|
|
200
|
+
if (!this.#renderItem) {
|
|
201
|
+
return this.children[row];
|
|
202
|
+
}
|
|
203
|
+
const item = this.#filteredData[row];
|
|
173
204
|
let view = this.#viewCache.get(item);
|
|
174
205
|
if (!view) {
|
|
175
206
|
view = this.#renderItem(item, row);
|
|
@@ -180,7 +211,7 @@ export class ScrollableList extends Container {
|
|
|
180
211
|
return view;
|
|
181
212
|
}
|
|
182
213
|
sizeForRow(row, contentWidth, view) {
|
|
183
|
-
const item = this.#
|
|
214
|
+
const item = this.#filteredData[row];
|
|
184
215
|
if (contentWidth === this.contentSize.width && item) {
|
|
185
216
|
const size = this.#sizeCache.get(item);
|
|
186
217
|
if (size !== undefined) {
|
|
@@ -201,7 +232,7 @@ export class ScrollableList extends Container {
|
|
|
201
232
|
return super.contentSize.shrink(this.#showScrollbars ? 1 : 0, 0);
|
|
202
233
|
}
|
|
203
234
|
lastOffset() {
|
|
204
|
-
const cellCount = this.#
|
|
235
|
+
const cellCount = this.#filteredData.length;
|
|
205
236
|
const cellWidth = this.contentSize.width;
|
|
206
237
|
let row = cellCount - 1;
|
|
207
238
|
let y = 0;
|
|
@@ -223,7 +254,7 @@ export class ScrollableList extends Container {
|
|
|
223
254
|
return super.render(viewport);
|
|
224
255
|
}
|
|
225
256
|
viewport.registerMouse('mouse.wheel');
|
|
226
|
-
if (this.#contentOffset.row >= this.#
|
|
257
|
+
if (this.#contentOffset.row >= this.#filteredData.length ||
|
|
227
258
|
(this.#keepAtBottom && this.#isAtBottom)) {
|
|
228
259
|
const offset = this.lastOffset();
|
|
229
260
|
this.#contentOffset = offset;
|
|
@@ -274,7 +305,7 @@ export class ScrollableList extends Container {
|
|
|
274
305
|
if (this.#showScrollbars) {
|
|
275
306
|
viewport.registerMouse('mouse.button.left', new Rect(new Point(cellWidth, 0), new Size(1, viewport.contentSize.height)));
|
|
276
307
|
heights[2] = heights[1];
|
|
277
|
-
for (let i = row; i < this.#
|
|
308
|
+
for (let i = row; i < this.#filteredData.length; i++) {
|
|
278
309
|
const rowHeight = this.sizeForRow(i, cellWidth)?.height;
|
|
279
310
|
if (rowHeight === undefined) {
|
|
280
311
|
break;
|