@teaui/core 1.6.8 → 1.7.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.
Files changed (91) hide show
  1. package/.dist/Screen.d.ts +4 -5
  2. package/.dist/Screen.js +4 -6
  3. package/.dist/Screen.js.map +1 -1
  4. package/.dist/Viewport.d.ts +6 -1
  5. package/.dist/Viewport.js +6 -2
  6. package/.dist/Viewport.js.map +1 -1
  7. package/.dist/components/Accordion.js +1 -1
  8. package/.dist/components/Accordion.js.map +1 -1
  9. package/.dist/components/Breadcrumb.d.ts +93 -0
  10. package/.dist/components/Breadcrumb.js +287 -0
  11. package/.dist/components/Breadcrumb.js.map +1 -0
  12. package/.dist/components/Button.js +23 -11
  13. package/.dist/components/Button.js.map +1 -1
  14. package/.dist/components/Calendar.d.ts +36 -0
  15. package/.dist/components/Calendar.js +721 -0
  16. package/.dist/components/Calendar.js.map +1 -0
  17. package/.dist/components/Canvas.d.ts +48 -0
  18. package/.dist/components/Canvas.js +230 -0
  19. package/.dist/components/Canvas.js.map +1 -0
  20. package/.dist/components/Checkbox.d.ts +3 -2
  21. package/.dist/components/Checkbox.js +31 -9
  22. package/.dist/components/Checkbox.js.map +1 -1
  23. package/.dist/components/Dropdown.d.ts +1 -1
  24. package/.dist/components/Dropdown.js +14 -6
  25. package/.dist/components/Dropdown.js.map +1 -1
  26. package/.dist/components/Geometry.d.ts +29 -0
  27. package/.dist/components/Geometry.js +40 -0
  28. package/.dist/components/Geometry.js.map +1 -0
  29. package/.dist/components/HotKey.js +1 -1
  30. package/.dist/components/HotKey.js.map +1 -1
  31. package/.dist/components/Log.js +1 -1
  32. package/.dist/components/Log.js.map +1 -1
  33. package/.dist/components/Logo.d.ts +19 -0
  34. package/.dist/components/Logo.js +204 -0
  35. package/.dist/components/Logo.js.map +1 -0
  36. package/.dist/components/Modal.d.ts +74 -0
  37. package/.dist/components/Modal.js +113 -0
  38. package/.dist/components/Modal.js.map +1 -0
  39. package/.dist/components/Pane.d.ts +43 -0
  40. package/.dist/components/Pane.js +321 -0
  41. package/.dist/components/Pane.js.map +1 -0
  42. package/.dist/components/Pin.d.ts +25 -0
  43. package/.dist/components/Pin.js +80 -0
  44. package/.dist/components/Pin.js.map +1 -0
  45. package/.dist/components/Plot.d.ts +25 -0
  46. package/.dist/components/Plot.js +171 -0
  47. package/.dist/components/Plot.js.map +1 -0
  48. package/.dist/components/Scrollable.d.ts +6 -0
  49. package/.dist/components/Scrollable.js +14 -2
  50. package/.dist/components/Scrollable.js.map +1 -1
  51. package/.dist/components/ScrollableList.d.ts +2 -2
  52. package/.dist/components/ScrollableList.js +4 -4
  53. package/.dist/components/ScrollableList.js.map +1 -1
  54. package/.dist/components/Slider.d.ts +2 -0
  55. package/.dist/components/Slider.js +11 -1
  56. package/.dist/components/Slider.js.map +1 -1
  57. package/.dist/components/Table.d.ts +79 -0
  58. package/.dist/components/Table.js +603 -0
  59. package/.dist/components/Table.js.map +1 -0
  60. package/.dist/components/Tabs.d.ts +2 -0
  61. package/.dist/components/Tabs.js +14 -1
  62. package/.dist/components/Tabs.js.map +1 -1
  63. package/.dist/components/ZStack.d.ts +19 -0
  64. package/.dist/components/ZStack.js +34 -0
  65. package/.dist/components/ZStack.js.map +1 -0
  66. package/.dist/components/charts/BarChart.d.ts +27 -0
  67. package/.dist/components/charts/BarChart.js +122 -0
  68. package/.dist/components/charts/BarChart.js.map +1 -0
  69. package/.dist/components/charts/Chart.d.ts +43 -0
  70. package/.dist/components/charts/Chart.js +41 -0
  71. package/.dist/components/charts/Chart.js.map +1 -0
  72. package/.dist/components/charts/LineChart.d.ts +23 -0
  73. package/.dist/components/charts/LineChart.js +109 -0
  74. package/.dist/components/charts/LineChart.js.map +1 -0
  75. package/.dist/components/charts/index.d.ts +3 -0
  76. package/.dist/components/charts/index.js +4 -0
  77. package/.dist/components/charts/index.js.map +1 -0
  78. package/.dist/components/index.d.ts +12 -0
  79. package/.dist/components/index.js +12 -0
  80. package/.dist/components/index.js.map +1 -1
  81. package/.dist/iTerm2.js +1 -3
  82. package/.dist/iTerm2.js.map +1 -1
  83. package/.dist/inspect.js +1 -1
  84. package/.dist/inspect.js.map +1 -1
  85. package/.dist/managers/ModalManager.d.ts +2 -1
  86. package/.dist/managers/ModalManager.js +23 -51
  87. package/.dist/managers/ModalManager.js.map +1 -1
  88. package/.dist/testing.d.ts +5 -0
  89. package/.dist/testing.js +19 -3
  90. package/.dist/testing.js.map +1 -1
  91. package/package.json +3 -3
@@ -0,0 +1,321 @@
1
+ import { Container } from '../Container.js';
2
+ import { Rect, Point, Size } from '../geometry.js';
3
+ import { isMousePressStart, isMousePressEnd, } from '../events/index.js';
4
+ import { Style } from '../Style.js';
5
+ /** Minimum width when collapsible — below this threshold the pane will collapse on release. */
6
+ const COLLAPSE_THRESHOLD = 3;
7
+ /** Minimum width when NOT collapsible. */
8
+ const MIN_PANE_WIDTH_NOT_COLLAPSIBLE = 4;
9
+ /** Absolute minimum width during drag when collapsible (allows dragging into the collapse zone). */
10
+ const MIN_PANE_WIDTH_DRAG = 1;
11
+ /** Default minimum width (non-drag). */
12
+ const MIN_PANE_WIDTH = 5;
13
+ const SEPARATOR_WIDTH = 1;
14
+ /**
15
+ * A split-pane container for index/detail layouts. The first N-1 children are
16
+ * collapsible "browser" panes with draggable separators. The last child is the
17
+ * "detail" pane that takes remaining space.
18
+ */
19
+ export class Pane extends Container {
20
+ #border = false;
21
+ #collapsible = true;
22
+ #browserPanes = [];
23
+ // Drag state
24
+ #dragSeparator = -1;
25
+ #dragStartX = 0;
26
+ #dragStartWidth = 0;
27
+ // Hover state
28
+ #hoverSeparator = -1;
29
+ // Cached layout info for mouse hit-testing
30
+ #separatorPositions = [];
31
+ #borderInset = 0;
32
+ #lastAvailableWidth = 80;
33
+ constructor(props = {}) {
34
+ super(props);
35
+ this.#update(props);
36
+ }
37
+ update(props) {
38
+ this.#update(props);
39
+ super.update(props);
40
+ }
41
+ get border() {
42
+ return this.#border;
43
+ }
44
+ set border(value) {
45
+ if (value === this.#border)
46
+ return;
47
+ this.#border = value;
48
+ this.invalidateSize();
49
+ }
50
+ #update({ border, collapsible }) {
51
+ this.#border = border ?? false;
52
+ this.#collapsible = collapsible ?? true;
53
+ }
54
+ /**
55
+ * Returns the browser panes (all children except the last).
56
+ */
57
+ get browserViews() {
58
+ const children = this.children;
59
+ if (children.length <= 1)
60
+ return [];
61
+ return children.slice(0, -1);
62
+ }
63
+ /**
64
+ * Returns the detail pane (the last child).
65
+ */
66
+ get detailView() {
67
+ const children = this.children;
68
+ return children.length > 0 ? children[children.length - 1] : undefined;
69
+ }
70
+ #ensurePaneState() {
71
+ const browserCount = Math.max(0, this.children.length - 1);
72
+ while (this.#browserPanes.length < browserCount) {
73
+ this.#browserPanes.push({ width: 20, collapsed: false });
74
+ }
75
+ if (this.#browserPanes.length > browserCount) {
76
+ this.#browserPanes.length = browserCount;
77
+ }
78
+ }
79
+ naturalSize(available) {
80
+ this.#ensurePaneState();
81
+ const borderInset = this.#border ? 2 : 0;
82
+ const innerAvailable = available.shrink(borderInset, borderInset);
83
+ const browsers = this.browserViews;
84
+ let usedWidth = 0;
85
+ for (let i = 0; i < browsers.length; i++) {
86
+ const ns = browsers[i].naturalSize(innerAvailable);
87
+ // Initialize widths from natural size on first layout
88
+ if (this.#browserPanes[i].width === 20) {
89
+ this.#browserPanes[i].width = Math.max(MIN_PANE_WIDTH, Math.min(ns.width, Math.floor(innerAvailable.width / 3)));
90
+ }
91
+ usedWidth +=
92
+ (this.#browserPanes[i].collapsed ? 0 : this.#browserPanes[i].width) +
93
+ SEPARATOR_WIDTH;
94
+ }
95
+ const detailNs = this.detailView?.naturalSize(innerAvailable.shrink(usedWidth, 0));
96
+ const detailWidth = detailNs?.width ?? 0;
97
+ const totalWidth = usedWidth + detailWidth + borderInset;
98
+ return new Size(Math.min(available.width, Math.max(totalWidth, MIN_PANE_WIDTH)), available.height);
99
+ }
100
+ /**
101
+ * Hit-test: given an absolute x position in viewport coordinates,
102
+ * find which separator index (if any) was hit.
103
+ */
104
+ #hitTestSeparator(x) {
105
+ for (let i = 0; i < this.#separatorPositions.length; i++) {
106
+ if (x === this.#separatorPositions[i]) {
107
+ return i;
108
+ }
109
+ }
110
+ return -1;
111
+ }
112
+ /**
113
+ * Whether a given browser pane is in the "will collapse" zone during a drag.
114
+ */
115
+ #isInCollapseZone(index) {
116
+ if (!this.#collapsible)
117
+ return false;
118
+ const pane = this.#browserPanes[index];
119
+ return !pane.collapsed && pane.width <= COLLAPSE_THRESHOLD;
120
+ }
121
+ /**
122
+ * Whether a given mouse event is part of an ongoing button-drag gesture.
123
+ * This includes dragInside, dragOutside, exit (leaving the region while
124
+ * dragging), and the initial down event itself.
125
+ */
126
+ #isDragGesture(event) {
127
+ if (!event.name.startsWith('mouse.button.'))
128
+ return false;
129
+ // up and cancel end the gesture
130
+ if (event.name.endsWith('.up') || event.name.endsWith('.cancel'))
131
+ return false;
132
+ return true;
133
+ }
134
+ receiveMouse(event, system) {
135
+ super.receiveMouse(event, system);
136
+ const x = event.position.x;
137
+ // During a drag, always track the dragged separator
138
+ if (this.#dragSeparator >= 0) {
139
+ if (this.#isDragGesture(event)) {
140
+ const dx = x - this.#dragStartX;
141
+ const maxWidth = Math.floor(this.#lastAvailableWidth / 2);
142
+ const pane = this.#browserPanes[this.#dragSeparator];
143
+ if (!pane.collapsed) {
144
+ const minDrag = this.#collapsible
145
+ ? MIN_PANE_WIDTH_DRAG
146
+ : MIN_PANE_WIDTH_NOT_COLLAPSIBLE;
147
+ pane.width = Math.max(minDrag, Math.min(maxWidth, this.#dragStartWidth + dx));
148
+ }
149
+ return;
150
+ }
151
+ if (isMousePressEnd(event)) {
152
+ const pane = this.#browserPanes[this.#dragSeparator];
153
+ const dx = Math.abs(x - this.#dragStartX);
154
+ if (this.#collapsible &&
155
+ !pane.collapsed &&
156
+ this.#isInCollapseZone(this.#dragSeparator)) {
157
+ // Released in collapse zone — collapse and restore width
158
+ pane.collapsed = true;
159
+ pane.width = this.#dragStartWidth;
160
+ }
161
+ else if (dx <= 1) {
162
+ // Click without drag — toggle collapse (only if collapsible)
163
+ if (this.#collapsible) {
164
+ pane.collapsed = !pane.collapsed;
165
+ }
166
+ }
167
+ this.#dragSeparator = -1;
168
+ return;
169
+ }
170
+ }
171
+ const separatorIndex = this.#hitTestSeparator(x);
172
+ // Handle hover
173
+ if (event.name === 'mouse.move.in' || event.name === 'mouse.move.enter') {
174
+ this.#hoverSeparator = separatorIndex;
175
+ }
176
+ else if (event.name === 'mouse.move.exit') {
177
+ this.#hoverSeparator = -1;
178
+ }
179
+ // Handle drag start on a separator
180
+ if (isMousePressStart(event) && separatorIndex >= 0) {
181
+ this.#dragSeparator = separatorIndex;
182
+ this.#dragStartX = x;
183
+ this.#dragStartWidth = this.#browserPanes[separatorIndex].width;
184
+ }
185
+ }
186
+ render(viewport) {
187
+ if (viewport.isEmpty) {
188
+ return super.render(viewport);
189
+ }
190
+ this.#ensurePaneState();
191
+ this.#borderInset = this.#border ? 1 : 0;
192
+ const innerSize = viewport.contentSize.shrink(this.#borderInset * 2, this.#borderInset * 2);
193
+ this.#lastAvailableWidth = innerSize.width;
194
+ // Draw border if enabled
195
+ if (this.#border) {
196
+ this.#renderBorder(viewport);
197
+ }
198
+ // Panes get the full width minus left/right border, but full height
199
+ // so that #renderSeparator can draw border junctions on the top/bottom rows.
200
+ const panesRect = this.#border
201
+ ? new Rect(new Point(this.#borderInset, 0), viewport.contentSize.shrink(this.#borderInset * 2, 0))
202
+ : viewport.contentRect;
203
+ viewport.clipped(panesRect, inner => {
204
+ this.#renderPanes(inner);
205
+ });
206
+ }
207
+ #renderPanes(viewport) {
208
+ const browsers = this.browserViews;
209
+ const detail = this.detailView;
210
+ const fullHeight = viewport.contentSize.height;
211
+ // Child content is inset from top/bottom border rows
212
+ const contentTop = this.#borderInset;
213
+ const contentHeight = fullHeight - this.#borderInset * 2;
214
+ let x = 0;
215
+ this.#separatorPositions = [];
216
+ for (let i = 0; i < browsers.length; i++) {
217
+ const pane = this.#browserPanes[i];
218
+ // Render browser pane content (if not collapsed)
219
+ if (!pane.collapsed) {
220
+ const paneWidth = pane.width;
221
+ const paneRect = new Rect(new Point(x, contentTop), new Size(paneWidth, contentHeight));
222
+ viewport.clipped(paneRect, inner => {
223
+ browsers[i].render(inner);
224
+ });
225
+ x += paneWidth;
226
+ }
227
+ // Render separator (full height, including border rows)
228
+ this.#separatorPositions.push(x);
229
+ this.#renderSeparator(viewport, i, x, fullHeight, pane.collapsed);
230
+ x += SEPARATOR_WIDTH;
231
+ }
232
+ // Render detail pane (fills remaining space)
233
+ if (detail) {
234
+ const detailWidth = Math.max(0, viewport.contentSize.width - x);
235
+ if (detailWidth > 0) {
236
+ const detailRect = new Rect(new Point(x, contentTop), new Size(detailWidth, contentHeight));
237
+ viewport.clipped(detailRect, inner => {
238
+ detail.render(inner);
239
+ });
240
+ }
241
+ }
242
+ }
243
+ #renderSeparator(viewport, index, x, fullHeight, collapsed) {
244
+ const isHover = this.#hoverSeparator === index;
245
+ const isDragging = this.#dragSeparator === index;
246
+ const willCollapse = isDragging && this.#isInCollapseZone(index);
247
+ const style = isHover || isDragging ? this.theme.ui({ isHover: true }) : Style.NONE;
248
+ const separatorRect = new Rect(new Point(x, 0), new Size(SEPARATOR_WIDTH, fullHeight));
249
+ viewport.registerMouse(['mouse.move', 'mouse.button.left'], separatorRect);
250
+ const topRow = this.#border ? 0 : -1;
251
+ const bottomRow = this.#border ? fullHeight - 1 : -1;
252
+ const point = new Point(x, 0).mutableCopy();
253
+ viewport.usingPen(style, () => {
254
+ for (point.y = 0; point.y < fullHeight; point.y++) {
255
+ let char;
256
+ if (point.y === topRow) {
257
+ char = collapsed ? BORDER_TOP_COLLAPSED : BORDER_TOP_SEP;
258
+ }
259
+ else if (point.y === bottomRow) {
260
+ char = collapsed ? BORDER_BOTTOM_COLLAPSED : BORDER_BOTTOM_SEP;
261
+ }
262
+ else if (collapsed) {
263
+ char = SEP_COLLAPSED;
264
+ }
265
+ else if (willCollapse) {
266
+ char = point.y % 2 === 1 ? SEP_WILL_COLLAPSE : SEP_DEFAULT;
267
+ }
268
+ else {
269
+ char = SEP_DEFAULT;
270
+ }
271
+ viewport.write(char, point);
272
+ }
273
+ });
274
+ }
275
+ #renderBorder(viewport) {
276
+ const w = viewport.contentSize.width;
277
+ const h = viewport.contentSize.height;
278
+ const point = new Point(0, 0).mutableCopy();
279
+ // Top edge
280
+ point.y = 0;
281
+ for (point.x = 1; point.x < w - 1; point.x++) {
282
+ viewport.write(BORDER_HORIZONTAL, point);
283
+ }
284
+ // Bottom edge
285
+ point.y = h - 1;
286
+ for (point.x = 1; point.x < w - 1; point.x++) {
287
+ viewport.write(BORDER_HORIZONTAL, point);
288
+ }
289
+ // Left & right edges
290
+ for (point.y = 1; point.y < h - 1; point.y++) {
291
+ point.x = 0;
292
+ viewport.write(BORDER_VERTICAL, point);
293
+ point.x = w - 1;
294
+ viewport.write(BORDER_VERTICAL, point);
295
+ }
296
+ // Corners
297
+ viewport.write(BORDER_TOP_LEFT, new Point(0, 0));
298
+ viewport.write(BORDER_TOP_RIGHT, new Point(w - 1, 0));
299
+ viewport.write(BORDER_BOTTOM_LEFT, new Point(0, h - 1));
300
+ viewport.write(BORDER_BOTTOM_RIGHT, new Point(w - 1, h - 1));
301
+ }
302
+ }
303
+ ////
304
+ /// Drawing constants
305
+ //
306
+ // Separator characters
307
+ const SEP_DEFAULT = '┃';
308
+ const SEP_COLLAPSED = '║';
309
+ const SEP_WILL_COLLAPSE = '←';
310
+ // Border characters
311
+ const BORDER_HORIZONTAL = '─';
312
+ const BORDER_VERTICAL = '│';
313
+ const BORDER_TOP_LEFT = '╭';
314
+ const BORDER_TOP_RIGHT = '╮';
315
+ const BORDER_BOTTOM_LEFT = '╰';
316
+ const BORDER_BOTTOM_RIGHT = '╯';
317
+ const BORDER_TOP_SEP = '┰';
318
+ const BORDER_BOTTOM_SEP = '┸';
319
+ const BORDER_TOP_COLLAPSED = '╥';
320
+ const BORDER_BOTTOM_COLLAPSED = '╨';
321
+ //# sourceMappingURL=Pane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pane.js","sourceRoot":"","sources":["../../lib/components/Pane.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { Viewport } from '../Viewport.js';
2
+ import { type Props as ViewProps } from '../View.js';
3
+ import { Container } from '../Container.js';
4
+ import { Size } from '../geometry.js';
5
+ export type PinLocation = 'top-left' | 'top-center' | 'top-right' | 'left' | 'center' | 'right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
6
+ interface Props extends ViewProps {
7
+ location?: PinLocation;
8
+ children?: import('../View.js').View[];
9
+ child?: import('../View.js').View;
10
+ }
11
+ /**
12
+ * Positions its children at a specific location within the available space.
13
+ * Takes up all available space (like a flex container) and places children
14
+ * at the specified grid position.
15
+ */
16
+ export declare class Pin extends Container {
17
+ #private;
18
+ constructor(props?: Props);
19
+ get location(): PinLocation;
20
+ set location(value: PinLocation);
21
+ update(props: Props): void;
22
+ naturalSize(available: Size): Size;
23
+ render(viewport: Viewport): void;
24
+ }
25
+ export {};
@@ -0,0 +1,80 @@
1
+ import { Container } from '../Container.js';
2
+ import { Rect, Point } from '../geometry.js';
3
+ /**
4
+ * Positions its children at a specific location within the available space.
5
+ * Takes up all available space (like a flex container) and places children
6
+ * at the specified grid position.
7
+ */
8
+ export class Pin extends Container {
9
+ #location = 'top-left';
10
+ constructor(props = {}) {
11
+ super(props);
12
+ this.#update(props);
13
+ }
14
+ get location() {
15
+ return this.#location;
16
+ }
17
+ set location(value) {
18
+ if (value === this.#location)
19
+ return;
20
+ this.#location = value;
21
+ this.invalidateSize();
22
+ }
23
+ update(props) {
24
+ this.#update(props);
25
+ super.update(props);
26
+ }
27
+ #update({ location }) {
28
+ this.#location = location ?? 'top-left';
29
+ }
30
+ naturalSize(available) {
31
+ return available;
32
+ }
33
+ render(viewport) {
34
+ if (viewport.isEmpty) {
35
+ return super.render(viewport);
36
+ }
37
+ for (const child of this.children) {
38
+ if (!child.isVisible)
39
+ continue;
40
+ const childSize = child.naturalSize(viewport.contentSize);
41
+ const origin = this.#computeOrigin(viewport.contentSize, childSize);
42
+ viewport.clipped(new Rect(origin, childSize), inside => {
43
+ child.render(inside);
44
+ });
45
+ }
46
+ }
47
+ #computeOrigin(available, childSize) {
48
+ let x, y;
49
+ // horizontal
50
+ if (this.#location === 'top-left' ||
51
+ this.#location === 'left' ||
52
+ this.#location === 'bottom-left') {
53
+ x = 0;
54
+ }
55
+ else if (this.#location === 'top-center' ||
56
+ this.#location === 'center' ||
57
+ this.#location === 'bottom-center') {
58
+ x = Math.round((available.width - childSize.width) / 2);
59
+ }
60
+ else {
61
+ x = available.width - childSize.width;
62
+ }
63
+ // vertical
64
+ if (this.#location === 'top-left' ||
65
+ this.#location === 'top-center' ||
66
+ this.#location === 'top-right') {
67
+ y = 0;
68
+ }
69
+ else if (this.#location === 'left' ||
70
+ this.#location === 'center' ||
71
+ this.#location === 'right') {
72
+ y = Math.round((available.height - childSize.height) / 2);
73
+ }
74
+ else {
75
+ y = available.height - childSize.height;
76
+ }
77
+ return new Point(Math.max(0, x), Math.max(0, y));
78
+ }
79
+ }
80
+ //# sourceMappingURL=Pin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pin.js","sourceRoot":"","sources":["../../lib/components/Pin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { Viewport } from '../Viewport.js';
2
+ import type { Props as ViewProps } from '../View.js';
3
+ import { View } from '../View.js';
4
+ import { Size } from '../geometry.js';
5
+ import { Chart } from './charts/Chart.js';
6
+ interface Props extends ViewProps {
7
+ /** Title displayed above the chart */
8
+ title?: string;
9
+ /** Show x-axis tick labels (default true) */
10
+ xAxisLabels?: boolean;
11
+ /** Show y-axis tick labels (default true) */
12
+ yAxisLabels?: boolean;
13
+ /** Show border/axes lines (default true) */
14
+ showAxes?: boolean;
15
+ }
16
+ export declare class Plot extends View {
17
+ #private;
18
+ constructor(props?: Props);
19
+ update(props: Props): void;
20
+ add(chart: Chart): void;
21
+ remove(chart: Chart): void;
22
+ naturalSize(available: Size): Size;
23
+ render(viewport: Viewport): void;
24
+ }
25
+ export {};
@@ -0,0 +1,171 @@
1
+ import { View } from '../View.js';
2
+ import { Point, Rect, Size } from '../geometry.js';
3
+ import { Style } from '../Style.js';
4
+ export class Plot extends View {
5
+ #charts = [];
6
+ #title;
7
+ #xAxisLabels = true;
8
+ #yAxisLabels = true;
9
+ #showAxes = true;
10
+ constructor(props = {}) {
11
+ super(props);
12
+ this.#update(props);
13
+ }
14
+ update(props) {
15
+ this.#update(props);
16
+ super.update(props);
17
+ }
18
+ #update({ title, xAxisLabels, yAxisLabels, showAxes }) {
19
+ this.#title = title;
20
+ this.#xAxisLabels = xAxisLabels ?? true;
21
+ this.#yAxisLabels = yAxisLabels ?? true;
22
+ this.#showAxes = showAxes ?? true;
23
+ }
24
+ add(chart) {
25
+ this.#charts.push(chart);
26
+ this.invalidateRender();
27
+ }
28
+ remove(chart) {
29
+ const idx = this.#charts.indexOf(chart);
30
+ if (idx !== -1) {
31
+ this.#charts.splice(idx, 1);
32
+ this.invalidateRender();
33
+ }
34
+ }
35
+ naturalSize(available) {
36
+ return available;
37
+ }
38
+ render(viewport) {
39
+ if (viewport.isEmpty || this.#charts.length === 0)
40
+ return;
41
+ const textStyle = this.theme.text();
42
+ const totalW = viewport.contentSize.width;
43
+ const totalH = viewport.contentSize.height;
44
+ // Compute combined data ranges from all charts
45
+ const xRange = this.#combinedXRange();
46
+ const yRange = this.#combinedYRange();
47
+ // Layout regions
48
+ let titleHeight = 0;
49
+ if (this.#title) {
50
+ titleHeight = 1;
51
+ }
52
+ // Y-axis labels on the left
53
+ let yLabelWidth = 0;
54
+ let yLabels = [];
55
+ const chartHeight = totalH -
56
+ titleHeight -
57
+ (this.#xAxisLabels ? 1 : 0) -
58
+ (this.#showAxes ? 1 : 0);
59
+ if (this.#yAxisLabels && chartHeight > 0) {
60
+ // Get labels from first chart
61
+ const labelCount = Math.max(2, Math.min(chartHeight, 8));
62
+ yLabels = this.#charts[0].getYLabels(labelCount);
63
+ yLabelWidth = Math.max(0, ...yLabels.map(l => l.length)) + 1; // +1 for space
64
+ }
65
+ // Axis line takes 1 column if shown
66
+ const axisLineWidth = this.#showAxes ? 1 : 0;
67
+ const chartX = yLabelWidth + axisLineWidth;
68
+ const chartY = titleHeight;
69
+ const chartW = Math.max(0, totalW - chartX);
70
+ const chartH = Math.max(0, chartHeight);
71
+ if (chartW <= 0 || chartH <= 0)
72
+ return;
73
+ // Draw title
74
+ if (this.#title && titleHeight > 0) {
75
+ const titleX = chartX + Math.max(0, Math.floor((chartW - this.#title.length) / 2));
76
+ viewport.write(this.#title.slice(0, totalW), new Point(titleX, 0), new Style({ bold: true }).merge(textStyle));
77
+ }
78
+ // Draw y-axis labels
79
+ if (this.#yAxisLabels && yLabels.length > 0 && chartH > 0) {
80
+ for (let i = 0; i < yLabels.length; i++) {
81
+ const labelY = chartY +
82
+ Math.round((i * (chartH - 1)) / Math.max(1, yLabels.length - 1));
83
+ if (labelY < chartY + chartH) {
84
+ const label = yLabels[i].padStart(yLabelWidth - 1);
85
+ viewport.write(label, new Point(0, labelY), textStyle);
86
+ }
87
+ }
88
+ }
89
+ // Draw axes lines
90
+ if (this.#showAxes) {
91
+ const axisX = yLabelWidth;
92
+ const pt = new Point(0, 0).mutableCopy();
93
+ // Vertical axis line
94
+ for (let y = chartY; y < chartY + chartH; y++) {
95
+ pt.x = axisX;
96
+ pt.y = y;
97
+ viewport.write('│', pt, textStyle);
98
+ }
99
+ // Bottom-left corner
100
+ pt.x = axisX;
101
+ pt.y = chartY + chartH;
102
+ viewport.write('└', pt, textStyle);
103
+ // Horizontal axis line
104
+ for (let x = axisX + 1; x < totalW; x++) {
105
+ pt.x = x;
106
+ pt.y = chartY + chartH;
107
+ viewport.write('─', pt, textStyle);
108
+ }
109
+ }
110
+ // Draw x-axis labels
111
+ if (this.#xAxisLabels && this.#charts.length > 0) {
112
+ const xLabels = this.#charts[0].getXLabels();
113
+ if (xLabels.length > 0) {
114
+ const xAxisY = chartY + chartH + (this.#showAxes ? 1 : 0);
115
+ if (xAxisY < totalH) {
116
+ // Distribute labels evenly
117
+ const labelCount = Math.min(xLabels.length, Math.floor(chartW / 4));
118
+ for (let i = 0; i < labelCount; i++) {
119
+ const dataIdx = Math.round((i * (xLabels.length - 1)) / Math.max(1, labelCount - 1));
120
+ const label = xLabels[dataIdx];
121
+ const labelX = chartX +
122
+ Math.round((i * (chartW - 1)) / Math.max(1, labelCount - 1));
123
+ const truncated = label.slice(0, Math.min(label.length, chartW - (labelX - chartX)));
124
+ viewport.write(truncated, new Point(labelX, xAxisY), textStyle);
125
+ }
126
+ }
127
+ }
128
+ }
129
+ // Render charts in the chart area
130
+ const chartRect = new Rect(new Point(chartX, chartY), new Size(chartW, chartH));
131
+ for (const chart of this.#charts) {
132
+ viewport.clipped(chartRect, clippedViewport => {
133
+ chart.renderChart(clippedViewport, {
134
+ width: chartW,
135
+ height: chartH,
136
+ xRange,
137
+ yRange,
138
+ });
139
+ });
140
+ }
141
+ }
142
+ #combinedXRange() {
143
+ let min = Infinity;
144
+ let max = -Infinity;
145
+ for (const chart of this.#charts) {
146
+ const range = chart.getXRange();
147
+ if (range.min < min)
148
+ min = range.min;
149
+ if (range.max > max)
150
+ max = range.max;
151
+ }
152
+ if (!isFinite(min))
153
+ return { min: 0, max: 1 };
154
+ return { min, max };
155
+ }
156
+ #combinedYRange() {
157
+ let min = Infinity;
158
+ let max = -Infinity;
159
+ for (const chart of this.#charts) {
160
+ const range = chart.getYRange();
161
+ if (range.min < min)
162
+ min = range.min;
163
+ if (range.max > max)
164
+ max = range.max;
165
+ }
166
+ if (!isFinite(min))
167
+ return { min: 0, max: 1 };
168
+ return { min, max };
169
+ }
170
+ }
171
+ //# sourceMappingURL=Plot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Plot.js","sourceRoot":"","sources":["../../lib/components/Plot.ts"],"names":[],"mappings":"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"}