@opentui/core 0.1.20 → 0.1.22
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/3d.js +1 -1
- package/Renderable.d.ts +28 -5
- package/{index-23dkhv32.js → index-443j38eh.js} +160 -100
- package/{index-23dkhv32.js.map → index-443j38eh.js.map} +7 -6
- package/index.js +12 -11
- package/index.js.map +8 -8
- package/lib/objects-in-viewport.d.ts +10 -0
- package/package.json +7 -7
- package/renderables/Input.d.ts +1 -1
- package/renderables/ScrollBar.d.ts +1 -1
- package/renderables/ScrollBox.d.ts +1 -1
- package/renderables/Select.d.ts +1 -1
- package/renderables/TabSelect.d.ts +1 -1
- package/renderables/Text.d.ts +1 -0
- package/renderer.d.ts +4 -1
- package/testing/mock-keys.d.ts +67 -0
- package/testing/test-renderer.d.ts +6 -0
- package/types.d.ts +3 -0
package/3d.js
CHANGED
package/Renderable.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { TrackedNode } from "./lib/TrackedNode";
|
|
|
5
5
|
import type { ParsedKey } from "./lib/parse.keypress";
|
|
6
6
|
import { type AlignString, type FlexDirectionString, type JustifyString, type OverflowString, type PositionTypeString, type WrapString } from "./lib/yoga.options";
|
|
7
7
|
import type { MouseEvent } from "./renderer";
|
|
8
|
-
import type { RenderContext
|
|
8
|
+
import type { RenderContext } from "./types";
|
|
9
9
|
import { type VNode } from "./renderables/composition/vnode";
|
|
10
10
|
import type { Selection } from "./lib/selection";
|
|
11
11
|
declare const BrandedRenderable: unique symbol;
|
|
@@ -125,7 +125,7 @@ export declare abstract class Renderable extends BaseRenderable {
|
|
|
125
125
|
selectable: boolean;
|
|
126
126
|
protected buffered: boolean;
|
|
127
127
|
protected frameBuffer: OptimizedBuffer | null;
|
|
128
|
-
protected
|
|
128
|
+
protected _focusable: boolean;
|
|
129
129
|
protected _focused: boolean;
|
|
130
130
|
protected keyHandler: KeyHandler;
|
|
131
131
|
protected keypressHandler: ((key: ParsedKey) => void) | null;
|
|
@@ -145,11 +145,14 @@ export declare abstract class Renderable extends BaseRenderable {
|
|
|
145
145
|
parent: Renderable | null;
|
|
146
146
|
private childrenPrimarySortDirty;
|
|
147
147
|
private childrenSortedByPrimaryAxis;
|
|
148
|
+
private _newChildren;
|
|
148
149
|
renderBefore?: (this: Renderable, buffer: OptimizedBuffer, deltaTime: number) => void;
|
|
149
150
|
renderAfter?: (this: Renderable, buffer: OptimizedBuffer, deltaTime: number) => void;
|
|
150
151
|
constructor(ctx: RenderContext, options: RenderableOptions<any>);
|
|
152
|
+
get focusable(): boolean;
|
|
151
153
|
get ctx(): RenderContext;
|
|
152
154
|
get visible(): boolean;
|
|
155
|
+
get primaryAxis(): "row" | "column";
|
|
153
156
|
set visible(value: boolean);
|
|
154
157
|
hasSelection(): boolean;
|
|
155
158
|
onSelectionChanged(selection: Selection | null): boolean;
|
|
@@ -189,8 +192,7 @@ export declare abstract class Renderable extends BaseRenderable {
|
|
|
189
192
|
set zIndex(value: number);
|
|
190
193
|
private requestZIndexSort;
|
|
191
194
|
private ensureZIndexSorted;
|
|
192
|
-
|
|
193
|
-
protected getChildrenSortedByPrimaryAxis(): Renderable[];
|
|
195
|
+
getChildrenSortedByPrimaryAxis(): Renderable[];
|
|
194
196
|
private setupYogaProperties;
|
|
195
197
|
private setupMarginAndPadding;
|
|
196
198
|
set position(positionType: PositionTypeString);
|
|
@@ -234,6 +236,7 @@ export declare abstract class Renderable extends BaseRenderable {
|
|
|
234
236
|
protected onRemove(): void;
|
|
235
237
|
getChildren(): Renderable[];
|
|
236
238
|
getChildrenCount(): number;
|
|
239
|
+
updateLayout(deltaTime: number, renderList?: RenderCommand[]): void;
|
|
237
240
|
render(buffer: OptimizedBuffer, deltaTime: number): void;
|
|
238
241
|
protected _getChildren(): Renderable[];
|
|
239
242
|
protected onUpdate(deltaTime: number): void;
|
|
@@ -266,13 +269,33 @@ export declare abstract class Renderable extends BaseRenderable {
|
|
|
266
269
|
get onSizeChange(): (() => void) | undefined;
|
|
267
270
|
private applyEventOptions;
|
|
268
271
|
}
|
|
272
|
+
interface RenderCommandBase {
|
|
273
|
+
action: "render" | "pushScissorRect" | "popScissorRect";
|
|
274
|
+
}
|
|
275
|
+
interface RenderCommandPushScissorRect extends RenderCommandBase {
|
|
276
|
+
action: "pushScissorRect";
|
|
277
|
+
x: number;
|
|
278
|
+
y: number;
|
|
279
|
+
width: number;
|
|
280
|
+
height: number;
|
|
281
|
+
}
|
|
282
|
+
interface RenderCommandPopScissorRect extends RenderCommandBase {
|
|
283
|
+
action: "popScissorRect";
|
|
284
|
+
}
|
|
285
|
+
interface RenderCommandRender extends RenderCommandBase {
|
|
286
|
+
action: "render";
|
|
287
|
+
renderable: Renderable;
|
|
288
|
+
}
|
|
289
|
+
export type RenderCommand = RenderCommandPushScissorRect | RenderCommandPopScissorRect | RenderCommandRender;
|
|
269
290
|
export declare class RootRenderable extends Renderable {
|
|
270
291
|
private yogaConfig;
|
|
292
|
+
private renderList;
|
|
271
293
|
constructor(ctx: RenderContext);
|
|
294
|
+
render(buffer: OptimizedBuffer, deltaTime: number): void;
|
|
272
295
|
protected propagateLiveCount(delta: number): void;
|
|
273
296
|
calculateLayout(): void;
|
|
274
297
|
resize(width: number, height: number): void;
|
|
275
|
-
protected onUpdate(): void;
|
|
298
|
+
protected onUpdate(deltaTime: number): void;
|
|
276
299
|
protected destroySelf(): void;
|
|
277
300
|
}
|
|
278
301
|
export {};
|
|
@@ -5912,7 +5912,7 @@ class Renderable extends BaseRenderable {
|
|
|
5912
5912
|
selectable = false;
|
|
5913
5913
|
buffered;
|
|
5914
5914
|
frameBuffer = null;
|
|
5915
|
-
|
|
5915
|
+
_focusable = false;
|
|
5916
5916
|
_focused = false;
|
|
5917
5917
|
keyHandler = getKeyHandler();
|
|
5918
5918
|
keypressHandler = null;
|
|
@@ -5932,6 +5932,7 @@ class Renderable extends BaseRenderable {
|
|
|
5932
5932
|
parent = null;
|
|
5933
5933
|
childrenPrimarySortDirty = true;
|
|
5934
5934
|
childrenSortedByPrimaryAxis = [];
|
|
5935
|
+
_newChildren = [];
|
|
5935
5936
|
renderBefore;
|
|
5936
5937
|
renderAfter;
|
|
5937
5938
|
constructor(ctx, options) {
|
|
@@ -5962,12 +5963,19 @@ class Renderable extends BaseRenderable {
|
|
|
5962
5963
|
this.createFrameBuffer();
|
|
5963
5964
|
}
|
|
5964
5965
|
}
|
|
5966
|
+
get focusable() {
|
|
5967
|
+
return this._focusable;
|
|
5968
|
+
}
|
|
5965
5969
|
get ctx() {
|
|
5966
5970
|
return this._ctx;
|
|
5967
5971
|
}
|
|
5968
5972
|
get visible() {
|
|
5969
5973
|
return this._visible;
|
|
5970
5974
|
}
|
|
5975
|
+
get primaryAxis() {
|
|
5976
|
+
const dir = this.layoutNode.yogaNode.getFlexDirection();
|
|
5977
|
+
return dir === 2 || dir === 3 ? "row" : "column";
|
|
5978
|
+
}
|
|
5971
5979
|
set visible(value) {
|
|
5972
5980
|
if (this._visible === value)
|
|
5973
5981
|
return;
|
|
@@ -5999,8 +6007,9 @@ class Renderable extends BaseRenderable {
|
|
|
5999
6007
|
return false;
|
|
6000
6008
|
}
|
|
6001
6009
|
focus() {
|
|
6002
|
-
if (this._focused || !this.
|
|
6010
|
+
if (this._focused || !this._focusable)
|
|
6003
6011
|
return;
|
|
6012
|
+
this._ctx.focusRenderable(this);
|
|
6004
6013
|
this._focused = true;
|
|
6005
6014
|
this.requestRender();
|
|
6006
6015
|
this.keypressHandler = (key) => {
|
|
@@ -6013,7 +6022,7 @@ class Renderable extends BaseRenderable {
|
|
|
6013
6022
|
this.emit("focused" /* FOCUSED */);
|
|
6014
6023
|
}
|
|
6015
6024
|
blur() {
|
|
6016
|
-
if (!this._focused || !this.
|
|
6025
|
+
if (!this._focused || !this._focusable)
|
|
6017
6026
|
return;
|
|
6018
6027
|
this._focused = false;
|
|
6019
6028
|
this.requestRender();
|
|
@@ -6169,80 +6178,6 @@ class Renderable extends BaseRenderable {
|
|
|
6169
6178
|
this.needsZIndexSort = false;
|
|
6170
6179
|
}
|
|
6171
6180
|
}
|
|
6172
|
-
getChildrenInViewport(viewport, padding = 10, minTriggerSize = 16) {
|
|
6173
|
-
if (this.renderableArray.length < minTriggerSize)
|
|
6174
|
-
return this.renderableArray;
|
|
6175
|
-
const viewportTop = viewport.y - padding;
|
|
6176
|
-
const viewportBottom = viewport.y + viewport.height + padding;
|
|
6177
|
-
const viewportLeft = viewport.x - padding;
|
|
6178
|
-
const viewportRight = viewport.x + viewport.width + padding;
|
|
6179
|
-
const dir = this.layoutNode.yogaNode.getFlexDirection();
|
|
6180
|
-
const isRow = dir === 2 || dir === 3;
|
|
6181
|
-
const children = this.getChildrenSortedByPrimaryAxis();
|
|
6182
|
-
const totalChildren = children.length;
|
|
6183
|
-
if (totalChildren === 0)
|
|
6184
|
-
return [];
|
|
6185
|
-
const vpStart = isRow ? viewportLeft : viewportTop;
|
|
6186
|
-
const vpEnd = isRow ? viewportRight : viewportBottom;
|
|
6187
|
-
let lo = 0;
|
|
6188
|
-
let hi = totalChildren - 1;
|
|
6189
|
-
let candidate = -1;
|
|
6190
|
-
while (lo <= hi) {
|
|
6191
|
-
const mid = lo + hi >> 1;
|
|
6192
|
-
const c = children[mid];
|
|
6193
|
-
const start = isRow ? c.x : c.y;
|
|
6194
|
-
const end = isRow ? c.x + c.width : c.y + c.height;
|
|
6195
|
-
if (end < vpStart) {
|
|
6196
|
-
lo = mid + 1;
|
|
6197
|
-
} else if (start > vpEnd) {
|
|
6198
|
-
hi = mid - 1;
|
|
6199
|
-
} else {
|
|
6200
|
-
candidate = mid;
|
|
6201
|
-
break;
|
|
6202
|
-
}
|
|
6203
|
-
}
|
|
6204
|
-
const visibleChildren = [];
|
|
6205
|
-
if (candidate === -1) {
|
|
6206
|
-
return visibleChildren;
|
|
6207
|
-
}
|
|
6208
|
-
let left = candidate;
|
|
6209
|
-
while (left - 1 >= 0) {
|
|
6210
|
-
const prev = children[left - 1];
|
|
6211
|
-
if ((isRow ? prev.x + prev.width : prev.y + prev.height) < vpStart)
|
|
6212
|
-
break;
|
|
6213
|
-
left--;
|
|
6214
|
-
}
|
|
6215
|
-
let right = candidate + 1;
|
|
6216
|
-
while (right < totalChildren) {
|
|
6217
|
-
const next = children[right];
|
|
6218
|
-
if ((isRow ? next.x : next.y) > vpEnd)
|
|
6219
|
-
break;
|
|
6220
|
-
right++;
|
|
6221
|
-
}
|
|
6222
|
-
for (let i = left;i < right; i++) {
|
|
6223
|
-
const child = children[i];
|
|
6224
|
-
if (isRow) {
|
|
6225
|
-
const childBottom = child.y + child.height;
|
|
6226
|
-
if (childBottom < viewportTop)
|
|
6227
|
-
continue;
|
|
6228
|
-
const childTop = child.y;
|
|
6229
|
-
if (childTop > viewportBottom)
|
|
6230
|
-
continue;
|
|
6231
|
-
} else {
|
|
6232
|
-
const childRight = child.x + child.width;
|
|
6233
|
-
if (childRight < viewportLeft)
|
|
6234
|
-
continue;
|
|
6235
|
-
const childLeft = child.x;
|
|
6236
|
-
if (childLeft > viewportRight)
|
|
6237
|
-
continue;
|
|
6238
|
-
}
|
|
6239
|
-
visibleChildren.push(child);
|
|
6240
|
-
}
|
|
6241
|
-
if (visibleChildren.length > 1) {
|
|
6242
|
-
visibleChildren.sort((a, b) => a.zIndex > b.zIndex ? 1 : a.zIndex < b.zIndex ? -1 : 0);
|
|
6243
|
-
}
|
|
6244
|
-
return visibleChildren;
|
|
6245
|
-
}
|
|
6246
6181
|
getChildrenSortedByPrimaryAxis() {
|
|
6247
6182
|
if (!this.childrenPrimarySortDirty && this.childrenSortedByPrimaryAxis.length === this.renderableArray.length) {
|
|
6248
6183
|
return this.childrenSortedByPrimaryAxis;
|
|
@@ -6645,6 +6580,7 @@ class Renderable extends BaseRenderable {
|
|
|
6645
6580
|
this.needsZIndexSort = true;
|
|
6646
6581
|
this.childrenPrimarySortDirty = true;
|
|
6647
6582
|
this.renderableMap.set(renderable.id, renderable);
|
|
6583
|
+
this._newChildren.push(renderable);
|
|
6648
6584
|
if (renderable._liveCount > 0) {
|
|
6649
6585
|
this.propagateLiveCount(renderable._liveCount);
|
|
6650
6586
|
}
|
|
@@ -6708,11 +6644,38 @@ class Renderable extends BaseRenderable {
|
|
|
6708
6644
|
getChildrenCount() {
|
|
6709
6645
|
return this.renderableArray.length;
|
|
6710
6646
|
}
|
|
6711
|
-
|
|
6647
|
+
updateLayout(deltaTime, renderList = []) {
|
|
6712
6648
|
if (!this.visible)
|
|
6713
6649
|
return;
|
|
6714
|
-
this.onUpdate(deltaTime);
|
|
6715
6650
|
this.updateFromLayout();
|
|
6651
|
+
this.onUpdate(deltaTime);
|
|
6652
|
+
renderList.push({ action: "render", renderable: this });
|
|
6653
|
+
if (this._newChildren.length > 0) {
|
|
6654
|
+
for (const child of this._newChildren) {
|
|
6655
|
+
child.updateFromLayout();
|
|
6656
|
+
}
|
|
6657
|
+
this._newChildren = [];
|
|
6658
|
+
}
|
|
6659
|
+
this.ensureZIndexSorted();
|
|
6660
|
+
const shouldPushScissor = this._overflow !== "visible" && this.width > 0 && this.height > 0;
|
|
6661
|
+
if (shouldPushScissor) {
|
|
6662
|
+
const scissorRect = this.getScissorRect();
|
|
6663
|
+
renderList.push({
|
|
6664
|
+
action: "pushScissorRect",
|
|
6665
|
+
x: scissorRect.x,
|
|
6666
|
+
y: scissorRect.y,
|
|
6667
|
+
width: scissorRect.width,
|
|
6668
|
+
height: scissorRect.height
|
|
6669
|
+
});
|
|
6670
|
+
}
|
|
6671
|
+
for (const child of this._getChildren()) {
|
|
6672
|
+
child.updateLayout(deltaTime, renderList);
|
|
6673
|
+
}
|
|
6674
|
+
if (shouldPushScissor) {
|
|
6675
|
+
renderList.push({ action: "popScissorRect" });
|
|
6676
|
+
}
|
|
6677
|
+
}
|
|
6678
|
+
render(buffer, deltaTime) {
|
|
6716
6679
|
let renderBuffer = buffer;
|
|
6717
6680
|
if (this.buffered && this.frameBuffer) {
|
|
6718
6681
|
renderBuffer = this.frameBuffer;
|
|
@@ -6726,18 +6689,6 @@ class Renderable extends BaseRenderable {
|
|
|
6726
6689
|
}
|
|
6727
6690
|
this.markClean();
|
|
6728
6691
|
this._ctx.addToHitGrid(this.x, this.y, this.width, this.height, this.num);
|
|
6729
|
-
this.ensureZIndexSorted();
|
|
6730
|
-
const shouldPushScissor = this._overflow !== "visible" && this.width > 0 && this.height > 0;
|
|
6731
|
-
if (shouldPushScissor) {
|
|
6732
|
-
const scissorRect = this.getScissorRect();
|
|
6733
|
-
renderBuffer.pushScissorRect(scissorRect.x, scissorRect.y, scissorRect.width, scissorRect.height);
|
|
6734
|
-
}
|
|
6735
|
-
for (const child of this._getChildren()) {
|
|
6736
|
-
child.render(renderBuffer, deltaTime);
|
|
6737
|
-
}
|
|
6738
|
-
if (shouldPushScissor) {
|
|
6739
|
-
renderBuffer.popScissorRect();
|
|
6740
|
-
}
|
|
6741
6692
|
if (this.buffered && this.frameBuffer) {
|
|
6742
6693
|
buffer.drawFrameBuffer(this.x, this.y, this.frameBuffer);
|
|
6743
6694
|
}
|
|
@@ -6890,6 +6841,7 @@ class Renderable extends BaseRenderable {
|
|
|
6890
6841
|
|
|
6891
6842
|
class RootRenderable extends Renderable {
|
|
6892
6843
|
yogaConfig;
|
|
6844
|
+
renderList = [];
|
|
6893
6845
|
constructor(ctx) {
|
|
6894
6846
|
super(ctx, { id: "__root__", zIndex: 0, visible: true, width: ctx.width, height: ctx.height, enableLayout: true });
|
|
6895
6847
|
this.yogaConfig = src_default.Config.create();
|
|
@@ -6904,6 +6856,29 @@ class RootRenderable extends Renderable {
|
|
|
6904
6856
|
this.layoutNode.yogaNode.setFlexDirection(FlexDirection.Column);
|
|
6905
6857
|
this.calculateLayout();
|
|
6906
6858
|
}
|
|
6859
|
+
render(buffer, deltaTime) {
|
|
6860
|
+
if (!this.visible)
|
|
6861
|
+
return;
|
|
6862
|
+
if (this.layoutNode.yogaNode.isDirty()) {
|
|
6863
|
+
this.calculateLayout();
|
|
6864
|
+
}
|
|
6865
|
+
this.renderList.length = 0;
|
|
6866
|
+
this.updateLayout(deltaTime, this.renderList);
|
|
6867
|
+
for (let i = 1;i < this.renderList.length; i++) {
|
|
6868
|
+
const command = this.renderList[i];
|
|
6869
|
+
switch (command.action) {
|
|
6870
|
+
case "render":
|
|
6871
|
+
command.renderable.render(buffer, deltaTime);
|
|
6872
|
+
break;
|
|
6873
|
+
case "pushScissorRect":
|
|
6874
|
+
buffer.pushScissorRect(command.x, command.y, command.width, command.height);
|
|
6875
|
+
break;
|
|
6876
|
+
case "popScissorRect":
|
|
6877
|
+
buffer.popScissorRect();
|
|
6878
|
+
break;
|
|
6879
|
+
}
|
|
6880
|
+
}
|
|
6881
|
+
}
|
|
6907
6882
|
propagateLiveCount(delta) {
|
|
6908
6883
|
const oldCount = this._liveCount;
|
|
6909
6884
|
this._liveCount += delta;
|
|
@@ -6922,11 +6897,7 @@ class RootRenderable extends Renderable {
|
|
|
6922
6897
|
this.height = height;
|
|
6923
6898
|
this.emit("resized" /* RESIZED */, { width, height });
|
|
6924
6899
|
}
|
|
6925
|
-
onUpdate() {
|
|
6926
|
-
if (this.layoutNode.yogaNode.isDirty()) {
|
|
6927
|
-
this.calculateLayout();
|
|
6928
|
-
}
|
|
6929
|
-
}
|
|
6900
|
+
onUpdate(deltaTime) {}
|
|
6930
6901
|
destroySelf() {
|
|
6931
6902
|
if (this.layoutNode) {
|
|
6932
6903
|
this.layoutNode.destroy();
|
|
@@ -7791,6 +7762,83 @@ var ANSI = {
|
|
|
7791
7762
|
|
|
7792
7763
|
// src/renderer.ts
|
|
7793
7764
|
import { EventEmitter as EventEmitter6 } from "events";
|
|
7765
|
+
|
|
7766
|
+
// src/lib/objects-in-viewport.ts
|
|
7767
|
+
function getObjectsInViewport(viewport, objects, direction = "column", padding = 10, minTriggerSize = 16) {
|
|
7768
|
+
if (objects.length < minTriggerSize)
|
|
7769
|
+
return objects;
|
|
7770
|
+
const viewportTop = viewport.y - padding;
|
|
7771
|
+
const viewportBottom = viewport.y + viewport.height + padding;
|
|
7772
|
+
const viewportLeft = viewport.x - padding;
|
|
7773
|
+
const viewportRight = viewport.x + viewport.width + padding;
|
|
7774
|
+
const isRow = direction === "row";
|
|
7775
|
+
const children = objects;
|
|
7776
|
+
const totalChildren = children.length;
|
|
7777
|
+
if (totalChildren === 0)
|
|
7778
|
+
return [];
|
|
7779
|
+
const vpStart = isRow ? viewportLeft : viewportTop;
|
|
7780
|
+
const vpEnd = isRow ? viewportRight : viewportBottom;
|
|
7781
|
+
let lo = 0;
|
|
7782
|
+
let hi = totalChildren - 1;
|
|
7783
|
+
let candidate = -1;
|
|
7784
|
+
while (lo <= hi) {
|
|
7785
|
+
const mid = lo + hi >> 1;
|
|
7786
|
+
const c = children[mid];
|
|
7787
|
+
const start = isRow ? c.x : c.y;
|
|
7788
|
+
const end = isRow ? c.x + c.width : c.y + c.height;
|
|
7789
|
+
if (end < vpStart) {
|
|
7790
|
+
lo = mid + 1;
|
|
7791
|
+
} else if (start > vpEnd) {
|
|
7792
|
+
hi = mid - 1;
|
|
7793
|
+
} else {
|
|
7794
|
+
candidate = mid;
|
|
7795
|
+
break;
|
|
7796
|
+
}
|
|
7797
|
+
}
|
|
7798
|
+
const visibleChildren = [];
|
|
7799
|
+
if (candidate === -1) {
|
|
7800
|
+
return visibleChildren;
|
|
7801
|
+
}
|
|
7802
|
+
let left = candidate;
|
|
7803
|
+
while (left - 1 >= 0) {
|
|
7804
|
+
const prev = children[left - 1];
|
|
7805
|
+
if ((isRow ? prev.x + prev.width : prev.y + prev.height) < vpStart)
|
|
7806
|
+
break;
|
|
7807
|
+
left--;
|
|
7808
|
+
}
|
|
7809
|
+
let right = candidate + 1;
|
|
7810
|
+
while (right < totalChildren) {
|
|
7811
|
+
const next = children[right];
|
|
7812
|
+
if ((isRow ? next.x : next.y) > vpEnd)
|
|
7813
|
+
break;
|
|
7814
|
+
right++;
|
|
7815
|
+
}
|
|
7816
|
+
for (let i = left;i < right; i++) {
|
|
7817
|
+
const child = children[i];
|
|
7818
|
+
if (isRow) {
|
|
7819
|
+
const childBottom = child.y + child.height;
|
|
7820
|
+
if (childBottom < viewportTop)
|
|
7821
|
+
continue;
|
|
7822
|
+
const childTop = child.y;
|
|
7823
|
+
if (childTop > viewportBottom)
|
|
7824
|
+
continue;
|
|
7825
|
+
} else {
|
|
7826
|
+
const childRight = child.x + child.width;
|
|
7827
|
+
if (childRight < viewportLeft)
|
|
7828
|
+
continue;
|
|
7829
|
+
const childLeft = child.x;
|
|
7830
|
+
if (childLeft > viewportRight)
|
|
7831
|
+
continue;
|
|
7832
|
+
}
|
|
7833
|
+
visibleChildren.push(child);
|
|
7834
|
+
}
|
|
7835
|
+
if (visibleChildren.length > 1) {
|
|
7836
|
+
visibleChildren.sort((a, b) => a.zIndex > b.zIndex ? 1 : a.zIndex < b.zIndex ? -1 : 0);
|
|
7837
|
+
}
|
|
7838
|
+
return visibleChildren;
|
|
7839
|
+
}
|
|
7840
|
+
|
|
7841
|
+
// src/renderer.ts
|
|
7794
7842
|
class MouseEvent {
|
|
7795
7843
|
type;
|
|
7796
7844
|
button;
|
|
@@ -7952,6 +8000,7 @@ class CliRenderer extends EventEmitter6 {
|
|
|
7952
8000
|
sigwinchHandler = null;
|
|
7953
8001
|
_capabilities = null;
|
|
7954
8002
|
_latestPointer = { x: 0, y: 0 };
|
|
8003
|
+
_currentFocusedRenderable = null;
|
|
7955
8004
|
constructor(lib, rendererPtr, stdin, stdout, width, height, config = {}) {
|
|
7956
8005
|
super();
|
|
7957
8006
|
this.stdin = stdin;
|
|
@@ -8063,6 +8112,17 @@ Error details:
|
|
|
8063
8112
|
};
|
|
8064
8113
|
}
|
|
8065
8114
|
}
|
|
8115
|
+
get currentFocusedRenderable() {
|
|
8116
|
+
return this._currentFocusedRenderable;
|
|
8117
|
+
}
|
|
8118
|
+
focusRenderable(renderable) {
|
|
8119
|
+
if (this._currentFocusedRenderable === renderable)
|
|
8120
|
+
return;
|
|
8121
|
+
if (this._currentFocusedRenderable) {
|
|
8122
|
+
this._currentFocusedRenderable.blur();
|
|
8123
|
+
}
|
|
8124
|
+
this._currentFocusedRenderable = renderable;
|
|
8125
|
+
}
|
|
8066
8126
|
addToHitGrid(x, y, width, height, id) {
|
|
8067
8127
|
if (id !== this.capturedRenderable?.num) {
|
|
8068
8128
|
this.lib.addToHitGrid(this.rendererPtr, x, y, width, height, id);
|
|
@@ -8827,7 +8887,7 @@ Error details:
|
|
|
8827
8887
|
}
|
|
8828
8888
|
}
|
|
8829
8889
|
walkSelectableRenderables(container, selectionBounds, selectedRenderables, touchedRenderables) {
|
|
8830
|
-
const children = container.
|
|
8890
|
+
const children = getObjectsInViewport(selectionBounds, container.getChildrenSortedByPrimaryAxis(), container.primaryAxis, 0);
|
|
8831
8891
|
for (const child of children) {
|
|
8832
8892
|
if (child.selectable) {
|
|
8833
8893
|
const hasSelection = child.onSelectionChanged(this.currentSelection);
|
|
@@ -8843,7 +8903,7 @@ Error details:
|
|
|
8843
8903
|
}
|
|
8844
8904
|
}
|
|
8845
8905
|
|
|
8846
|
-
export { __toESM, __commonJS, __export, __require, Edge, Gutter, MeasureMode, BorderChars, getBorderFromSides, getBorderSides, borderCharsToArray, BorderCharArrays, TrackedNode, createTrackedNode, nonAlphanumericKeys, parseKeypress, KeyHandler, getKeyHandler, RGBA, hexToRgb, rgbToHex, hsvToRgb, parseColor, fonts, measureText, getCharacterPositions, coordinateToCharacterIndex, renderFontToFrameBuffer, TextAttributes, DebugOverlayCorner, createTextAttributes, isStyledText, StyledText, stringToStyledText, black, red, green, yellow, blue, magenta, cyan, white, brightBlack, brightRed, brightGreen, brightYellow, brightBlue, brightMagenta, brightCyan, brightWhite, bgBlack, bgRed, bgGreen, bgYellow, bgBlue, bgMagenta, bgCyan, bgWhite, bold, italic, underline, strikethrough, dim, reverse, blink, fg, bg, t, SyntaxStyle, hastToStyledText, parseAlign, parseBoxSizing, parseDimension, parseDirection, parseDisplay, parseEdge, parseFlexDirection, parseGutter, parseJustify, parseLogLevel, parseMeasureMode, parseOverflow, parsePositionType, parseUnit, parseWrap, MouseParser, Selection, convertGlobalToLocalSelection, ASCIIFontSelectionHelper, TextBuffer, LogLevel2 as LogLevel, setRenderLibPath, resolveRenderLib, OptimizedBuffer, h, isVNode, maybeMakeRenderable, wrapWithDelegates, instantiate, delegate, LayoutEvents, RenderableEvents, isValidPercentage, isMarginType, isPaddingType, isPositionType, isPositionTypeType, isOverflowType, isDimensionType, isFlexBasisType, isSizeType, isRenderable, BaseRenderable, Renderable, RootRenderable, capture, ConsolePosition, TerminalConsole, MouseEvent, MouseButton, createCliRenderer, CliRenderEvents, CliRenderer };
|
|
8906
|
+
export { __toESM, __commonJS, __export, __require, Edge, Gutter, MeasureMode, BorderChars, getBorderFromSides, getBorderSides, borderCharsToArray, BorderCharArrays, TrackedNode, createTrackedNode, nonAlphanumericKeys, parseKeypress, KeyHandler, getKeyHandler, RGBA, hexToRgb, rgbToHex, hsvToRgb, parseColor, fonts, measureText, getCharacterPositions, coordinateToCharacterIndex, renderFontToFrameBuffer, TextAttributes, DebugOverlayCorner, createTextAttributes, isStyledText, StyledText, stringToStyledText, black, red, green, yellow, blue, magenta, cyan, white, brightBlack, brightRed, brightGreen, brightYellow, brightBlue, brightMagenta, brightCyan, brightWhite, bgBlack, bgRed, bgGreen, bgYellow, bgBlue, bgMagenta, bgCyan, bgWhite, bold, italic, underline, strikethrough, dim, reverse, blink, fg, bg, t, SyntaxStyle, hastToStyledText, parseAlign, parseBoxSizing, parseDimension, parseDirection, parseDisplay, parseEdge, parseFlexDirection, parseGutter, parseJustify, parseLogLevel, parseMeasureMode, parseOverflow, parsePositionType, parseUnit, parseWrap, MouseParser, Selection, convertGlobalToLocalSelection, ASCIIFontSelectionHelper, TextBuffer, LogLevel2 as LogLevel, setRenderLibPath, resolveRenderLib, OptimizedBuffer, h, isVNode, maybeMakeRenderable, wrapWithDelegates, instantiate, delegate, LayoutEvents, RenderableEvents, isValidPercentage, isMarginType, isPaddingType, isPositionType, isPositionTypeType, isOverflowType, isDimensionType, isFlexBasisType, isSizeType, isRenderable, BaseRenderable, Renderable, RootRenderable, capture, ConsolePosition, TerminalConsole, getObjectsInViewport, MouseEvent, MouseButton, createCliRenderer, CliRenderEvents, CliRenderer };
|
|
8847
8907
|
|
|
8848
|
-
//# debugId=
|
|
8849
|
-
//# sourceMappingURL=index-
|
|
8908
|
+
//# debugId=688CA104E8866AAF64756E2164756E21
|
|
8909
|
+
//# sourceMappingURL=index-443j38eh.js.map
|