@gridland/core 0.2.21

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,287 @@
1
+ export { useKeyboard, useTerminalDimensions } from '@opentui/react';
2
+ import { EventEmitter } from 'events';
3
+ import * as react from 'react';
4
+ import { ReactNode } from 'react';
5
+
6
+ interface ReadableCharBuffer {
7
+ width: number;
8
+ height: number;
9
+ char: Uint32Array;
10
+ }
11
+ declare function bufferToText(buffer: ReadableCharBuffer): string;
12
+
13
+ declare class RGBA {
14
+ buffer: Float32Array;
15
+ constructor(buffer: Float32Array);
16
+ static fromArray(array: Float32Array): RGBA;
17
+ static fromValues(r: number, g: number, b: number, a?: number): RGBA;
18
+ static fromInts(r: number, g: number, b: number, a?: number): RGBA;
19
+ static fromHex(hex: string): RGBA;
20
+ get r(): number;
21
+ set r(v: number);
22
+ get g(): number;
23
+ set g(v: number);
24
+ get b(): number;
25
+ set b(v: number);
26
+ get a(): number;
27
+ set a(v: number);
28
+ toInts(): [number, number, number, number];
29
+ map<R>(fn: (value: number) => R): R[];
30
+ toString(): string;
31
+ equals(other?: RGBA): boolean;
32
+ }
33
+
34
+ type CursorStyle = "block" | "line" | "underline";
35
+ type MousePointerStyle = "default" | "pointer" | "text" | "crosshair" | "move" | "not-allowed";
36
+ type WidthMethod$1 = "wcwidth" | "unicode";
37
+ interface CursorStyleOptions {
38
+ style?: CursorStyle;
39
+ blinking?: boolean;
40
+ color?: RGBA;
41
+ cursor?: MousePointerStyle;
42
+ }
43
+ interface RenderContext {
44
+ addToHitGrid: (x: number, y: number, width: number, height: number, id: number) => void;
45
+ pushHitGridScissorRect: (x: number, y: number, width: number, height: number) => void;
46
+ popHitGridScissorRect: () => void;
47
+ clearHitGridScissorRects: () => void;
48
+ width: number;
49
+ height: number;
50
+ requestRender: () => void;
51
+ setCursorPosition: (x: number, y: number, visible: boolean) => void;
52
+ setCursorStyle: (options: CursorStyleOptions) => void;
53
+ setCursorColor: (color: RGBA) => void;
54
+ setMousePointer: (shape: MousePointerStyle) => void;
55
+ widthMethod: WidthMethod$1;
56
+ capabilities: any | null;
57
+ requestLive: () => void;
58
+ dropLive: () => void;
59
+ hasSelection: boolean;
60
+ getSelection: () => any | null;
61
+ requestSelectionUpdate: () => void;
62
+ currentFocusedRenderable: any | null;
63
+ focusRenderable: (renderable: any) => void;
64
+ registerLifecyclePass: (renderable: any) => void;
65
+ unregisterLifecyclePass: (renderable: any) => void;
66
+ getLifecyclePasses: () => Set<any>;
67
+ keyInput: any;
68
+ _internalKeyInput: any;
69
+ clearSelection: () => void;
70
+ startSelection: (renderable: any, x: number, y: number) => void;
71
+ updateSelection: (currentRenderable: any | undefined, x: number, y: number, options?: {
72
+ finishDragging?: boolean;
73
+ }) => void;
74
+ on: (event: string, listener: (...args: any[]) => void) => any;
75
+ off: (event: string, listener: (...args: any[]) => void) => any;
76
+ emit: (event: string, ...args: any[]) => boolean;
77
+ removeAllListeners: (event?: string) => any;
78
+ }
79
+ interface CapturedSpan {
80
+ text: string;
81
+ fg: RGBA;
82
+ bg: RGBA;
83
+ attributes: number;
84
+ width: number;
85
+ }
86
+ interface CapturedLine {
87
+ spans: CapturedSpan[];
88
+ }
89
+
90
+ type WidthMethod = "wcwidth" | "unicode";
91
+ interface BorderDrawOptions {
92
+ x: number;
93
+ y: number;
94
+ width: number;
95
+ height: number;
96
+ borderStyle?: string;
97
+ customBorderChars?: Uint32Array;
98
+ border: boolean | string[];
99
+ borderColor: RGBA;
100
+ backgroundColor: RGBA;
101
+ shouldFill?: boolean;
102
+ title?: string;
103
+ titleAlignment?: "left" | "center" | "right";
104
+ }
105
+ declare class BrowserBuffer {
106
+ id: string;
107
+ respectAlpha: boolean;
108
+ private _width;
109
+ private _height;
110
+ private _widthMethod;
111
+ char: Uint32Array;
112
+ fg: Float32Array;
113
+ bg: Float32Array;
114
+ attributes: Uint32Array;
115
+ private scissorStack;
116
+ private opacityStack;
117
+ linkRegistry: Map<number, string>;
118
+ private nextLinkId;
119
+ /** Cursor rendering config -- set by renderer before pipeline, read by drawEditorView */
120
+ cursorColor: RGBA | null;
121
+ cursorStyleType: CursorStyle;
122
+ /** Line cursor position -- set by drawEditorView during pipeline, read by renderer after */
123
+ lineCursorPosition: {
124
+ x: number;
125
+ y: number;
126
+ } | null;
127
+ constructor(width: number, height: number, options?: {
128
+ respectAlpha?: boolean;
129
+ id?: string;
130
+ widthMethod?: WidthMethod;
131
+ });
132
+ static create(width: number, height: number, widthMethod: WidthMethod, options?: {
133
+ respectAlpha?: boolean;
134
+ id?: string;
135
+ }): BrowserBuffer;
136
+ get width(): number;
137
+ get height(): number;
138
+ get widthMethod(): WidthMethod;
139
+ get ptr(): number;
140
+ get buffers(): {
141
+ char: Uint32Array<ArrayBufferLike>;
142
+ fg: Float32Array<ArrayBufferLike>;
143
+ bg: Float32Array<ArrayBufferLike>;
144
+ attributes: Uint32Array<ArrayBufferLike>;
145
+ };
146
+ setRespectAlpha(respectAlpha: boolean): void;
147
+ getNativeId(): string;
148
+ registerLink(url: string): number;
149
+ getLinkUrl(linkId: number): string | undefined;
150
+ private isInScissor;
151
+ private getCurrentOpacityMultiplier;
152
+ private applyOpacity;
153
+ clear(bg?: RGBA): void;
154
+ setCell(x: number, y: number, char: string, fgColor: RGBA, bgColor: RGBA, attr?: number): void;
155
+ setCellWithAlphaBlending(x: number, y: number, char: string, fgColor: RGBA, bgColor: RGBA, attr?: number): void;
156
+ drawChar(charCode: number, x: number, y: number, fgColor: RGBA, bgColor: RGBA, attr?: number): void;
157
+ drawText(text: string, x: number, y: number, fgColor: RGBA, bgColor?: RGBA, attr?: number, _selection?: {
158
+ start: number;
159
+ end: number;
160
+ bgColor?: RGBA;
161
+ fgColor?: RGBA;
162
+ } | null): void;
163
+ fillRect(x: number, y: number, width: number, height: number, bgColor: RGBA): void;
164
+ drawBox(options: BorderDrawOptions): void;
165
+ private getDefaultBorderChars;
166
+ pushScissorRect(x: number, y: number, width: number, height: number): void;
167
+ popScissorRect(): void;
168
+ clearScissorRects(): void;
169
+ pushOpacity(opacity: number): void;
170
+ popOpacity(): void;
171
+ getCurrentOpacity(): number;
172
+ clearOpacity(): void;
173
+ resize(width: number, height: number): void;
174
+ getSpanLines(): CapturedLine[];
175
+ drawTextBufferView(view: any, x: number, y: number): void;
176
+ drawTextBuffer(textBufferView: any, x: number, y: number): void;
177
+ drawFrameBuffer(destX: number, destY: number, frameBuffer: BrowserBuffer, sourceX?: number, sourceY?: number, sourceWidth?: number, sourceHeight?: number): void;
178
+ drawEditorView(editorView: any, x: number, y: number): void;
179
+ drawSuperSampleBuffer(): void;
180
+ drawPackedBuffer(): void;
181
+ drawGrayscaleBuffer(): void;
182
+ drawGrayscaleBufferSupersampled(): void;
183
+ drawGrid(): void;
184
+ encodeUnicode(_text: string): null;
185
+ freeUnicode(): void;
186
+ getRealCharBytes(): Uint8Array;
187
+ destroy(): void;
188
+ }
189
+
190
+ declare class BrowserKeyHandler extends EventEmitter {
191
+ constructor();
192
+ processInput(_data: string): boolean;
193
+ }
194
+ declare class BrowserInternalKeyHandler extends BrowserKeyHandler {
195
+ private renderableHandlers;
196
+ onInternal(event: string, handler: Function): void;
197
+ offInternal(event: string, handler: Function): void;
198
+ emit(event: string, ...args: any[]): boolean;
199
+ }
200
+ declare class BrowserRenderContext extends EventEmitter implements RenderContext {
201
+ private _width;
202
+ private _height;
203
+ private _widthMethod;
204
+ private _renderRequested;
205
+ private _onRenderRequest;
206
+ private _lifecyclePasses;
207
+ private _focusedRenderable;
208
+ cursorColor: RGBA | null;
209
+ cursorStyleType: CursorStyle;
210
+ cursorBlinking: boolean;
211
+ keyInput: BrowserKeyHandler;
212
+ _internalKeyInput: BrowserInternalKeyHandler;
213
+ constructor(width: number, height: number, widthMethod?: WidthMethod$1);
214
+ get width(): number;
215
+ get height(): number;
216
+ get widthMethod(): WidthMethod$1;
217
+ get capabilities(): any;
218
+ get hasSelection(): boolean;
219
+ get currentFocusedRenderable(): any | null;
220
+ setOnRenderRequest(callback: () => void): void;
221
+ resize(width: number, height: number): void;
222
+ addToHitGrid(_x: number, _y: number, _width: number, _height: number, _id: number): void;
223
+ pushHitGridScissorRect(_x: number, _y: number, _width: number, _height: number): void;
224
+ popHitGridScissorRect(): void;
225
+ clearHitGridScissorRects(): void;
226
+ requestRender(): void;
227
+ setCursorPosition(_x: number, _y: number, _visible: boolean): void;
228
+ setCursorStyle(options: CursorStyleOptions): void;
229
+ setCursorColor(color: RGBA): void;
230
+ setMousePointer(_shape: MousePointerStyle): void;
231
+ requestLive(): void;
232
+ dropLive(): void;
233
+ getSelection(): any | null;
234
+ requestSelectionUpdate(): void;
235
+ focusRenderable(renderable: any): void;
236
+ registerLifecyclePass(renderable: any): void;
237
+ unregisterLifecyclePass(renderable: any): void;
238
+ getLifecyclePasses(): Set<any>;
239
+ clearSelection(): void;
240
+ startSelection(_renderable: any, _x: number, _y: number): void;
241
+ updateSelection(_currentRenderable: any | undefined, _x: number, _y: number, _options?: {
242
+ finishDragging?: boolean;
243
+ }): void;
244
+ }
245
+
246
+ declare function setHeadlessRootRenderableClass(cls: any): void;
247
+ interface HeadlessRendererOptions {
248
+ cols: number;
249
+ rows: number;
250
+ }
251
+ declare class HeadlessRenderer {
252
+ buffer: BrowserBuffer;
253
+ renderContext: BrowserRenderContext;
254
+ root: any;
255
+ constructor(options: HeadlessRendererOptions);
256
+ renderOnce(): void;
257
+ toText(): string;
258
+ resize(cols: number, rows: number): void;
259
+ }
260
+
261
+ interface HeadlessRoot {
262
+ render(node: ReactNode): void;
263
+ renderToText(node: ReactNode): string;
264
+ unmount(): void;
265
+ }
266
+ declare function createHeadlessRoot(renderer: HeadlessRenderer): HeadlessRoot;
267
+
268
+ interface BrowserContextValue {
269
+ renderContext: BrowserRenderContext;
270
+ }
271
+ declare const BrowserContext: react.Context<BrowserContextValue | null>;
272
+
273
+ /**
274
+ * SSR-safe utilities for @gridland/web.
275
+ * These can be imported in any environment (Node.js, browser, edge).
276
+ */
277
+ /** Check if running in a browser environment */
278
+ declare function isBrowser(): boolean;
279
+ /** Check if canvas is supported */
280
+ declare function isCanvasSupported(): boolean;
281
+ /** Calculate grid dimensions from pixel dimensions and font size */
282
+ declare function calculateGridSize(widthPx: number, heightPx: number, cellWidth: number, cellHeight: number): {
283
+ cols: number;
284
+ rows: number;
285
+ };
286
+
287
+ export { BrowserContext, type BrowserContextValue, HeadlessRenderer, type HeadlessRendererOptions, type HeadlessRoot, bufferToText, calculateGridSize, createHeadlessRoot, isBrowser, isCanvasSupported, setHeadlessRootRenderableClass };