@cascadetui/core 0.1.5 → 0.1.7

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.
@@ -20,8 +20,8 @@ export declare class MouseParser {
20
20
  private static readonly SCROLL_DIRECTIONS;
21
21
  reset(): void;
22
22
  private decodeInput;
23
- parseMouseEvent(data: Buffer): RawMouseEvent | null;
24
- parseAllMouseEvents(data: Buffer): RawMouseEvent[];
23
+ parseMouseEvent(data: Buffer | string | Uint8Array | ArrayBuffer): RawMouseEvent | null;
24
+ parseAllMouseEvents(data: Buffer | string | Uint8Array | ArrayBuffer): RawMouseEvent[];
25
25
  private parseMouseSequenceAt;
26
26
  private parseSgrSequence;
27
27
  private parseBasicSequence;
@@ -36,9 +36,10 @@ export declare class StdinBuffer extends EventEmitter<StdinBufferEventMap> {
36
36
  private pasteMode;
37
37
  private pasteBuffer;
38
38
  constructor(options?: StdinBufferOptions);
39
- process(data: string | Buffer): void;
39
+ process(data: string | Buffer | Uint8Array | ArrayBuffer): void;
40
40
  flush(): string[];
41
41
  clear(): void;
42
42
  getBuffer(): string;
43
43
  destroy(): void;
44
+ private toBuffer;
44
45
  }
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.5",
7
+ "version": "0.1.7",
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.5",
61
- "@cascadetui/core-win32-arm64": "0.1.5",
62
- "@cascadetui/core-darwin-x64": "0.1.5",
63
- "@cascadetui/core-darwin-arm64": "0.1.5",
64
- "@cascadetui/core-linux-x64": "0.1.5",
65
- "@cascadetui/core-linux-arm64": "0.1.5"
60
+ "@cascadetui/core-win32-x64": "0.1.7",
61
+ "@cascadetui/core-win32-arm64": "0.1.7",
62
+ "@cascadetui/core-darwin-x64": "0.1.7",
63
+ "@cascadetui/core-darwin-arm64": "0.1.7",
64
+ "@cascadetui/core-linux-x64": "0.1.7",
65
+ "@cascadetui/core-linux-arm64": "0.1.7"
66
66
  }
67
67
  }
@@ -69,4 +69,5 @@ export declare class BoxRenderable extends Renderable {
69
69
  set gap(gap: number | `${number}%` | undefined);
70
70
  set rowGap(rowGap: number | `${number}%` | undefined);
71
71
  set columnGap(columnGap: number | `${number}%` | undefined);
72
+ clear(): void;
72
73
  }
@@ -14,6 +14,14 @@ export interface TextBufferOptions extends RenderableOptions<TextBufferRenderabl
14
14
  selectionFg?: string | RGBA;
15
15
  selectable?: boolean;
16
16
  attributes?: number;
17
+ bold?: boolean;
18
+ italic?: boolean;
19
+ underline?: boolean;
20
+ dim?: boolean;
21
+ blink?: boolean;
22
+ inverse?: boolean;
23
+ hidden?: boolean;
24
+ strikethrough?: boolean;
17
25
  wrapMode?: "none" | "char" | "word";
18
26
  tabIndicator?: string | number;
19
27
  tabIndicatorColor?: string | RGBA;
@@ -89,6 +97,9 @@ export declare abstract class TextBufferRenderable extends Renderable implements
89
97
  protected updateTextInfo(): void;
90
98
  private setupMeasureFunc;
91
99
  shouldStartSelection(x: number, y: number): boolean;
100
+ selectWord(x: number, y: number): boolean;
101
+ selectLine(x: number, y: number): boolean;
102
+ updateSelectionWordSnap(x: number, y: number): boolean;
92
103
  onSelectionChanged(selection: Selection | null): boolean;
93
104
  getSelectedText(): string;
94
105
  hasSelection(): boolean;
@@ -96,6 +107,11 @@ export declare abstract class TextBufferRenderable extends Renderable implements
96
107
  start: number;
97
108
  end: number;
98
109
  } | null;
110
+ private resolveOffsetAtLocalPoint;
111
+ private getLineRangeAtOffset;
112
+ private getWordRangeAtOffset;
113
+ private readTextRange;
114
+ private resolveGlobalPointFromOffset;
99
115
  render(buffer: OptimizedBuffer, deltaTime: number): void;
100
116
  protected renderSelf(buffer: OptimizedBuffer): void;
101
117
  destroy(): void;
@@ -8,6 +8,14 @@ export interface TextNodeOptions extends BaseRenderableOptions {
8
8
  fg?: string | RGBA;
9
9
  bg?: string | RGBA;
10
10
  attributes?: number;
11
+ bold?: boolean;
12
+ italic?: boolean;
13
+ underline?: boolean;
14
+ dim?: boolean;
15
+ blink?: boolean;
16
+ inverse?: boolean;
17
+ hidden?: boolean;
18
+ strikethrough?: boolean;
11
19
  link?: {
12
20
  url: string;
13
21
  };
package/renderer.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Renderable, RootRenderable } from "./Renderable";
2
- import { DebugOverlayCorner, type CursorStyleOptions, type MousePointerStyle, type RenderContext, type ThemeMode, type WidthMethod } from "./types";
2
+ import { DebugOverlayCorner, type CursorStyleOptions, type MousePointerStyle, type RenderContext, type RenderTrace, type ThemeMode, type WidthMethod } from "./types";
3
3
  import { RGBA, type ColorInput } from "./lib/RGBA";
4
4
  import type { Pointer } from "bun:ffi";
5
5
  import { OptimizedBuffer } from "./buffer";
@@ -37,8 +37,11 @@ export interface CliRendererConfig {
37
37
  useKittyKeyboard?: KittyKeyboardOptions | null;
38
38
  backgroundColor?: ColorInput;
39
39
  openConsoleOnError?: boolean;
40
+ logCrashReportsToConsole?: boolean;
40
41
  prependInputHandlers?: ((sequence: string) => boolean)[];
41
42
  onDestroy?: () => void;
43
+ trace?: boolean;
44
+ traceWriter?: (line: string) => void;
42
45
  }
43
46
  export type PixelResolution = {
44
47
  width: number;
@@ -81,16 +84,20 @@ export declare class MouseEvent {
81
84
  readonly scroll?: ScrollInfo;
82
85
  readonly target: Renderable | null;
83
86
  readonly isDragging?: boolean;
87
+ readonly clickCount: number;
84
88
  private _propagationStopped;
85
89
  private _defaultPrevented;
90
+ private _visitedRenderableNums;
86
91
  get propagationStopped(): boolean;
87
92
  get defaultPrevented(): boolean;
88
93
  constructor(target: Renderable | null, attributes: RawMouseEvent & {
89
94
  source?: Renderable;
90
95
  isDragging?: boolean;
96
+ clickCount?: number;
91
97
  });
92
98
  stopPropagation(): void;
93
99
  preventDefault(): void;
100
+ tryVisit(renderable: Renderable): boolean;
94
101
  }
95
102
  export declare enum MouseButton {
96
103
  LEFT = 0,
@@ -102,8 +109,21 @@ export declare enum MouseButton {
102
109
  export declare function createCliRenderer(config?: CliRendererConfig): Promise<CliRenderer>;
103
110
  export declare enum CliRenderEvents {
104
111
  DEBUG_OVERLAY_TOGGLE = "debugOverlay:toggle",
105
- DESTROY = "destroy"
112
+ DESTROY = "destroy",
113
+ CRASH = "crash"
106
114
  }
115
+ export type RuntimeEventRecord = {
116
+ timestamp: string;
117
+ type: string;
118
+ payload: Record<string, unknown>;
119
+ };
120
+ export type CrashReport = {
121
+ timestamp: string;
122
+ source: string;
123
+ message: string;
124
+ stack?: string;
125
+ recentEvents: RuntimeEventRecord[];
126
+ };
107
127
  export declare enum RendererControlState {
108
128
  IDLE = "idle",
109
129
  AUTO_STARTED = "auto_started",
@@ -134,6 +154,8 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
134
154
  private memorySnapshotTimer;
135
155
  private lastMemorySnapshot;
136
156
  readonly root: RootRenderable;
157
+ trace?: RenderTrace;
158
+ layoutVersion: number;
137
159
  width: number;
138
160
  height: number;
139
161
  private _useThread;
@@ -197,9 +219,12 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
197
219
  private _hasPointer;
198
220
  private _lastPointerModifiers;
199
221
  private _currentMousePointerStyle;
222
+ private _lastClick;
223
+ private readonly clickCountThresholdMs;
200
224
  private _currentFocusedRenderable;
201
225
  private lifecyclePasses;
202
226
  private _openConsoleOnError;
227
+ private _logCrashReportsToConsole;
203
228
  private _paletteDetector;
204
229
  private _cachedPalette;
205
230
  private _paletteDetectionPromise;
@@ -210,7 +235,13 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
210
235
  private idleResolvers;
211
236
  private _debugInputs;
212
237
  private _debugModeEnabled;
213
- private handleError;
238
+ private recentRuntimeEvents;
239
+ private crashReports;
240
+ private maxRecentRuntimeEvents;
241
+ private maxCrashReports;
242
+ private handleProcessCrash;
243
+ private uncaughtExceptionHandler;
244
+ private unhandledRejectionHandler;
214
245
  private dumpOutputCache;
215
246
  private exitHandler;
216
247
  private warningHandler;
@@ -303,6 +334,15 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
303
334
  }): void;
304
335
  setTerminalTitle(title: string): void;
305
336
  copyToClipboardOSC52(text: string, target?: ClipboardTarget): boolean;
337
+ private normalizeInputChunk;
338
+ private resolveClickCount;
339
+ private normalizeCrashError;
340
+ private recordRuntimeEvent;
341
+ reportCrash(reason: unknown, source?: string, extra?: Record<string, unknown>): CrashReport;
342
+ private formatCrashReportForConsole;
343
+ getCrashReports(): CrashReport[];
344
+ getRecentRuntimeEvents(): RuntimeEventRecord[];
345
+ clearCrashReports(): void;
306
346
  copyToSystemClipboard(text: string): boolean;
307
347
  readFromSystemClipboard(): string | null;
308
348
  copyToClipboard(text: string, target?: ClipboardTarget): boolean;
@@ -357,6 +397,9 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
357
397
  get hasSelection(): boolean;
358
398
  getSelectionContainer(): Renderable | null;
359
399
  clearSelection(): void;
400
+ selectWord(x: number, y: number): void;
401
+ selectLine(x: number, y: number): void;
402
+ updateSelectionWordSnap(x: number, y: number): void;
360
403
  /**
361
404
  * Start a new selection at the given coordinates.
362
405
  * Used by both mouse and keyboard selection.
@@ -368,6 +411,7 @@ export declare class CliRenderer extends EventEmitter implements RenderContext {
368
411
  requestSelectionUpdate(): void;
369
412
  private isWithinContainer;
370
413
  private finishSelection;
414
+ private resolveSelectionMethodTarget;
371
415
  private notifySelectablesOfSelectionChange;
372
416
  private walkSelectableRenderables;
373
417
  get paletteDetectionStatus(): "idle" | "detecting" | "cached";
package/testing.js CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  CliRenderer,
5
5
  TreeSitterClient,
6
6
  resolveRenderLib
7
- } from "./index-jx194wn1.js";
7
+ } from "./index-r7vqrd61.js";
8
8
 
9
9
  // src/testing/test-renderer.ts
10
10
  import { Readable } from "stream";
package/types.d.ts CHANGED
@@ -48,6 +48,17 @@ export interface RendererEvents {
48
48
  selection: (selection: Selection) => void;
49
49
  "debugOverlay:toggle": (enabled: boolean) => void;
50
50
  theme_mode: (mode: ThemeMode) => void;
51
+ crash: (report: {
52
+ timestamp: string;
53
+ source: string;
54
+ message: string;
55
+ stack?: string;
56
+ }) => void;
57
+ }
58
+ export interface RenderTrace {
59
+ enabled: boolean;
60
+ now: () => number;
61
+ write: (line: string) => void;
51
62
  }
52
63
  export interface RenderContext extends EventEmitter {
53
64
  addToHitGrid: (x: number, y: number, width: number, height: number, id: number) => void;
@@ -56,6 +67,7 @@ export interface RenderContext extends EventEmitter {
56
67
  clearHitGridScissorRects: () => void;
57
68
  width: number;
58
69
  height: number;
70
+ layoutVersion: number;
59
71
  requestRender: () => void;
60
72
  setCursorPosition: (x: number, y: number, visible: boolean) => void;
61
73
  setCursorStyle: (options: CursorStyleOptions) => void;
@@ -80,6 +92,7 @@ export interface RenderContext extends EventEmitter {
80
92
  updateSelection: (currentRenderable: Renderable | undefined, x: number, y: number, options?: {
81
93
  finishDragging?: boolean;
82
94
  }) => void;
95
+ trace?: RenderTrace;
83
96
  }
84
97
  export type Timeout = ReturnType<typeof setTimeout> | undefined;
85
98
  export interface ViewportBounds {