@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.
@@ -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.8",
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.8",
61
- "@cascadetui/core-win32-arm64": "0.1.8",
62
- "@cascadetui/core-darwin-x64": "0.1.8",
63
- "@cascadetui/core-darwin-arm64": "0.1.8",
64
- "@cascadetui/core-linux-x64": "0.1.8",
65
- "@cascadetui/core-linux-arm64": "0.1.8"
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;
package/testing.js CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  CliRenderer,
5
5
  TreeSitterClient,
6
6
  resolveRenderLib
7
- } from "./index-r7vqrd61.js";
7
+ } from "./index-2pvbxs43.js";
8
8
 
9
9
  // src/testing/test-renderer.ts
10
10
  import { Readable } from "stream";