@cascadetui/core 0.1.8 → 0.1.10
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/{index-r7vqrd61.js → index-2pvbxs43.js} +146 -39
- package/{index-r7vqrd61.js.map → index-2pvbxs43.js.map} +3 -3
- package/index.js +19 -2
- package/index.js.map +3 -3
- package/lib/object-pool.d.ts +55 -0
- package/package.json +7 -7
- package/renderables/TextBufferRenderable.d.ts +4 -0
- package/renderer.d.ts +27 -0
- package/testing.js +1 -1
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export declare class ObjectPool<T> {
|
|
2
|
+
private pool;
|
|
3
|
+
private createFn;
|
|
4
|
+
private resetFn;
|
|
5
|
+
private maxSize;
|
|
6
|
+
constructor(createFn: () => T, resetFn: (obj: T) => void, maxSize?: number);
|
|
7
|
+
acquire(): T;
|
|
8
|
+
release(obj: T): void;
|
|
9
|
+
clear(): void;
|
|
10
|
+
get size(): number;
|
|
11
|
+
}
|
|
12
|
+
export interface PooledMouseEvent {
|
|
13
|
+
type: string;
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
button: number;
|
|
17
|
+
modifiers: {
|
|
18
|
+
ctrl: boolean;
|
|
19
|
+
alt: boolean;
|
|
20
|
+
shift: boolean;
|
|
21
|
+
};
|
|
22
|
+
clickCount?: number;
|
|
23
|
+
isDragging?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare class MouseEventPool {
|
|
26
|
+
private pool;
|
|
27
|
+
acquire(): PooledMouseEvent;
|
|
28
|
+
release(event: PooledMouseEvent): void;
|
|
29
|
+
clear(): void;
|
|
30
|
+
}
|
|
31
|
+
export declare class RenderObjectPool {
|
|
32
|
+
private pools;
|
|
33
|
+
constructor();
|
|
34
|
+
acquire<T>(type: string): T;
|
|
35
|
+
release<T>(type: string, obj: T): void;
|
|
36
|
+
clear(): void;
|
|
37
|
+
getStats(): Record<string, number>;
|
|
38
|
+
}
|
|
39
|
+
export declare const GlobalObjectPool: RenderObjectPool;
|
|
40
|
+
export declare const GlobalMouseEventPool: MouseEventPool;
|
|
41
|
+
export declare class PerformanceMonitor {
|
|
42
|
+
private metrics;
|
|
43
|
+
private startTimes;
|
|
44
|
+
start(name: string): void;
|
|
45
|
+
end(name: string): number;
|
|
46
|
+
getAverage(name: string): number;
|
|
47
|
+
getStats(name: string): {
|
|
48
|
+
average: number;
|
|
49
|
+
median: number;
|
|
50
|
+
p95: number;
|
|
51
|
+
count: number;
|
|
52
|
+
} | null;
|
|
53
|
+
clear(): void;
|
|
54
|
+
}
|
|
55
|
+
export declare const GlobalPerformanceMonitor: PerformanceMonitor;
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"types": "index.d.ts",
|
|
6
6
|
"type": "module",
|
|
7
|
-
"version": "0.1.
|
|
7
|
+
"version": "0.1.10",
|
|
8
8
|
"description": "Cascade is a TypeScript library on a native Zig core for building terminal user interfaces (TUIs)",
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"repository": {
|
|
@@ -57,11 +57,11 @@
|
|
|
57
57
|
"bun-webgpu": "0.1.5",
|
|
58
58
|
"planck": "^1.4.2",
|
|
59
59
|
"three": "0.177.0",
|
|
60
|
-
"@cascadetui/core-win32-x64": "0.1.
|
|
61
|
-
"@cascadetui/core-win32-arm64": "0.1.
|
|
62
|
-
"@cascadetui/core-darwin-x64": "0.1.
|
|
63
|
-
"@cascadetui/core-darwin-arm64": "0.1.
|
|
64
|
-
"@cascadetui/core-linux-x64": "0.1.
|
|
65
|
-
"@cascadetui/core-linux-arm64": "0.1.
|
|
60
|
+
"@cascadetui/core-win32-x64": "0.1.10",
|
|
61
|
+
"@cascadetui/core-win32-arm64": "0.1.10",
|
|
62
|
+
"@cascadetui/core-darwin-x64": "0.1.10",
|
|
63
|
+
"@cascadetui/core-darwin-arm64": "0.1.10",
|
|
64
|
+
"@cascadetui/core-linux-x64": "0.1.10",
|
|
65
|
+
"@cascadetui/core-linux-arm64": "0.1.10"
|
|
66
66
|
}
|
|
67
67
|
}
|
|
@@ -41,6 +41,10 @@ export declare abstract class TextBufferRenderable extends Renderable implements
|
|
|
41
41
|
protected _scrollX: number;
|
|
42
42
|
protected _scrollY: number;
|
|
43
43
|
protected _truncate: boolean;
|
|
44
|
+
private _measureCallCount;
|
|
45
|
+
private _lastMeasureReset;
|
|
46
|
+
private static readonly MEASURE_RESET_INTERVAL_MS;
|
|
47
|
+
private static readonly MAX_MEASURE_CALLS_PER_INTERVAL;
|
|
44
48
|
protected textBuffer: TextBuffer;
|
|
45
49
|
protected textBufferView: TextBufferView;
|
|
46
50
|
protected _textBufferSyntaxStyle: SyntaxStyle;
|
package/renderer.d.ts
CHANGED
|
@@ -42,6 +42,8 @@ export interface CliRendererConfig {
|
|
|
42
42
|
onDestroy?: () => void;
|
|
43
43
|
trace?: boolean;
|
|
44
44
|
traceWriter?: (line: string) => void;
|
|
45
|
+
enablePerformanceMonitoring?: boolean;
|
|
46
|
+
enableObjectPooling?: boolean;
|
|
45
47
|
}
|
|
46
48
|
export type PixelResolution = {
|
|
47
49
|
width: number;
|
|
@@ -144,6 +146,8 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
|
|
|
144
146
|
private _isDestroyed;
|
|
145
147
|
private _destroyPending;
|
|
146
148
|
private _destroyFinalized;
|
|
149
|
+
private destroyTimeoutId;
|
|
150
|
+
private readonly destroyTimeoutMs;
|
|
147
151
|
nextRenderBuffer: OptimizedBuffer;
|
|
148
152
|
currentRenderBuffer: OptimizedBuffer;
|
|
149
153
|
private _isRunning;
|
|
@@ -172,10 +176,19 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
|
|
|
172
176
|
private frameCount;
|
|
173
177
|
private lastFpsTime;
|
|
174
178
|
private currentFps;
|
|
179
|
+
private fpsCache;
|
|
180
|
+
private frameDeltas;
|
|
181
|
+
private readonly MAX_DELTA_SAMPLES;
|
|
182
|
+
private lastHitGridCheck;
|
|
183
|
+
private readonly HIT_GRID_CHECK_INTERVAL;
|
|
175
184
|
private targetFrameTime;
|
|
176
185
|
private minTargetFrameTime;
|
|
177
186
|
private immediateRerenderRequested;
|
|
178
187
|
private updateScheduled;
|
|
188
|
+
private consecutiveImmediateRerenders;
|
|
189
|
+
private lastImmediateRerenderTime;
|
|
190
|
+
private readonly maxConsecutiveImmediateRerenders;
|
|
191
|
+
private readonly immediateRerenderResetMs;
|
|
179
192
|
private liveRequestCounter;
|
|
180
193
|
private _controlState;
|
|
181
194
|
private frameCallbacks;
|
|
@@ -363,6 +376,10 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
|
|
|
363
376
|
removePostProcessFn(processFn: (buffer: OptimizedBuffer, deltaTime: number) => void): void;
|
|
364
377
|
clearPostProcessFns(): void;
|
|
365
378
|
setFrameCallback(callback: (deltaTime: number) => Promise<void>): void;
|
|
379
|
+
private calculateFPS;
|
|
380
|
+
private calculateDeltaTime;
|
|
381
|
+
private processAnimationCallbacks;
|
|
382
|
+
private shouldCheckHitGridDirty;
|
|
366
383
|
removeFrameCallback(callback: (deltaTime: number) => Promise<void>): void;
|
|
367
384
|
clearFrameCallbacks(): void;
|
|
368
385
|
requestLive(): void;
|
|
@@ -396,6 +413,16 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
|
|
|
396
413
|
getSelection(): Selection | null;
|
|
397
414
|
get hasSelection(): boolean;
|
|
398
415
|
getSelectionContainer(): Renderable | null;
|
|
416
|
+
/**
|
|
417
|
+
* Vérifie s'il y a une sélection active et retourne son texte
|
|
418
|
+
* @returns Le texte sélectionné ou null s'il n'y a pas de sélection
|
|
419
|
+
*/
|
|
420
|
+
getSelectedText(): string | null;
|
|
421
|
+
/**
|
|
422
|
+
* Copie la sélection active dans le presse-papiers si elle existe
|
|
423
|
+
* @returns true si une sélection a été copiée, false sinon
|
|
424
|
+
*/
|
|
425
|
+
copySelection(): boolean;
|
|
399
426
|
clearSelection(): void;
|
|
400
427
|
selectWord(x: number, y: number): void;
|
|
401
428
|
selectLine(x: number, y: number): void;
|