@opentui/core 0.0.0-20251102-23e7b561 → 0.0.0-20251106-788e97e4
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/assets/zig/highlights.scm +284 -0
- package/assets/zig/tree-sitter-zig.wasm +0 -0
- package/edit-buffer.d.ts +2 -0
- package/{index-rzgaxyf4.js → index-pb1pm3hk.js} +423 -11
- package/{index-rzgaxyf4.js.map → index-pb1pm3hk.js.map} +11 -10
- package/index.js +201 -42
- package/index.js.map +9 -9
- package/lib/index.d.ts +1 -0
- package/lib/terminal-palette.d.ts +38 -0
- package/package.json +7 -7
- package/renderables/Code.d.ts +12 -0
- package/renderables/EditBufferRenderable.d.ts +11 -1
- package/renderables/Input.d.ts +9 -1
- package/renderables/ScrollBox.d.ts +8 -2
- package/renderables/Select.d.ts +4 -1
- package/renderer.d.ts +17 -0
- package/testing/mock-tree-sitter-client.d.ts +20 -0
- package/testing.d.ts +1 -0
- package/testing.js +35 -2
- package/testing.js.map +4 -3
- package/text-buffer.d.ts +1 -0
- package/types.d.ts +4 -0
- package/zig.d.ts +6 -0
package/index.js.map
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"sources": ["../src/text-buffer-view.ts", "../src/edit-buffer.ts", "../src/editor-view.ts", "../src/syntax-style.ts", "../src/post/filters.ts", "../src/animation/Timeline.ts", "../src/renderables/FrameBuffer.ts", "../src/renderables/ASCIIFont.ts", "../src/renderables/Box.ts", "../src/renderables/TextBufferRenderable.ts", "../src/renderables/Code.ts", "../src/renderables/TextNode.ts", "../src/renderables/composition/constructs.ts", "../src/renderables/composition/VRenderable.ts", "../src/renderables/Input.ts", "../src/renderables/Slider.ts", "../src/renderables/ScrollBar.ts", "../src/renderables/ScrollBox.ts", "../src/renderables/Select.ts", "../src/renderables/TabSelect.ts", "../src/renderables/Text.ts", "../src/renderables/EditBufferRenderable.ts", "../src/lib/keymapping.ts", "../src/renderables/Textarea.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import { RGBA } from \"./lib/RGBA\"\nimport { resolveRenderLib, type LineInfo, type RenderLib } from \"./zig\"\nimport { type Pointer } from \"bun:ffi\"\nimport type { TextBuffer } from \"./text-buffer\"\n\nexport class TextBufferView {\n private lib: RenderLib\n private viewPtr: Pointer\n private textBuffer: TextBuffer\n private _destroyed: boolean = false\n\n constructor(lib: RenderLib, ptr: Pointer, textBuffer: TextBuffer) {\n this.lib = lib\n this.viewPtr = ptr\n this.textBuffer = textBuffer\n }\n\n static create(textBuffer: TextBuffer): TextBufferView {\n const lib = resolveRenderLib()\n const viewPtr = lib.createTextBufferView(textBuffer.ptr)\n return new TextBufferView(lib, viewPtr, textBuffer)\n }\n\n // Fail loud and clear\n private guard(): void {\n if (this._destroyed) throw new Error(\"TextBufferView is destroyed\")\n }\n\n public get ptr(): Pointer {\n this.guard()\n return this.viewPtr\n }\n\n public setSelection(start: number, end: number, bgColor?: RGBA, fgColor?: RGBA): void {\n this.guard()\n this.lib.textBufferViewSetSelection(this.viewPtr, start, end, bgColor || null, fgColor || null)\n }\n\n public resetSelection(): void {\n this.guard()\n this.lib.textBufferViewResetSelection(this.viewPtr)\n }\n\n public getSelection(): { start: number; end: number } | null {\n this.guard()\n return this.lib.textBufferViewGetSelection(this.viewPtr)\n }\n\n public hasSelection(): boolean {\n this.guard()\n return this.getSelection() !== null\n }\n\n public setLocalSelection(\n anchorX: number,\n anchorY: number,\n focusX: number,\n focusY: number,\n bgColor?: RGBA,\n fgColor?: RGBA,\n ): boolean {\n this.guard()\n return this.lib.textBufferViewSetLocalSelection(\n this.viewPtr,\n anchorX,\n anchorY,\n focusX,\n focusY,\n bgColor || null,\n fgColor || null,\n )\n }\n\n public resetLocalSelection(): void {\n this.guard()\n this.lib.textBufferViewResetLocalSelection(this.viewPtr)\n }\n\n public setWrapWidth(width: number | null): void {\n this.guard()\n this.lib.textBufferViewSetWrapWidth(this.viewPtr, width ?? 0)\n }\n\n public setWrapMode(mode: \"none\" | \"char\" | \"word\"): void {\n this.guard()\n this.lib.textBufferViewSetWrapMode(this.viewPtr, mode)\n }\n\n public setViewportSize(width: number, height: number): void {\n this.guard()\n this.lib.textBufferViewSetViewportSize(this.viewPtr, width, height)\n }\n\n public get lineInfo(): LineInfo {\n this.guard()\n return this.lib.textBufferViewGetLineInfo(this.viewPtr)\n }\n\n public get logicalLineInfo(): LineInfo {\n this.guard()\n return this.lib.textBufferViewGetLogicalLineInfo(this.viewPtr)\n }\n\n public getSelectedText(): string {\n this.guard()\n const byteSize = this.textBuffer.byteSize\n if (byteSize === 0) return \"\"\n\n const selectedBytes = this.lib.textBufferViewGetSelectedTextBytes(this.viewPtr, byteSize)\n\n if (!selectedBytes) return \"\"\n\n return this.lib.decoder.decode(selectedBytes)\n }\n\n public getPlainText(): string {\n this.guard()\n const byteSize = this.textBuffer.byteSize\n if (byteSize === 0) return \"\"\n\n const plainBytes = this.lib.textBufferViewGetPlainTextBytes(this.viewPtr, byteSize)\n\n if (!plainBytes) return \"\"\n\n return this.lib.decoder.decode(plainBytes)\n }\n\n public setTabIndicator(indicator: string | number): void {\n this.guard()\n const codePoint = typeof indicator === \"string\" ? (indicator.codePointAt(0) ?? 0) : indicator\n this.lib.textBufferViewSetTabIndicator(this.viewPtr, codePoint)\n }\n\n public setTabIndicatorColor(color: RGBA): void {\n this.guard()\n this.lib.textBufferViewSetTabIndicatorColor(this.viewPtr, color)\n }\n\n public destroy(): void {\n if (this._destroyed) return\n this._destroyed = true\n this.lib.destroyTextBufferView(this.viewPtr)\n }\n}\n",
|
|
6
|
-
"import { resolveRenderLib, type LogicalCursor, type RenderLib } from \"./zig\"\nimport { type Pointer } from \"bun:ffi\"\nimport { type WidthMethod, type Highlight } from \"./types\"\nimport { RGBA } from \"./lib/RGBA\"\nimport { EventEmitter } from \"events\"\nimport type { SyntaxStyle } from \"./syntax-style\"\n\nexport type { LogicalCursor }\n\n/**\n * EditBuffer provides a text editing buffer with cursor management,\n * incremental editing, and grapheme-aware operations.\n */\nexport class EditBuffer extends EventEmitter {\n private static registry = new Map<number, EditBuffer>()\n private static nativeEventsSubscribed = false\n\n private lib: RenderLib\n private bufferPtr: Pointer\n private textBufferPtr: Pointer\n public readonly id: number\n private _destroyed: boolean = false\n private _textBytes: Uint8Array[] = []\n private _singleTextBytes: Uint8Array | null = null\n private _singleTextMemId: number | null = null\n private _syntaxStyle?: SyntaxStyle\n\n constructor(lib: RenderLib, ptr: Pointer) {\n super()\n this.lib = lib\n this.bufferPtr = ptr\n this.textBufferPtr = lib.editBufferGetTextBuffer(ptr)\n this.id = lib.editBufferGetId(ptr)\n\n EditBuffer.registry.set(this.id, this)\n EditBuffer.subscribeToNativeEvents(lib)\n }\n\n static create(widthMethod: WidthMethod): EditBuffer {\n const lib = resolveRenderLib()\n const ptr = lib.createEditBuffer(widthMethod)\n return new EditBuffer(lib, ptr)\n }\n\n private static subscribeToNativeEvents(lib: RenderLib): void {\n if (EditBuffer.nativeEventsSubscribed) return\n EditBuffer.nativeEventsSubscribed = true\n\n lib.onAnyNativeEvent((name: string, data: ArrayBuffer) => {\n const buffer = new Uint16Array(data)\n\n if (name.startsWith(\"eb_\") && buffer.length >= 1) {\n const id = buffer[0]\n const instance = EditBuffer.registry.get(id)\n\n if (instance) {\n // Strip the \"eb_\" prefix and forward the event\n const eventName = name.slice(3)\n const eventData = data.slice(2)\n instance.emit(eventName, eventData)\n }\n }\n })\n }\n\n private guard(): void {\n if (this._destroyed) throw new Error(\"EditBuffer is destroyed\")\n }\n\n public get ptr(): Pointer {\n this.guard()\n return this.bufferPtr\n }\n\n public setText(text: string, opts?: { history?: boolean }): void {\n this.guard()\n const history = opts?.history ?? true\n const textBytes = this.lib.encoder.encode(text)\n\n if (history) {\n this._textBytes.push(textBytes)\n const memId = this.lib.textBufferRegisterMemBuffer(this.textBufferPtr, textBytes, false)\n this.lib.editBufferSetTextFromMem(this.bufferPtr, memId, true)\n } else {\n if (this._singleTextMemId !== null) {\n this.lib.textBufferReplaceMemBuffer(this.textBufferPtr, this._singleTextMemId, textBytes, false)\n } else {\n this._singleTextMemId = this.lib.textBufferRegisterMemBuffer(this.textBufferPtr, textBytes, false)\n }\n this._singleTextBytes = textBytes\n this.lib.editBufferSetTextFromMem(this.bufferPtr, this._singleTextMemId, false)\n }\n }\n\n public setTextOwned(text: string, opts?: { history?: boolean }): void {\n this.guard()\n const history = opts?.history ?? true\n const textBytes = this.lib.encoder.encode(text)\n this.lib.editBufferSetText(this.bufferPtr, textBytes, history)\n }\n\n public getText(): string {\n this.guard()\n // TODO: Use byte size of text buffer to get the actual size of the text\n // actually native can stack alloc all the text and decode will alloc as js string then\n const maxSize = 1024 * 1024 // 1MB max\n const textBytes = this.lib.editBufferGetText(this.bufferPtr, maxSize)\n\n if (!textBytes) return \"\"\n\n return this.lib.decoder.decode(textBytes)\n }\n\n public insertChar(char: string): void {\n this.guard()\n this.lib.editBufferInsertChar(this.bufferPtr, char)\n }\n\n public insertText(text: string): void {\n this.guard()\n this.lib.editBufferInsertText(this.bufferPtr, text)\n }\n\n public deleteChar(): void {\n this.guard()\n this.lib.editBufferDeleteChar(this.bufferPtr)\n }\n\n public deleteCharBackward(): void {\n this.guard()\n this.lib.editBufferDeleteCharBackward(this.bufferPtr)\n }\n\n public deleteRange(startLine: number, startCol: number, endLine: number, endCol: number): void {\n this.guard()\n this.lib.editBufferDeleteRange(this.bufferPtr, startLine, startCol, endLine, endCol)\n }\n\n public newLine(): void {\n this.guard()\n this.lib.editBufferNewLine(this.bufferPtr)\n }\n\n public deleteLine(): void {\n this.guard()\n this.lib.editBufferDeleteLine(this.bufferPtr)\n }\n\n public moveCursorLeft(): void {\n this.guard()\n this.lib.editBufferMoveCursorLeft(this.bufferPtr)\n }\n\n public moveCursorRight(): void {\n this.guard()\n this.lib.editBufferMoveCursorRight(this.bufferPtr)\n }\n\n public moveCursorUp(): void {\n this.guard()\n this.lib.editBufferMoveCursorUp(this.bufferPtr)\n }\n\n public moveCursorDown(): void {\n this.guard()\n this.lib.editBufferMoveCursorDown(this.bufferPtr)\n }\n\n public gotoLine(line: number): void {\n this.guard()\n this.lib.editBufferGotoLine(this.bufferPtr, line)\n }\n\n public setCursor(line: number, col: number): void {\n this.guard()\n this.lib.editBufferSetCursor(this.bufferPtr, line, col)\n }\n\n public setCursorToLineCol(line: number, col: number): void {\n this.guard()\n this.lib.editBufferSetCursorToLineCol(this.bufferPtr, line, col)\n }\n\n public setCursorByOffset(offset: number): void {\n this.guard()\n this.lib.editBufferSetCursorByOffset(this.bufferPtr, offset)\n }\n\n public getCursorPosition(): LogicalCursor {\n this.guard()\n return this.lib.editBufferGetCursorPosition(this.bufferPtr)\n }\n\n public getNextWordBoundary(): LogicalCursor {\n this.guard()\n const boundary = this.lib.editBufferGetNextWordBoundary(this.bufferPtr)\n return {\n row: boundary.row,\n col: boundary.col,\n offset: boundary.offset,\n }\n }\n\n public getPrevWordBoundary(): LogicalCursor {\n this.guard()\n const boundary = this.lib.editBufferGetPrevWordBoundary(this.bufferPtr)\n return {\n row: boundary.row,\n col: boundary.col,\n offset: boundary.offset,\n }\n }\n\n public getEOL(): LogicalCursor {\n this.guard()\n const boundary = this.lib.editBufferGetEOL(this.bufferPtr)\n return {\n row: boundary.row,\n col: boundary.col,\n offset: boundary.offset,\n }\n }\n\n public offsetToPosition(offset: number): { row: number; col: number } | null {\n this.guard()\n const result = this.lib.editBufferOffsetToPosition(this.bufferPtr, offset)\n if (!result) return null\n return { row: result.row, col: result.col }\n }\n\n public positionToOffset(row: number, col: number): number {\n this.guard()\n return this.lib.editBufferPositionToOffset(this.bufferPtr, row, col)\n }\n\n public getLineStartOffset(row: number): number {\n this.guard()\n return this.lib.editBufferGetLineStartOffset(this.bufferPtr, row)\n }\n\n public debugLogRope(): void {\n this.guard()\n this.lib.editBufferDebugLogRope(this.bufferPtr)\n }\n\n public undo(): string | null {\n this.guard()\n const maxSize = 256\n const metaBytes = this.lib.editBufferUndo(this.bufferPtr, maxSize)\n if (!metaBytes) return null\n return this.lib.decoder.decode(metaBytes)\n }\n\n public redo(): string | null {\n this.guard()\n const maxSize = 256\n const metaBytes = this.lib.editBufferRedo(this.bufferPtr, maxSize)\n if (!metaBytes) return null\n return this.lib.decoder.decode(metaBytes)\n }\n\n public canUndo(): boolean {\n this.guard()\n return this.lib.editBufferCanUndo(this.bufferPtr)\n }\n\n public canRedo(): boolean {\n this.guard()\n return this.lib.editBufferCanRedo(this.bufferPtr)\n }\n\n public clearHistory(): void {\n this.guard()\n this.lib.editBufferClearHistory(this.bufferPtr)\n }\n\n public setDefaultFg(fg: RGBA | null): void {\n this.guard()\n this.lib.textBufferSetDefaultFg(this.textBufferPtr, fg)\n }\n\n public setDefaultBg(bg: RGBA | null): void {\n this.guard()\n this.lib.textBufferSetDefaultBg(this.textBufferPtr, bg)\n }\n\n public setDefaultAttributes(attributes: number | null): void {\n this.guard()\n this.lib.textBufferSetDefaultAttributes(this.textBufferPtr, attributes)\n }\n\n public resetDefaults(): void {\n this.guard()\n this.lib.textBufferResetDefaults(this.textBufferPtr)\n }\n\n public setSyntaxStyle(style: SyntaxStyle | null): void {\n this.guard()\n this._syntaxStyle = style ?? undefined\n this.lib.textBufferSetSyntaxStyle(this.textBufferPtr, style?.ptr ?? null)\n }\n\n public getSyntaxStyle(): SyntaxStyle | null {\n this.guard()\n return this._syntaxStyle ?? null\n }\n\n public addHighlight(lineIdx: number, highlight: Highlight): void {\n this.guard()\n this.lib.textBufferAddHighlight(this.textBufferPtr, lineIdx, highlight)\n }\n\n public addHighlightByCharRange(highlight: Highlight): void {\n this.guard()\n this.lib.textBufferAddHighlightByCharRange(this.textBufferPtr, highlight)\n }\n\n public removeHighlightsByRef(hlRef: number): void {\n this.guard()\n this.lib.textBufferRemoveHighlightsByRef(this.textBufferPtr, hlRef)\n }\n\n public clearLineHighlights(lineIdx: number): void {\n this.guard()\n this.lib.textBufferClearLineHighlights(this.textBufferPtr, lineIdx)\n }\n\n public clearAllHighlights(): void {\n this.guard()\n this.lib.textBufferClearAllHighlights(this.textBufferPtr)\n }\n\n public getLineHighlights(lineIdx: number): Array<Highlight> {\n this.guard()\n return this.lib.textBufferGetLineHighlights(this.textBufferPtr, lineIdx)\n }\n\n public clear(): void {\n this.guard()\n this.lib.editBufferClear(this.bufferPtr)\n }\n\n public destroy(): void {\n if (this._destroyed) return\n\n this._destroyed = true\n EditBuffer.registry.delete(this.id)\n this.lib.destroyEditBuffer(this.bufferPtr)\n }\n}\n",
|
|
6
|
+
"import { resolveRenderLib, type LogicalCursor, type RenderLib } from \"./zig\"\nimport { type Pointer } from \"bun:ffi\"\nimport { type WidthMethod, type Highlight } from \"./types\"\nimport { RGBA } from \"./lib/RGBA\"\nimport { EventEmitter } from \"events\"\nimport type { SyntaxStyle } from \"./syntax-style\"\n\nexport type { LogicalCursor }\n\n/**\n * EditBuffer provides a text editing buffer with cursor management,\n * incremental editing, and grapheme-aware operations.\n */\nexport class EditBuffer extends EventEmitter {\n private static registry = new Map<number, EditBuffer>()\n private static nativeEventsSubscribed = false\n\n private lib: RenderLib\n private bufferPtr: Pointer\n private textBufferPtr: Pointer\n public readonly id: number\n private _destroyed: boolean = false\n private _textBytes: Uint8Array[] = []\n private _singleTextBytes: Uint8Array | null = null\n private _singleTextMemId: number | null = null\n private _syntaxStyle?: SyntaxStyle\n\n constructor(lib: RenderLib, ptr: Pointer) {\n super()\n this.lib = lib\n this.bufferPtr = ptr\n this.textBufferPtr = lib.editBufferGetTextBuffer(ptr)\n this.id = lib.editBufferGetId(ptr)\n\n EditBuffer.registry.set(this.id, this)\n EditBuffer.subscribeToNativeEvents(lib)\n }\n\n static create(widthMethod: WidthMethod): EditBuffer {\n const lib = resolveRenderLib()\n const ptr = lib.createEditBuffer(widthMethod)\n return new EditBuffer(lib, ptr)\n }\n\n private static subscribeToNativeEvents(lib: RenderLib): void {\n if (EditBuffer.nativeEventsSubscribed) return\n EditBuffer.nativeEventsSubscribed = true\n\n lib.onAnyNativeEvent((name: string, data: ArrayBuffer) => {\n const buffer = new Uint16Array(data)\n\n if (name.startsWith(\"eb_\") && buffer.length >= 1) {\n const id = buffer[0]\n const instance = EditBuffer.registry.get(id)\n\n if (instance) {\n // Strip the \"eb_\" prefix and forward the event\n const eventName = name.slice(3)\n const eventData = data.slice(2)\n instance.emit(eventName, eventData)\n }\n }\n })\n }\n\n private guard(): void {\n if (this._destroyed) throw new Error(\"EditBuffer is destroyed\")\n }\n\n public get ptr(): Pointer {\n this.guard()\n return this.bufferPtr\n }\n\n public setText(text: string, opts?: { history?: boolean }): void {\n this.guard()\n const history = opts?.history ?? true\n const textBytes = this.lib.encoder.encode(text)\n\n if (history) {\n this._textBytes.push(textBytes)\n const memId = this.lib.textBufferRegisterMemBuffer(this.textBufferPtr, textBytes, false)\n this.lib.editBufferSetTextFromMem(this.bufferPtr, memId, true)\n } else {\n if (this._singleTextMemId !== null) {\n this.lib.textBufferReplaceMemBuffer(this.textBufferPtr, this._singleTextMemId, textBytes, false)\n } else {\n this._singleTextMemId = this.lib.textBufferRegisterMemBuffer(this.textBufferPtr, textBytes, false)\n }\n this._singleTextBytes = textBytes\n this.lib.editBufferSetTextFromMem(this.bufferPtr, this._singleTextMemId, false)\n }\n }\n\n public setTextOwned(text: string, opts?: { history?: boolean }): void {\n this.guard()\n const history = opts?.history ?? true\n const textBytes = this.lib.encoder.encode(text)\n this.lib.editBufferSetText(this.bufferPtr, textBytes, history)\n }\n\n public getText(): string {\n this.guard()\n // TODO: Use byte size of text buffer to get the actual size of the text\n // actually native can stack alloc all the text and decode will alloc as js string then\n const maxSize = 1024 * 1024 // 1MB max\n const textBytes = this.lib.editBufferGetText(this.bufferPtr, maxSize)\n\n if (!textBytes) return \"\"\n\n return this.lib.decoder.decode(textBytes)\n }\n\n public insertChar(char: string): void {\n this.guard()\n this.lib.editBufferInsertChar(this.bufferPtr, char)\n }\n\n public insertText(text: string): void {\n this.guard()\n this.lib.editBufferInsertText(this.bufferPtr, text)\n }\n\n public deleteChar(): void {\n this.guard()\n this.lib.editBufferDeleteChar(this.bufferPtr)\n }\n\n public deleteCharBackward(): void {\n this.guard()\n this.lib.editBufferDeleteCharBackward(this.bufferPtr)\n }\n\n public deleteRange(startLine: number, startCol: number, endLine: number, endCol: number): void {\n this.guard()\n this.lib.editBufferDeleteRange(this.bufferPtr, startLine, startCol, endLine, endCol)\n }\n\n public newLine(): void {\n this.guard()\n this.lib.editBufferNewLine(this.bufferPtr)\n }\n\n public deleteLine(): void {\n this.guard()\n this.lib.editBufferDeleteLine(this.bufferPtr)\n }\n\n public moveCursorLeft(): void {\n this.guard()\n this.lib.editBufferMoveCursorLeft(this.bufferPtr)\n }\n\n public moveCursorRight(): void {\n this.guard()\n this.lib.editBufferMoveCursorRight(this.bufferPtr)\n }\n\n public moveCursorUp(): void {\n this.guard()\n this.lib.editBufferMoveCursorUp(this.bufferPtr)\n }\n\n public moveCursorDown(): void {\n this.guard()\n this.lib.editBufferMoveCursorDown(this.bufferPtr)\n }\n\n public gotoLine(line: number): void {\n this.guard()\n this.lib.editBufferGotoLine(this.bufferPtr, line)\n }\n\n public setCursor(line: number, col: number): void {\n this.guard()\n this.lib.editBufferSetCursor(this.bufferPtr, line, col)\n }\n\n public setCursorToLineCol(line: number, col: number): void {\n this.guard()\n this.lib.editBufferSetCursorToLineCol(this.bufferPtr, line, col)\n }\n\n public setCursorByOffset(offset: number): void {\n this.guard()\n this.lib.editBufferSetCursorByOffset(this.bufferPtr, offset)\n }\n\n public getCursorPosition(): LogicalCursor {\n this.guard()\n return this.lib.editBufferGetCursorPosition(this.bufferPtr)\n }\n\n public getNextWordBoundary(): LogicalCursor {\n this.guard()\n const boundary = this.lib.editBufferGetNextWordBoundary(this.bufferPtr)\n return {\n row: boundary.row,\n col: boundary.col,\n offset: boundary.offset,\n }\n }\n\n public getPrevWordBoundary(): LogicalCursor {\n this.guard()\n const boundary = this.lib.editBufferGetPrevWordBoundary(this.bufferPtr)\n return {\n row: boundary.row,\n col: boundary.col,\n offset: boundary.offset,\n }\n }\n\n public getEOL(): LogicalCursor {\n this.guard()\n const boundary = this.lib.editBufferGetEOL(this.bufferPtr)\n return {\n row: boundary.row,\n col: boundary.col,\n offset: boundary.offset,\n }\n }\n\n public offsetToPosition(offset: number): { row: number; col: number } | null {\n this.guard()\n const result = this.lib.editBufferOffsetToPosition(this.bufferPtr, offset)\n if (!result) return null\n return { row: result.row, col: result.col }\n }\n\n public positionToOffset(row: number, col: number): number {\n this.guard()\n return this.lib.editBufferPositionToOffset(this.bufferPtr, row, col)\n }\n\n public getLineStartOffset(row: number): number {\n this.guard()\n return this.lib.editBufferGetLineStartOffset(this.bufferPtr, row)\n }\n\n public getTextRange(startOffset: number, endOffset: number): string {\n this.guard()\n if (startOffset >= endOffset) return \"\"\n\n // TODO: Use actual expected size of the text\n // like other methods native can just return a pointer and size\n // and we immediately decode the text into a js string then the native stack\n // can go out of scope\n const maxSize = 1024 * 1024 // 1MB max\n const textBytes = this.lib.editBufferGetTextRange(this.bufferPtr, startOffset, endOffset, maxSize)\n\n if (!textBytes) return \"\"\n\n return this.lib.decoder.decode(textBytes)\n }\n\n public getTextRangeByCoords(startRow: number, startCol: number, endRow: number, endCol: number): string {\n this.guard()\n\n const maxSize = 1024 * 1024 // 1MB max\n const textBytes = this.lib.editBufferGetTextRangeByCoords(\n this.bufferPtr,\n startRow,\n startCol,\n endRow,\n endCol,\n maxSize,\n )\n\n if (!textBytes) return \"\"\n\n return this.lib.decoder.decode(textBytes)\n }\n\n public debugLogRope(): void {\n this.guard()\n this.lib.editBufferDebugLogRope(this.bufferPtr)\n }\n\n public undo(): string | null {\n this.guard()\n const maxSize = 256\n const metaBytes = this.lib.editBufferUndo(this.bufferPtr, maxSize)\n if (!metaBytes) return null\n return this.lib.decoder.decode(metaBytes)\n }\n\n public redo(): string | null {\n this.guard()\n const maxSize = 256\n const metaBytes = this.lib.editBufferRedo(this.bufferPtr, maxSize)\n if (!metaBytes) return null\n return this.lib.decoder.decode(metaBytes)\n }\n\n public canUndo(): boolean {\n this.guard()\n return this.lib.editBufferCanUndo(this.bufferPtr)\n }\n\n public canRedo(): boolean {\n this.guard()\n return this.lib.editBufferCanRedo(this.bufferPtr)\n }\n\n public clearHistory(): void {\n this.guard()\n this.lib.editBufferClearHistory(this.bufferPtr)\n }\n\n public setDefaultFg(fg: RGBA | null): void {\n this.guard()\n this.lib.textBufferSetDefaultFg(this.textBufferPtr, fg)\n }\n\n public setDefaultBg(bg: RGBA | null): void {\n this.guard()\n this.lib.textBufferSetDefaultBg(this.textBufferPtr, bg)\n }\n\n public setDefaultAttributes(attributes: number | null): void {\n this.guard()\n this.lib.textBufferSetDefaultAttributes(this.textBufferPtr, attributes)\n }\n\n public resetDefaults(): void {\n this.guard()\n this.lib.textBufferResetDefaults(this.textBufferPtr)\n }\n\n public setSyntaxStyle(style: SyntaxStyle | null): void {\n this.guard()\n this._syntaxStyle = style ?? undefined\n this.lib.textBufferSetSyntaxStyle(this.textBufferPtr, style?.ptr ?? null)\n }\n\n public getSyntaxStyle(): SyntaxStyle | null {\n this.guard()\n return this._syntaxStyle ?? null\n }\n\n public addHighlight(lineIdx: number, highlight: Highlight): void {\n this.guard()\n this.lib.textBufferAddHighlight(this.textBufferPtr, lineIdx, highlight)\n }\n\n public addHighlightByCharRange(highlight: Highlight): void {\n this.guard()\n this.lib.textBufferAddHighlightByCharRange(this.textBufferPtr, highlight)\n }\n\n public removeHighlightsByRef(hlRef: number): void {\n this.guard()\n this.lib.textBufferRemoveHighlightsByRef(this.textBufferPtr, hlRef)\n }\n\n public clearLineHighlights(lineIdx: number): void {\n this.guard()\n this.lib.textBufferClearLineHighlights(this.textBufferPtr, lineIdx)\n }\n\n public clearAllHighlights(): void {\n this.guard()\n this.lib.textBufferClearAllHighlights(this.textBufferPtr)\n }\n\n public getLineHighlights(lineIdx: number): Array<Highlight> {\n this.guard()\n return this.lib.textBufferGetLineHighlights(this.textBufferPtr, lineIdx)\n }\n\n public clear(): void {\n this.guard()\n this.lib.editBufferClear(this.bufferPtr)\n }\n\n public destroy(): void {\n if (this._destroyed) return\n\n this._destroyed = true\n EditBuffer.registry.delete(this.id)\n this.lib.destroyEditBuffer(this.bufferPtr)\n }\n}\n",
|
|
7
7
|
"import { RGBA } from \"./lib/RGBA\"\nimport { resolveRenderLib, type RenderLib, type VisualCursor, type LineInfo } from \"./zig\"\nimport { type Pointer } from \"bun:ffi\"\nimport type { EditBuffer } from \"./edit-buffer\"\nimport { createExtmarksController } from \"./lib\"\n\nexport interface Viewport {\n offsetY: number\n offsetX: number\n height: number\n width: number\n}\n\nexport type { VisualCursor }\n\nexport class EditorView {\n private lib: RenderLib\n private viewPtr: Pointer\n private editBuffer: EditBuffer\n private _destroyed: boolean = false\n private _extmarksController?: any\n\n constructor(lib: RenderLib, ptr: Pointer, editBuffer: EditBuffer) {\n this.lib = lib\n this.viewPtr = ptr\n this.editBuffer = editBuffer\n }\n\n static create(editBuffer: EditBuffer, viewportWidth: number, viewportHeight: number): EditorView {\n const lib = resolveRenderLib()\n const viewPtr = lib.createEditorView(editBuffer.ptr, viewportWidth, viewportHeight)\n return new EditorView(lib, viewPtr, editBuffer)\n }\n\n private guard(): void {\n if (this._destroyed) throw new Error(\"EditorView is destroyed\")\n }\n\n public get ptr(): Pointer {\n this.guard()\n return this.viewPtr\n }\n\n public setViewportSize(width: number, height: number): void {\n this.guard()\n this.lib.editorViewSetViewportSize(this.viewPtr, width, height)\n }\n\n public getViewport(): Viewport {\n this.guard()\n return this.lib.editorViewGetViewport(this.viewPtr)\n }\n\n public setScrollMargin(margin: number): void {\n this.guard()\n this.lib.editorViewSetScrollMargin(this.viewPtr, margin)\n }\n\n public setWrapMode(mode: \"none\" | \"char\" | \"word\"): void {\n this.guard()\n this.lib.editorViewSetWrapMode(this.viewPtr, mode)\n }\n\n public getVirtualLineCount(): number {\n this.guard()\n return this.lib.editorViewGetVirtualLineCount(this.viewPtr)\n }\n\n public getTotalVirtualLineCount(): number {\n this.guard()\n return this.lib.editorViewGetTotalVirtualLineCount(this.viewPtr)\n }\n\n public setSelection(start: number, end: number, bgColor?: RGBA, fgColor?: RGBA): void {\n this.guard()\n this.lib.editorViewSetSelection(this.viewPtr, start, end, bgColor || null, fgColor || null)\n }\n\n public resetSelection(): void {\n this.guard()\n this.lib.editorViewResetSelection(this.viewPtr)\n }\n\n public getSelection(): { start: number; end: number } | null {\n this.guard()\n return this.lib.editorViewGetSelection(this.viewPtr)\n }\n\n public hasSelection(): boolean {\n this.guard()\n return this.getSelection() !== null\n }\n\n public setLocalSelection(\n anchorX: number,\n anchorY: number,\n focusX: number,\n focusY: number,\n bgColor?: RGBA,\n fgColor?: RGBA,\n ): boolean {\n this.guard()\n return this.lib.editorViewSetLocalSelection(\n this.viewPtr,\n anchorX,\n anchorY,\n focusX,\n focusY,\n bgColor || null,\n fgColor || null,\n )\n }\n\n public resetLocalSelection(): void {\n this.guard()\n this.lib.editorViewResetLocalSelection(this.viewPtr)\n }\n\n public getSelectedText(): string {\n this.guard()\n // TODO: native can stack alloc all the text and decode will alloc as js string then\n const maxLength = 1024 * 1024 // 1MB should be enough for most selections\n const selectedBytes = this.lib.editorViewGetSelectedTextBytes(this.viewPtr, maxLength)\n\n if (!selectedBytes) return \"\"\n\n return this.lib.decoder.decode(selectedBytes)\n }\n\n public getCursor(): { row: number; col: number } {\n this.guard()\n return this.lib.editorViewGetCursor(this.viewPtr)\n }\n\n public getText(): string {\n this.guard()\n const maxLength = 1024 * 1024 // 1MB buffer\n const textBytes = this.lib.editorViewGetText(this.viewPtr, maxLength)\n if (!textBytes) return \"\"\n return this.lib.decoder.decode(textBytes)\n }\n\n public getVisualCursor(): VisualCursor {\n this.guard()\n return this.lib.editorViewGetVisualCursor(this.viewPtr)\n }\n\n public moveUpVisual(): void {\n this.guard()\n this.lib.editorViewMoveUpVisual(this.viewPtr)\n }\n\n public moveDownVisual(): void {\n this.guard()\n this.lib.editorViewMoveDownVisual(this.viewPtr)\n }\n\n public deleteSelectedText(): void {\n this.guard()\n this.lib.editorViewDeleteSelectedText(this.viewPtr)\n }\n\n public setCursorByOffset(offset: number): void {\n this.guard()\n this.lib.editorViewSetCursorByOffset(this.viewPtr, offset)\n }\n\n public getNextWordBoundary(): VisualCursor {\n this.guard()\n return this.lib.editorViewGetNextWordBoundary(this.viewPtr)\n }\n\n public getPrevWordBoundary(): VisualCursor {\n this.guard()\n return this.lib.editorViewGetPrevWordBoundary(this.viewPtr)\n }\n\n public getEOL(): VisualCursor {\n this.guard()\n return this.lib.editorViewGetEOL(this.viewPtr)\n }\n\n public getLineInfo(): LineInfo {\n this.guard()\n return this.lib.editorViewGetLineInfo(this.viewPtr)\n }\n\n public getLogicalLineInfo(): LineInfo {\n this.guard()\n return this.lib.editorViewGetLogicalLineInfo(this.viewPtr)\n }\n\n public get extmarks(): any {\n if (!this._extmarksController) {\n this._extmarksController = createExtmarksController(this.editBuffer, this)\n }\n return this._extmarksController\n }\n\n public setPlaceholderStyledText(chunks: { text: string; fg?: RGBA; bg?: RGBA; attributes?: number }[]): void {\n this.guard()\n this.lib.editorViewSetPlaceholderStyledText(this.viewPtr, chunks)\n }\n\n public setTabIndicator(indicator: string | number): void {\n this.guard()\n const codePoint = typeof indicator === \"string\" ? (indicator.codePointAt(0) ?? 0) : indicator\n this.lib.editorViewSetTabIndicator(this.viewPtr, codePoint)\n }\n\n public setTabIndicatorColor(color: RGBA): void {\n this.guard()\n this.lib.editorViewSetTabIndicatorColor(this.viewPtr, color)\n }\n\n public destroy(): void {\n if (this._destroyed) return\n\n if (this._extmarksController) {\n this._extmarksController.destroy()\n this._extmarksController = undefined\n }\n\n this._destroyed = true\n this.lib.destroyEditorView(this.viewPtr)\n }\n}\n",
|
|
8
8
|
"import { RGBA, parseColor, type ColorInput } from \"./lib/RGBA\"\nimport { resolveRenderLib, type RenderLib } from \"./zig\"\nimport { type Pointer } from \"bun:ffi\"\nimport { createTextAttributes } from \"./utils\"\n\nexport interface StyleDefinition {\n fg?: RGBA\n bg?: RGBA\n bold?: boolean\n italic?: boolean\n underline?: boolean\n dim?: boolean\n}\n\nexport interface MergedStyle {\n fg?: RGBA\n bg?: RGBA\n attributes: number\n}\n\nexport interface ThemeTokenStyle {\n scope: string[]\n style: {\n foreground?: ColorInput\n background?: ColorInput\n bold?: boolean\n italic?: boolean\n underline?: boolean\n dim?: boolean\n }\n}\n\nexport function convertThemeToStyles(theme: ThemeTokenStyle[]): Record<string, StyleDefinition> {\n const flatStyles: Record<string, StyleDefinition> = {}\n\n for (const tokenStyle of theme) {\n const styleDefinition: StyleDefinition = {}\n\n if (tokenStyle.style.foreground) {\n styleDefinition.fg = parseColor(tokenStyle.style.foreground)\n }\n if (tokenStyle.style.background) {\n styleDefinition.bg = parseColor(tokenStyle.style.background)\n }\n\n if (tokenStyle.style.bold !== undefined) {\n styleDefinition.bold = tokenStyle.style.bold\n }\n if (tokenStyle.style.italic !== undefined) {\n styleDefinition.italic = tokenStyle.style.italic\n }\n if (tokenStyle.style.underline !== undefined) {\n styleDefinition.underline = tokenStyle.style.underline\n }\n if (tokenStyle.style.dim !== undefined) {\n styleDefinition.dim = tokenStyle.style.dim\n }\n\n // Apply the same style to all scopes\n for (const scope of tokenStyle.scope) {\n flatStyles[scope] = styleDefinition\n }\n }\n\n return flatStyles\n}\n\nexport class SyntaxStyle {\n private lib: RenderLib\n private stylePtr: Pointer\n private _destroyed: boolean = false\n private nameCache: Map<string, number> = new Map()\n private styleDefs: Map<string, StyleDefinition> = new Map()\n private mergedCache: Map<string, MergedStyle> = new Map()\n\n constructor(lib: RenderLib, ptr: Pointer) {\n this.lib = lib\n this.stylePtr = ptr\n }\n\n static create(): SyntaxStyle {\n const lib = resolveRenderLib()\n const ptr = lib.createSyntaxStyle()\n return new SyntaxStyle(lib, ptr)\n }\n\n static fromTheme(theme: ThemeTokenStyle[]): SyntaxStyle {\n const style = SyntaxStyle.create()\n const flatStyles = convertThemeToStyles(theme)\n\n for (const [name, styleDef] of Object.entries(flatStyles)) {\n style.registerStyle(name, styleDef)\n }\n\n return style\n }\n\n static fromStyles(styles: Record<string, StyleDefinition>): SyntaxStyle {\n const style = SyntaxStyle.create()\n\n for (const [name, styleDef] of Object.entries(styles)) {\n style.registerStyle(name, styleDef)\n }\n\n return style\n }\n\n private guard(): void {\n if (this._destroyed) throw new Error(\"NativeSyntaxStyle is destroyed\")\n }\n\n public registerStyle(name: string, style: StyleDefinition): number {\n this.guard()\n\n const attributes = createTextAttributes({\n bold: style.bold,\n italic: style.italic,\n underline: style.underline,\n dim: style.dim,\n })\n\n const id = this.lib.syntaxStyleRegister(this.stylePtr, name, style.fg || null, style.bg || null, attributes)\n\n this.nameCache.set(name, id)\n this.styleDefs.set(name, style)\n\n return id\n }\n\n public resolveStyleId(name: string): number | null {\n this.guard()\n\n // Check cache first\n const cached = this.nameCache.get(name)\n if (cached !== undefined) return cached\n\n const id = this.lib.syntaxStyleResolveByName(this.stylePtr, name)\n\n if (id !== null) {\n this.nameCache.set(name, id)\n }\n\n return id\n }\n\n public getStyleId(name: string): number | null {\n this.guard()\n\n const id = this.resolveStyleId(name)\n if (id !== null) return id\n\n // Try base name if it's a scoped style\n if (name.includes(\".\")) {\n const baseName = name.split(\".\")[0]\n return this.resolveStyleId(baseName)\n }\n\n return null\n }\n\n public get ptr(): Pointer {\n this.guard()\n return this.stylePtr\n }\n\n public getStyleCount(): number {\n this.guard()\n return this.lib.syntaxStyleGetStyleCount(this.stylePtr)\n }\n\n public clearNameCache(): void {\n this.nameCache.clear()\n }\n\n public getStyle(name: string): StyleDefinition | undefined {\n this.guard()\n\n if (Object.prototype.hasOwnProperty.call(this.styleDefs, name)) {\n return undefined\n }\n\n const style = this.styleDefs.get(name)\n if (style) return style\n\n if (name.includes(\".\")) {\n const baseName = name.split(\".\")[0]\n if (Object.prototype.hasOwnProperty.call(this.styleDefs, baseName)) {\n return undefined\n }\n return this.styleDefs.get(baseName)\n }\n\n return undefined\n }\n\n public mergeStyles(...styleNames: string[]): MergedStyle {\n this.guard()\n\n const cacheKey = styleNames.join(\":\")\n const cached = this.mergedCache.get(cacheKey)\n if (cached) return cached\n\n const styleDefinition: StyleDefinition = {}\n\n for (const name of styleNames) {\n const style = this.getStyle(name)\n\n if (!style) continue\n\n if (style.fg) styleDefinition.fg = style.fg\n if (style.bg) styleDefinition.bg = style.bg\n if (style.bold !== undefined) styleDefinition.bold = style.bold\n if (style.italic !== undefined) styleDefinition.italic = style.italic\n if (style.underline !== undefined) styleDefinition.underline = style.underline\n if (style.dim !== undefined) styleDefinition.dim = style.dim\n }\n\n const attributes = createTextAttributes({\n bold: styleDefinition.bold,\n italic: styleDefinition.italic,\n underline: styleDefinition.underline,\n dim: styleDefinition.dim,\n })\n\n const merged: MergedStyle = {\n fg: styleDefinition.fg,\n bg: styleDefinition.bg,\n attributes,\n }\n\n this.mergedCache.set(cacheKey, merged)\n\n return merged\n }\n\n public clearCache(): void {\n this.guard()\n this.mergedCache.clear()\n }\n\n public getCacheSize(): number {\n this.guard()\n return this.mergedCache.size\n }\n\n public getAllStyles(): Map<string, StyleDefinition> {\n this.guard()\n return new Map(this.styleDefs)\n }\n\n public getRegisteredNames(): string[] {\n this.guard()\n return Array.from(this.styleDefs.keys())\n }\n\n public destroy(): void {\n if (this._destroyed) return\n this._destroyed = true\n this.nameCache.clear()\n this.styleDefs.clear()\n this.mergedCache.clear()\n this.lib.destroySyntaxStyle(this.stylePtr)\n }\n}\n",
|
|
9
9
|
"import type { OptimizedBuffer } from \"../buffer\"\n\n/**\n * Applies a scanline effect by darkening every nth row.\n */\nexport function applyScanlines(buffer: OptimizedBuffer, strength: number = 0.8, step: number = 2): void {\n const width = buffer.width\n const height = buffer.height\n const bg = buffer.buffers.bg\n\n for (let y = 0; y < height; y += step) {\n for (let x = 0; x < width; x++) {\n const colorIndex = (y * width + x) * 4\n bg[colorIndex] *= strength // R\n bg[colorIndex + 1] *= strength // G\n bg[colorIndex + 2] *= strength // B\n // Keep Alpha the same\n }\n }\n}\n\n/**\n * Converts the buffer colors to grayscale.\n */\nexport function applyGrayscale(buffer: OptimizedBuffer): void {\n const size = buffer.width * buffer.height\n const fg = buffer.buffers.fg\n const bg = buffer.buffers.bg\n\n for (let i = 0; i < size; i++) {\n const colorIndex = i * 4\n\n // Grayscale foreground\n const fgR = fg[colorIndex]\n const fgG = fg[colorIndex + 1]\n const fgB = fg[colorIndex + 2]\n const fgLum = 0.299 * fgR + 0.587 * fgG + 0.114 * fgB\n fg[colorIndex] = fgLum\n fg[colorIndex + 1] = fgLum\n fg[colorIndex + 2] = fgLum\n\n // Grayscale background\n const bgR = bg[colorIndex]\n const bgG = bg[colorIndex + 1]\n const bgB = bg[colorIndex + 2]\n const bgLum = 0.299 * bgR + 0.587 * bgG + 0.114 * bgB\n bg[colorIndex] = bgLum\n bg[colorIndex + 1] = bgLum\n bg[colorIndex + 2] = bgLum\n }\n}\n\n/**\n * Applies a sepia tone to the buffer.\n */\nexport function applySepia(buffer: OptimizedBuffer): void {\n const size = buffer.width * buffer.height\n const fg = buffer.buffers.fg\n const bg = buffer.buffers.bg\n\n for (let i = 0; i < size; i++) {\n const colorIndex = i * 4\n\n // Sepia foreground\n let fgR = fg[colorIndex]\n let fgG = fg[colorIndex + 1]\n let fgB = fg[colorIndex + 2]\n let newFgR = Math.min(1.0, fgR * 0.393 + fgG * 0.769 + fgB * 0.189)\n let newFgG = Math.min(1.0, fgR * 0.349 + fgG * 0.686 + fgB * 0.168)\n let newFgB = Math.min(1.0, fgR * 0.272 + fgG * 0.534 + fgB * 0.131)\n fg[colorIndex] = newFgR\n fg[colorIndex + 1] = newFgG\n fg[colorIndex + 2] = newFgB\n\n // Sepia background\n let bgR = bg[colorIndex]\n let bgG = bg[colorIndex + 1]\n let bgB = bg[colorIndex + 2]\n let newBgR = Math.min(1.0, bgR * 0.393 + bgG * 0.769 + bgB * 0.189)\n let newBgG = Math.min(1.0, bgR * 0.349 + bgG * 0.686 + bgB * 0.168)\n let newBgB = Math.min(1.0, bgR * 0.272 + bgG * 0.534 + bgB * 0.131)\n bg[colorIndex] = newBgR\n bg[colorIndex + 1] = newBgG\n bg[colorIndex + 2] = newBgB\n }\n}\n\n/**\n * Inverts the colors in the buffer.\n */\nexport function applyInvert(buffer: OptimizedBuffer): void {\n const size = buffer.width * buffer.height\n const fg = buffer.buffers.fg\n const bg = buffer.buffers.bg\n\n for (let i = 0; i < size; i++) {\n const colorIndex = i * 4\n fg[colorIndex] = 1.0 - fg[colorIndex]\n fg[colorIndex + 1] = 1.0 - fg[colorIndex + 1]\n fg[colorIndex + 2] = 1.0 - fg[colorIndex + 2]\n\n bg[colorIndex] = 1.0 - bg[colorIndex]\n bg[colorIndex + 1] = 1.0 - bg[colorIndex + 1]\n bg[colorIndex + 2] = 1.0 - bg[colorIndex + 2]\n }\n}\n\n/**\n * Adds random noise to the buffer colors.\n */\nexport function applyNoise(buffer: OptimizedBuffer, strength: number = 0.1): void {\n const size = buffer.width * buffer.height\n const fg = buffer.buffers.fg\n const bg = buffer.buffers.bg\n\n for (let i = 0; i < size; i++) {\n const colorIndex = i * 4\n const noise = (Math.random() - 0.5) * strength\n\n fg[colorIndex] = Math.max(0, Math.min(1, fg[colorIndex] + noise))\n fg[colorIndex + 1] = Math.max(0, Math.min(1, fg[colorIndex + 1] + noise))\n fg[colorIndex + 2] = Math.max(0, Math.min(1, fg[colorIndex + 2] + noise))\n\n bg[colorIndex] = Math.max(0, Math.min(1, bg[colorIndex] + noise))\n bg[colorIndex + 1] = Math.max(0, Math.min(1, bg[colorIndex + 1] + noise))\n bg[colorIndex + 2] = Math.max(0, Math.min(1, bg[colorIndex + 2] + noise))\n }\n}\n\n/**\n * Applies a simplified chromatic aberration effect.\n */\nexport function applyChromaticAberration(buffer: OptimizedBuffer, strength: number = 1): void {\n const width = buffer.width\n const height = buffer.height\n const srcFg = Float32Array.from(buffer.buffers.fg) // Copy original fg data\n const destFg = buffer.buffers.fg\n const centerX = width / 2\n const centerY = height / 2\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const dx = x - centerX\n const dy = y - centerY\n const offset = Math.round((Math.sqrt(dx * dx + dy * dy) / Math.max(centerX, centerY)) * strength)\n\n const rX = Math.max(0, Math.min(width - 1, x - offset))\n const bX = Math.max(0, Math.min(width - 1, x + offset))\n\n const rIndex = (y * width + rX) * 4\n const gIndex = (y * width + x) * 4 // Green from original position\n const bIndex = (y * width + bX) * 4\n const destIndex = (y * width + x) * 4\n\n destFg[destIndex] = srcFg[rIndex] // Red from left offset\n destFg[destIndex + 1] = srcFg[gIndex + 1] // Green from center\n destFg[destIndex + 2] = srcFg[bIndex + 2] // Blue from right offset\n // Keep original Alpha\n }\n }\n}\n\n/**\n * Converts the buffer to ASCII art based on background brightness.\n */\nexport function applyAsciiArt(buffer: OptimizedBuffer, ramp: string = \" .:-=+*#%@\"): void {\n const width = buffer.width\n const height = buffer.height\n const chars = buffer.buffers.char\n const bg = buffer.buffers.bg\n const rampLength = ramp.length\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const index = y * width + x\n const colorIndex = index * 4\n const bgR = bg[colorIndex]\n const bgG = bg[colorIndex + 1]\n const bgB = bg[colorIndex + 2]\n const lum = 0.299 * bgR + 0.587 * bgG + 0.114 * bgB // Luminance\n const rampIndex = Math.min(rampLength - 1, Math.floor(lum * rampLength))\n chars[index] = ramp[rampIndex].charCodeAt(0)\n }\n }\n}\n\ninterface ActiveGlitch {\n y: number\n type: \"shift\" | \"flip\" | \"color\"\n amount: number\n}\n\nexport class DistortionEffect {\n // --- Configurable Parameters ---\n public glitchChancePerSecond: number = 0.5\n public maxGlitchLines: number = 3\n public minGlitchDuration: number = 0.05\n public maxGlitchDuration: number = 0.2\n public maxShiftAmount: number = 10\n public shiftFlipRatio: number = 0.6\n public colorGlitchChance: number = 0.2\n\n // --- Internal State ---\n private lastGlitchTime: number = 0\n private glitchDuration: number = 0\n private activeGlitches: ActiveGlitch[] = []\n\n constructor(options?: Partial<DistortionEffect>) {\n if (options) {\n Object.assign(this, options)\n }\n }\n\n /**\n * Applies the animated distortion/glitch effect to the buffer.\n */\n public apply(buffer: OptimizedBuffer, deltaTime: number): void {\n const width = buffer.width\n const height = buffer.height\n const buf = buffer.buffers\n // Note: Using internal timer based on deltaTime is more reliable than Date.now()\n\n // Update glitch timer\n this.lastGlitchTime += deltaTime\n\n // End current glitch if duration is over\n if (this.activeGlitches.length > 0 && this.lastGlitchTime >= this.glitchDuration) {\n this.activeGlitches = []\n this.glitchDuration = 0\n }\n\n // Chance to start a new glitch\n if (this.activeGlitches.length === 0 && Math.random() < this.glitchChancePerSecond * deltaTime) {\n this.lastGlitchTime = 0\n this.glitchDuration = this.minGlitchDuration + Math.random() * (this.maxGlitchDuration - this.minGlitchDuration)\n const numGlitches = 1 + Math.floor(Math.random() * this.maxGlitchLines)\n\n for (let i = 0; i < numGlitches; i++) {\n const y = Math.floor(Math.random() * height)\n let type: ActiveGlitch[\"type\"]\n let amount = 0\n\n const typeRoll = Math.random()\n if (typeRoll < this.colorGlitchChance) {\n type = \"color\"\n } else {\n // Determine shift or flip based on remaining probability\n const shiftRoll = (typeRoll - this.colorGlitchChance) / (1 - this.colorGlitchChance)\n if (shiftRoll < this.shiftFlipRatio) {\n type = \"shift\"\n amount = Math.floor((Math.random() - 0.5) * 2 * this.maxShiftAmount)\n } else {\n type = \"flip\"\n }\n }\n\n // Avoid glitching the same line twice in one burst\n if (!this.activeGlitches.some((g) => g.y === y)) {\n this.activeGlitches.push({ y, type, amount })\n }\n }\n }\n\n // Apply active glitches\n if (this.activeGlitches.length > 0) {\n // Create temporary arrays lazily if needed (minor optimization for shift/flip)\n let tempChar: Uint32Array | null = null\n let tempFg: Float32Array | null = null\n let tempBg: Float32Array | null = null\n let tempAttr: Uint8Array | null = null\n\n for (const glitch of this.activeGlitches) {\n const y = glitch.y\n // Ensure y is within bounds (safer)\n if (y < 0 || y >= height) continue\n const baseIndex = y * width\n\n if (glitch.type === \"shift\" || glitch.type === \"flip\") {\n // Lazily create temp buffers only when needed for shift/flip\n if (!tempChar) {\n tempChar = new Uint32Array(width)\n tempFg = new Float32Array(width * 4)\n tempBg = new Float32Array(width * 4)\n tempAttr = new Uint8Array(width)\n }\n\n // 1. Copy original row data to temp buffers\n try {\n tempChar.set(buf.char.subarray(baseIndex, baseIndex + width))\n tempFg!.set(buf.fg.subarray(baseIndex * 4, (baseIndex + width) * 4))\n tempBg!.set(buf.bg.subarray(baseIndex * 4, (baseIndex + width) * 4))\n tempAttr!.set(buf.attributes.subarray(baseIndex, baseIndex + width))\n } catch (e) {\n // Handle potential range errors if buffer size changes unexpectedly\n console.error(`Error copying row ${y} for distortion:`, e)\n continue\n }\n\n if (glitch.type === \"shift\") {\n const shift = glitch.amount\n for (let x = 0; x < width; x++) {\n const srcX = (x - shift + width) % width // Wrap around shift\n const destIndex = baseIndex + x\n const srcTempIndex = srcX\n\n buf.char[destIndex] = tempChar[srcTempIndex]\n buf.attributes[destIndex] = tempAttr![srcTempIndex]\n\n const destColorIndex = destIndex * 4\n const srcTempColorIndex = srcTempIndex * 4\n\n buf.fg.set(tempFg!.subarray(srcTempColorIndex, srcTempColorIndex + 4), destColorIndex)\n buf.bg.set(tempBg!.subarray(srcTempColorIndex, srcTempColorIndex + 4), destColorIndex)\n }\n } else {\n // type === 'flip'\n for (let x = 0; x < width; x++) {\n const srcX = width - 1 - x // Flipped index\n const destIndex = baseIndex + x\n const srcTempIndex = srcX\n\n buf.char[destIndex] = tempChar[srcTempIndex]\n buf.attributes[destIndex] = tempAttr![srcTempIndex]\n\n const destColorIndex = destIndex * 4\n const srcTempColorIndex = srcTempIndex * 4\n\n buf.fg.set(tempFg!.subarray(srcTempColorIndex, srcTempColorIndex + 4), destColorIndex)\n buf.bg.set(tempBg!.subarray(srcTempColorIndex, srcTempColorIndex + 4), destColorIndex)\n }\n }\n } else if (glitch.type === \"color\") {\n const glitchStart = Math.floor(Math.random() * width)\n // Make glitch length at least 1 pixel, up to the rest of the line\n const maxPossibleLength = width - glitchStart\n // Introduce more variability: sometimes short, sometimes long, but not always full width\n let glitchLength = Math.floor(Math.random() * maxPossibleLength) + 1\n if (Math.random() < 0.2) {\n // 20% chance of a shorter, more intense glitch segment\n glitchLength = Math.floor(Math.random() * (width / 4)) + 1\n }\n glitchLength = Math.min(glitchLength, maxPossibleLength)\n\n for (let x = glitchStart; x < glitchStart + glitchLength; x++) {\n if (x >= width) break // Boundary check\n\n const destIndex = baseIndex + x\n const destColorIndex = destIndex * 4\n\n let rFg, gFg, bFg, rBg, gBg, bBg\n\n // More varied and \"glitchy\" colors\n const colorMode = Math.random()\n if (colorMode < 0.33) {\n // Pure random\n rFg = Math.random()\n gFg = Math.random()\n bFg = Math.random()\n rBg = Math.random()\n gBg = Math.random()\n bBg = Math.random()\n } else if (colorMode < 0.66) {\n // Single channel emphasis or block color\n const emphasis = Math.random()\n if (emphasis < 0.25) {\n rFg = Math.random()\n gFg = 0\n bFg = 0\n } // Red\n else if (emphasis < 0.5) {\n rFg = 0\n gFg = Math.random()\n bFg = 0\n } // Green\n else if (emphasis < 0.75) {\n rFg = 0\n gFg = 0\n bFg = Math.random()\n } // Blue\n else {\n // Bright glitch color\n const glitchColorRoll = Math.random()\n if (glitchColorRoll < 0.33) {\n rFg = 1\n gFg = 0\n bFg = 1\n } // Magenta\n else if (glitchColorRoll < 0.66) {\n rFg = 0\n gFg = 1\n bFg = 1\n } // Cyan\n else {\n rFg = 1\n gFg = 1\n bFg = 0\n } // Yellow\n }\n // Background can be inverted or similar to FG\n if (Math.random() < 0.5) {\n rBg = 1 - rFg\n gBg = 1 - gFg\n bBg = 1 - bFg\n } else {\n rBg = rFg * (Math.random() * 0.5 + 0.2) // Darker shade of fg\n gBg = gFg * (Math.random() * 0.5 + 0.2)\n bBg = bFg * (Math.random() * 0.5 + 0.2)\n }\n } else {\n // Inverted or high contrast\n rFg = Math.random() > 0.5 ? 1 : 0\n gFg = Math.random() > 0.5 ? 1 : 0\n bFg = Math.random() > 0.5 ? 1 : 0\n rBg = 1 - rFg\n gBg = 1 - gFg\n bBg = 1 - bFg\n }\n\n buf.fg[destColorIndex] = rFg\n buf.fg[destColorIndex + 1] = gFg\n buf.fg[destColorIndex + 2] = bFg\n // Keep alpha buf.fg[destColorIndex + 3]\n\n buf.bg[destColorIndex] = rBg\n buf.bg[destColorIndex + 1] = gBg\n buf.bg[destColorIndex + 2] = bBg\n // Keep alpha buf.bg[destColorIndex + 3]\n }\n }\n }\n }\n }\n}\n\n/**\n * Applies a vignette effect by darkening the corners, optimized with precomputation.\n */\nexport class VignetteEffect {\n private _strength: number\n // Stores the base attenuation (0 at center, 1 at max distance) for each pixel\n private precomputedBaseAttenuation: Float32Array | null = null\n private cachedWidth: number = -1\n private cachedHeight: number = -1\n\n constructor(strength: number = 0.5) {\n this._strength = strength\n }\n\n public set strength(newStrength: number) {\n this._strength = Math.max(0, newStrength) // Ensure strength is non-negative\n }\n\n public get strength(): number {\n return this._strength\n }\n\n private _computeFactors(width: number, height: number): void {\n this.precomputedBaseAttenuation = new Float32Array(width * height)\n const centerX = width / 2\n const centerY = height / 2\n const maxDistSq = centerX * centerX + centerY * centerY\n const safeMaxDistSq = maxDistSq === 0 ? 1 : maxDistSq // Avoid division by zero\n\n for (let y = 0; y < height; y++) {\n const dy = y - centerY\n const dySq = dy * dy\n for (let x = 0; x < width; x++) {\n const dx = x - centerX\n const distSq = dx * dx + dySq\n // Calculate base attenuation (0 to 1 based on distance)\n const baseAttenuation = Math.min(1, distSq / safeMaxDistSq)\n const index = y * width + x\n this.precomputedBaseAttenuation[index] = baseAttenuation\n }\n }\n this.cachedWidth = width\n this.cachedHeight = height\n }\n\n /**\n * Applies the vignette effect using precomputed base attenuation and current strength.\n */\n public apply(buffer: OptimizedBuffer): void {\n const width = buffer.width\n const height = buffer.height\n const buf = buffer.buffers\n const size = width * height\n\n // Recompute base attenuation if dimensions changed or factors haven't been computed yet\n if (width !== this.cachedWidth || height !== this.cachedHeight || !this.precomputedBaseAttenuation) {\n this._computeFactors(width, height)\n }\n\n // Apply effect using precomputed base and current strength\n for (let i = 0; i < size; i++) {\n // Calculate the final factor dynamically\n const factor = Math.max(0, 1 - this.precomputedBaseAttenuation![i] * this._strength)\n const colorIndex = i * 4\n\n buf.fg[colorIndex] *= factor\n buf.fg[colorIndex + 1] *= factor\n buf.fg[colorIndex + 2] *= factor\n\n buf.bg[colorIndex] *= factor\n buf.bg[colorIndex + 1] *= factor\n buf.bg[colorIndex + 2] *= factor\n }\n }\n}\n\n/**\n * Adjusts the overall brightness of the buffer.\n */\nexport class BrightnessEffect {\n private _brightness: number\n\n constructor(brightness: number = 1.0) {\n this._brightness = Math.max(0, brightness) // Ensure brightness is non-negative\n }\n\n public set brightness(newBrightness: number) {\n this._brightness = Math.max(0, newBrightness)\n }\n\n public get brightness(): number {\n return this._brightness\n }\n\n /**\n * Applies the brightness adjustment to the buffer.\n */\n public apply(buffer: OptimizedBuffer): void {\n const size = buffer.width * buffer.height\n const fg = buffer.buffers.fg\n const bg = buffer.buffers.bg\n const factor = this._brightness\n\n // No need to process if brightness is 1 (no change)\n if (factor === 1.0) {\n return\n }\n\n for (let i = 0; i < size; i++) {\n const colorIndex = i * 4\n\n // Adjust foreground\n fg[colorIndex] = Math.min(1.0, fg[colorIndex] * factor)\n fg[colorIndex + 1] = Math.min(1.0, fg[colorIndex + 1] * factor)\n fg[colorIndex + 2] = Math.min(1.0, fg[colorIndex + 2] * factor)\n // Alpha fg[colorIndex + 3] remains unchanged\n\n // Adjust background\n bg[colorIndex] = Math.min(1.0, bg[colorIndex] * factor)\n bg[colorIndex + 1] = Math.min(1.0, bg[colorIndex + 1] * factor)\n bg[colorIndex + 2] = Math.min(1.0, bg[colorIndex + 2] * factor)\n // Alpha bg[colorIndex + 3] remains unchanged\n }\n }\n}\n\n/**\n * Applies a simple box blur. (Expensive and may look bad with text).\n */\nexport class BlurEffect {\n private _radius: number\n\n constructor(radius: number = 1) {\n this._radius = Math.max(0, Math.round(radius)) // Radius should be a non-negative integer\n }\n\n public set radius(newRadius: number) {\n this._radius = Math.max(0, Math.round(newRadius))\n }\n\n public get radius(): number {\n return this._radius\n }\n\n /**\n * Applies an optimized separable box blur using a moving average (sliding window).\n */\n public apply(buffer: OptimizedBuffer): void {\n const radius = this._radius\n if (radius <= 0) return // No blur if radius is 0 or less\n\n const width = buffer.width\n const height = buffer.height\n const buf = buffer.buffers // Get the full buffer object\n const srcFg = buf.fg\n const srcBg = buf.bg\n const destFg = buf.fg // We'll write back to the original buffer\n const destBg = buf.bg\n const chars = buf.char // Get reference to character buffer\n const size = width * height\n const numChannels = 4 // RGBA\n\n // Temporary buffer for the horizontal pass result\n const tempBufferFg = new Float32Array(size * numChannels)\n const tempBufferBg = new Float32Array(size * numChannels)\n\n const windowSize = radius * 2 + 1\n\n // --- Horizontal Pass --- Fg\n for (let y = 0; y < height; y++) {\n let sumR = 0,\n sumG = 0,\n sumB = 0,\n sumA = 0\n const baseRowIndex = y * width\n\n // Initialize sum for the first window\n for (let x = -radius; x <= radius; x++) {\n const sampleX = Math.max(0, Math.min(width - 1, x))\n const srcIndex = (baseRowIndex + sampleX) * numChannels\n sumR += srcFg[srcIndex]\n sumG += srcFg[srcIndex + 1]\n sumB += srcFg[srcIndex + 2]\n sumA += srcFg[srcIndex + 3]\n }\n\n // Slide the window across the row\n for (let x = 0; x < width; x++) {\n const destIndex = (baseRowIndex + x) * numChannels\n tempBufferFg[destIndex] = sumR / windowSize\n tempBufferFg[destIndex + 1] = sumG / windowSize\n tempBufferFg[destIndex + 2] = sumB / windowSize\n tempBufferFg[destIndex + 3] = sumA / windowSize\n\n // Subtract pixel leaving the window (left edge)\n const leavingX = Math.max(0, Math.min(width - 1, x - radius))\n const leavingIndex = (baseRowIndex + leavingX) * numChannels\n sumR -= srcFg[leavingIndex]\n sumG -= srcFg[leavingIndex + 1]\n sumB -= srcFg[leavingIndex + 2]\n sumA -= srcFg[leavingIndex + 3]\n\n // Add pixel entering the window (right edge)\n const enteringX = Math.max(0, Math.min(width - 1, x + radius + 1))\n const enteringIndex = (baseRowIndex + enteringX) * numChannels\n sumR += srcFg[enteringIndex]\n sumG += srcFg[enteringIndex + 1]\n sumB += srcFg[enteringIndex + 2]\n sumA += srcFg[enteringIndex + 3]\n }\n }\n\n // --- Horizontal Pass --- Bg\n for (let y = 0; y < height; y++) {\n let sumR = 0,\n sumG = 0,\n sumB = 0,\n sumA = 0\n const baseRowIndex = y * width\n for (let x = -radius; x <= radius; x++) {\n const sampleX = Math.max(0, Math.min(width - 1, x))\n const srcIndex = (baseRowIndex + sampleX) * numChannels\n sumR += srcBg[srcIndex]\n sumG += srcBg[srcIndex + 1]\n sumB += srcBg[srcIndex + 2]\n sumA += srcBg[srcIndex + 3]\n }\n for (let x = 0; x < width; x++) {\n const destIndex = (baseRowIndex + x) * numChannels\n tempBufferBg[destIndex] = sumR / windowSize\n tempBufferBg[destIndex + 1] = sumG / windowSize\n tempBufferBg[destIndex + 2] = sumB / windowSize\n tempBufferBg[destIndex + 3] = sumA / windowSize\n const leavingX = Math.max(0, Math.min(width - 1, x - radius))\n const leavingIndex = (baseRowIndex + leavingX) * numChannels\n sumR -= srcBg[leavingIndex]\n sumG -= srcBg[leavingIndex + 1]\n sumB -= srcBg[leavingIndex + 2]\n sumA -= srcBg[leavingIndex + 3]\n const enteringX = Math.max(0, Math.min(width - 1, x + radius + 1))\n const enteringIndex = (baseRowIndex + enteringX) * numChannels\n sumR += srcBg[enteringIndex]\n sumG += srcBg[enteringIndex + 1]\n sumB += srcBg[enteringIndex + 2]\n sumA += srcBg[enteringIndex + 3]\n }\n }\n\n // --- Vertical Pass --- Fg\n for (let x = 0; x < width; x++) {\n let sumR = 0,\n sumG = 0,\n sumB = 0,\n sumA = 0\n\n // Initialize sum for the first window\n for (let y = -radius; y <= radius; y++) {\n const sampleY = Math.max(0, Math.min(height - 1, y))\n const srcIndex = (sampleY * width + x) * numChannels\n sumR += tempBufferFg[srcIndex]\n sumG += tempBufferFg[srcIndex + 1]\n sumB += tempBufferFg[srcIndex + 2]\n sumA += tempBufferFg[srcIndex + 3]\n }\n\n // Slide the window down the column\n for (let y = 0; y < height; y++) {\n const destIndex = (y * width + x) * numChannels\n destFg[destIndex] = sumR / windowSize\n destFg[destIndex + 1] = sumG / windowSize\n destFg[destIndex + 2] = sumB / windowSize\n destFg[destIndex + 3] = sumA / windowSize\n\n // Subtract pixel leaving the window (top edge)\n const leavingY = Math.max(0, Math.min(height - 1, y - radius))\n const leavingIndex = (leavingY * width + x) * numChannels\n sumR -= tempBufferFg[leavingIndex]\n sumG -= tempBufferFg[leavingIndex + 1]\n sumB -= tempBufferFg[leavingIndex + 2]\n sumA -= tempBufferFg[leavingIndex + 3]\n\n // Add pixel entering the window (bottom edge)\n const enteringY = Math.max(0, Math.min(height - 1, y + radius + 1))\n const enteringIndex = (enteringY * width + x) * numChannels\n sumR += tempBufferFg[enteringIndex]\n sumG += tempBufferFg[enteringIndex + 1]\n sumB += tempBufferFg[enteringIndex + 2]\n sumA += tempBufferFg[enteringIndex + 3]\n }\n }\n\n // --- Vertical Pass --- Bg\n for (let x = 0; x < width; x++) {\n let sumR = 0,\n sumG = 0,\n sumB = 0,\n sumA = 0\n for (let y = -radius; y <= radius; y++) {\n const sampleY = Math.max(0, Math.min(height - 1, y))\n const srcIndex = (sampleY * width + x) * numChannels\n sumR += tempBufferBg[srcIndex]\n sumG += tempBufferBg[srcIndex + 1]\n sumB += tempBufferBg[srcIndex + 2]\n sumA += tempBufferBg[srcIndex + 3]\n }\n for (let y = 0; y < height; y++) {\n const destIndex = (y * width + x) * numChannels\n destBg[destIndex] = sumR / windowSize\n destBg[destIndex + 1] = sumG / windowSize\n destBg[destIndex + 2] = sumB / windowSize\n destBg[destIndex + 3] = sumA / windowSize\n const leavingY = Math.max(0, Math.min(height - 1, y - radius))\n const leavingIndex = (leavingY * width + x) * numChannels\n sumR -= tempBufferBg[leavingIndex]\n sumG -= tempBufferBg[leavingIndex + 1]\n sumB -= tempBufferBg[leavingIndex + 2]\n sumA -= tempBufferBg[leavingIndex + 3]\n const enteringY = Math.max(0, Math.min(height - 1, y + radius + 1))\n const enteringIndex = (enteringY * width + x) * numChannels\n sumR += tempBufferBg[enteringIndex]\n sumG += tempBufferBg[enteringIndex + 1]\n sumB += tempBufferBg[enteringIndex + 2]\n sumA += tempBufferBg[enteringIndex + 3]\n }\n }\n\n // --- Character Pass (Based on blurred FG Alpha) ---\n const charRamp = [\" \", \"░\", \"▒\", \"▓\", \" \"] // Space, Light, Medium, Dark, Full\n const rampLength = charRamp.length\n\n for (let i = 0; i < size; i++) {\n const alphaIndex = i * numChannels + 3\n const fgAlpha = destFg[alphaIndex] // Get the final blurred FG alpha\n\n // Clamp alpha just in case, although blur should keep it in [0, 1]\n const clampedAlpha = Math.max(0, Math.min(1, fgAlpha))\n\n // Map alpha to character ramp\n // Ensure index doesn't exceed ramp bounds if alpha is exactly 1.0\n const rampIndex = Math.min(rampLength - 1, Math.floor(clampedAlpha * rampLength))\n\n chars[i] = charRamp[rampIndex].charCodeAt(0)\n }\n }\n}\n\n/**\n * Applies a bloom effect based on bright areas (Simplified).\n */\nexport class BloomEffect {\n private _threshold: number\n private _strength: number\n private _radius: number\n\n constructor(threshold: number = 0.8, strength: number = 0.2, radius: number = 2) {\n this._threshold = Math.max(0, Math.min(1, threshold))\n this._strength = Math.max(0, strength)\n this._radius = Math.max(0, Math.round(radius))\n }\n\n public set threshold(newThreshold: number) {\n this._threshold = Math.max(0, Math.min(1, newThreshold))\n }\n public get threshold(): number {\n return this._threshold\n }\n\n public set strength(newStrength: number) {\n this._strength = Math.max(0, newStrength)\n }\n public get strength(): number {\n return this._strength\n }\n\n public set radius(newRadius: number) {\n this._radius = Math.max(0, Math.round(newRadius))\n }\n public get radius(): number {\n return this._radius\n }\n\n public apply(buffer: OptimizedBuffer): void {\n const threshold = this._threshold\n const strength = this._strength\n const radius = this._radius\n\n if (strength <= 0 || radius <= 0) return // No bloom if strength or radius is non-positive\n\n const width = buffer.width\n const height = buffer.height\n // Operate directly on the buffer's data for bloom, but need a source copy temporarily\n const srcFg = Float32Array.from(buffer.buffers.fg)\n const srcBg = Float32Array.from(buffer.buffers.bg)\n const destFg = buffer.buffers.fg\n const destBg = buffer.buffers.bg\n\n const brightPixels: { x: number; y: number; intensity: number }[] = []\n\n // 1. Find bright pixels based on original data\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const index = (y * width + x) * 4\n // Consider max component brightness, or luminance? Using luminance.\n const fgLum = 0.299 * srcFg[index] + 0.587 * srcFg[index + 1] + 0.114 * srcFg[index + 2]\n const bgLum = 0.299 * srcBg[index] + 0.587 * srcBg[index + 1] + 0.114 * srcBg[index + 2]\n const lum = Math.max(fgLum, bgLum)\n if (lum > threshold) {\n const intensity = (lum - threshold) / (1 - threshold + 1e-6) // Add epsilon to avoid div by zero\n brightPixels.push({ x, y, intensity: Math.max(0, intensity) })\n }\n }\n }\n\n // If no bright pixels found, exit early\n if (brightPixels.length === 0) return\n\n // Initialize destination buffers by copying original state before applying bloom\n // This prevents bloom from compounding on itself within one frame pass\n destFg.set(srcFg)\n destBg.set(srcBg)\n\n // 2. Apply bloom spread from bright pixels onto the destination buffers\n for (const bright of brightPixels) {\n for (let ky = -radius; ky <= radius; ky++) {\n for (let kx = -radius; kx <= radius; kx++) {\n if (kx === 0 && ky === 0) continue // Don't bloom self\n\n const sampleX = bright.x + kx\n const sampleY = bright.y + ky\n\n if (sampleX >= 0 && sampleX < width && sampleY >= 0 && sampleY < height) {\n const distSq = kx * kx + ky * ky // Use squared distance for falloff calculation\n const radiusSq = radius * radius\n if (distSq <= radiusSq) {\n // Simple linear falloff based on squared distance\n const falloff = 1 - distSq / radiusSq\n const bloomAmount = bright.intensity * strength * falloff\n const destIndex = (sampleY * width + sampleX) * 4\n\n // Add bloom to both fg and bg, clamping at 1.0\n destFg[destIndex] = Math.min(1.0, destFg[destIndex] + bloomAmount)\n destFg[destIndex + 1] = Math.min(1.0, destFg[destIndex + 1] + bloomAmount)\n destFg[destIndex + 2] = Math.min(1.0, destFg[destIndex + 2] + bloomAmount)\n\n destBg[destIndex] = Math.min(1.0, destBg[destIndex] + bloomAmount)\n destBg[destIndex + 1] = Math.min(1.0, destBg[destIndex + 1] + bloomAmount)\n destBg[destIndex + 2] = Math.min(1.0, destBg[destIndex + 2] + bloomAmount)\n }\n }\n }\n }\n }\n }\n}\n",
|
|
@@ -11,23 +11,23 @@
|
|
|
11
11
|
"import { type RenderableOptions, Renderable } from \"../Renderable\"\nimport { OptimizedBuffer } from \"../buffer\"\nimport type { RenderContext } from \"../types\"\n\nexport interface FrameBufferOptions extends RenderableOptions<FrameBufferRenderable> {\n width: number\n height: number\n respectAlpha?: boolean\n}\n\nexport class FrameBufferRenderable extends Renderable {\n public frameBuffer: OptimizedBuffer\n protected respectAlpha: boolean\n\n constructor(ctx: RenderContext, options: FrameBufferOptions) {\n super(ctx, options)\n this.respectAlpha = options.respectAlpha || false\n this.frameBuffer = OptimizedBuffer.create(options.width, options.height, this._ctx.widthMethod, {\n respectAlpha: this.respectAlpha,\n id: options.id || `framebufferrenderable-${this.id}`,\n })\n }\n\n protected onResize(width: number, height: number): void {\n if (width <= 0 || height <= 0) {\n throw new Error(`Invalid resize dimensions for FrameBufferRenderable ${this.id}: ${width}x${height}`)\n }\n\n this.frameBuffer.resize(width, height)\n super.onResize(width, height)\n this.requestRender()\n }\n\n protected renderSelf(buffer: OptimizedBuffer): void {\n if (!this.visible || this.isDestroyed) return\n buffer.drawFrameBuffer(this.x, this.y, this.frameBuffer)\n }\n\n protected destroySelf(): void {\n // TODO: framebuffer collides with buffered Renderable, which holds a framebuffer\n // and destroys it if it exists already. Maybe instead of extending FrameBufferRenderable,\n // subclasses can use the buffered option on the base renderable instead,\n // then this would become something that takes in an external framebuffer to bring it into layout.\n this.frameBuffer?.destroy()\n super.destroySelf()\n }\n}\n",
|
|
12
12
|
"import type { RenderableOptions } from \"../Renderable\"\nimport {\n ASCIIFontSelectionHelper,\n convertGlobalToLocalSelection,\n Selection,\n type LocalSelectionBounds,\n} from \"../lib/selection\"\nimport {\n type fonts,\n measureText,\n renderFontToFrameBuffer,\n getCharacterPositions,\n type ASCIIFontName,\n} from \"../lib/ascii.font\"\nimport { RGBA, parseColor } from \"../lib/RGBA\"\nimport { FrameBufferRenderable, type FrameBufferOptions } from \"./FrameBuffer\"\nimport type { RenderContext } from \"../types\"\n\nexport interface ASCIIFontOptions extends Omit<RenderableOptions<ASCIIFontRenderable>, \"width\" | \"height\"> {\n text?: string\n font?: ASCIIFontName\n fg?: RGBA | RGBA[]\n bg?: RGBA\n selectionBg?: string | RGBA\n selectionFg?: string | RGBA\n selectable?: boolean\n}\n\nexport class ASCIIFontRenderable extends FrameBufferRenderable {\n public selectable: boolean = true\n private _text: string\n private _font: keyof typeof fonts\n private _fg: RGBA[]\n private _bg: RGBA\n private _selectionBg: RGBA | undefined\n private _selectionFg: RGBA | undefined\n private lastLocalSelection: LocalSelectionBounds | null = null\n\n private selectionHelper: ASCIIFontSelectionHelper\n\n constructor(ctx: RenderContext, options: ASCIIFontOptions) {\n const font = options.font || \"tiny\"\n const text = options.text || \"\"\n const measurements = measureText({ text: text, font })\n\n super(ctx, {\n flexShrink: 0,\n ...options,\n width: measurements.width || 1,\n height: measurements.height || 1,\n respectAlpha: true,\n } as FrameBufferOptions)\n\n this._text = text\n this._font = font\n this._fg = Array.isArray(options.fg) ? options.fg : [options.fg || RGBA.fromInts(255, 255, 255, 255)]\n this._bg = options.bg || RGBA.fromValues(0, 0, 0, 0)\n this._selectionBg = options.selectionBg ? parseColor(options.selectionBg) : undefined\n this._selectionFg = options.selectionFg ? parseColor(options.selectionFg) : undefined\n this.selectable = options.selectable ?? true\n\n this.selectionHelper = new ASCIIFontSelectionHelper(\n () => this._text,\n () => this._font,\n )\n\n this.renderFontToBuffer()\n }\n\n get text(): string {\n return this._text\n }\n\n set text(value: string) {\n this._text = value\n this.updateDimensions()\n\n if (this.lastLocalSelection) {\n this.selectionHelper.onLocalSelectionChanged(this.lastLocalSelection, this.width, this.height)\n }\n\n this.renderFontToBuffer()\n this.requestRender()\n }\n\n get font(): keyof typeof fonts {\n return this._font\n }\n\n set font(value: keyof typeof fonts) {\n this._font = value\n this.updateDimensions()\n\n if (this.lastLocalSelection) {\n this.selectionHelper.onLocalSelectionChanged(this.lastLocalSelection, this.width, this.height)\n }\n\n this.renderFontToBuffer()\n this.requestRender()\n }\n\n get fg(): RGBA[] {\n return this._fg\n }\n\n set fg(value: RGBA | RGBA[] | string | string[]) {\n if (Array.isArray(value)) {\n this._fg = value.map((color) => (typeof color === \"string\" ? parseColor(color) : color))\n } else {\n this._fg = [typeof value === \"string\" ? parseColor(value) : value]\n }\n\n this.renderFontToBuffer()\n this.requestRender()\n }\n\n get bg(): RGBA {\n return this._bg\n }\n\n set bg(value: RGBA | string) {\n this._bg = typeof value === \"string\" ? parseColor(value) : value\n this.renderFontToBuffer()\n this.requestRender()\n }\n\n private updateDimensions(): void {\n const measurements = measureText({ text: this._text, font: this._font })\n this.width = measurements.width\n this.height = measurements.height\n }\n\n shouldStartSelection(x: number, y: number): boolean {\n const localX = x - this.x\n const localY = y - this.y\n return this.selectionHelper.shouldStartSelection(localX, localY, this.width, this.height)\n }\n\n onSelectionChanged(selection: Selection | null): boolean {\n const localSelection = convertGlobalToLocalSelection(selection, this.x, this.y)\n this.lastLocalSelection = localSelection\n const changed = this.selectionHelper.onLocalSelectionChanged(localSelection, this.width, this.height)\n if (changed) {\n this.renderFontToBuffer()\n this.requestRender()\n }\n return changed\n }\n\n getSelectedText(): string {\n const selection = this.selectionHelper.getSelection()\n if (!selection) return \"\"\n return this._text.slice(selection.start, selection.end)\n }\n\n hasSelection(): boolean {\n return this.selectionHelper.hasSelection()\n }\n\n protected onResize(width: number, height: number): void {\n super.onResize(width, height)\n this.renderFontToBuffer()\n }\n\n private renderFontToBuffer(): void {\n if (this.isDestroyed) return\n this.frameBuffer.clear(this._bg)\n\n renderFontToFrameBuffer(this.frameBuffer, {\n text: this._text,\n x: 0,\n y: 0,\n fg: this._fg,\n bg: this._bg,\n font: this._font,\n })\n\n const selection = this.selectionHelper.getSelection()\n if (selection && (this._selectionBg || this._selectionFg)) {\n this.renderSelectionHighlight(selection)\n }\n }\n\n private renderSelectionHighlight(selection: { start: number; end: number }): void {\n if (!this._selectionBg && !this._selectionFg) return\n\n const selectedText = this._text.slice(selection.start, selection.end)\n if (!selectedText) return\n\n const positions = getCharacterPositions(this._text, this._font)\n const startX = positions[selection.start] || 0\n const endX =\n selection.end < positions.length\n ? positions[selection.end]\n : measureText({ text: this._text, font: this._font }).width\n\n if (this._selectionBg) {\n this.frameBuffer.fillRect(startX, 0, endX - startX, this.height, this._selectionBg)\n }\n\n if (this._selectionFg || this._selectionBg) {\n renderFontToFrameBuffer(this.frameBuffer, {\n text: selectedText,\n x: startX,\n y: 0,\n fg: this._selectionFg ? [this._selectionFg] : this._fg,\n bg: this._selectionBg || this._bg,\n font: this._font,\n })\n }\n }\n}\n",
|
|
13
13
|
"import { Edge, Gutter } from \"yoga-layout\"\nimport { type RenderableOptions, Renderable } from \"../Renderable\"\nimport type { OptimizedBuffer } from \"../buffer\"\nimport {\n type BorderCharacters,\n type BorderSides,\n type BorderSidesConfig,\n type BorderStyle,\n borderCharsToArray,\n getBorderSides,\n} from \"../lib\"\nimport { type ColorInput, RGBA, parseColor } from \"../lib/RGBA\"\nimport { isValidPercentage } from \"../lib/renderable.validations\"\nimport type { RenderContext } from \"../types\"\n\nexport interface BoxOptions<TRenderable extends Renderable = BoxRenderable> extends RenderableOptions<TRenderable> {\n backgroundColor?: string | RGBA\n borderStyle?: BorderStyle\n border?: boolean | BorderSides[]\n borderColor?: string | RGBA\n customBorderChars?: BorderCharacters\n shouldFill?: boolean\n title?: string\n titleAlignment?: \"left\" | \"center\" | \"right\"\n focusedBorderColor?: ColorInput\n gap?: number | `${number}%`\n rowGap?: number | `${number}%`\n columnGap?: number | `${number}%`\n}\n\nfunction isGapType(value: any): value is number | undefined {\n if (value === undefined) {\n return true\n }\n if (typeof value === \"number\" && !Number.isNaN(value)) {\n return true\n }\n return isValidPercentage(value)\n}\n\nexport class BoxRenderable extends Renderable {\n protected _backgroundColor: RGBA\n protected _border: boolean | BorderSides[]\n protected _borderStyle: BorderStyle\n protected _borderColor: RGBA\n protected _focusedBorderColor: RGBA\n private _customBorderCharsObj: BorderCharacters | undefined\n protected _customBorderChars?: Uint32Array\n protected borderSides: BorderSidesConfig\n public shouldFill: boolean\n protected _title?: string\n protected _titleAlignment: \"left\" | \"center\" | \"right\"\n\n protected _defaultOptions = {\n backgroundColor: \"transparent\",\n borderStyle: \"single\",\n border: false,\n borderColor: \"#FFFFFF\",\n shouldFill: true,\n titleAlignment: \"left\",\n focusedBorderColor: \"#00AAFF\",\n } satisfies Partial<BoxOptions>\n\n constructor(ctx: RenderContext, options: BoxOptions) {\n super(ctx, options)\n\n this._backgroundColor = parseColor(options.backgroundColor || this._defaultOptions.backgroundColor)\n this._border = options.border ?? this._defaultOptions.border\n if (\n !options.border &&\n (options.borderStyle || options.borderColor || options.focusedBorderColor || options.customBorderChars)\n ) {\n this._border = true\n }\n this._borderStyle = options.borderStyle || this._defaultOptions.borderStyle\n this._borderColor = parseColor(options.borderColor || this._defaultOptions.borderColor)\n this._focusedBorderColor = parseColor(options.focusedBorderColor || this._defaultOptions.focusedBorderColor)\n this._customBorderCharsObj = options.customBorderChars\n this._customBorderChars = this._customBorderCharsObj ? borderCharsToArray(this._customBorderCharsObj) : undefined\n this.borderSides = getBorderSides(this._border)\n this.shouldFill = options.shouldFill ?? this._defaultOptions.shouldFill\n this._title = options.title\n this._titleAlignment = options.titleAlignment || this._defaultOptions.titleAlignment\n\n this.applyYogaBorders()\n\n const hasInitialGapProps =\n options.gap !== undefined || options.rowGap !== undefined || options.columnGap !== undefined\n if (hasInitialGapProps) {\n this.applyYogaGap(options)\n }\n }\n\n private initializeBorder(): void {\n // https://github.com/sst/opentui/issues/186\n // Solid-js reconciler does not pass props to constructor on init,\n // so we need to initialize the border when supporting properties are set.\n // borderStyle, borderColor, focusedBorderColor\n if (this._border === false) {\n this._border = true\n this.borderSides = getBorderSides(this._border)\n this.applyYogaBorders()\n }\n }\n\n public get customBorderChars(): BorderCharacters | undefined {\n return this._customBorderCharsObj\n }\n\n public set customBorderChars(value: BorderCharacters | undefined) {\n this._customBorderCharsObj = value\n this._customBorderChars = value ? borderCharsToArray(value) : undefined\n this.requestRender()\n }\n\n public get backgroundColor(): RGBA {\n return this._backgroundColor\n }\n\n public set backgroundColor(value: RGBA | string | undefined) {\n const newColor = parseColor(value ?? this._defaultOptions.backgroundColor)\n if (this._backgroundColor !== newColor) {\n this._backgroundColor = newColor\n this.requestRender()\n }\n }\n\n public get border(): boolean | BorderSides[] {\n return this._border\n }\n\n public set border(value: boolean | BorderSides[]) {\n if (this._border !== value) {\n this._border = value\n this.borderSides = getBorderSides(value)\n this.applyYogaBorders()\n this.requestRender()\n }\n }\n\n public get borderStyle(): BorderStyle {\n return this._borderStyle\n }\n\n public set borderStyle(value: BorderStyle) {\n let _value = value ?? this._defaultOptions.borderStyle\n if (this._borderStyle !== _value || !this._border) {\n this._borderStyle = _value\n this._customBorderChars = undefined\n this.initializeBorder()\n this.requestRender()\n }\n }\n\n public get borderColor(): RGBA {\n return this._borderColor\n }\n\n public set borderColor(value: RGBA | string) {\n const newColor = parseColor(value ?? this._defaultOptions.borderColor)\n if (this._borderColor !== newColor) {\n this._borderColor = newColor\n this.initializeBorder()\n this.requestRender()\n }\n }\n\n public get focusedBorderColor(): RGBA {\n return this._focusedBorderColor\n }\n\n public set focusedBorderColor(value: RGBA | string) {\n const newColor = parseColor(value ?? this._defaultOptions.focusedBorderColor)\n if (this._focusedBorderColor !== newColor) {\n this._focusedBorderColor = newColor\n this.initializeBorder()\n if (this._focused) {\n this.requestRender()\n }\n }\n }\n\n public get title(): string | undefined {\n return this._title\n }\n\n public set title(value: string | undefined) {\n if (this._title !== value) {\n this._title = value\n this.requestRender()\n }\n }\n\n public get titleAlignment(): \"left\" | \"center\" | \"right\" {\n return this._titleAlignment\n }\n\n public set titleAlignment(value: \"left\" | \"center\" | \"right\") {\n if (this._titleAlignment !== value) {\n this._titleAlignment = value\n this.requestRender()\n }\n }\n\n protected renderSelf(buffer: OptimizedBuffer): void {\n const currentBorderColor = this._focused ? this._focusedBorderColor : this._borderColor\n\n buffer.drawBox({\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.height,\n borderStyle: this._borderStyle,\n customBorderChars: this._customBorderChars,\n border: this._border,\n borderColor: currentBorderColor,\n backgroundColor: this._backgroundColor,\n shouldFill: this.shouldFill,\n title: this._title,\n titleAlignment: this._titleAlignment,\n })\n }\n\n protected getScissorRect(): { x: number; y: number; width: number; height: number } {\n const baseRect = super.getScissorRect()\n\n if (!this.borderSides.top && !this.borderSides.right && !this.borderSides.bottom && !this.borderSides.left) {\n return baseRect\n }\n\n const leftInset = this.borderSides.left ? 1 : 0\n const rightInset = this.borderSides.right ? 1 : 0\n const topInset = this.borderSides.top ? 1 : 0\n const bottomInset = this.borderSides.bottom ? 1 : 0\n\n return {\n x: baseRect.x + leftInset,\n y: baseRect.y + topInset,\n width: Math.max(0, baseRect.width - leftInset - rightInset),\n height: Math.max(0, baseRect.height - topInset - bottomInset),\n }\n }\n\n private applyYogaBorders(): void {\n const node = this.yogaNode\n node.setBorder(Edge.Left, this.borderSides.left ? 1 : 0)\n node.setBorder(Edge.Right, this.borderSides.right ? 1 : 0)\n node.setBorder(Edge.Top, this.borderSides.top ? 1 : 0)\n node.setBorder(Edge.Bottom, this.borderSides.bottom ? 1 : 0)\n this.requestRender()\n }\n\n private applyYogaGap(options: BoxOptions): void {\n const node = this.yogaNode\n\n if (isGapType(options.gap)) {\n node.setGap(Gutter.All, options.gap)\n }\n\n if (isGapType(options.rowGap)) {\n node.setGap(Gutter.Row, options.rowGap)\n }\n\n if (isGapType(options.columnGap)) {\n node.setGap(Gutter.Column, options.columnGap)\n }\n }\n\n public set gap(gap: number | `${number}%` | undefined) {\n if (isGapType(gap)) {\n this.yogaNode.setGap(Gutter.All, gap)\n this.requestRender()\n }\n }\n\n public set rowGap(rowGap: number | `${number}%` | undefined) {\n if (isGapType(rowGap)) {\n this.yogaNode.setGap(Gutter.Row, rowGap)\n this.requestRender()\n }\n }\n\n public set columnGap(columnGap: number | `${number}%` | undefined) {\n if (isGapType(columnGap)) {\n this.yogaNode.setGap(Gutter.Column, columnGap)\n this.requestRender()\n }\n }\n}\n",
|
|
14
|
-
"import { Renderable, type RenderableOptions } from \"../Renderable\"\nimport { convertGlobalToLocalSelection, Selection, type LocalSelectionBounds } from \"../lib/selection\"\nimport { TextBuffer, type TextChunk } from \"../text-buffer\"\nimport { TextBufferView } from \"../text-buffer-view\"\nimport { RGBA, parseColor } from \"../lib/RGBA\"\nimport { type RenderContext } from \"../types\"\nimport type { OptimizedBuffer } from \"../buffer\"\nimport { MeasureMode } from \"yoga-layout\"\nimport type { LineInfo } from \"../zig\"\nimport { SyntaxStyle } from \"../syntax-style\"\n\nexport interface TextBufferOptions extends RenderableOptions<TextBufferRenderable> {\n fg?: string | RGBA\n bg?: string | RGBA\n selectionBg?: string | RGBA\n selectionFg?: string | RGBA\n selectable?: boolean\n attributes?: number\n wrapMode?: \"none\" | \"char\" | \"word\"\n tabIndicator?: string | number\n tabIndicatorColor?: string | RGBA\n}\n\nexport abstract class TextBufferRenderable extends Renderable {\n public selectable: boolean = true\n\n protected _defaultFg: RGBA\n protected _defaultBg: RGBA\n protected _defaultAttributes: number\n protected _selectionBg: RGBA | undefined\n protected _selectionFg: RGBA | undefined\n protected _wrapMode: \"none\" | \"char\" | \"word\" = \"word\"\n protected lastLocalSelection: LocalSelectionBounds | null = null\n protected _tabIndicator?: string | number\n protected _tabIndicatorColor?: RGBA\n\n protected textBuffer: TextBuffer\n protected textBufferView: TextBufferView\n protected _lineInfo: LineInfo = { lineStarts: [], lineWidths: [], maxLineWidth: 0 }\n\n protected _defaultOptions = {\n fg: RGBA.fromValues(1, 1, 1, 1),\n bg: RGBA.fromValues(0, 0, 0, 0),\n selectionBg: undefined,\n selectionFg: undefined,\n selectable: true,\n attributes: 0,\n wrapMode: \"word\" as \"none\" | \"char\" | \"word\",\n tabIndicator: undefined,\n tabIndicatorColor: undefined,\n } satisfies Partial<TextBufferOptions>\n\n constructor(ctx: RenderContext, options: TextBufferOptions) {\n super(ctx, options)\n\n this._defaultFg = parseColor(options.fg ?? this._defaultOptions.fg)\n this._defaultBg = parseColor(options.bg ?? this._defaultOptions.bg)\n this._defaultAttributes = options.attributes ?? this._defaultOptions.attributes\n this._selectionBg = options.selectionBg ? parseColor(options.selectionBg) : this._defaultOptions.selectionBg\n this._selectionFg = options.selectionFg ? parseColor(options.selectionFg) : this._defaultOptions.selectionFg\n this.selectable = options.selectable ?? this._defaultOptions.selectable\n this._wrapMode = options.wrapMode ?? this._defaultOptions.wrapMode\n this._tabIndicator = options.tabIndicator ?? this._defaultOptions.tabIndicator\n this._tabIndicatorColor = options.tabIndicatorColor\n ? parseColor(options.tabIndicatorColor)\n : this._defaultOptions.tabIndicatorColor\n\n this.textBuffer = TextBuffer.create(this._ctx.widthMethod)\n this.textBufferView = TextBufferView.create(this.textBuffer)\n\n const style = SyntaxStyle.create()\n this.textBuffer.setSyntaxStyle(style)\n\n this.textBufferView.setWrapMode(this._wrapMode)\n this.setupMeasureFunc()\n\n this.textBuffer.setDefaultFg(this._defaultFg)\n this.textBuffer.setDefaultBg(this._defaultBg)\n this.textBuffer.setDefaultAttributes(this._defaultAttributes)\n\n if (this._tabIndicator !== undefined) {\n this.textBufferView.setTabIndicator(this._tabIndicator)\n }\n if (this._tabIndicatorColor !== undefined) {\n this.textBufferView.setTabIndicatorColor(this._tabIndicatorColor)\n }\n\n if (this._wrapMode !== \"none\" && this.width > 0) {\n this.updateWrapWidth(this.width)\n }\n\n this.updateTextInfo()\n }\n\n get plainText(): string {\n return this.textBuffer.getPlainText()\n }\n\n get textLength(): number {\n return this.textBuffer.length\n }\n\n get fg(): RGBA {\n return this._defaultFg\n }\n\n set fg(value: RGBA | string | undefined) {\n const newColor = parseColor(value ?? this._defaultOptions.fg)\n if (this._defaultFg !== newColor) {\n this._defaultFg = newColor\n this.textBuffer.setDefaultFg(this._defaultFg)\n this.onFgChanged(newColor)\n this.requestRender()\n }\n }\n\n get selectionBg(): RGBA | undefined {\n return this._selectionBg\n }\n\n set selectionBg(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : this._defaultOptions.selectionBg\n if (this._selectionBg !== newColor) {\n this._selectionBg = newColor\n if (this.lastLocalSelection) {\n this.updateLocalSelection(this.lastLocalSelection)\n }\n this.requestRender()\n }\n }\n\n get selectionFg(): RGBA | undefined {\n return this._selectionFg\n }\n\n set selectionFg(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : this._defaultOptions.selectionFg\n if (this._selectionFg !== newColor) {\n this._selectionFg = newColor\n if (this.lastLocalSelection) {\n this.updateLocalSelection(this.lastLocalSelection)\n }\n this.requestRender()\n }\n }\n\n get bg(): RGBA {\n return this._defaultBg\n }\n\n set bg(value: RGBA | string | undefined) {\n const newColor = parseColor(value ?? this._defaultOptions.bg)\n if (this._defaultBg !== newColor) {\n this._defaultBg = newColor\n this.textBuffer.setDefaultBg(this._defaultBg)\n this.onBgChanged(newColor)\n this.requestRender()\n }\n }\n\n get attributes(): number {\n return this._defaultAttributes\n }\n\n set attributes(value: number) {\n if (this._defaultAttributes !== value) {\n this._defaultAttributes = value\n this.textBuffer.setDefaultAttributes(this._defaultAttributes)\n this.onAttributesChanged(value)\n this.requestRender()\n }\n }\n\n get wrapMode(): \"none\" | \"char\" | \"word\" {\n return this._wrapMode\n }\n\n set wrapMode(value: \"none\" | \"char\" | \"word\") {\n if (this._wrapMode !== value) {\n this._wrapMode = value\n this.textBufferView.setWrapMode(this._wrapMode)\n if (value !== \"none\" && this.width > 0) {\n this.updateWrapWidth(this.width)\n }\n // Changing wrap mode can change dimensions, so mark yoga node dirty to trigger re-measurement\n this.yogaNode.markDirty()\n this.requestRender()\n }\n }\n\n get tabIndicator(): string | number | undefined {\n return this._tabIndicator\n }\n\n set tabIndicator(value: string | number | undefined) {\n if (this._tabIndicator !== value) {\n this._tabIndicator = value\n if (value !== undefined) {\n this.textBufferView.setTabIndicator(value)\n }\n this.requestRender()\n }\n }\n\n get tabIndicatorColor(): RGBA | undefined {\n return this._tabIndicatorColor\n }\n\n set tabIndicatorColor(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : undefined\n if (this._tabIndicatorColor !== newColor) {\n this._tabIndicatorColor = newColor\n if (newColor !== undefined) {\n this.textBufferView.setTabIndicatorColor(newColor)\n }\n this.requestRender()\n }\n }\n\n protected onResize(width: number, height: number): void {\n // Update viewport size to match renderable dimensions\n this.textBufferView.setViewportSize(width, height)\n\n if (this.lastLocalSelection) {\n const changed = this.updateLocalSelection(this.lastLocalSelection)\n if (changed) {\n this.requestRender()\n }\n }\n }\n\n protected refreshLocalSelection(): boolean {\n if (this.lastLocalSelection) {\n return this.updateLocalSelection(this.lastLocalSelection)\n }\n return false\n }\n\n private updateLocalSelection(localSelection: LocalSelectionBounds | null): boolean {\n if (!localSelection?.isActive) {\n this.textBufferView.resetLocalSelection()\n return true\n }\n\n return this.textBufferView.setLocalSelection(\n localSelection.anchorX,\n localSelection.anchorY,\n localSelection.focusX,\n localSelection.focusY,\n this._selectionBg,\n this._selectionFg,\n )\n }\n\n protected updateTextInfo(): void {\n if (this.lastLocalSelection) {\n const changed = this.updateLocalSelection(this.lastLocalSelection)\n if (changed) {\n this.requestRender()\n }\n }\n\n this.yogaNode.markDirty()\n this.requestRender()\n }\n\n private updateLineInfo(): void {\n const lineInfo = this.textBufferView.logicalLineInfo\n this._lineInfo.lineStarts = lineInfo.lineStarts\n this._lineInfo.lineWidths = lineInfo.lineWidths\n this._lineInfo.maxLineWidth = lineInfo.maxLineWidth\n }\n\n private updateWrapWidth(width: number): void {\n this.textBufferView.setWrapWidth(width)\n this.updateLineInfo()\n }\n\n private setupMeasureFunc(): void {\n const measureFunc = (\n width: number,\n widthMode: MeasureMode,\n height: number,\n heightMode: MeasureMode,\n ): { width: number; height: number } => {\n // Use a reasonable default for NaN/undefined height to allow measuring content\n // This happens when Yoga calls measure with height/widthMode=\"Undefined\" (0)\n const effectiveWidth = isNaN(width) ? 1 : width\n\n if (this._wrapMode !== \"none\" && this.width !== effectiveWidth) {\n this.updateWrapWidth(effectiveWidth)\n } else {\n this.updateLineInfo()\n }\n\n const measuredWidth = this._lineInfo.maxLineWidth\n const measuredHeight = this._lineInfo.lineStarts.length\n\n // NOTE: Yoga may use these measurements or not.\n // If the yoga node settings and the parent allow this node to grow, it will.\n return {\n width: Math.max(1, measuredWidth),\n height: Math.max(1, measuredHeight),\n }\n }\n\n this.yogaNode.setMeasureFunc(measureFunc)\n }\n\n shouldStartSelection(x: number, y: number): boolean {\n if (!this.selectable) return false\n\n const localX = x - this.x\n const localY = y - this.y\n\n return localX >= 0 && localX < this.width && localY >= 0 && localY < this.height\n }\n\n onSelectionChanged(selection: Selection | null): boolean {\n const localSelection = convertGlobalToLocalSelection(selection, this.x, this.y)\n this.lastLocalSelection = localSelection\n\n const changed = this.updateLocalSelection(localSelection)\n\n if (changed) {\n this.requestRender()\n }\n\n return this.hasSelection()\n }\n\n getSelectedText(): string {\n return this.textBufferView.getSelectedText()\n }\n\n hasSelection(): boolean {\n return this.textBufferView.hasSelection()\n }\n\n getSelection(): { start: number; end: number } | null {\n return this.textBufferView.getSelection()\n }\n\n render(buffer: OptimizedBuffer, deltaTime: number): void {\n if (!this.visible) return\n\n this.markClean()\n this._ctx.addToHitGrid(this.x, this.y, this.width, this.height, this.num)\n\n this.renderSelf(buffer)\n }\n\n protected renderSelf(buffer: OptimizedBuffer): void {\n if (this.textBuffer.ptr) {\n buffer.drawTextBuffer(this.textBufferView, this.x, this.y)\n }\n }\n\n destroy(): void {\n this.textBufferView.destroy()\n this.textBuffer.destroy()\n super.destroy()\n }\n\n protected onFgChanged(newColor: RGBA): void {\n // Override in subclasses if needed\n }\n\n protected onBgChanged(newColor: RGBA): void {\n // Override in subclasses if needed\n }\n\n protected onAttributesChanged(newAttributes: number): void {\n // Override in subclasses if needed\n }\n}\n",
|
|
15
|
-
"import { type RenderContext } from \"../types\"\nimport { StyledText } from \"../lib/styled-text\"\nimport { SyntaxStyle } from \"../syntax-style\"\nimport { getTreeSitterClient, treeSitterToStyledText, TreeSitterClient } from \"../lib/tree-sitter\"\nimport { TextBufferRenderable, type TextBufferOptions } from \"./TextBufferRenderable\"\n\nexport interface CodeOptions extends TextBufferOptions {\n content?: string\n filetype?: string\n syntaxStyle: SyntaxStyle\n treeSitterClient?: TreeSitterClient\n conceal?: boolean\n drawUnstyledText?: boolean\n}\n\nexport class CodeRenderable extends TextBufferRenderable {\n private _content: string\n private _filetype?: string\n private _syntaxStyle: SyntaxStyle\n private _isHighlighting: boolean = false\n private _treeSitterClient: TreeSitterClient\n private _pendingRehighlight: boolean = false\n private _pendingUpdate: boolean = false\n private _currentHighlightId: number = 0\n private _conceal: boolean\n private _drawUnstyledText: boolean\n\n protected _contentDefaultOptions = {\n content: \"\",\n conceal: true,\n drawUnstyledText: true,\n } satisfies Partial<CodeOptions>\n\n constructor(ctx: RenderContext, options: CodeOptions) {\n super(ctx, options)\n\n this._content = options.content ?? this._contentDefaultOptions.content\n this._filetype = options.filetype\n this._syntaxStyle = options.syntaxStyle\n this._treeSitterClient = options.treeSitterClient ?? getTreeSitterClient()\n this._conceal = options.conceal ?? this._contentDefaultOptions.conceal\n this._drawUnstyledText = options.drawUnstyledText ?? this._contentDefaultOptions.drawUnstyledText\n\n this.updateContent(this._content)\n }\n\n get content(): string {\n return this._content\n }\n\n set content(value: string) {\n if (this._content !== value) {\n this._content = value\n this.scheduleUpdate()\n }\n }\n\n get filetype(): string | undefined {\n return this._filetype\n }\n\n set filetype(value: string) {\n if (this._filetype !== value) {\n this._filetype = value\n this.scheduleUpdate()\n }\n }\n\n get syntaxStyle(): SyntaxStyle {\n return this._syntaxStyle\n }\n\n set syntaxStyle(value: SyntaxStyle) {\n if (this._syntaxStyle !== value) {\n this._syntaxStyle = value\n this.scheduleUpdate()\n }\n }\n\n get conceal(): boolean {\n return this._conceal\n }\n\n set conceal(value: boolean) {\n if (this._conceal !== value) {\n this._conceal = value\n this.scheduleUpdate()\n }\n }\n\n get drawUnstyledText(): boolean {\n return this._drawUnstyledText\n }\n\n set drawUnstyledText(value: boolean) {\n if (this._drawUnstyledText !== value) {\n this._drawUnstyledText = value\n this.scheduleUpdate()\n }\n }\n\n private scheduleUpdate(): void {\n if (this._pendingUpdate) return\n this._pendingUpdate = true\n queueMicrotask(() => {\n this._pendingUpdate = false\n this.updateContent(this._content)\n })\n }\n\n private async updateContent(content: string): Promise<void> {\n if (content.length === 0) return\n\n if (!this._filetype) {\n this.fallback(content)\n return\n }\n\n this._currentHighlightId++\n const highlightId = this._currentHighlightId\n\n if
|
|
14
|
+
"import { Renderable, type RenderableOptions } from \"../Renderable\"\nimport { convertGlobalToLocalSelection, Selection, type LocalSelectionBounds } from \"../lib/selection\"\nimport { TextBuffer, type TextChunk } from \"../text-buffer\"\nimport { TextBufferView } from \"../text-buffer-view\"\nimport { RGBA, parseColor } from \"../lib/RGBA\"\nimport { type RenderContext } from \"../types\"\nimport type { OptimizedBuffer } from \"../buffer\"\nimport { MeasureMode } from \"yoga-layout\"\nimport type { LineInfo } from \"../zig\"\nimport { SyntaxStyle } from \"../syntax-style\"\n\nexport interface TextBufferOptions extends RenderableOptions<TextBufferRenderable> {\n fg?: string | RGBA\n bg?: string | RGBA\n selectionBg?: string | RGBA\n selectionFg?: string | RGBA\n selectable?: boolean\n attributes?: number\n wrapMode?: \"none\" | \"char\" | \"word\"\n tabIndicator?: string | number\n tabIndicatorColor?: string | RGBA\n}\n\nexport abstract class TextBufferRenderable extends Renderable {\n public selectable: boolean = true\n\n protected _defaultFg: RGBA\n protected _defaultBg: RGBA\n protected _defaultAttributes: number\n protected _selectionBg: RGBA | undefined\n protected _selectionFg: RGBA | undefined\n protected _wrapMode: \"none\" | \"char\" | \"word\" = \"word\"\n protected lastLocalSelection: LocalSelectionBounds | null = null\n protected _tabIndicator?: string | number\n protected _tabIndicatorColor?: RGBA\n\n protected textBuffer: TextBuffer\n protected textBufferView: TextBufferView\n protected _lineInfo: LineInfo = { lineStarts: [], lineWidths: [], maxLineWidth: 0 }\n\n protected _defaultOptions = {\n fg: RGBA.fromValues(1, 1, 1, 1),\n bg: RGBA.fromValues(0, 0, 0, 0),\n selectionBg: undefined,\n selectionFg: undefined,\n selectable: true,\n attributes: 0,\n wrapMode: \"word\" as \"none\" | \"char\" | \"word\",\n tabIndicator: undefined,\n tabIndicatorColor: undefined,\n } satisfies Partial<TextBufferOptions>\n\n constructor(ctx: RenderContext, options: TextBufferOptions) {\n super(ctx, options)\n\n this._defaultFg = parseColor(options.fg ?? this._defaultOptions.fg)\n this._defaultBg = parseColor(options.bg ?? this._defaultOptions.bg)\n this._defaultAttributes = options.attributes ?? this._defaultOptions.attributes\n this._selectionBg = options.selectionBg ? parseColor(options.selectionBg) : this._defaultOptions.selectionBg\n this._selectionFg = options.selectionFg ? parseColor(options.selectionFg) : this._defaultOptions.selectionFg\n this.selectable = options.selectable ?? this._defaultOptions.selectable\n this._wrapMode = options.wrapMode ?? this._defaultOptions.wrapMode\n this._tabIndicator = options.tabIndicator ?? this._defaultOptions.tabIndicator\n this._tabIndicatorColor = options.tabIndicatorColor\n ? parseColor(options.tabIndicatorColor)\n : this._defaultOptions.tabIndicatorColor\n\n this.textBuffer = TextBuffer.create(this._ctx.widthMethod)\n this.textBufferView = TextBufferView.create(this.textBuffer)\n\n const style = SyntaxStyle.create()\n this.textBuffer.setSyntaxStyle(style)\n\n this.textBufferView.setWrapMode(this._wrapMode)\n this.setupMeasureFunc()\n\n this.textBuffer.setDefaultFg(this._defaultFg)\n this.textBuffer.setDefaultBg(this._defaultBg)\n this.textBuffer.setDefaultAttributes(this._defaultAttributes)\n\n if (this._tabIndicator !== undefined) {\n this.textBufferView.setTabIndicator(this._tabIndicator)\n }\n if (this._tabIndicatorColor !== undefined) {\n this.textBufferView.setTabIndicatorColor(this._tabIndicatorColor)\n }\n\n if (this._wrapMode !== \"none\" && this.width > 0) {\n this.updateWrapWidth(this.width)\n }\n\n this.updateTextInfo()\n }\n\n get plainText(): string {\n return this.textBuffer.getPlainText()\n }\n\n get textLength(): number {\n return this.textBuffer.length\n }\n\n get fg(): RGBA {\n return this._defaultFg\n }\n\n set fg(value: RGBA | string | undefined) {\n const newColor = parseColor(value ?? this._defaultOptions.fg)\n if (this._defaultFg !== newColor) {\n this._defaultFg = newColor\n this.textBuffer.setDefaultFg(this._defaultFg)\n this.onFgChanged(newColor)\n this.requestRender()\n }\n }\n\n get selectionBg(): RGBA | undefined {\n return this._selectionBg\n }\n\n set selectionBg(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : this._defaultOptions.selectionBg\n if (this._selectionBg !== newColor) {\n this._selectionBg = newColor\n if (this.lastLocalSelection) {\n this.updateLocalSelection(this.lastLocalSelection)\n }\n this.requestRender()\n }\n }\n\n get selectionFg(): RGBA | undefined {\n return this._selectionFg\n }\n\n set selectionFg(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : this._defaultOptions.selectionFg\n if (this._selectionFg !== newColor) {\n this._selectionFg = newColor\n if (this.lastLocalSelection) {\n this.updateLocalSelection(this.lastLocalSelection)\n }\n this.requestRender()\n }\n }\n\n get bg(): RGBA {\n return this._defaultBg\n }\n\n set bg(value: RGBA | string | undefined) {\n const newColor = parseColor(value ?? this._defaultOptions.bg)\n if (this._defaultBg !== newColor) {\n this._defaultBg = newColor\n this.textBuffer.setDefaultBg(this._defaultBg)\n this.onBgChanged(newColor)\n this.requestRender()\n }\n }\n\n get attributes(): number {\n return this._defaultAttributes\n }\n\n set attributes(value: number) {\n if (this._defaultAttributes !== value) {\n this._defaultAttributes = value\n this.textBuffer.setDefaultAttributes(this._defaultAttributes)\n this.onAttributesChanged(value)\n this.requestRender()\n }\n }\n\n get wrapMode(): \"none\" | \"char\" | \"word\" {\n return this._wrapMode\n }\n\n set wrapMode(value: \"none\" | \"char\" | \"word\") {\n if (this._wrapMode !== value) {\n this._wrapMode = value\n this.textBufferView.setWrapMode(this._wrapMode)\n if (value !== \"none\" && this.width > 0) {\n this.updateWrapWidth(this.width)\n }\n // Changing wrap mode can change dimensions, so mark yoga node dirty to trigger re-measurement\n this.yogaNode.markDirty()\n this.requestRender()\n }\n }\n\n get tabIndicator(): string | number | undefined {\n return this._tabIndicator\n }\n\n set tabIndicator(value: string | number | undefined) {\n if (this._tabIndicator !== value) {\n this._tabIndicator = value\n if (value !== undefined) {\n this.textBufferView.setTabIndicator(value)\n }\n this.requestRender()\n }\n }\n\n get tabIndicatorColor(): RGBA | undefined {\n return this._tabIndicatorColor\n }\n\n set tabIndicatorColor(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : undefined\n if (this._tabIndicatorColor !== newColor) {\n this._tabIndicatorColor = newColor\n if (newColor !== undefined) {\n this.textBufferView.setTabIndicatorColor(newColor)\n }\n this.requestRender()\n }\n }\n\n protected onResize(width: number, height: number): void {\n // Update viewport size to match renderable dimensions\n this.textBufferView.setViewportSize(width, height)\n\n if (this.lastLocalSelection) {\n const changed = this.updateLocalSelection(this.lastLocalSelection)\n if (changed) {\n this.requestRender()\n }\n }\n }\n\n protected refreshLocalSelection(): boolean {\n if (this.lastLocalSelection) {\n return this.updateLocalSelection(this.lastLocalSelection)\n }\n return false\n }\n\n private updateLocalSelection(localSelection: LocalSelectionBounds | null): boolean {\n if (!localSelection?.isActive) {\n this.textBufferView.resetLocalSelection()\n return true\n }\n\n return this.textBufferView.setLocalSelection(\n localSelection.anchorX,\n localSelection.anchorY,\n localSelection.focusX,\n localSelection.focusY,\n this._selectionBg,\n this._selectionFg,\n )\n }\n\n protected updateTextInfo(): void {\n if (this.lastLocalSelection) {\n this.updateLocalSelection(this.lastLocalSelection)\n }\n\n this.yogaNode.markDirty()\n this.requestRender()\n }\n\n private updateLineInfo(): void {\n const lineInfo = this.textBufferView.logicalLineInfo\n this._lineInfo.lineStarts = lineInfo.lineStarts\n this._lineInfo.lineWidths = lineInfo.lineWidths\n this._lineInfo.maxLineWidth = lineInfo.maxLineWidth\n }\n\n private updateWrapWidth(width: number): void {\n this.textBufferView.setWrapWidth(width)\n this.updateLineInfo()\n }\n\n private setupMeasureFunc(): void {\n const measureFunc = (\n width: number,\n widthMode: MeasureMode,\n height: number,\n heightMode: MeasureMode,\n ): { width: number; height: number } => {\n // Use a reasonable default for NaN/undefined height to allow measuring content\n // This happens when Yoga calls measure with height/widthMode=\"Undefined\" (0)\n const effectiveWidth = isNaN(width) ? 1 : width\n\n if (this._wrapMode !== \"none\" && this.width !== effectiveWidth) {\n this.updateWrapWidth(effectiveWidth)\n } else {\n this.updateLineInfo()\n }\n\n const measuredWidth = this._lineInfo.maxLineWidth\n const measuredHeight = this._lineInfo.lineStarts.length\n\n // NOTE: Yoga may use these measurements or not.\n // If the yoga node settings and the parent allow this node to grow, it will.\n return {\n width: Math.max(1, measuredWidth),\n height: Math.max(1, measuredHeight),\n }\n }\n\n this.yogaNode.setMeasureFunc(measureFunc)\n }\n\n shouldStartSelection(x: number, y: number): boolean {\n if (!this.selectable) return false\n\n const localX = x - this.x\n const localY = y - this.y\n\n return localX >= 0 && localX < this.width && localY >= 0 && localY < this.height\n }\n\n onSelectionChanged(selection: Selection | null): boolean {\n const localSelection = convertGlobalToLocalSelection(selection, this.x, this.y)\n this.lastLocalSelection = localSelection\n\n const changed = this.updateLocalSelection(localSelection)\n\n if (changed) {\n this.requestRender()\n }\n\n return this.hasSelection()\n }\n\n getSelectedText(): string {\n return this.textBufferView.getSelectedText()\n }\n\n hasSelection(): boolean {\n return this.textBufferView.hasSelection()\n }\n\n getSelection(): { start: number; end: number } | null {\n return this.textBufferView.getSelection()\n }\n\n render(buffer: OptimizedBuffer, deltaTime: number): void {\n if (!this.visible) return\n\n this.markClean()\n this._ctx.addToHitGrid(this.x, this.y, this.width, this.height, this.num)\n\n this.renderSelf(buffer)\n\n if (this.buffered && this.frameBuffer) {\n buffer.drawFrameBuffer(this.x, this.y, this.frameBuffer)\n }\n }\n\n protected renderSelf(buffer: OptimizedBuffer): void {\n if (this.textBuffer.ptr) {\n buffer.drawTextBuffer(this.textBufferView, this.x, this.y)\n }\n }\n\n destroy(): void {\n this.textBufferView.destroy()\n this.textBuffer.destroy()\n super.destroy()\n }\n\n protected onFgChanged(newColor: RGBA): void {\n // Override in subclasses if needed\n }\n\n protected onBgChanged(newColor: RGBA): void {\n // Override in subclasses if needed\n }\n\n protected onAttributesChanged(newAttributes: number): void {\n // Override in subclasses if needed\n }\n}\n",
|
|
15
|
+
"import { type RenderContext } from \"../types\"\nimport { StyledText } from \"../lib/styled-text\"\nimport { SyntaxStyle } from \"../syntax-style\"\nimport { getTreeSitterClient, treeSitterToStyledText, TreeSitterClient } from \"../lib/tree-sitter\"\nimport { TextBufferRenderable, type TextBufferOptions } from \"./TextBufferRenderable\"\nimport type { OptimizedBuffer } from \"../buffer\"\nimport type { SimpleHighlight } from \"../lib/tree-sitter/types\"\nimport { treeSitterToTextChunks } from \"../lib/tree-sitter-styled-text\"\n\nexport interface CodeOptions extends TextBufferOptions {\n content?: string\n filetype?: string\n syntaxStyle: SyntaxStyle\n treeSitterClient?: TreeSitterClient\n conceal?: boolean\n drawUnstyledText?: boolean\n streaming?: boolean\n}\n\nexport class CodeRenderable extends TextBufferRenderable {\n private _content: string\n private _filetype?: string\n private _syntaxStyle: SyntaxStyle\n private _isHighlighting: boolean = false\n private _treeSitterClient: TreeSitterClient\n private _pendingRehighlight: boolean = false\n private _pendingUpdate: boolean = false\n private _currentHighlightId: number = 0\n private _conceal: boolean\n private _drawUnstyledText: boolean\n private _shouldRenderTextBuffer: boolean = true\n private _streaming: boolean\n private _hadInitialContent: boolean = false\n private _lastHighlights: SimpleHighlight[] = []\n\n protected _contentDefaultOptions = {\n content: \"\",\n conceal: true,\n drawUnstyledText: true,\n streaming: false,\n } satisfies Partial<CodeOptions>\n\n constructor(ctx: RenderContext, options: CodeOptions) {\n super(ctx, options)\n\n this._content = options.content ?? this._contentDefaultOptions.content\n this._filetype = options.filetype\n this._syntaxStyle = options.syntaxStyle\n this._treeSitterClient = options.treeSitterClient ?? getTreeSitterClient()\n this._conceal = options.conceal ?? this._contentDefaultOptions.conceal\n this._drawUnstyledText = options.drawUnstyledText ?? this._contentDefaultOptions.drawUnstyledText\n this._streaming = options.streaming ?? this._contentDefaultOptions.streaming\n\n this.updateContent(this._content)\n }\n\n get content(): string {\n return this._content\n }\n\n set content(value: string) {\n if (this._content !== value) {\n this._content = value\n this.scheduleUpdate()\n }\n }\n\n get filetype(): string | undefined {\n return this._filetype\n }\n\n set filetype(value: string) {\n if (this._filetype !== value) {\n this._filetype = value\n this.scheduleUpdate()\n }\n }\n\n get syntaxStyle(): SyntaxStyle {\n return this._syntaxStyle\n }\n\n set syntaxStyle(value: SyntaxStyle) {\n if (this._syntaxStyle !== value) {\n this._syntaxStyle = value\n this.scheduleUpdate()\n }\n }\n\n get conceal(): boolean {\n return this._conceal\n }\n\n set conceal(value: boolean) {\n if (this._conceal !== value) {\n this._conceal = value\n this.scheduleUpdate()\n }\n }\n\n get drawUnstyledText(): boolean {\n return this._drawUnstyledText\n }\n\n set drawUnstyledText(value: boolean) {\n if (this._drawUnstyledText !== value) {\n this._drawUnstyledText = value\n this.scheduleUpdate()\n }\n }\n\n get streaming(): boolean {\n return this._streaming\n }\n\n set streaming(value: boolean) {\n if (this._streaming !== value) {\n this._streaming = value\n this._hadInitialContent = false\n this._lastHighlights = []\n this.scheduleUpdate()\n }\n }\n\n get treeSitterClient(): TreeSitterClient {\n return this._treeSitterClient\n }\n\n set treeSitterClient(value: TreeSitterClient) {\n if (this._treeSitterClient !== value) {\n this._treeSitterClient = value\n this.scheduleUpdate()\n }\n }\n\n private scheduleUpdate(): void {\n if (this._pendingUpdate) return\n this._pendingUpdate = true\n queueMicrotask(() => {\n this._pendingUpdate = false\n this.updateContent(this._content)\n })\n }\n\n private async updateContent(content: string): Promise<void> {\n if (content.length === 0) return\n\n if (!this._filetype) {\n this.fallback(content)\n this._shouldRenderTextBuffer = true\n return\n }\n\n this._currentHighlightId++\n const highlightId = this._currentHighlightId\n\n // Determine if this is the initial content when streaming\n const isInitialContent = this._streaming && !this._hadInitialContent\n if (isInitialContent) {\n this._hadInitialContent = true\n }\n\n // Handle initial fallback display\n const shouldDrawUnstyledNow = this._streaming ? isInitialContent && this._drawUnstyledText : this._drawUnstyledText\n\n // TODO: Setting initial text should not be necessary,\n // this is done to give the renderable initial dimensions\n // to solve the disappearing content in scrollbox.\n // What actually happens is that _getChildren() in the ContentRenderable\n // for the ScrollBox reduces # of children _to update_.\n // So children never get their dimensions updated,\n // and getChildrenSortedByPrimaryAxis() is just wrong then.\n // However, the main bottleneck there is the yoga-layout getters\n // are ridicoulously slow, so for a list with many children\n // that becomes a performance bottleneck the longer the list is.\n this.fallback(content)\n\n if (!shouldDrawUnstyledNow) {\n this._shouldRenderTextBuffer = false\n }\n\n if (this._streaming && !isInitialContent && this._lastHighlights.length > 0) {\n const chunks = treeSitterToTextChunks(content, this._lastHighlights, this._syntaxStyle, {\n enabled: this._conceal,\n })\n const partialStyledText = new StyledText(chunks)\n if (this.isDestroyed) return\n this.textBuffer.setStyledText(partialStyledText)\n this._shouldRenderTextBuffer = true\n this.updateTextInfo()\n }\n\n this._isHighlighting = true\n this._pendingRehighlight = false\n\n try {\n const result = await this._treeSitterClient.highlightOnce(content, this._filetype)\n\n if (highlightId !== this._currentHighlightId) {\n // This response is stale, ignore it\n return\n }\n\n if (this.isDestroyed) return\n\n if (result.highlights && result.highlights.length > 0) {\n if (this._streaming) {\n this._lastHighlights = result.highlights\n }\n\n const chunks = treeSitterToTextChunks(content, result.highlights, this._syntaxStyle, {\n enabled: this._conceal,\n })\n const styledText = new StyledText(chunks)\n this.textBuffer.setStyledText(styledText)\n } else {\n this.fallback(content)\n }\n\n this._shouldRenderTextBuffer = true\n this.updateTextInfo()\n } catch (error) {\n if (highlightId !== this._currentHighlightId) {\n return\n }\n console.warn(\"Code highlighting failed, falling back to plain text:\", error)\n this.fallback(content)\n this._shouldRenderTextBuffer = true\n } finally {\n if (highlightId === this._currentHighlightId) {\n this._isHighlighting = false\n }\n }\n }\n\n private fallback(content: string): void {\n const fallbackStyledText = this.createFallbackStyledText(content)\n if (this.isDestroyed) return\n this.textBuffer.setStyledText(fallbackStyledText)\n this.updateTextInfo()\n }\n\n private createFallbackStyledText(content: string): StyledText {\n const chunks = [\n {\n __isChunk: true as const,\n text: content,\n fg: this._defaultFg,\n bg: this._defaultBg,\n attributes: this._defaultAttributes,\n },\n ]\n return new StyledText(chunks)\n }\n\n public getLineHighlights(lineIdx: number) {\n return this.textBuffer.getLineHighlights(lineIdx)\n }\n\n protected renderSelf(buffer: OptimizedBuffer): void {\n if (!this._shouldRenderTextBuffer) return\n super.renderSelf(buffer)\n }\n}\n",
|
|
16
16
|
"import type { TextRenderable } from \".\"\nimport { BaseRenderable, type BaseRenderableOptions } from \"../Renderable\"\nimport { RGBA, parseColor } from \"../lib/RGBA\"\nimport { isStyledText, StyledText } from \"../lib/styled-text\"\nimport { type TextChunk } from \"../text-buffer\"\nimport type { RenderContext } from \"../types\"\n\nexport interface TextNodeOptions extends BaseRenderableOptions {\n fg?: string | RGBA\n bg?: string | RGBA\n attributes?: number\n}\n\nconst BrandedTextNodeRenderable: unique symbol = Symbol.for(\"@opentui/core/TextNodeRenderable\")\n\nexport function isTextNodeRenderable(obj: any): obj is TextNodeRenderable {\n return !!obj?.[BrandedTextNodeRenderable]\n}\n\nfunction styledTextToTextNodes(styledText: StyledText): TextNodeRenderable[] {\n return styledText.chunks.map((chunk) => {\n const node = new TextNodeRenderable({\n fg: chunk.fg,\n bg: chunk.bg,\n attributes: chunk.attributes,\n })\n node.add(chunk.text)\n return node\n })\n}\n\nexport class TextNodeRenderable extends BaseRenderable {\n [BrandedTextNodeRenderable] = true\n\n private _fg?: RGBA\n private _bg?: RGBA\n private _attributes: number\n private _children: (string | TextNodeRenderable)[] = []\n public parent: TextNodeRenderable | null = null\n\n constructor(options: TextNodeOptions) {\n super(options)\n\n this._fg = options.fg ? parseColor(options.fg) : undefined\n this._bg = options.bg ? parseColor(options.bg) : undefined\n this._attributes = options.attributes ?? 0\n }\n\n public get children(): (string | TextNodeRenderable)[] {\n return this._children\n }\n\n public set children(children: (string | TextNodeRenderable)[]) {\n this._children = children\n this.requestRender()\n }\n\n public requestRender(): void {\n this.markDirty()\n this.parent?.requestRender()\n }\n\n public add(obj: TextNodeRenderable | StyledText | string, index?: number): number {\n if (typeof obj === \"string\") {\n if (index !== undefined) {\n this._children.splice(index, 0, obj)\n this.requestRender()\n return index\n }\n\n const insertIndex = this._children.length\n this._children.push(obj)\n this.requestRender()\n return insertIndex\n }\n\n if (isTextNodeRenderable(obj)) {\n if (index !== undefined) {\n this._children.splice(index, 0, obj)\n obj.parent = this\n this.requestRender()\n return index\n }\n\n const insertIndex = this._children.length\n this._children.push(obj)\n obj.parent = this\n this.requestRender()\n return insertIndex\n }\n\n if (isStyledText(obj)) {\n const textNodes = styledTextToTextNodes(obj)\n if (index !== undefined) {\n this._children.splice(index, 0, ...textNodes)\n textNodes.forEach((node) => (node.parent = this))\n this.requestRender()\n return index\n }\n\n const insertIndex = this._children.length\n this._children.push(...textNodes)\n textNodes.forEach((node) => (node.parent = this))\n this.requestRender()\n return insertIndex\n }\n\n throw new Error(\"TextNodeRenderable only accepts strings, TextNodeRenderable instances, or StyledText instances\")\n }\n\n public replace(obj: TextNodeRenderable | string, index: number) {\n this._children[index] = obj\n if (typeof obj !== \"string\") {\n obj.parent = this\n }\n this.requestRender()\n }\n\n public insertBefore(\n child: string | TextNodeRenderable | StyledText,\n anchorNode: TextNodeRenderable | string | unknown,\n ): this {\n if (!anchorNode || !isTextNodeRenderable(anchorNode)) {\n throw new Error(\"Anchor must be a TextNodeRenderable\")\n }\n\n const anchorIndex = this._children.indexOf(anchorNode)\n if (anchorIndex === -1) {\n throw new Error(\"Anchor node not found in children\")\n }\n\n if (typeof child === \"string\") {\n this._children.splice(anchorIndex, 0, child)\n } else if (isTextNodeRenderable(child)) {\n this._children.splice(anchorIndex, 0, child)\n child.parent = this\n } else if (child instanceof StyledText) {\n const textNodes = styledTextToTextNodes(child)\n this._children.splice(anchorIndex, 0, ...textNodes)\n textNodes.forEach((node) => (node.parent = this))\n } else {\n throw new Error(\"Child must be a string, TextNodeRenderable, or StyledText instance\")\n }\n\n this.requestRender()\n return this\n }\n\n public remove(id: string): this {\n const childIndex = this.getRenderableIndex(id)\n if (childIndex === -1) {\n throw new Error(\"Child not found in children\")\n }\n\n const child = this._children[childIndex] as TextNodeRenderable\n\n this._children.splice(childIndex, 1)\n child.parent = null\n this.requestRender()\n return this\n }\n\n public clear(): void {\n this._children = []\n this.requestRender()\n }\n\n public mergeStyles(parentStyle: { fg?: RGBA; bg?: RGBA; attributes: number }): {\n fg?: RGBA\n bg?: RGBA\n attributes: number\n } {\n return {\n fg: this._fg ?? parentStyle.fg,\n bg: this._bg ?? parentStyle.bg,\n attributes: this._attributes | parentStyle.attributes,\n }\n }\n\n public gatherWithInheritedStyle(\n parentStyle: { fg?: RGBA; bg?: RGBA; attributes: number } = { fg: undefined, bg: undefined, attributes: 0 },\n ): TextChunk[] {\n const currentStyle = this.mergeStyles(parentStyle)\n\n const chunks: TextChunk[] = []\n\n for (const child of this._children) {\n if (typeof child === \"string\") {\n chunks.push({\n __isChunk: true,\n text: child,\n fg: currentStyle.fg,\n bg: currentStyle.bg,\n attributes: currentStyle.attributes,\n })\n } else {\n const childChunks = child.gatherWithInheritedStyle(currentStyle)\n chunks.push(...childChunks)\n }\n }\n\n this.markClean()\n\n return chunks\n }\n\n public static fromString(text: string, options: Partial<TextNodeOptions> = {}): TextNodeRenderable {\n const node = new TextNodeRenderable(options)\n node.add(text)\n return node\n }\n\n public static fromNodes(nodes: TextNodeRenderable[], options: Partial<TextNodeOptions> = {}): TextNodeRenderable {\n const node = new TextNodeRenderable(options)\n for (const childNode of nodes) {\n node.add(childNode)\n }\n return node\n }\n\n public toChunks(\n parentStyle: { fg?: RGBA; bg?: RGBA; attributes: number } = { fg: undefined, bg: undefined, attributes: 0 },\n ): TextChunk[] {\n return this.gatherWithInheritedStyle(parentStyle)\n }\n\n public getChildren(): BaseRenderable[] {\n return this._children.filter((child): child is TextNodeRenderable => typeof child !== \"string\")\n }\n\n public getChildrenCount(): number {\n return this._children.length\n }\n\n public getRenderable(id: string): BaseRenderable | undefined {\n return this._children.find((child): child is TextNodeRenderable => typeof child !== \"string\" && child.id === id)\n }\n\n public getRenderableIndex(id: string): number {\n return this._children.findIndex((child) => isTextNodeRenderable(child) && child.id === id)\n }\n\n public get fg(): RGBA | undefined {\n return this._fg\n }\n\n public set fg(fg: RGBA | string | undefined) {\n if (!fg) {\n this._fg = undefined\n this.requestRender()\n return\n }\n this._fg = parseColor(fg)\n this.requestRender()\n }\n\n public set bg(bg: RGBA | string | undefined) {\n if (!bg) {\n this._bg = undefined\n this.requestRender()\n return\n }\n this._bg = parseColor(bg)\n this.requestRender()\n }\n\n public get bg(): RGBA | undefined {\n return this._bg\n }\n\n public set attributes(attributes: number) {\n this._attributes = attributes\n this.requestRender()\n }\n\n public get attributes(): number {\n return this._attributes\n }\n\n public findDescendantById(id: string): BaseRenderable | undefined {\n return undefined\n }\n}\n\nexport class RootTextNodeRenderable extends TextNodeRenderable {\n textParent: TextRenderable\n\n constructor(\n private readonly ctx: RenderContext,\n options: TextNodeOptions,\n textParent: TextRenderable,\n ) {\n super(options)\n this.textParent = textParent\n }\n\n public requestRender(): void {\n this.markDirty()\n this.ctx.requestRender()\n }\n}\n",
|
|
17
17
|
"import {\n ASCIIFontRenderable,\n BoxRenderable,\n InputRenderable,\n SelectRenderable,\n TabSelectRenderable,\n TextRenderable,\n VRenderable,\n type ASCIIFontOptions,\n type BoxOptions,\n type TextOptions,\n type VRenderableOptions,\n type InputRenderableOptions,\n type SelectRenderableOptions,\n type TabSelectRenderableOptions,\n FrameBufferRenderable,\n type FrameBufferOptions,\n} from \"../\"\nimport { TextNodeRenderable, type TextNodeOptions } from \"../TextNode\"\nimport { h, type VChild } from \"./vnode\"\nimport { TextAttributes } from \"../../types\"\nimport type { RGBA } from \"../../lib/RGBA\"\n\nexport function Generic(props?: VRenderableOptions, ...children: VChild[]) {\n return h(VRenderable, props || {}, ...children)\n}\n\nexport function Box(props?: BoxOptions, ...children: VChild[]) {\n return h(BoxRenderable, props || {}, ...children)\n}\n\nexport function Text(props?: TextOptions & { content?: any }, ...children: VChild[] | TextNodeRenderable[]) {\n return h(TextRenderable, props || {}, ...(children as VChild[]))\n}\n\nexport function ASCIIFont(props?: ASCIIFontOptions, ...children: VChild[]) {\n return h(ASCIIFontRenderable, props || {}, ...children)\n}\n\nexport function Input(props?: InputRenderableOptions, ...children: VChild[]) {\n return h(InputRenderable, props || {}, ...children)\n}\n\nexport function Select(props?: SelectRenderableOptions, ...children: VChild[]) {\n return h(SelectRenderable, props || {}, ...children)\n}\n\nexport function TabSelect(props?: TabSelectRenderableOptions, ...children: VChild[]) {\n return h(TabSelectRenderable, props || {}, ...children)\n}\n\nexport function FrameBuffer(props: FrameBufferOptions, ...children: VChild[]) {\n return h(FrameBufferRenderable, props, ...children)\n}\n\ninterface StyledTextProps extends Omit<TextNodeOptions, \"attributes\"> {\n attributes?: number\n}\n\nfunction StyledText(props?: StyledTextProps, ...children: (string | TextNodeRenderable)[]): TextNodeRenderable {\n const styledProps = props as StyledTextProps\n const textNodeOptions: TextNodeOptions = {\n ...styledProps,\n attributes: styledProps?.attributes ?? 0,\n }\n\n const textNode = new TextNodeRenderable(textNodeOptions)\n\n for (const child of children) {\n textNode.add(child)\n }\n\n return textNode\n}\n\n// Text styling convenience functions - these create TextNodeRenderable instances that can be nested and stacked\nexport const vstyles = {\n // Basic text styles\n bold: (...children: (string | TextNodeRenderable)[]) => StyledText({ attributes: TextAttributes.BOLD }, ...children),\n italic: (...children: (string | TextNodeRenderable)[]) =>\n StyledText({ attributes: TextAttributes.ITALIC }, ...children),\n underline: (...children: (string | TextNodeRenderable)[]) =>\n StyledText({ attributes: TextAttributes.UNDERLINE }, ...children),\n dim: (...children: (string | TextNodeRenderable)[]) => StyledText({ attributes: TextAttributes.DIM }, ...children),\n blink: (...children: (string | TextNodeRenderable)[]) =>\n StyledText({ attributes: TextAttributes.BLINK }, ...children),\n inverse: (...children: (string | TextNodeRenderable)[]) =>\n StyledText({ attributes: TextAttributes.INVERSE }, ...children),\n hidden: (...children: (string | TextNodeRenderable)[]) =>\n StyledText({ attributes: TextAttributes.HIDDEN }, ...children),\n strikethrough: (...children: (string | TextNodeRenderable)[]) =>\n StyledText({ attributes: TextAttributes.STRIKETHROUGH }, ...children),\n\n // Combined styles\n boldItalic: (...children: (string | TextNodeRenderable)[]) =>\n StyledText({ attributes: TextAttributes.BOLD | TextAttributes.ITALIC }, ...children),\n boldUnderline: (...children: (string | TextNodeRenderable)[]) =>\n StyledText({ attributes: TextAttributes.BOLD | TextAttributes.UNDERLINE }, ...children),\n italicUnderline: (...children: (string | TextNodeRenderable)[]) =>\n StyledText({ attributes: TextAttributes.ITALIC | TextAttributes.UNDERLINE }, ...children),\n boldItalicUnderline: (...children: (string | TextNodeRenderable)[]) =>\n StyledText({ attributes: TextAttributes.BOLD | TextAttributes.ITALIC | TextAttributes.UNDERLINE }, ...children),\n\n // Color helpers\n color: (color: string | RGBA, ...children: (string | TextNodeRenderable)[]) => StyledText({ fg: color }, ...children),\n bgColor: (bgColor: string | RGBA, ...children: (string | TextNodeRenderable)[]) =>\n StyledText({ bg: bgColor }, ...children),\n fg: (color: string | RGBA, ...children: (string | TextNodeRenderable)[]) => StyledText({ fg: color }, ...children),\n bg: (bgColor: string | RGBA, ...children: (string | TextNodeRenderable)[]) =>\n StyledText({ bg: bgColor }, ...children),\n\n // Custom styling function\n styled: (attributes: number = 0, ...children: (string | TextNodeRenderable)[]) =>\n StyledText({ attributes }, ...children),\n}\n",
|
|
18
18
|
"import { Renderable, type RenderableOptions } from \"../../Renderable\"\nimport type { OptimizedBuffer } from \"../../buffer\"\nimport type { RenderContext } from \"../../types\"\n\nexport interface VRenderableOptions extends RenderableOptions<VRenderable> {\n render?: (\n this: VRenderable | VRenderableOptions,\n buffer: OptimizedBuffer,\n deltaTime: number,\n renderable: VRenderable,\n ) => void\n}\n\n/**\n * A generic renderable that accepts a custom render function as a prop.\n * This allows functional constructs to specify custom rendering behavior\n * without needing to subclass Renderable.\n */\nexport class VRenderable extends Renderable {\n private options: VRenderableOptions\n\n constructor(ctx: RenderContext, options: VRenderableOptions) {\n super(ctx, options)\n this.options = options\n }\n\n protected renderSelf(buffer: OptimizedBuffer, deltaTime: number): void {\n if (this.options.render) {\n this.options.render.call(this.options, buffer, deltaTime, this)\n }\n }\n}\n",
|
|
19
|
-
"import { OptimizedBuffer } from \"../buffer\"\nimport type { KeyEvent } from \"../lib/KeyHandler\"\nimport { RGBA, parseColor, type ColorInput } from \"../lib/RGBA\"\nimport { Renderable, type RenderableOptions } from \"../Renderable\"\nimport type { RenderContext } from \"../types\"\n\nexport interface InputRenderableOptions extends RenderableOptions<InputRenderable> {\n backgroundColor?: ColorInput\n textColor?: ColorInput\n focusedBackgroundColor?: ColorInput\n focusedTextColor?: ColorInput\n placeholder?: string\n placeholderColor?: ColorInput\n cursorColor?: ColorInput\n maxLength?: number\n value?: string\n}\n\n// TODO: make this just plain strings instead of an enum (same for other events)\nexport enum InputRenderableEvents {\n INPUT = \"input\",\n CHANGE = \"change\",\n ENTER = \"enter\",\n}\n\nexport class InputRenderable extends Renderable {\n protected _focusable: boolean = true\n\n private _value: string = \"\"\n private _cursorPosition: number = 0\n private _placeholder: string\n private _backgroundColor: RGBA\n private _textColor: RGBA\n private _focusedBackgroundColor: RGBA\n private _focusedTextColor: RGBA\n private _placeholderColor: RGBA\n private _cursorColor: RGBA\n private _maxLength: number\n private _lastCommittedValue: string = \"\"\n\n protected _defaultOptions = {\n backgroundColor: \"transparent\",\n textColor: \"#FFFFFF\",\n focusedBackgroundColor: \"#1a1a1a\",\n focusedTextColor: \"#FFFFFF\",\n placeholder: \"\",\n placeholderColor: \"#666666\",\n cursorColor: \"#FFFFFF\",\n maxLength: 1000,\n value: \"\",\n } satisfies Partial<InputRenderableOptions>\n\n constructor(ctx: RenderContext, options: InputRenderableOptions) {\n super(ctx, { ...options, buffered: true })\n\n this._backgroundColor = parseColor(options.backgroundColor || this._defaultOptions.backgroundColor)\n this._textColor = parseColor(options.textColor || this._defaultOptions.textColor)\n this._focusedBackgroundColor = parseColor(\n options.focusedBackgroundColor || options.backgroundColor || this._defaultOptions.focusedBackgroundColor,\n )\n this._focusedTextColor = parseColor(\n options.focusedTextColor || options.textColor || this._defaultOptions.focusedTextColor,\n )\n this._placeholder = options.placeholder || this._defaultOptions.placeholder\n this._value = options.value || this._defaultOptions.value\n this._lastCommittedValue = this._value\n this._cursorPosition = this._value.length\n this._maxLength = options.maxLength || this._defaultOptions.maxLength\n\n this._placeholderColor = parseColor(options.placeholderColor || this._defaultOptions.placeholderColor)\n this._cursorColor = parseColor(options.cursorColor || this._defaultOptions.cursorColor)\n }\n\n private updateCursorPosition(): void {\n if (!this._focused) return\n\n const contentX = 0\n const contentY = 0\n const contentWidth = this.width\n\n const maxVisibleChars = contentWidth - 1\n let displayStartIndex = 0\n\n if (this._cursorPosition >= maxVisibleChars) {\n displayStartIndex = this._cursorPosition - maxVisibleChars + 1\n }\n\n const cursorDisplayX = this._cursorPosition - displayStartIndex\n\n if (cursorDisplayX >= 0 && cursorDisplayX < contentWidth) {\n const absoluteCursorX = this.x + contentX + cursorDisplayX + 1\n const absoluteCursorY = this.y + contentY + 1\n\n this._ctx.setCursorPosition(absoluteCursorX, absoluteCursorY, true)\n this._ctx.setCursorColor(this._cursorColor)\n }\n }\n\n public focus(): void {\n super.focus()\n this._ctx.setCursorStyle(\"block\", true)\n this._ctx.setCursorColor(this._cursorColor)\n this.updateCursorPosition()\n }\n\n public blur(): void {\n super.blur()\n this._ctx.setCursorPosition(0, 0, false)\n\n if (this._value !== this._lastCommittedValue) {\n this._lastCommittedValue = this._value\n this.emit(InputRenderableEvents.CHANGE, this._value)\n }\n }\n\n protected renderSelf(buffer: OptimizedBuffer, deltaTime: number): void {\n if (!this.visible || !this.frameBuffer) return\n\n if (this.isDirty) {\n this.refreshFrameBuffer()\n }\n }\n\n private refreshFrameBuffer(): void {\n if (!this.frameBuffer) return\n\n const bgColor = this._focused ? this._focusedBackgroundColor : this._backgroundColor\n this.frameBuffer.clear(bgColor)\n\n const contentX = 0\n const contentY = 0\n const contentWidth = this.width\n const contentHeight = this.height\n\n const displayText = this._value || this._placeholder\n const isPlaceholder = !this._value && this._placeholder\n const baseTextColor = this._focused ? this._focusedTextColor : this._textColor\n const textColor = isPlaceholder ? this._placeholderColor : baseTextColor\n\n const maxVisibleChars = contentWidth - 1\n let displayStartIndex = 0\n\n if (this._cursorPosition >= maxVisibleChars) {\n displayStartIndex = this._cursorPosition - maxVisibleChars + 1\n }\n\n const visibleText = displayText.substring(displayStartIndex, displayStartIndex + maxVisibleChars)\n\n if (visibleText) {\n this.frameBuffer.drawText(visibleText, contentX, contentY, textColor)\n }\n\n if (this._focused) {\n this.updateCursorPosition()\n }\n }\n\n public get value(): string {\n return this._value\n }\n\n public set value(value: string) {\n const newValue = value.substring(0, this._maxLength)\n if (this._value !== newValue) {\n this._value = newValue\n this._cursorPosition = Math.min(this._cursorPosition, this._value.length)\n this.requestRender()\n this.updateCursorPosition()\n this.emit(InputRenderableEvents.INPUT, this._value)\n }\n }\n\n public set placeholder(placeholder: string) {\n if (this._placeholder !== placeholder) {\n this._placeholder = placeholder\n this.requestRender()\n }\n }\n\n public get cursorPosition(): number {\n return this._cursorPosition\n }\n\n public set cursorPosition(position: number) {\n const newPosition = Math.max(0, Math.min(position, this._value.length))\n if (this._cursorPosition !== newPosition) {\n this._cursorPosition = newPosition\n this.requestRender()\n this.updateCursorPosition()\n }\n }\n\n public insertText(text: string): void {\n if (this._value.length + text.length > this._maxLength) {\n return\n }\n\n const beforeCursor = this._value.substring(0, this._cursorPosition)\n const afterCursor = this._value.substring(this._cursorPosition)\n this._value = beforeCursor + text + afterCursor\n this._cursorPosition += text.length\n this.requestRender()\n this.updateCursorPosition()\n this.emit(InputRenderableEvents.INPUT, this._value)\n }\n\n public deleteCharacter(direction: \"backward\" | \"forward\"): void {\n if (direction === \"backward\" && this._cursorPosition > 0) {\n const beforeCursor = this._value.substring(0, this._cursorPosition - 1)\n const afterCursor = this._value.substring(this._cursorPosition)\n this._value = beforeCursor + afterCursor\n this._cursorPosition--\n this.requestRender()\n this.updateCursorPosition()\n this.emit(InputRenderableEvents.INPUT, this._value)\n } else if (direction === \"forward\" && this._cursorPosition < this._value.length) {\n const beforeCursor = this._value.substring(0, this._cursorPosition)\n const afterCursor = this._value.substring(this._cursorPosition + 1)\n this._value = beforeCursor + afterCursor\n this.requestRender()\n this.updateCursorPosition()\n this.emit(InputRenderableEvents.INPUT, this._value)\n }\n }\n\n public handleKeyPress(key: KeyEvent | string): boolean {\n const keyName = typeof key === \"string\" ? key : key.name\n const keySequence = typeof key === \"string\" ? key : key.sequence\n\n switch (keyName) {\n case \"left\":\n this.cursorPosition = this._cursorPosition - 1\n return true\n\n case \"right\":\n this.cursorPosition = this._cursorPosition + 1\n return true\n\n case \"home\":\n this.cursorPosition = 0\n return true\n\n case \"end\":\n this.cursorPosition = this._value.length\n return true\n\n case \"backspace\":\n this.deleteCharacter(\"backward\")\n return true\n\n case \"delete\":\n this.deleteCharacter(\"forward\")\n return true\n\n case \"return\":\n case \"linefeed\":\n if (this._value !== this._lastCommittedValue) {\n this._lastCommittedValue = this._value\n this.emit(InputRenderableEvents.CHANGE, this._value)\n }\n this.emit(InputRenderableEvents.ENTER, this._value)\n return true\n\n default:\n if (\n keySequence &&\n keySequence.length === 1 &&\n keySequence.charCodeAt(0) >= 32 &&\n keySequence.charCodeAt(0) <= 126\n ) {\n this.insertText(keySequence)\n return true\n }\n break\n }\n\n return false\n }\n\n public set maxLength(maxLength: number) {\n this._maxLength = maxLength\n if (this._value.length > maxLength) {\n this._value = this._value.substring(0, maxLength)\n this.requestRender()\n }\n }\n\n public set backgroundColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.backgroundColor)\n if (this._backgroundColor !== newColor) {\n this._backgroundColor = newColor\n this.requestRender()\n }\n }\n\n public set textColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.textColor)\n if (this._textColor !== newColor) {\n this._textColor = newColor\n this.requestRender()\n }\n }\n\n public set focusedBackgroundColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.focusedBackgroundColor)\n if (this._focusedBackgroundColor !== newColor) {\n this._focusedBackgroundColor = newColor\n this.requestRender()\n }\n }\n\n public set focusedTextColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.focusedTextColor)\n if (this._focusedTextColor !== newColor) {\n this._focusedTextColor = newColor\n this.requestRender()\n }\n }\n\n public set placeholderColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.placeholderColor)\n if (this._placeholderColor !== newColor) {\n this._placeholderColor = newColor\n this.requestRender()\n }\n }\n\n public set cursorColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.cursorColor)\n if (this._cursorColor !== newColor) {\n this._cursorColor = newColor\n this.requestRender()\n }\n }\n\n public updateFromLayout(): void {\n super.updateFromLayout()\n this.updateCursorPosition()\n }\n\n protected onResize(width: number, height: number): void {\n super.onResize(width, height)\n this.updateCursorPosition()\n }\n\n protected onRemove(): void {\n if (this._focused) {\n this._ctx.setCursorPosition(0, 0, false)\n }\n }\n}\n",
|
|
19
|
+
"import { OptimizedBuffer } from \"../buffer\"\nimport type { KeyEvent } from \"../lib/KeyHandler\"\nimport { RGBA, parseColor, type ColorInput } from \"../lib/RGBA\"\nimport { Renderable, type RenderableOptions } from \"../Renderable\"\nimport type { RenderContext, CursorStyleOptions } from \"../types\"\n\nexport interface InputRenderableOptions extends RenderableOptions<InputRenderable> {\n backgroundColor?: ColorInput\n textColor?: ColorInput\n focusedBackgroundColor?: ColorInput\n focusedTextColor?: ColorInput\n placeholder?: string\n placeholderColor?: ColorInput\n cursorColor?: ColorInput\n cursorStyle?: CursorStyleOptions\n maxLength?: number\n value?: string\n}\n\n// TODO: make this just plain strings instead of an enum (same for other events)\nexport enum InputRenderableEvents {\n INPUT = \"input\",\n CHANGE = \"change\",\n ENTER = \"enter\",\n}\n\nexport class InputRenderable extends Renderable {\n protected _focusable: boolean = true\n\n private _value: string = \"\"\n private _cursorPosition: number = 0\n private _placeholder: string\n private _backgroundColor: RGBA\n private _textColor: RGBA\n private _focusedBackgroundColor: RGBA\n private _focusedTextColor: RGBA\n private _placeholderColor: RGBA\n private _cursorColor: RGBA\n private _cursorStyle: CursorStyleOptions\n private _maxLength: number\n private _lastCommittedValue: string = \"\"\n\n protected _defaultOptions = {\n backgroundColor: \"transparent\",\n textColor: \"#FFFFFF\",\n focusedBackgroundColor: \"#1a1a1a\",\n focusedTextColor: \"#FFFFFF\",\n placeholder: \"\",\n placeholderColor: \"#666666\",\n cursorColor: \"#FFFFFF\",\n cursorStyle: {\n style: \"block\",\n blinking: true,\n },\n maxLength: 1000,\n value: \"\",\n } satisfies Partial<InputRenderableOptions>\n\n constructor(ctx: RenderContext, options: InputRenderableOptions) {\n super(ctx, { ...options, buffered: true })\n\n this._backgroundColor = parseColor(options.backgroundColor || this._defaultOptions.backgroundColor)\n this._textColor = parseColor(options.textColor || this._defaultOptions.textColor)\n this._focusedBackgroundColor = parseColor(\n options.focusedBackgroundColor || options.backgroundColor || this._defaultOptions.focusedBackgroundColor,\n )\n this._focusedTextColor = parseColor(\n options.focusedTextColor || options.textColor || this._defaultOptions.focusedTextColor,\n )\n this._placeholder = options.placeholder || this._defaultOptions.placeholder\n this._value = options.value || this._defaultOptions.value\n this._lastCommittedValue = this._value\n this._cursorPosition = this._value.length\n this._maxLength = options.maxLength || this._defaultOptions.maxLength\n\n this._placeholderColor = parseColor(options.placeholderColor || this._defaultOptions.placeholderColor)\n this._cursorColor = parseColor(options.cursorColor || this._defaultOptions.cursorColor)\n this._cursorStyle = options.cursorStyle || this._defaultOptions.cursorStyle\n }\n\n private updateCursorPosition(): void {\n if (!this._focused) return\n\n const contentX = 0\n const contentY = 0\n const contentWidth = this.width\n\n const maxVisibleChars = contentWidth - 1\n let displayStartIndex = 0\n\n if (this._cursorPosition >= maxVisibleChars) {\n displayStartIndex = this._cursorPosition - maxVisibleChars + 1\n }\n\n const cursorDisplayX = this._cursorPosition - displayStartIndex\n\n if (cursorDisplayX >= 0 && cursorDisplayX < contentWidth) {\n const absoluteCursorX = this.x + contentX + cursorDisplayX + 1\n const absoluteCursorY = this.y + contentY + 1\n\n this._ctx.setCursorPosition(absoluteCursorX, absoluteCursorY, true)\n this._ctx.setCursorColor(this._cursorColor)\n }\n }\n\n public focus(): void {\n super.focus()\n this._ctx.setCursorStyle(this._cursorStyle.style, this._cursorStyle.blinking)\n this._ctx.setCursorColor(this._cursorColor)\n this.updateCursorPosition()\n }\n\n public blur(): void {\n super.blur()\n this._ctx.setCursorPosition(0, 0, false)\n\n if (this._value !== this._lastCommittedValue) {\n this._lastCommittedValue = this._value\n this.emit(InputRenderableEvents.CHANGE, this._value)\n }\n }\n\n protected renderSelf(buffer: OptimizedBuffer, deltaTime: number): void {\n if (!this.visible || !this.frameBuffer) return\n\n if (this.isDirty) {\n this.refreshFrameBuffer()\n }\n }\n\n private refreshFrameBuffer(): void {\n if (!this.frameBuffer) return\n\n const bgColor = this._focused ? this._focusedBackgroundColor : this._backgroundColor\n this.frameBuffer.clear(bgColor)\n\n const contentX = 0\n const contentY = 0\n const contentWidth = this.width\n const contentHeight = this.height\n\n const displayText = this._value || this._placeholder\n const isPlaceholder = !this._value && this._placeholder\n const baseTextColor = this._focused ? this._focusedTextColor : this._textColor\n const textColor = isPlaceholder ? this._placeholderColor : baseTextColor\n\n const maxVisibleChars = contentWidth - 1\n let displayStartIndex = 0\n\n if (this._cursorPosition >= maxVisibleChars) {\n displayStartIndex = this._cursorPosition - maxVisibleChars + 1\n }\n\n const visibleText = displayText.substring(displayStartIndex, displayStartIndex + maxVisibleChars)\n\n if (visibleText) {\n this.frameBuffer.drawText(visibleText, contentX, contentY, textColor)\n }\n\n if (this._focused) {\n this.updateCursorPosition()\n }\n }\n\n public get value(): string {\n return this._value\n }\n\n public set value(value: string) {\n const newValue = value.substring(0, this._maxLength)\n if (this._value !== newValue) {\n this._value = newValue\n this._cursorPosition = Math.min(this._cursorPosition, this._value.length)\n this.requestRender()\n this.updateCursorPosition()\n this.emit(InputRenderableEvents.INPUT, this._value)\n }\n }\n\n public set placeholder(placeholder: string) {\n if (this._placeholder !== placeholder) {\n this._placeholder = placeholder\n this.requestRender()\n }\n }\n\n public get cursorPosition(): number {\n return this._cursorPosition\n }\n\n public set cursorPosition(position: number) {\n const newPosition = Math.max(0, Math.min(position, this._value.length))\n if (this._cursorPosition !== newPosition) {\n this._cursorPosition = newPosition\n this.requestRender()\n this.updateCursorPosition()\n }\n }\n\n public insertText(text: string): void {\n if (this._value.length + text.length > this._maxLength) {\n return\n }\n\n const beforeCursor = this._value.substring(0, this._cursorPosition)\n const afterCursor = this._value.substring(this._cursorPosition)\n this._value = beforeCursor + text + afterCursor\n this._cursorPosition += text.length\n this.requestRender()\n this.updateCursorPosition()\n this.emit(InputRenderableEvents.INPUT, this._value)\n }\n\n public deleteCharacter(direction: \"backward\" | \"forward\"): void {\n if (direction === \"backward\" && this._cursorPosition > 0) {\n const beforeCursor = this._value.substring(0, this._cursorPosition - 1)\n const afterCursor = this._value.substring(this._cursorPosition)\n this._value = beforeCursor + afterCursor\n this._cursorPosition--\n this.requestRender()\n this.updateCursorPosition()\n this.emit(InputRenderableEvents.INPUT, this._value)\n } else if (direction === \"forward\" && this._cursorPosition < this._value.length) {\n const beforeCursor = this._value.substring(0, this._cursorPosition)\n const afterCursor = this._value.substring(this._cursorPosition + 1)\n this._value = beforeCursor + afterCursor\n this.requestRender()\n this.updateCursorPosition()\n this.emit(InputRenderableEvents.INPUT, this._value)\n }\n }\n\n public handleKeyPress(key: KeyEvent | string): boolean {\n const keyName = typeof key === \"string\" ? key : key.name\n const keySequence = typeof key === \"string\" ? key : key.sequence\n\n switch (keyName) {\n case \"left\":\n this.cursorPosition = this._cursorPosition - 1\n return true\n\n case \"right\":\n this.cursorPosition = this._cursorPosition + 1\n return true\n\n case \"home\":\n this.cursorPosition = 0\n return true\n\n case \"end\":\n this.cursorPosition = this._value.length\n return true\n\n case \"backspace\":\n this.deleteCharacter(\"backward\")\n return true\n\n case \"delete\":\n this.deleteCharacter(\"forward\")\n return true\n\n case \"return\":\n case \"linefeed\":\n if (this._value !== this._lastCommittedValue) {\n this._lastCommittedValue = this._value\n this.emit(InputRenderableEvents.CHANGE, this._value)\n }\n this.emit(InputRenderableEvents.ENTER, this._value)\n return true\n\n default:\n if (\n keySequence &&\n keySequence.length === 1 &&\n keySequence.charCodeAt(0) >= 32 &&\n keySequence.charCodeAt(0) <= 126\n ) {\n this.insertText(keySequence)\n return true\n }\n break\n }\n\n return false\n }\n\n public set maxLength(maxLength: number) {\n this._maxLength = maxLength\n if (this._value.length > maxLength) {\n this._value = this._value.substring(0, maxLength)\n this.requestRender()\n }\n }\n\n public set backgroundColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.backgroundColor)\n if (this._backgroundColor !== newColor) {\n this._backgroundColor = newColor\n this.requestRender()\n }\n }\n\n public set textColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.textColor)\n if (this._textColor !== newColor) {\n this._textColor = newColor\n this.requestRender()\n }\n }\n\n public set focusedBackgroundColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.focusedBackgroundColor)\n if (this._focusedBackgroundColor !== newColor) {\n this._focusedBackgroundColor = newColor\n this.requestRender()\n }\n }\n\n public set focusedTextColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.focusedTextColor)\n if (this._focusedTextColor !== newColor) {\n this._focusedTextColor = newColor\n this.requestRender()\n }\n }\n\n public set placeholderColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.placeholderColor)\n if (this._placeholderColor !== newColor) {\n this._placeholderColor = newColor\n this.requestRender()\n }\n }\n\n public set cursorColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.cursorColor)\n if (this._cursorColor !== newColor) {\n this._cursorColor = newColor\n if (this._focused) {\n this._ctx.requestRender()\n }\n }\n }\n\n public get cursorStyle(): CursorStyleOptions {\n return this._cursorStyle\n }\n\n public set cursorStyle(style: CursorStyleOptions) {\n const newStyle = style\n if (this.cursorStyle.style !== newStyle.style || this.cursorStyle.blinking !== newStyle.blinking) {\n this._cursorStyle = newStyle\n if (this._focused) {\n this._ctx.requestRender()\n }\n }\n }\n\n public updateFromLayout(): void {\n super.updateFromLayout()\n this.updateCursorPosition()\n }\n\n protected onResize(width: number, height: number): void {\n super.onResize(width, height)\n this.updateCursorPosition()\n }\n\n protected onRemove(): void {\n if (this._focused) {\n this._ctx.setCursorPosition(0, 0, false)\n }\n }\n}\n",
|
|
20
20
|
"import {\n type ColorInput,\n OptimizedBuffer,\n parseColor,\n Renderable,\n type RenderableOptions,\n type RenderContext,\n RGBA,\n} from \"../index\"\n\nconst defaultThumbBackgroundColor = RGBA.fromHex(\"#9a9ea3\")\nconst defaultTrackBackgroundColor = RGBA.fromHex(\"#252527\")\n\nexport interface SliderOptions extends RenderableOptions<SliderRenderable> {\n orientation: \"vertical\" | \"horizontal\"\n value?: number\n min?: number\n max?: number\n viewPortSize?: number\n backgroundColor?: ColorInput\n foregroundColor?: ColorInput\n onChange?: (value: number) => void\n}\n\nexport class SliderRenderable extends Renderable {\n public readonly orientation: \"vertical\" | \"horizontal\"\n private _value: number\n private _min: number\n private _max: number\n private _viewPortSize: number\n private _backgroundColor: RGBA\n private _foregroundColor: RGBA\n private _onChange?: (value: number) => void\n\n constructor(ctx: RenderContext, options: SliderOptions) {\n super(ctx, { flexShrink: 0, ...options })\n this.orientation = options.orientation\n this._min = options.min ?? 0\n this._max = options.max ?? 100\n this._value = options.value ?? this._min\n this._viewPortSize = options.viewPortSize ?? Math.max(1, (this._max - this._min) * 0.1)\n this._onChange = options.onChange\n this._backgroundColor = options.backgroundColor ? parseColor(options.backgroundColor) : defaultTrackBackgroundColor\n this._foregroundColor = options.foregroundColor ? parseColor(options.foregroundColor) : defaultThumbBackgroundColor\n\n this.setupMouseHandling()\n }\n\n get value(): number {\n return this._value\n }\n\n set value(newValue: number) {\n const clamped = Math.max(this._min, Math.min(this._max, newValue))\n if (clamped !== this._value) {\n this._value = clamped\n this._onChange?.(clamped)\n this.emit(\"change\", { value: clamped })\n this.requestRender()\n }\n }\n\n get min(): number {\n return this._min\n }\n\n set min(newMin: number) {\n if (newMin !== this._min) {\n this._min = newMin\n if (this._value < newMin) {\n this.value = newMin\n }\n this.requestRender()\n }\n }\n\n get max(): number {\n return this._max\n }\n\n set max(newMax: number) {\n if (newMax !== this._max) {\n this._max = newMax\n if (this._value > newMax) {\n this.value = newMax\n }\n this.requestRender()\n }\n }\n\n set viewPortSize(size: number) {\n const clampedSize = Math.max(0.01, Math.min(size, this._max - this._min))\n if (clampedSize !== this._viewPortSize) {\n this._viewPortSize = clampedSize\n this.requestRender()\n }\n }\n\n get viewPortSize(): number {\n return this._viewPortSize\n }\n\n get backgroundColor(): RGBA {\n return this._backgroundColor\n }\n\n set backgroundColor(value: ColorInput) {\n this._backgroundColor = parseColor(value)\n this.requestRender()\n }\n\n get foregroundColor(): RGBA {\n return this._foregroundColor\n }\n\n set foregroundColor(value: ColorInput) {\n this._foregroundColor = parseColor(value)\n this.requestRender()\n }\n\n private calculateDragOffsetVirtual(event: any): number {\n const trackStart = this.orientation === \"vertical\" ? this.y : this.x\n const mousePos = (this.orientation === \"vertical\" ? event.y : event.x) - trackStart\n const virtualMousePos = Math.max(\n 0,\n Math.min((this.orientation === \"vertical\" ? this.height : this.width) * 2, mousePos * 2),\n )\n const virtualThumbStart = this.getVirtualThumbStart()\n const virtualThumbSize = this.getVirtualThumbSize()\n\n return Math.max(0, Math.min(virtualThumbSize, virtualMousePos - virtualThumbStart))\n }\n\n private setupMouseHandling(): void {\n let isDragging = false\n let dragOffsetVirtual = 0\n\n this.onMouseDown = (event) => {\n event.stopPropagation()\n event.preventDefault()\n\n const thumb = this.getThumbRect()\n const inThumb =\n event.x >= thumb.x && event.x < thumb.x + thumb.width && event.y >= thumb.y && event.y < thumb.y + thumb.height\n\n if (inThumb) {\n isDragging = true\n\n dragOffsetVirtual = this.calculateDragOffsetVirtual(event)\n } else {\n this.updateValueFromMouseDirect(event)\n isDragging = true\n\n dragOffsetVirtual = this.calculateDragOffsetVirtual(event)\n }\n }\n\n this.onMouseDrag = (event) => {\n if (!isDragging) return\n event.stopPropagation()\n this.updateValueFromMouseWithOffset(event, dragOffsetVirtual)\n }\n\n this.onMouseUp = (event) => {\n if (isDragging) {\n this.updateValueFromMouseWithOffset(event, dragOffsetVirtual)\n }\n isDragging = false\n }\n }\n\n private updateValueFromMouseDirect(event: any): void {\n const trackStart = this.orientation === \"vertical\" ? this.y : this.x\n const trackSize = this.orientation === \"vertical\" ? this.height : this.width\n const mousePos = this.orientation === \"vertical\" ? event.y : event.x\n\n const relativeMousePos = mousePos - trackStart\n const clampedMousePos = Math.max(0, Math.min(trackSize, relativeMousePos))\n const ratio = trackSize === 0 ? 0 : clampedMousePos / trackSize\n const range = this._max - this._min\n const newValue = this._min + ratio * range\n\n this.value = newValue\n }\n\n private updateValueFromMouseWithOffset(event: any, offsetVirtual: number): void {\n const trackStart = this.orientation === \"vertical\" ? this.y : this.x\n const trackSize = this.orientation === \"vertical\" ? this.height : this.width\n const mousePos = this.orientation === \"vertical\" ? event.y : event.x\n\n const virtualTrackSize = trackSize * 2\n const relativeMousePos = mousePos - trackStart\n const clampedMousePos = Math.max(0, Math.min(trackSize, relativeMousePos))\n const virtualMousePos = clampedMousePos * 2\n\n const virtualThumbSize = this.getVirtualThumbSize()\n const maxThumbStart = Math.max(0, virtualTrackSize - virtualThumbSize)\n\n let desiredThumbStart = virtualMousePos - offsetVirtual\n desiredThumbStart = Math.max(0, Math.min(maxThumbStart, desiredThumbStart))\n\n const ratio = maxThumbStart === 0 ? 0 : desiredThumbStart / maxThumbStart\n const range = this._max - this._min\n const newValue = this._min + ratio * range\n\n this.value = newValue\n }\n\n private getThumbRect(): { x: number; y: number; width: number; height: number } {\n const virtualThumbSize = this.getVirtualThumbSize()\n const virtualThumbStart = this.getVirtualThumbStart()\n\n const realThumbStart = Math.floor(virtualThumbStart / 2)\n const realThumbSize = Math.ceil((virtualThumbStart + virtualThumbSize) / 2) - realThumbStart\n\n if (this.orientation === \"vertical\") {\n return {\n x: this.x,\n y: this.y + realThumbStart,\n width: this.width,\n height: Math.max(1, realThumbSize),\n }\n } else {\n return {\n x: this.x + realThumbStart,\n y: this.y,\n width: Math.max(1, realThumbSize),\n height: this.height,\n }\n }\n }\n\n protected renderSelf(buffer: OptimizedBuffer): void {\n if (this.orientation === \"horizontal\") {\n this.renderHorizontal(buffer)\n } else {\n this.renderVertical(buffer)\n }\n }\n\n private renderHorizontal(buffer: OptimizedBuffer): void {\n const virtualThumbSize = this.getVirtualThumbSize()\n const virtualThumbStart = this.getVirtualThumbStart()\n const virtualThumbEnd = virtualThumbStart + virtualThumbSize\n\n buffer.fillRect(this.x, this.y, this.width, this.height, this._backgroundColor)\n\n const realStartCell = Math.floor(virtualThumbStart / 2)\n const realEndCell = Math.ceil(virtualThumbEnd / 2) - 1\n const startX = Math.max(0, realStartCell)\n const endX = Math.min(this.width - 1, realEndCell)\n\n for (let realX = startX; realX <= endX; realX++) {\n const virtualCellStart = realX * 2\n const virtualCellEnd = virtualCellStart + 2\n\n const thumbStartInCell = Math.max(virtualThumbStart, virtualCellStart)\n const thumbEndInCell = Math.min(virtualThumbEnd, virtualCellEnd)\n const coverage = thumbEndInCell - thumbStartInCell\n\n let char = \" \"\n\n if (coverage >= 2) {\n char = \"█\"\n } else {\n const isLeftHalf = thumbStartInCell === virtualCellStart\n if (isLeftHalf) {\n char = \"▌\"\n } else {\n char = \"▐\"\n }\n }\n\n for (let y = 0; y < this.height; y++) {\n buffer.setCellWithAlphaBlending(this.x + realX, this.y + y, char, this._foregroundColor, this._backgroundColor)\n }\n }\n }\n\n private renderVertical(buffer: OptimizedBuffer): void {\n const virtualThumbSize = this.getVirtualThumbSize()\n const virtualThumbStart = this.getVirtualThumbStart()\n const virtualThumbEnd = virtualThumbStart + virtualThumbSize\n\n buffer.fillRect(this.x, this.y, this.width, this.height, this._backgroundColor)\n\n const realStartCell = Math.floor(virtualThumbStart / 2)\n const realEndCell = Math.ceil(virtualThumbEnd / 2) - 1\n const startY = Math.max(0, realStartCell)\n const endY = Math.min(this.height - 1, realEndCell)\n\n for (let realY = startY; realY <= endY; realY++) {\n const virtualCellStart = realY * 2\n const virtualCellEnd = virtualCellStart + 2\n\n const thumbStartInCell = Math.max(virtualThumbStart, virtualCellStart)\n const thumbEndInCell = Math.min(virtualThumbEnd, virtualCellEnd)\n const coverage = thumbEndInCell - thumbStartInCell\n\n let char = \" \"\n\n if (coverage >= 2) {\n char = \"█\"\n } else if (coverage > 0) {\n const virtualPositionInCell = thumbStartInCell - virtualCellStart\n if (virtualPositionInCell === 0) {\n char = \"▀\"\n } else {\n char = \"▄\"\n }\n }\n\n for (let x = 0; x < this.width; x++) {\n buffer.setCellWithAlphaBlending(this.x + x, this.y + realY, char, this._foregroundColor, this._backgroundColor)\n }\n }\n }\n\n private getVirtualThumbSize(): number {\n const virtualTrackSize = this.orientation === \"vertical\" ? this.height * 2 : this.width * 2\n const range = this._max - this._min\n\n if (range === 0) return virtualTrackSize\n\n const viewportSize = Math.max(1, this._viewPortSize)\n const contentSize = range + viewportSize\n\n if (contentSize <= viewportSize) return virtualTrackSize\n\n const thumbRatio = viewportSize / contentSize\n const calculatedSize = Math.floor(virtualTrackSize * thumbRatio)\n\n return Math.max(1, Math.min(calculatedSize, virtualTrackSize))\n }\n\n private getVirtualThumbStart(): number {\n const virtualTrackSize = this.orientation === \"vertical\" ? this.height * 2 : this.width * 2\n const range = this._max - this._min\n\n if (range === 0) return 0\n\n const valueRatio = (this._value - this._min) / range\n const virtualThumbSize = this.getVirtualThumbSize()\n\n return Math.round(valueRatio * (virtualTrackSize - virtualThumbSize))\n }\n}\n",
|
|
21
21
|
"import type { OptimizedBuffer } from \"../buffer\"\nimport { parseColor, RGBA, type ColorInput } from \"../lib\"\nimport type { KeyEvent } from \"../lib/KeyHandler\"\nimport { Renderable, type RenderableOptions } from \"../Renderable\"\nimport type { RenderContext, Timeout } from \"../types\"\nimport { type BoxOptions } from \"./Box\"\nimport { SliderRenderable, type SliderOptions } from \"./Slider\"\n\nexport interface ScrollBarOptions extends RenderableOptions<ScrollBarRenderable> {\n orientation: \"vertical\" | \"horizontal\"\n showArrows?: boolean\n arrowOptions?: Omit<ArrowOptions, \"direction\">\n trackOptions?: Partial<SliderOptions>\n onChange?: (position: number) => void\n}\n\nexport type ScrollUnit = \"absolute\" | \"viewport\" | \"content\" | \"step\"\n\nexport class ScrollBarRenderable extends Renderable {\n public readonly slider: SliderRenderable\n public readonly startArrow: ArrowRenderable\n public readonly endArrow: ArrowRenderable\n public readonly orientation: \"vertical\" | \"horizontal\"\n\n protected _focusable: boolean = true\n\n private _scrollSize = 0\n private _scrollPosition = 0\n private _viewportSize = 0\n private _showArrows = false\n private _manualVisibility = false\n\n private _onChange: ((position: number) => void) | undefined\n\n scrollStep: number | undefined | null = null\n\n get visible(): boolean {\n return super.visible\n }\n\n set visible(value: boolean) {\n this._manualVisibility = true\n super.visible = value\n }\n\n public resetVisibilityControl(): void {\n this._manualVisibility = false\n this.recalculateVisibility()\n }\n\n get scrollSize(): number {\n return this._scrollSize\n }\n\n get scrollPosition(): number {\n return this._scrollPosition\n }\n\n get viewportSize(): number {\n return this._viewportSize\n }\n\n set scrollSize(value: number) {\n if (value === this.scrollSize) return\n this._scrollSize = value\n this.recalculateVisibility()\n this.updateSliderFromScrollState()\n this.scrollPosition = this.scrollPosition\n }\n\n set scrollPosition(value: number) {\n const newPosition = Math.round(Math.min(Math.max(0, value), this.scrollSize - this.viewportSize))\n if (newPosition !== this._scrollPosition) {\n this._scrollPosition = newPosition\n this.updateSliderFromScrollState()\n // Events are triggered by the slider change event\n // this._onChange?.(newPosition)\n // this.emit(\"change\", { position: newPosition })\n }\n }\n\n set viewportSize(value: number) {\n if (value === this.viewportSize) return\n this._viewportSize = value\n this.slider.viewPortSize = Math.max(1, this._viewportSize)\n this.recalculateVisibility()\n this.updateSliderFromScrollState()\n this.scrollPosition = this.scrollPosition\n }\n\n get showArrows(): boolean {\n return this._showArrows\n }\n\n set showArrows(value: boolean) {\n if (value === this._showArrows) return\n this._showArrows = value\n this.startArrow.visible = value\n this.endArrow.visible = value\n }\n\n constructor(\n ctx: RenderContext,\n { trackOptions, arrowOptions, orientation, showArrows = false, ...options }: ScrollBarOptions,\n ) {\n super(ctx, {\n flexDirection: orientation === \"vertical\" ? \"column\" : \"row\",\n alignSelf: \"stretch\",\n alignItems: \"stretch\",\n ...(options as BoxOptions),\n })\n\n this._onChange = options.onChange\n\n this.orientation = orientation\n this._showArrows = showArrows\n\n const scrollRange = Math.max(0, this._scrollSize - this._viewportSize)\n\n const defaultStepSize = Math.max(1, this._viewportSize)\n const stepSize = trackOptions?.viewPortSize ?? defaultStepSize\n\n this.slider = new SliderRenderable(ctx, {\n orientation,\n min: 0,\n max: scrollRange,\n value: this._scrollPosition,\n viewPortSize: stepSize,\n onChange: (value) => {\n this._scrollPosition = Math.round(value)\n this._onChange?.(this._scrollPosition)\n this.emit(\"change\", { position: this._scrollPosition })\n },\n ...(orientation === \"vertical\"\n ? {\n width: Math.max(1, Math.min(2, this.width)),\n height: \"100%\",\n marginLeft: \"auto\",\n }\n : {\n width: \"100%\",\n height: 1,\n marginTop: \"auto\",\n }),\n flexGrow: 1,\n flexShrink: 1,\n ...trackOptions,\n })\n\n this.updateSliderFromScrollState()\n\n const arrowOpts = arrowOptions\n ? {\n foregroundColor: arrowOptions.backgroundColor,\n backgroundColor: arrowOptions.backgroundColor,\n attributes: arrowOptions.attributes,\n ...arrowOptions,\n }\n : {}\n\n this.startArrow = new ArrowRenderable(ctx, {\n alignSelf: \"center\",\n visible: this.showArrows,\n direction: this.orientation === \"vertical\" ? \"up\" : \"left\",\n height: this.orientation === \"vertical\" ? 1 : 1,\n ...arrowOpts,\n })\n\n this.endArrow = new ArrowRenderable(ctx, {\n alignSelf: \"center\",\n visible: this.showArrows,\n direction: this.orientation === \"vertical\" ? \"down\" : \"right\",\n height: this.orientation === \"vertical\" ? 1 : 1,\n ...arrowOpts,\n })\n\n this.add(this.startArrow)\n this.add(this.slider)\n this.add(this.endArrow)\n\n let startArrowMouseTimeout = undefined as Timeout\n let endArrowMouseTimeout = undefined as Timeout\n\n this.startArrow.onMouseDown = (event) => {\n event.stopPropagation()\n event.preventDefault()\n\n this.scrollBy(-0.5, \"viewport\")\n\n startArrowMouseTimeout = setTimeout(() => {\n this.scrollBy(-0.5, \"viewport\")\n\n startArrowMouseTimeout = setInterval(() => {\n this.scrollBy(-0.2, \"viewport\")\n }, 200)\n }, 500)\n }\n\n this.startArrow.onMouseUp = (event) => {\n event.stopPropagation()\n clearInterval(startArrowMouseTimeout!)\n }\n\n this.endArrow.onMouseDown = (event) => {\n event.stopPropagation()\n event.preventDefault()\n\n this.scrollBy(0.5, \"viewport\")\n\n endArrowMouseTimeout = setTimeout(() => {\n this.scrollBy(0.5, \"viewport\")\n\n endArrowMouseTimeout = setInterval(() => {\n this.scrollBy(0.2, \"viewport\")\n }, 200)\n }, 500)\n }\n\n this.endArrow.onMouseUp = (event) => {\n event.stopPropagation()\n clearInterval(endArrowMouseTimeout!)\n }\n }\n\n public set arrowOptions(options: ScrollBarOptions[\"arrowOptions\"]) {\n Object.assign(this.startArrow, options)\n Object.assign(this.endArrow, options)\n this.requestRender()\n }\n\n public set trackOptions(options: ScrollBarOptions[\"trackOptions\"]) {\n Object.assign(this.slider, options)\n this.requestRender()\n }\n\n private updateSliderFromScrollState(): void {\n const scrollRange = Math.max(0, this._scrollSize - this._viewportSize)\n\n this.slider.min = 0\n this.slider.max = scrollRange\n\n this.slider.value = Math.min(this._scrollPosition, scrollRange)\n }\n\n public scrollBy(delta: number, unit: ScrollUnit = \"absolute\"): void {\n const multiplier =\n unit === \"viewport\"\n ? this.viewportSize\n : unit === \"content\"\n ? this.scrollSize\n : unit === \"step\"\n ? (this.scrollStep ?? 1)\n : 1\n\n const resolvedDelta = multiplier * delta\n this.scrollPosition += resolvedDelta\n }\n\n private recalculateVisibility(): void {\n if (!this._manualVisibility) {\n const sizeRatio = this.scrollSize <= this.viewportSize ? 1 : this.viewportSize / this.scrollSize\n super.visible = sizeRatio < 1\n }\n }\n\n public handleKeyPress(key: KeyEvent | string): boolean {\n const keyName = typeof key === \"string\" ? key : key.name\n\n switch (keyName) {\n case \"left\":\n case \"h\":\n if (this.orientation !== \"horizontal\") return false\n this.scrollBy(-1 / 5, \"viewport\")\n return true\n case \"right\":\n case \"l\":\n if (this.orientation !== \"horizontal\") return false\n this.scrollBy(1 / 5, \"viewport\")\n return true\n case \"up\":\n case \"k\":\n if (this.orientation !== \"vertical\") return false\n this.scrollBy(-1 / 5, \"viewport\")\n return true\n case \"down\":\n case \"j\":\n if (this.orientation !== \"vertical\") return false\n this.scrollBy(1 / 5, \"viewport\")\n return true\n case \"pageup\":\n this.scrollBy(-1 / 2, \"viewport\")\n return true\n case \"pagedown\":\n this.scrollBy(1 / 2, \"viewport\")\n return true\n case \"home\":\n this.scrollBy(-1, \"content\")\n return true\n case \"end\":\n this.scrollBy(1, \"content\")\n return true\n }\n\n return false\n }\n}\n\nexport interface ArrowOptions extends RenderableOptions<ArrowRenderable> {\n direction: \"up\" | \"down\" | \"left\" | \"right\"\n foregroundColor?: ColorInput\n backgroundColor?: ColorInput\n attributes?: number\n arrowChars?: {\n up?: string\n down?: string\n left?: string\n right?: string\n }\n}\n\nexport class ArrowRenderable extends Renderable {\n private _direction: \"up\" | \"down\" | \"left\" | \"right\"\n private _foregroundColor: RGBA\n private _backgroundColor: RGBA\n private _attributes: number\n private _arrowChars: {\n up: string\n down: string\n left: string\n right: string\n }\n\n constructor(ctx: RenderContext, options: ArrowOptions) {\n super(ctx, options)\n this._direction = options.direction\n this._foregroundColor = options.foregroundColor ? parseColor(options.foregroundColor) : RGBA.fromValues(1, 1, 1, 1)\n this._backgroundColor = options.backgroundColor ? parseColor(options.backgroundColor) : RGBA.fromValues(0, 0, 0, 0)\n this._attributes = options.attributes ?? 0\n\n this._arrowChars = {\n up: \"▲\",\n down: \"▼\",\n left: \"◀\",\n right: \"▶\",\n ...options.arrowChars,\n }\n\n if (!options.width) {\n this.width = Bun.stringWidth(this.getArrowChar())\n }\n }\n\n get direction(): \"up\" | \"down\" | \"left\" | \"right\" {\n return this._direction\n }\n\n set direction(value: \"up\" | \"down\" | \"left\" | \"right\") {\n if (this._direction !== value) {\n this._direction = value\n this.requestRender()\n }\n }\n\n get foregroundColor(): RGBA {\n return this._foregroundColor\n }\n\n set foregroundColor(value: ColorInput) {\n if (this._foregroundColor !== value) {\n this._foregroundColor = parseColor(value)\n this.requestRender()\n }\n }\n\n get backgroundColor(): RGBA {\n return this._backgroundColor\n }\n\n set backgroundColor(value: ColorInput) {\n if (this._backgroundColor !== value) {\n this._backgroundColor = parseColor(value)\n this.requestRender()\n }\n }\n\n get attributes(): number {\n return this._attributes\n }\n\n set attributes(value: number) {\n if (this._attributes !== value) {\n this._attributes = value\n this.requestRender()\n }\n }\n\n set arrowChars(value: ArrowOptions[\"arrowChars\"]) {\n this._arrowChars = {\n ...this._arrowChars,\n ...value,\n }\n this.requestRender()\n }\n\n protected renderSelf(buffer: OptimizedBuffer): void {\n const char = this.getArrowChar()\n buffer.drawText(char, this.x, this.y, this._foregroundColor, this._backgroundColor, this._attributes)\n }\n\n private getArrowChar(): string {\n switch (this._direction) {\n case \"up\":\n return this._arrowChars.up\n case \"down\":\n return this._arrowChars.down\n case \"left\":\n return this._arrowChars.left\n case \"right\":\n return this._arrowChars.right\n default:\n return \"?\"\n }\n }\n}\n",
|
|
22
|
-
"import { type KeyEvent } from \"../lib\"\nimport { getObjectsInViewport } from \"../lib/objects-in-viewport\"\nimport { LinearScrollAccel, MacOSScrollAccel, type ScrollAcceleration } from \"../lib/scroll-acceleration\"\nimport type { Renderable, RenderableOptions } from \"../Renderable\"\nimport type { MouseEvent } from \"../renderer\"\nimport type { RenderContext } from \"../types\"\nimport { BoxRenderable, type BoxOptions } from \"./Box\"\nimport type { VNode } from \"./composition/vnode\"\nimport { ScrollBarRenderable, type ScrollBarOptions, type ScrollUnit } from \"./ScrollBar\"\n\nclass ContentRenderable extends BoxRenderable {\n private viewport: BoxRenderable\n\n constructor(ctx: RenderContext, viewport: BoxRenderable, options: RenderableOptions<BoxRenderable>) {\n super(ctx, options)\n this.viewport = viewport\n }\n\n protected _getChildren(): Renderable[] {\n return getObjectsInViewport(this.viewport, this.getChildrenSortedByPrimaryAxis(), this.primaryAxis)\n }\n}\n\nexport interface ScrollBoxOptions extends BoxOptions<ScrollBoxRenderable> {\n rootOptions?: BoxOptions\n wrapperOptions?: BoxOptions\n viewportOptions?: BoxOptions\n contentOptions?: BoxOptions\n scrollbarOptions?: Omit<ScrollBarOptions, \"orientation\">\n verticalScrollbarOptions?: Omit<ScrollBarOptions, \"orientation\">\n horizontalScrollbarOptions?: Omit<ScrollBarOptions, \"orientation\">\n stickyScroll?: boolean\n stickyStart?: \"bottom\" | \"top\" | \"left\" | \"right\"\n scrollX?: boolean\n scrollY?: boolean\n scrollAcceleration?: ScrollAcceleration\n}\n\nexport class ScrollBoxRenderable extends BoxRenderable {\n static idCounter = 0\n private internalId = 0\n public readonly wrapper: BoxRenderable\n public readonly viewport: BoxRenderable\n public readonly content: ContentRenderable\n public readonly horizontalScrollBar: ScrollBarRenderable\n public readonly verticalScrollBar: ScrollBarRenderable\n\n protected _focusable: boolean = true\n private selectionListener?: () => void\n\n private autoScrollMouseX: number = 0\n private autoScrollMouseY: number = 0\n private readonly autoScrollThresholdVertical = 3\n private readonly autoScrollThresholdHorizontal = 3\n private readonly autoScrollSpeedSlow = 6\n private readonly autoScrollSpeedMedium = 36\n private readonly autoScrollSpeedFast = 72\n private isAutoScrolling: boolean = false\n private cachedAutoScrollSpeed: number = 3\n private autoScrollAccumulatorX: number = 0\n private autoScrollAccumulatorY: number = 0\n\n private _stickyScroll: boolean\n private _stickyScrollTop: boolean = false\n private _stickyScrollBottom: boolean = false\n private _stickyScrollLeft: boolean = false\n private _stickyScrollRight: boolean = false\n private _stickyStart?: \"bottom\" | \"top\" | \"left\" | \"right\"\n private _hasManualScroll: boolean = false\n private scrollAccel: ScrollAcceleration\n\n get stickyScroll(): boolean {\n return this._stickyScroll\n }\n\n set stickyScroll(value: boolean) {\n this._stickyScroll = value\n this.updateStickyState()\n }\n\n get stickyStart(): \"bottom\" | \"top\" | \"left\" | \"right\" | undefined {\n return this._stickyStart\n }\n\n set stickyStart(value: \"bottom\" | \"top\" | \"left\" | \"right\" | undefined) {\n this._stickyStart = value\n this.updateStickyState()\n }\n\n get scrollTop(): number {\n return this.verticalScrollBar.scrollPosition\n }\n\n set scrollTop(value: number) {\n this.verticalScrollBar.scrollPosition = value\n this._hasManualScroll = true\n this.updateStickyState()\n }\n\n get scrollLeft(): number {\n return this.horizontalScrollBar.scrollPosition\n }\n\n set scrollLeft(value: number) {\n this.horizontalScrollBar.scrollPosition = value\n this._hasManualScroll = true\n this.updateStickyState()\n }\n\n get scrollWidth(): number {\n return this.horizontalScrollBar.scrollSize\n }\n\n get scrollHeight(): number {\n return this.verticalScrollBar.scrollSize\n }\n\n private updateStickyState(): void {\n if (!this._stickyScroll) return\n\n const maxScrollTop = Math.max(0, this.scrollHeight - this.viewport.height)\n const maxScrollLeft = Math.max(0, this.scrollWidth - this.viewport.width)\n\n if (this.scrollTop <= 0) {\n this._stickyScrollTop = true\n this._stickyScrollBottom = false\n } else if (this.scrollTop >= maxScrollTop) {\n this._stickyScrollTop = false\n this._stickyScrollBottom = true\n } else {\n this._stickyScrollTop = false\n this._stickyScrollBottom = false\n }\n\n if (this.scrollLeft <= 0) {\n this._stickyScrollLeft = true\n this._stickyScrollRight = false\n } else if (this.scrollLeft >= maxScrollLeft) {\n this._stickyScrollLeft = false\n this._stickyScrollRight = true\n } else {\n this._stickyScrollLeft = false\n this._stickyScrollRight = false\n }\n }\n\n private applyStickyStart(stickyStart: \"bottom\" | \"top\" | \"left\" | \"right\"): void {\n switch (stickyStart) {\n case \"top\":\n this._stickyScrollTop = true\n this._stickyScrollBottom = false\n this.verticalScrollBar.scrollPosition = 0\n break\n case \"bottom\":\n this._stickyScrollTop = false\n this._stickyScrollBottom = true\n this.verticalScrollBar.scrollPosition = Math.max(0, this.scrollHeight - this.viewport.height)\n break\n case \"left\":\n this._stickyScrollLeft = true\n this._stickyScrollRight = false\n this.horizontalScrollBar.scrollPosition = 0\n break\n case \"right\":\n this._stickyScrollLeft = false\n this._stickyScrollRight = true\n this.horizontalScrollBar.scrollPosition = Math.max(0, this.scrollWidth - this.viewport.width)\n break\n }\n }\n\n constructor(\n ctx: RenderContext,\n {\n wrapperOptions,\n viewportOptions,\n contentOptions,\n rootOptions,\n scrollbarOptions,\n verticalScrollbarOptions,\n horizontalScrollbarOptions,\n stickyScroll = false,\n stickyStart,\n scrollX = false,\n scrollY = true,\n scrollAcceleration,\n ...options\n }: ScrollBoxOptions,\n ) {\n // Root\n super(ctx, {\n flexDirection: \"row\",\n alignItems: \"stretch\",\n ...(options as BoxOptions),\n ...(rootOptions as BoxOptions),\n })\n\n this.internalId = ScrollBoxRenderable.idCounter++\n this._stickyScroll = stickyScroll\n this._stickyStart = stickyStart\n\n // Initialize scroll acceleration\n if (scrollAcceleration) {\n this.scrollAccel = scrollAcceleration\n } else if (process.platform === \"darwin\") {\n this.scrollAccel = new MacOSScrollAccel()\n }\n this.scrollAccel ??= new LinearScrollAccel()\n\n this.wrapper = new BoxRenderable(ctx, {\n flexDirection: \"column\",\n flexGrow: 1,\n ...wrapperOptions,\n id: `scroll-box-wrapper-${this.internalId}`,\n })\n super.add(this.wrapper)\n\n this.viewport = new BoxRenderable(ctx, {\n flexDirection: \"column\",\n flexGrow: 1,\n // NOTE: Overflow scroll makes the content size behave weird\n // when the scrollbox is in a container with max-width/height\n overflow: \"hidden\",\n onSizeChange: () => {\n this.recalculateBarProps()\n },\n ...viewportOptions,\n id: `scroll-box-viewport-${this.internalId}`,\n })\n this.wrapper.add(this.viewport)\n\n this.content = new ContentRenderable(ctx, this.viewport, {\n alignSelf: \"flex-start\",\n flexShrink: 0,\n ...(scrollX ? { minWidth: \"100%\" } : { minWidth: \"100%\", maxWidth: \"100%\" }),\n ...(scrollY ? { minHeight: \"100%\" } : { minHeight: \"100%\", maxHeight: \"100%\" }),\n onSizeChange: () => {\n this.recalculateBarProps()\n },\n ...contentOptions,\n id: `scroll-box-content-${this.internalId}`,\n })\n this.viewport.add(this.content)\n\n this.verticalScrollBar = new ScrollBarRenderable(ctx, {\n ...scrollbarOptions,\n ...verticalScrollbarOptions,\n arrowOptions: {\n ...scrollbarOptions?.arrowOptions,\n ...verticalScrollbarOptions?.arrowOptions,\n },\n id: `scroll-box-vertical-scrollbar-${this.internalId}`,\n orientation: \"vertical\",\n onChange: (position) => {\n this.content.translateY = -position\n this._hasManualScroll = true\n this.updateStickyState()\n },\n })\n super.add(this.verticalScrollBar)\n\n this.horizontalScrollBar = new ScrollBarRenderable(ctx, {\n ...scrollbarOptions,\n ...horizontalScrollbarOptions,\n arrowOptions: {\n ...scrollbarOptions?.arrowOptions,\n ...horizontalScrollbarOptions?.arrowOptions,\n },\n id: `scroll-box-horizontal-scrollbar-${this.internalId}`,\n orientation: \"horizontal\",\n onChange: (position) => {\n this.content.translateX = -position\n this._hasManualScroll = true\n this.updateStickyState()\n },\n })\n this.wrapper.add(this.horizontalScrollBar)\n\n this.recalculateBarProps()\n\n if (stickyStart && stickyScroll) {\n this.applyStickyStart(stickyStart)\n }\n\n this.selectionListener = () => {\n const selection = this._ctx.getSelection()\n if (!selection || !selection.isSelecting) {\n this.stopAutoScroll()\n }\n }\n this._ctx.on(\"selection\", this.selectionListener)\n }\n\n protected onUpdate(deltaTime: number): void {\n this.handleAutoScroll(deltaTime)\n }\n\n public scrollBy(delta: number | { x: number; y: number }, unit: ScrollUnit = \"absolute\"): void {\n if (typeof delta === \"number\") {\n this.verticalScrollBar.scrollBy(delta, unit)\n } else {\n this.verticalScrollBar.scrollBy(delta.y, unit)\n this.horizontalScrollBar.scrollBy(delta.x, unit)\n }\n this._hasManualScroll = true\n }\n\n public scrollTo(position: number | { x: number; y: number }): void {\n if (typeof position === \"number\") {\n this.scrollTop = position\n } else {\n this.scrollTop = position.y\n this.scrollLeft = position.x\n }\n }\n\n public add(obj: Renderable | VNode<any, any[]>, index?: number): number {\n return this.content.add(obj, index)\n }\n\n public insertBefore(obj: Renderable | VNode<any, any[]> | unknown, anchor?: Renderable | unknown): number {\n return this.content.insertBefore(obj, anchor)\n }\n\n public remove(id: string): void {\n this.content.remove(id)\n }\n\n public getChildren(): Renderable[] {\n return this.content.getChildren()\n }\n\n protected onMouseEvent(event: MouseEvent): void {\n if (event.type === \"scroll\") {\n let dir = event.scroll?.direction\n if (event.modifiers.shift)\n dir = dir === \"up\" ? \"left\" : dir === \"down\" ? \"right\" : dir === \"right\" ? \"down\" : \"up\"\n\n const baseDelta = event.scroll?.delta ?? 0\n const now = Date.now()\n const multiplier = this.scrollAccel.tick(now)\n\n if (dir === \"up\") {\n this.scrollTop -= baseDelta * multiplier\n } else if (dir === \"down\") {\n this.scrollTop += baseDelta * multiplier\n } else if (dir === \"left\") {\n this.scrollLeft -= baseDelta * multiplier\n } else if (dir === \"right\") {\n this.scrollLeft += baseDelta * multiplier\n }\n\n this._hasManualScroll = true\n }\n\n if (event.type === \"drag\" && event.isSelecting) {\n this.updateAutoScroll(event.x, event.y)\n } else if (event.type === \"up\") {\n this.stopAutoScroll()\n }\n }\n\n public handleKeyPress(key: KeyEvent | string): boolean {\n // Let scrollbars handle their own acceleration\n if (this.verticalScrollBar.handleKeyPress(key)) {\n this._hasManualScroll = true\n this.scrollAccel.reset()\n return true\n }\n if (this.horizontalScrollBar.handleKeyPress(key)) {\n this._hasManualScroll = true\n this.scrollAccel.reset()\n return true\n }\n return false\n }\n\n public startAutoScroll(mouseX: number, mouseY: number): void {\n this.stopAutoScroll()\n this.autoScrollMouseX = mouseX\n this.autoScrollMouseY = mouseY\n this.cachedAutoScrollSpeed = this.getAutoScrollSpeed(mouseX, mouseY)\n this.isAutoScrolling = true\n\n if (!this.live) {\n this.live = true\n }\n }\n\n public updateAutoScroll(mouseX: number, mouseY: number): void {\n this.autoScrollMouseX = mouseX\n this.autoScrollMouseY = mouseY\n\n // Cache the speed based on current mouse position\n this.cachedAutoScrollSpeed = this.getAutoScrollSpeed(mouseX, mouseY)\n\n const scrollX = this.getAutoScrollDirectionX(mouseX)\n const scrollY = this.getAutoScrollDirectionY(mouseY)\n\n if (scrollX === 0 && scrollY === 0) {\n this.stopAutoScroll()\n } else if (!this.isAutoScrolling) {\n this.startAutoScroll(mouseX, mouseY)\n }\n }\n\n public stopAutoScroll(): void {\n const wasAutoScrolling = this.isAutoScrolling\n this.isAutoScrolling = false\n this.autoScrollAccumulatorX = 0\n this.autoScrollAccumulatorY = 0\n\n // Only turn off live if no other features need it\n // For now, auto-scroll is the only feature using live, but this could be extended\n if (wasAutoScrolling && !this.hasOtherLiveReasons()) {\n this.live = false\n }\n }\n\n private hasOtherLiveReasons(): boolean {\n // Placeholder for future features that might need live mode\n // For now, always return false since auto-scroll is the only user\n return false\n }\n\n private handleAutoScroll(deltaTime: number): void {\n if (!this.isAutoScrolling) return\n\n const scrollX = this.getAutoScrollDirectionX(this.autoScrollMouseX)\n const scrollY = this.getAutoScrollDirectionY(this.autoScrollMouseY)\n const scrollAmount = this.cachedAutoScrollSpeed * (deltaTime / 1000)\n\n let scrolled = false\n\n if (scrollX !== 0) {\n this.autoScrollAccumulatorX += scrollX * scrollAmount\n const integerScrollX = Math.trunc(this.autoScrollAccumulatorX)\n if (integerScrollX !== 0) {\n this.scrollLeft += integerScrollX\n this.autoScrollAccumulatorX -= integerScrollX\n scrolled = true\n }\n }\n\n if (scrollY !== 0) {\n this.autoScrollAccumulatorY += scrollY * scrollAmount\n const integerScrollY = Math.trunc(this.autoScrollAccumulatorY)\n if (integerScrollY !== 0) {\n this.scrollTop += integerScrollY\n this.autoScrollAccumulatorY -= integerScrollY\n scrolled = true\n }\n }\n\n if (scrolled) {\n this._ctx.requestSelectionUpdate()\n }\n\n if (scrollX === 0 && scrollY === 0) {\n this.stopAutoScroll()\n }\n }\n\n private getAutoScrollDirectionX(mouseX: number): number {\n const relativeX = mouseX - this.x\n const distToLeft = relativeX\n const distToRight = this.width - relativeX\n\n if (distToLeft <= this.autoScrollThresholdHorizontal) {\n return this.scrollLeft > 0 ? -1 : 0\n } else if (distToRight <= this.autoScrollThresholdHorizontal) {\n const maxScrollLeft = this.scrollWidth - this.viewport.width\n return this.scrollLeft < maxScrollLeft ? 1 : 0\n }\n return 0\n }\n\n private getAutoScrollDirectionY(mouseY: number): number {\n const relativeY = mouseY - this.y\n const distToTop = relativeY\n const distToBottom = this.height - relativeY\n\n if (distToTop <= this.autoScrollThresholdVertical) {\n return this.scrollTop > 0 ? -1 : 0\n } else if (distToBottom <= this.autoScrollThresholdVertical) {\n const maxScrollTop = this.scrollHeight - this.viewport.height\n return this.scrollTop < maxScrollTop ? 1 : 0\n }\n return 0\n }\n\n private getAutoScrollSpeed(mouseX: number, mouseY: number): number {\n const relativeX = mouseX - this.x\n const relativeY = mouseY - this.y\n\n const distToLeft = relativeX\n const distToRight = this.width - relativeX\n const distToTop = relativeY\n const distToBottom = this.height - relativeY\n\n const minDistance = Math.min(distToLeft, distToRight, distToTop, distToBottom)\n\n if (minDistance <= 1) {\n return this.autoScrollSpeedFast\n } else if (minDistance <= 2) {\n return this.autoScrollSpeedMedium\n } else {\n return this.autoScrollSpeedSlow\n }\n }\n\n private recalculateBarProps(): void {\n this.verticalScrollBar.scrollSize = this.content.height\n this.verticalScrollBar.viewportSize = this.viewport.height\n this.horizontalScrollBar.scrollSize = this.content.width\n this.horizontalScrollBar.viewportSize = this.viewport.width\n\n if (this._stickyScroll) {\n const newMaxScrollTop = Math.max(0, this.scrollHeight - this.viewport.height)\n const newMaxScrollLeft = Math.max(0, this.scrollWidth - this.viewport.width)\n\n if (this._stickyStart && !this._hasManualScroll) {\n this.applyStickyStart(this._stickyStart)\n } else {\n if (this._stickyScrollTop) {\n this.scrollTop = 0\n } else if (this._stickyScrollBottom && newMaxScrollTop > 0) {\n this.scrollTop = newMaxScrollTop\n }\n\n if (this._stickyScrollLeft) {\n this.scrollLeft = 0\n } else if (this._stickyScrollRight && newMaxScrollLeft > 0) {\n this.scrollLeft = newMaxScrollLeft\n }\n }\n }\n\n // NOTE: This is obviously a workaround for something,\n // which is that the bar props are recalculated when the viewport is resized,\n // which intially happens onUpdate but is the viewport does not have the correct dimensions yet,\n // then when it does, no update is triggered and when we do we are in the middle of a render,\n // which just ignores the request. ¯\\_(ツ)_/¯\n // TODO: Fix this properly. How? Move yoga to native, get all changes for elements in one go\n // and update all renderables in one go before rendering.\n // OR: Move this logic to the viewport. IMHO the wrapper and viewport are overkill and not necessary.\n // The Scrollbox can be the viewport, we are using translations on the content anyway.\n process.nextTick(() => {\n this.requestRender()\n })\n }\n\n // Setters for reactive properties\n public set rootOptions(options: ScrollBoxOptions[\"rootOptions\"]) {\n Object.assign(this, options)\n this.requestRender()\n }\n\n public set wrapperOptions(options: ScrollBoxOptions[\"wrapperOptions\"]) {\n Object.assign(this.wrapper, options)\n this.requestRender()\n }\n\n public set viewportOptions(options: ScrollBoxOptions[\"viewportOptions\"]) {\n Object.assign(this.viewport, options)\n this.requestRender()\n }\n\n public set contentOptions(options: ScrollBoxOptions[\"contentOptions\"]) {\n Object.assign(this.content, options)\n this.requestRender()\n }\n\n public set scrollbarOptions(options: ScrollBoxOptions[\"scrollbarOptions\"]) {\n Object.assign(this.verticalScrollBar, options)\n Object.assign(this.horizontalScrollBar, options)\n this.requestRender()\n }\n\n public set verticalScrollbarOptions(options: ScrollBoxOptions[\"verticalScrollbarOptions\"]) {\n Object.assign(this.verticalScrollBar, options)\n this.requestRender()\n }\n\n public set horizontalScrollbarOptions(options: ScrollBoxOptions[\"horizontalScrollbarOptions\"]) {\n Object.assign(this.horizontalScrollBar, options)\n this.requestRender()\n }\n\n public get scrollAcceleration(): ScrollAcceleration {\n return this.scrollAccel\n }\n\n public set scrollAcceleration(value: ScrollAcceleration) {\n this.scrollAccel = value\n }\n\n protected destroySelf(): void {\n if (this.selectionListener) {\n this._ctx.off(\"selection\", this.selectionListener)\n this.selectionListener = undefined\n }\n super.destroySelf()\n }\n}\n",
|
|
23
|
-
"import { OptimizedBuffer } from \"../buffer\"\nimport { fonts, measureText, renderFontToFrameBuffer } from \"../lib/ascii.font\"\nimport type { KeyEvent } from \"../lib/KeyHandler\"\nimport { RGBA, parseColor, type ColorInput } from \"../lib/RGBA\"\nimport { Renderable, type RenderableOptions } from \"../Renderable\"\nimport type { RenderContext } from \"../types\"\n\nexport interface SelectOption {\n name: string\n description: string\n value?: any\n}\n\nexport interface SelectRenderableOptions extends RenderableOptions<SelectRenderable> {\n backgroundColor?: ColorInput\n textColor?: ColorInput\n focusedBackgroundColor?: ColorInput\n focusedTextColor?: ColorInput\n options?: SelectOption[]\n selectedBackgroundColor?: ColorInput\n selectedTextColor?: ColorInput\n descriptionColor?: ColorInput\n selectedDescriptionColor?: ColorInput\n showScrollIndicator?: boolean\n wrapSelection?: boolean\n showDescription?: boolean\n font?: keyof typeof fonts\n itemSpacing?: number\n fastScrollStep?: number\n}\n\nexport enum SelectRenderableEvents {\n SELECTION_CHANGED = \"selectionChanged\",\n ITEM_SELECTED = \"itemSelected\",\n}\n\nexport class SelectRenderable extends Renderable {\n protected _focusable: boolean = true\n\n private _options: SelectOption[] = []\n private selectedIndex: number = 0\n private scrollOffset: number = 0\n private maxVisibleItems: number\n\n private _backgroundColor: RGBA\n private _textColor: RGBA\n private _focusedBackgroundColor: RGBA\n private _focusedTextColor: RGBA\n private _selectedBackgroundColor: RGBA\n private _selectedTextColor: RGBA\n private _descriptionColor: RGBA\n private _selectedDescriptionColor: RGBA\n private _showScrollIndicator: boolean\n private _wrapSelection: boolean\n private _showDescription: boolean\n private _font?: keyof typeof fonts\n private _itemSpacing: number\n private linesPerItem: number\n private fontHeight: number\n private _fastScrollStep: number\n\n protected _defaultOptions = {\n backgroundColor: \"transparent\",\n textColor: \"#FFFFFF\",\n focusedBackgroundColor: \"#1a1a1a\",\n focusedTextColor: \"#FFFFFF\",\n selectedBackgroundColor: \"#334455\",\n selectedTextColor: \"#FFFF00\",\n descriptionColor: \"#888888\",\n selectedDescriptionColor: \"#CCCCCC\",\n showScrollIndicator: false,\n wrapSelection: false,\n showDescription: true,\n itemSpacing: 0,\n fastScrollStep: 5,\n } satisfies Partial<SelectRenderableOptions>\n\n constructor(ctx: RenderContext, options: SelectRenderableOptions) {\n super(ctx, { ...options, buffered: true })\n\n this._backgroundColor = parseColor(options.backgroundColor || this._defaultOptions.backgroundColor)\n this._textColor = parseColor(options.textColor || this._defaultOptions.textColor)\n this._focusedBackgroundColor = parseColor(\n options.focusedBackgroundColor || this._defaultOptions.focusedBackgroundColor,\n )\n this._focusedTextColor = parseColor(options.focusedTextColor || this._defaultOptions.focusedTextColor)\n this._options = options.options || []\n\n this._showScrollIndicator = options.showScrollIndicator ?? this._defaultOptions.showScrollIndicator\n this._wrapSelection = options.wrapSelection ?? this._defaultOptions.wrapSelection\n this._showDescription = options.showDescription ?? this._defaultOptions.showDescription\n this._font = options.font\n this._itemSpacing = options.itemSpacing || this._defaultOptions.itemSpacing\n\n this.fontHeight = this._font ? measureText({ text: \"A\", font: this._font }).height : 1\n this.linesPerItem = this._showDescription\n ? this._font\n ? this.fontHeight + 1\n : 2\n : this._font\n ? this.fontHeight\n : 1\n this.linesPerItem += this._itemSpacing\n\n this.maxVisibleItems = Math.max(1, Math.floor(this.height / this.linesPerItem))\n\n this._selectedBackgroundColor = parseColor(\n options.selectedBackgroundColor || this._defaultOptions.selectedBackgroundColor,\n )\n this._selectedTextColor = parseColor(options.selectedTextColor || this._defaultOptions.selectedTextColor)\n this._descriptionColor = parseColor(options.descriptionColor || this._defaultOptions.descriptionColor)\n this._selectedDescriptionColor = parseColor(\n options.selectedDescriptionColor || this._defaultOptions.selectedDescriptionColor,\n )\n this._fastScrollStep = options.fastScrollStep || this._defaultOptions.fastScrollStep\n\n this.requestRender() // Initial render needed\n }\n\n protected renderSelf(buffer: OptimizedBuffer, deltaTime: number): void {\n if (!this.visible || !this.frameBuffer) return\n\n if (this.isDirty) {\n this.refreshFrameBuffer()\n }\n }\n\n private refreshFrameBuffer(): void {\n if (!this.frameBuffer || this._options.length === 0) return\n\n const bgColor = this._focused ? this._focusedBackgroundColor : this._backgroundColor\n this.frameBuffer.clear(bgColor)\n\n const contentX = 0\n const contentY = 0\n const contentWidth = this.width\n const contentHeight = this.height\n\n const visibleOptions = this._options.slice(this.scrollOffset, this.scrollOffset + this.maxVisibleItems)\n\n for (let i = 0; i < visibleOptions.length; i++) {\n const actualIndex = this.scrollOffset + i\n const option = visibleOptions[i]\n const isSelected = actualIndex === this.selectedIndex\n const itemY = contentY + i * this.linesPerItem\n\n if (itemY + this.linesPerItem - 1 >= contentY + contentHeight) break\n\n if (isSelected) {\n const contentHeight = this.linesPerItem - this._itemSpacing\n this.frameBuffer.fillRect(contentX, itemY, contentWidth, contentHeight, this._selectedBackgroundColor)\n }\n\n const nameContent = `${isSelected ? \"▶ \" : \" \"}${option.name}`\n const baseTextColor = this._focused ? this._focusedTextColor : this._textColor\n const nameColor = isSelected ? this._selectedTextColor : baseTextColor\n let descX = contentX + 3\n\n if (this._font) {\n const indicator = isSelected ? \"▶ \" : \" \"\n this.frameBuffer.drawText(indicator, contentX + 1, itemY, nameColor)\n\n const indicatorWidth = 2\n renderFontToFrameBuffer(this.frameBuffer, {\n text: option.name,\n x: contentX + 1 + indicatorWidth,\n y: itemY,\n fg: nameColor,\n bg: isSelected ? this._selectedBackgroundColor : bgColor,\n font: this._font,\n })\n descX = contentX + 1 + indicatorWidth\n } else {\n this.frameBuffer.drawText(nameContent, contentX + 1, itemY, nameColor)\n }\n\n if (this._showDescription && itemY + this.fontHeight < contentY + contentHeight) {\n const descColor = isSelected ? this._selectedDescriptionColor : this._descriptionColor\n const descBg = this._focused ? this._focusedBackgroundColor : this._backgroundColor\n this.frameBuffer.drawText(option.description, descX, itemY + this.fontHeight, descColor)\n }\n }\n\n if (this._showScrollIndicator && this._options.length > this.maxVisibleItems) {\n this.renderScrollIndicatorToFrameBuffer(contentX, contentY, contentWidth, contentHeight)\n }\n }\n\n private renderScrollIndicatorToFrameBuffer(\n contentX: number,\n contentY: number,\n contentWidth: number,\n contentHeight: number,\n ): void {\n if (!this.frameBuffer) return\n\n const scrollPercent = this.selectedIndex / Math.max(1, this._options.length - 1)\n const indicatorHeight = Math.max(1, contentHeight - 2)\n const indicatorY = contentY + 1 + Math.floor(scrollPercent * indicatorHeight)\n const indicatorX = contentX + contentWidth - 1\n\n this.frameBuffer.drawText(\"█\", indicatorX, indicatorY, parseColor(\"#666666\"))\n }\n\n public get options(): SelectOption[] {\n return this._options\n }\n\n public set options(options: SelectOption[]) {\n this._options = options\n this.selectedIndex = Math.min(this.selectedIndex, Math.max(0, options.length - 1))\n this.updateScrollOffset()\n this.requestRender()\n }\n\n public getSelectedOption(): SelectOption | null {\n return this._options[this.selectedIndex] || null\n }\n\n public getSelectedIndex(): number {\n return this.selectedIndex\n }\n\n public moveUp(steps: number = 1): void {\n const newIndex = this.selectedIndex - steps\n\n if (newIndex >= 0) {\n this.selectedIndex = newIndex\n } else if (this._wrapSelection && this._options.length > 0) {\n this.selectedIndex = this._options.length - 1\n } else {\n this.selectedIndex = 0\n }\n\n this.updateScrollOffset()\n this.requestRender()\n this.emit(SelectRenderableEvents.SELECTION_CHANGED, this.selectedIndex, this.getSelectedOption())\n }\n\n public moveDown(steps: number = 1): void {\n const newIndex = this.selectedIndex + steps\n\n if (newIndex < this._options.length) {\n this.selectedIndex = newIndex\n } else if (this._wrapSelection && this._options.length > 0) {\n this.selectedIndex = 0\n } else {\n this.selectedIndex = this._options.length - 1\n }\n\n this.updateScrollOffset()\n this.requestRender()\n this.emit(SelectRenderableEvents.SELECTION_CHANGED, this.selectedIndex, this.getSelectedOption())\n }\n\n public selectCurrent(): void {\n const selected = this.getSelectedOption()\n if (selected) {\n this.emit(SelectRenderableEvents.ITEM_SELECTED, this.selectedIndex, selected)\n }\n }\n\n public setSelectedIndex(index: number): void {\n if (index >= 0 && index < this._options.length) {\n this.selectedIndex = index\n this.updateScrollOffset()\n this.requestRender()\n this.emit(SelectRenderableEvents.SELECTION_CHANGED, this.selectedIndex, this.getSelectedOption())\n }\n }\n\n private updateScrollOffset(): void {\n if (!this._options) return\n\n const halfVisible = Math.floor(this.maxVisibleItems / 2)\n const newScrollOffset = Math.max(\n 0,\n Math.min(this.selectedIndex - halfVisible, this._options.length - this.maxVisibleItems),\n )\n\n if (newScrollOffset !== this.scrollOffset) {\n this.scrollOffset = newScrollOffset\n this.requestRender()\n }\n }\n\n protected onResize(width: number, height: number): void {\n this.maxVisibleItems = Math.max(1, Math.floor(height / this.linesPerItem))\n this.updateScrollOffset()\n this.requestRender()\n }\n\n public handleKeyPress(key: KeyEvent | string): boolean {\n const keyName = typeof key === \"string\" ? key : key.name\n const isShift = typeof key !== \"string\" && key.shift\n\n switch (keyName) {\n case \"up\":\n case \"k\":\n this.moveUp(isShift ? this._fastScrollStep : 1)\n return true\n case \"down\":\n case \"j\":\n this.moveDown(isShift ? this._fastScrollStep : 1)\n return true\n case \"return\":\n case \"linefeed\":\n this.selectCurrent()\n return true\n }\n\n return false\n }\n\n public get showScrollIndicator(): boolean {\n return this._showScrollIndicator\n }\n\n public set showScrollIndicator(show: boolean) {\n this._showScrollIndicator = show\n this.requestRender()\n }\n\n public get showDescription(): boolean {\n return this._showDescription\n }\n\n public set showDescription(show: boolean) {\n if (this._showDescription !== show) {\n this._showDescription = show\n this.linesPerItem = this._showDescription\n ? this._font\n ? this.fontHeight + 1\n : 2\n : this._font\n ? this.fontHeight\n : 1\n this.linesPerItem += this._itemSpacing\n\n this.maxVisibleItems = Math.max(1, Math.floor(this.height / this.linesPerItem))\n this.updateScrollOffset()\n this.requestRender()\n }\n }\n\n public get wrapSelection(): boolean {\n return this._wrapSelection\n }\n\n public set wrapSelection(wrap: boolean) {\n this._wrapSelection = wrap\n }\n\n public set backgroundColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.backgroundColor)\n if (this._backgroundColor !== newColor) {\n this._backgroundColor = newColor\n this.requestRender()\n }\n }\n\n public set textColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.textColor)\n if (this._textColor !== newColor) {\n this._textColor = newColor\n this.requestRender()\n }\n }\n\n public set focusedBackgroundColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.focusedBackgroundColor)\n if (this._focusedBackgroundColor !== newColor) {\n this._focusedBackgroundColor = newColor\n this.requestRender()\n }\n }\n\n public set focusedTextColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.focusedTextColor)\n if (this._focusedTextColor !== newColor) {\n this._focusedTextColor = newColor\n this.requestRender()\n }\n }\n\n public set selectedBackgroundColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.selectedBackgroundColor)\n if (this._selectedBackgroundColor !== newColor) {\n this._selectedBackgroundColor = newColor\n this.requestRender()\n }\n }\n\n public set selectedTextColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.selectedTextColor)\n if (this._selectedTextColor !== newColor) {\n this._selectedTextColor = newColor\n this.requestRender()\n }\n }\n\n public set descriptionColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.descriptionColor)\n if (this._descriptionColor !== newColor) {\n this._descriptionColor = newColor\n this.requestRender()\n }\n }\n\n public set selectedDescriptionColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.selectedDescriptionColor)\n if (this._selectedDescriptionColor !== newColor) {\n this._selectedDescriptionColor = newColor\n this.requestRender()\n }\n }\n\n public set font(font: keyof typeof fonts) {\n this._font = font\n this.fontHeight = measureText({ text: \"A\", font: this._font }).height\n this.linesPerItem = this._showDescription\n ? this._font\n ? this.fontHeight + 1\n : 2\n : this._font\n ? this.fontHeight\n : 1\n this.linesPerItem += this._itemSpacing\n this.maxVisibleItems = Math.max(1, Math.floor(this.height / this.linesPerItem))\n this.updateScrollOffset()\n this.requestRender()\n }\n\n public set itemSpacing(spacing: number) {\n this._itemSpacing = spacing\n this.linesPerItem = this._showDescription\n ? this._font\n ? this.fontHeight + 1\n : 2\n : this._font\n ? this.fontHeight\n : 1\n this.linesPerItem += this._itemSpacing\n this.maxVisibleItems = Math.max(1, Math.floor(this.height / this.linesPerItem))\n this.updateScrollOffset()\n this.requestRender()\n }\n\n public set fastScrollStep(step: number) {\n this._fastScrollStep = step\n }\n}\n",
|
|
22
|
+
"import { type KeyEvent } from \"../lib\"\nimport { getObjectsInViewport } from \"../lib/objects-in-viewport\"\nimport { LinearScrollAccel, MacOSScrollAccel, type ScrollAcceleration } from \"../lib/scroll-acceleration\"\nimport type { Renderable, RenderableOptions } from \"../Renderable\"\nimport type { MouseEvent } from \"../renderer\"\nimport type { RenderContext } from \"../types\"\nimport { BoxRenderable, type BoxOptions } from \"./Box\"\nimport type { VNode } from \"./composition/vnode\"\nimport { ScrollBarRenderable, type ScrollBarOptions, type ScrollUnit } from \"./ScrollBar\"\n\nclass ContentRenderable extends BoxRenderable {\n private viewport: BoxRenderable\n private _viewportCulling: boolean\n\n constructor(\n ctx: RenderContext,\n viewport: BoxRenderable,\n viewportCulling: boolean,\n options: RenderableOptions<BoxRenderable>,\n ) {\n super(ctx, options)\n this.viewport = viewport\n this._viewportCulling = viewportCulling\n }\n\n get viewportCulling(): boolean {\n return this._viewportCulling\n }\n\n set viewportCulling(value: boolean) {\n this._viewportCulling = value\n }\n\n protected _getChildren(): Renderable[] {\n if (this._viewportCulling) {\n return getObjectsInViewport(this.viewport, this.getChildrenSortedByPrimaryAxis(), this.primaryAxis)\n }\n return this.getChildrenSortedByPrimaryAxis()\n }\n}\n\nexport interface ScrollBoxOptions extends BoxOptions<ScrollBoxRenderable> {\n rootOptions?: BoxOptions\n wrapperOptions?: BoxOptions\n viewportOptions?: BoxOptions\n contentOptions?: BoxOptions\n scrollbarOptions?: Omit<ScrollBarOptions, \"orientation\">\n verticalScrollbarOptions?: Omit<ScrollBarOptions, \"orientation\">\n horizontalScrollbarOptions?: Omit<ScrollBarOptions, \"orientation\">\n stickyScroll?: boolean\n stickyStart?: \"bottom\" | \"top\" | \"left\" | \"right\"\n scrollX?: boolean\n scrollY?: boolean\n scrollAcceleration?: ScrollAcceleration\n viewportCulling?: boolean\n}\n\nexport class ScrollBoxRenderable extends BoxRenderable {\n static idCounter = 0\n private internalId = 0\n public readonly wrapper: BoxRenderable\n public readonly viewport: BoxRenderable\n public readonly content: ContentRenderable\n public readonly horizontalScrollBar: ScrollBarRenderable\n public readonly verticalScrollBar: ScrollBarRenderable\n\n protected _focusable: boolean = true\n private selectionListener?: () => void\n\n private autoScrollMouseX: number = 0\n private autoScrollMouseY: number = 0\n private readonly autoScrollThresholdVertical = 3\n private readonly autoScrollThresholdHorizontal = 3\n private readonly autoScrollSpeedSlow = 6\n private readonly autoScrollSpeedMedium = 36\n private readonly autoScrollSpeedFast = 72\n private isAutoScrolling: boolean = false\n private cachedAutoScrollSpeed: number = 3\n private autoScrollAccumulatorX: number = 0\n private autoScrollAccumulatorY: number = 0\n\n private _stickyScroll: boolean\n private _stickyScrollTop: boolean = false\n private _stickyScrollBottom: boolean = false\n private _stickyScrollLeft: boolean = false\n private _stickyScrollRight: boolean = false\n private _stickyStart?: \"bottom\" | \"top\" | \"left\" | \"right\"\n private _hasManualScroll: boolean = false\n private scrollAccel: ScrollAcceleration\n\n get stickyScroll(): boolean {\n return this._stickyScroll\n }\n\n set stickyScroll(value: boolean) {\n this._stickyScroll = value\n this.updateStickyState()\n }\n\n get stickyStart(): \"bottom\" | \"top\" | \"left\" | \"right\" | undefined {\n return this._stickyStart\n }\n\n set stickyStart(value: \"bottom\" | \"top\" | \"left\" | \"right\" | undefined) {\n this._stickyStart = value\n this.updateStickyState()\n }\n\n get scrollTop(): number {\n return this.verticalScrollBar.scrollPosition\n }\n\n set scrollTop(value: number) {\n this.verticalScrollBar.scrollPosition = value\n this._hasManualScroll = true\n this.updateStickyState()\n }\n\n get scrollLeft(): number {\n return this.horizontalScrollBar.scrollPosition\n }\n\n set scrollLeft(value: number) {\n this.horizontalScrollBar.scrollPosition = value\n this._hasManualScroll = true\n this.updateStickyState()\n }\n\n get scrollWidth(): number {\n return this.horizontalScrollBar.scrollSize\n }\n\n get scrollHeight(): number {\n return this.verticalScrollBar.scrollSize\n }\n\n private updateStickyState(): void {\n if (!this._stickyScroll) return\n\n const maxScrollTop = Math.max(0, this.scrollHeight - this.viewport.height)\n const maxScrollLeft = Math.max(0, this.scrollWidth - this.viewport.width)\n\n if (this.scrollTop <= 0) {\n this._stickyScrollTop = true\n this._stickyScrollBottom = false\n } else if (this.scrollTop >= maxScrollTop) {\n this._stickyScrollTop = false\n this._stickyScrollBottom = true\n } else {\n this._stickyScrollTop = false\n this._stickyScrollBottom = false\n }\n\n if (this.scrollLeft <= 0) {\n this._stickyScrollLeft = true\n this._stickyScrollRight = false\n } else if (this.scrollLeft >= maxScrollLeft) {\n this._stickyScrollLeft = false\n this._stickyScrollRight = true\n } else {\n this._stickyScrollLeft = false\n this._stickyScrollRight = false\n }\n }\n\n private applyStickyStart(stickyStart: \"bottom\" | \"top\" | \"left\" | \"right\"): void {\n switch (stickyStart) {\n case \"top\":\n this._stickyScrollTop = true\n this._stickyScrollBottom = false\n this.verticalScrollBar.scrollPosition = 0\n break\n case \"bottom\":\n this._stickyScrollTop = false\n this._stickyScrollBottom = true\n this.verticalScrollBar.scrollPosition = Math.max(0, this.scrollHeight - this.viewport.height)\n break\n case \"left\":\n this._stickyScrollLeft = true\n this._stickyScrollRight = false\n this.horizontalScrollBar.scrollPosition = 0\n break\n case \"right\":\n this._stickyScrollLeft = false\n this._stickyScrollRight = true\n this.horizontalScrollBar.scrollPosition = Math.max(0, this.scrollWidth - this.viewport.width)\n break\n }\n }\n\n constructor(\n ctx: RenderContext,\n {\n wrapperOptions,\n viewportOptions,\n contentOptions,\n rootOptions,\n scrollbarOptions,\n verticalScrollbarOptions,\n horizontalScrollbarOptions,\n stickyScroll = false,\n stickyStart,\n scrollX = false,\n scrollY = true,\n scrollAcceleration,\n viewportCulling = true,\n ...options\n }: ScrollBoxOptions,\n ) {\n // Root\n super(ctx, {\n flexDirection: \"row\",\n alignItems: \"stretch\",\n ...(options as BoxOptions),\n ...(rootOptions as BoxOptions),\n })\n\n this.internalId = ScrollBoxRenderable.idCounter++\n this._stickyScroll = stickyScroll\n this._stickyStart = stickyStart\n\n // Initialize scroll acceleration\n if (scrollAcceleration) {\n this.scrollAccel = scrollAcceleration\n } else if (process.platform === \"darwin\") {\n this.scrollAccel = new MacOSScrollAccel()\n }\n this.scrollAccel ??= new LinearScrollAccel()\n\n this.wrapper = new BoxRenderable(ctx, {\n flexDirection: \"column\",\n flexGrow: 1,\n ...wrapperOptions,\n id: `scroll-box-wrapper-${this.internalId}`,\n })\n super.add(this.wrapper)\n\n this.viewport = new BoxRenderable(ctx, {\n flexDirection: \"column\",\n flexGrow: 1,\n // NOTE: Overflow scroll makes the content size behave weird\n // when the scrollbox is in a container with max-width/height\n overflow: \"hidden\",\n onSizeChange: () => {\n this.recalculateBarProps()\n },\n ...viewportOptions,\n id: `scroll-box-viewport-${this.internalId}`,\n })\n this.wrapper.add(this.viewport)\n\n this.content = new ContentRenderable(ctx, this.viewport, viewportCulling, {\n alignSelf: \"flex-start\",\n flexShrink: 0,\n ...(scrollX ? { minWidth: \"100%\" } : { minWidth: \"100%\", maxWidth: \"100%\" }),\n ...(scrollY ? { minHeight: \"100%\" } : { minHeight: \"100%\", maxHeight: \"100%\" }),\n onSizeChange: () => {\n this.recalculateBarProps()\n },\n ...contentOptions,\n id: `scroll-box-content-${this.internalId}`,\n })\n this.viewport.add(this.content)\n\n this.verticalScrollBar = new ScrollBarRenderable(ctx, {\n ...scrollbarOptions,\n ...verticalScrollbarOptions,\n arrowOptions: {\n ...scrollbarOptions?.arrowOptions,\n ...verticalScrollbarOptions?.arrowOptions,\n },\n id: `scroll-box-vertical-scrollbar-${this.internalId}`,\n orientation: \"vertical\",\n onChange: (position) => {\n this.content.translateY = -position\n this._hasManualScroll = true\n this.updateStickyState()\n },\n })\n super.add(this.verticalScrollBar)\n\n this.horizontalScrollBar = new ScrollBarRenderable(ctx, {\n ...scrollbarOptions,\n ...horizontalScrollbarOptions,\n arrowOptions: {\n ...scrollbarOptions?.arrowOptions,\n ...horizontalScrollbarOptions?.arrowOptions,\n },\n id: `scroll-box-horizontal-scrollbar-${this.internalId}`,\n orientation: \"horizontal\",\n onChange: (position) => {\n this.content.translateX = -position\n this._hasManualScroll = true\n this.updateStickyState()\n },\n })\n this.wrapper.add(this.horizontalScrollBar)\n\n this.recalculateBarProps()\n\n if (stickyStart && stickyScroll) {\n this.applyStickyStart(stickyStart)\n }\n\n this.selectionListener = () => {\n const selection = this._ctx.getSelection()\n if (!selection || !selection.isSelecting) {\n this.stopAutoScroll()\n }\n }\n this._ctx.on(\"selection\", this.selectionListener)\n }\n\n protected onUpdate(deltaTime: number): void {\n this.handleAutoScroll(deltaTime)\n }\n\n public scrollBy(delta: number | { x: number; y: number }, unit: ScrollUnit = \"absolute\"): void {\n if (typeof delta === \"number\") {\n this.verticalScrollBar.scrollBy(delta, unit)\n } else {\n this.verticalScrollBar.scrollBy(delta.y, unit)\n this.horizontalScrollBar.scrollBy(delta.x, unit)\n }\n this._hasManualScroll = true\n }\n\n public scrollTo(position: number | { x: number; y: number }): void {\n if (typeof position === \"number\") {\n this.scrollTop = position\n } else {\n this.scrollTop = position.y\n this.scrollLeft = position.x\n }\n }\n\n public add(obj: Renderable | VNode<any, any[]>, index?: number): number {\n return this.content.add(obj, index)\n }\n\n public insertBefore(obj: Renderable | VNode<any, any[]> | unknown, anchor?: Renderable | unknown): number {\n return this.content.insertBefore(obj, anchor)\n }\n\n public remove(id: string): void {\n this.content.remove(id)\n }\n\n public getChildren(): Renderable[] {\n return this.content.getChildren()\n }\n\n protected onMouseEvent(event: MouseEvent): void {\n if (event.type === \"scroll\") {\n let dir = event.scroll?.direction\n if (event.modifiers.shift)\n dir = dir === \"up\" ? \"left\" : dir === \"down\" ? \"right\" : dir === \"right\" ? \"down\" : \"up\"\n\n const baseDelta = event.scroll?.delta ?? 0\n const now = Date.now()\n const multiplier = this.scrollAccel.tick(now)\n\n if (dir === \"up\") {\n this.scrollTop -= baseDelta * multiplier\n } else if (dir === \"down\") {\n this.scrollTop += baseDelta * multiplier\n } else if (dir === \"left\") {\n this.scrollLeft -= baseDelta * multiplier\n } else if (dir === \"right\") {\n this.scrollLeft += baseDelta * multiplier\n }\n\n this._hasManualScroll = true\n }\n\n if (event.type === \"drag\" && event.isSelecting) {\n this.updateAutoScroll(event.x, event.y)\n } else if (event.type === \"up\") {\n this.stopAutoScroll()\n }\n }\n\n public handleKeyPress(key: KeyEvent | string): boolean {\n // Let scrollbars handle their own acceleration\n if (this.verticalScrollBar.handleKeyPress(key)) {\n this._hasManualScroll = true\n this.scrollAccel.reset()\n return true\n }\n if (this.horizontalScrollBar.handleKeyPress(key)) {\n this._hasManualScroll = true\n this.scrollAccel.reset()\n return true\n }\n return false\n }\n\n public startAutoScroll(mouseX: number, mouseY: number): void {\n this.stopAutoScroll()\n this.autoScrollMouseX = mouseX\n this.autoScrollMouseY = mouseY\n this.cachedAutoScrollSpeed = this.getAutoScrollSpeed(mouseX, mouseY)\n this.isAutoScrolling = true\n\n if (!this.live) {\n this.live = true\n }\n }\n\n public updateAutoScroll(mouseX: number, mouseY: number): void {\n this.autoScrollMouseX = mouseX\n this.autoScrollMouseY = mouseY\n\n // Cache the speed based on current mouse position\n this.cachedAutoScrollSpeed = this.getAutoScrollSpeed(mouseX, mouseY)\n\n const scrollX = this.getAutoScrollDirectionX(mouseX)\n const scrollY = this.getAutoScrollDirectionY(mouseY)\n\n if (scrollX === 0 && scrollY === 0) {\n this.stopAutoScroll()\n } else if (!this.isAutoScrolling) {\n this.startAutoScroll(mouseX, mouseY)\n }\n }\n\n public stopAutoScroll(): void {\n const wasAutoScrolling = this.isAutoScrolling\n this.isAutoScrolling = false\n this.autoScrollAccumulatorX = 0\n this.autoScrollAccumulatorY = 0\n\n // Only turn off live if no other features need it\n // For now, auto-scroll is the only feature using live, but this could be extended\n if (wasAutoScrolling && !this.hasOtherLiveReasons()) {\n this.live = false\n }\n }\n\n private hasOtherLiveReasons(): boolean {\n // Placeholder for future features that might need live mode\n // For now, always return false since auto-scroll is the only user\n return false\n }\n\n private handleAutoScroll(deltaTime: number): void {\n if (!this.isAutoScrolling) return\n\n const scrollX = this.getAutoScrollDirectionX(this.autoScrollMouseX)\n const scrollY = this.getAutoScrollDirectionY(this.autoScrollMouseY)\n const scrollAmount = this.cachedAutoScrollSpeed * (deltaTime / 1000)\n\n let scrolled = false\n\n if (scrollX !== 0) {\n this.autoScrollAccumulatorX += scrollX * scrollAmount\n const integerScrollX = Math.trunc(this.autoScrollAccumulatorX)\n if (integerScrollX !== 0) {\n this.scrollLeft += integerScrollX\n this.autoScrollAccumulatorX -= integerScrollX\n scrolled = true\n }\n }\n\n if (scrollY !== 0) {\n this.autoScrollAccumulatorY += scrollY * scrollAmount\n const integerScrollY = Math.trunc(this.autoScrollAccumulatorY)\n if (integerScrollY !== 0) {\n this.scrollTop += integerScrollY\n this.autoScrollAccumulatorY -= integerScrollY\n scrolled = true\n }\n }\n\n if (scrolled) {\n this._ctx.requestSelectionUpdate()\n }\n\n if (scrollX === 0 && scrollY === 0) {\n this.stopAutoScroll()\n }\n }\n\n private getAutoScrollDirectionX(mouseX: number): number {\n const relativeX = mouseX - this.x\n const distToLeft = relativeX\n const distToRight = this.width - relativeX\n\n if (distToLeft <= this.autoScrollThresholdHorizontal) {\n return this.scrollLeft > 0 ? -1 : 0\n } else if (distToRight <= this.autoScrollThresholdHorizontal) {\n const maxScrollLeft = this.scrollWidth - this.viewport.width\n return this.scrollLeft < maxScrollLeft ? 1 : 0\n }\n return 0\n }\n\n private getAutoScrollDirectionY(mouseY: number): number {\n const relativeY = mouseY - this.y\n const distToTop = relativeY\n const distToBottom = this.height - relativeY\n\n if (distToTop <= this.autoScrollThresholdVertical) {\n return this.scrollTop > 0 ? -1 : 0\n } else if (distToBottom <= this.autoScrollThresholdVertical) {\n const maxScrollTop = this.scrollHeight - this.viewport.height\n return this.scrollTop < maxScrollTop ? 1 : 0\n }\n return 0\n }\n\n private getAutoScrollSpeed(mouseX: number, mouseY: number): number {\n const relativeX = mouseX - this.x\n const relativeY = mouseY - this.y\n\n const distToLeft = relativeX\n const distToRight = this.width - relativeX\n const distToTop = relativeY\n const distToBottom = this.height - relativeY\n\n const minDistance = Math.min(distToLeft, distToRight, distToTop, distToBottom)\n\n if (minDistance <= 1) {\n return this.autoScrollSpeedFast\n } else if (minDistance <= 2) {\n return this.autoScrollSpeedMedium\n } else {\n return this.autoScrollSpeedSlow\n }\n }\n\n private recalculateBarProps(): void {\n this.verticalScrollBar.scrollSize = this.content.height\n this.verticalScrollBar.viewportSize = this.viewport.height\n this.horizontalScrollBar.scrollSize = this.content.width\n this.horizontalScrollBar.viewportSize = this.viewport.width\n\n if (this._stickyScroll) {\n const newMaxScrollTop = Math.max(0, this.scrollHeight - this.viewport.height)\n const newMaxScrollLeft = Math.max(0, this.scrollWidth - this.viewport.width)\n\n if (this._stickyStart && !this._hasManualScroll) {\n this.applyStickyStart(this._stickyStart)\n } else {\n if (this._stickyScrollTop) {\n this.scrollTop = 0\n } else if (this._stickyScrollBottom && newMaxScrollTop > 0) {\n this.scrollTop = newMaxScrollTop\n }\n\n if (this._stickyScrollLeft) {\n this.scrollLeft = 0\n } else if (this._stickyScrollRight && newMaxScrollLeft > 0) {\n this.scrollLeft = newMaxScrollLeft\n }\n }\n }\n\n // NOTE: This is obviously a workaround for something,\n // which is that the bar props are recalculated when the viewport is resized,\n // which intially happens onUpdate but is the viewport does not have the correct dimensions yet,\n // then when it does, no update is triggered and when we do we are in the middle of a render,\n // which just ignores the request. ¯\\_(ツ)_/¯\n // TODO: Fix this properly. How? Move yoga to native, get all changes for elements in one go\n // and update all renderables in one go before rendering.\n // OR: Move this logic to the viewport. IMHO the wrapper and viewport are overkill and not necessary.\n // The Scrollbox can be the viewport, we are using translations on the content anyway.\n process.nextTick(() => {\n this.requestRender()\n })\n }\n\n // Setters for reactive properties\n public set rootOptions(options: ScrollBoxOptions[\"rootOptions\"]) {\n Object.assign(this, options)\n this.requestRender()\n }\n\n public set wrapperOptions(options: ScrollBoxOptions[\"wrapperOptions\"]) {\n Object.assign(this.wrapper, options)\n this.requestRender()\n }\n\n public set viewportOptions(options: ScrollBoxOptions[\"viewportOptions\"]) {\n Object.assign(this.viewport, options)\n this.requestRender()\n }\n\n public set contentOptions(options: ScrollBoxOptions[\"contentOptions\"]) {\n Object.assign(this.content, options)\n this.requestRender()\n }\n\n public set scrollbarOptions(options: ScrollBoxOptions[\"scrollbarOptions\"]) {\n Object.assign(this.verticalScrollBar, options)\n Object.assign(this.horizontalScrollBar, options)\n this.requestRender()\n }\n\n public set verticalScrollbarOptions(options: ScrollBoxOptions[\"verticalScrollbarOptions\"]) {\n Object.assign(this.verticalScrollBar, options)\n this.requestRender()\n }\n\n public set horizontalScrollbarOptions(options: ScrollBoxOptions[\"horizontalScrollbarOptions\"]) {\n Object.assign(this.horizontalScrollBar, options)\n this.requestRender()\n }\n\n public get scrollAcceleration(): ScrollAcceleration {\n return this.scrollAccel\n }\n\n public set scrollAcceleration(value: ScrollAcceleration) {\n this.scrollAccel = value\n }\n\n get viewportCulling(): boolean {\n return this.content.viewportCulling\n }\n\n set viewportCulling(value: boolean) {\n this.content.viewportCulling = value\n this.requestRender()\n }\n\n protected destroySelf(): void {\n if (this.selectionListener) {\n this._ctx.off(\"selection\", this.selectionListener)\n this.selectionListener = undefined\n }\n super.destroySelf()\n }\n}\n",
|
|
23
|
+
"import { OptimizedBuffer } from \"../buffer\"\nimport { fonts, measureText, renderFontToFrameBuffer } from \"../lib/ascii.font\"\nimport type { KeyEvent } from \"../lib/KeyHandler\"\nimport { RGBA, parseColor, type ColorInput } from \"../lib/RGBA\"\nimport { Renderable, type RenderableOptions } from \"../Renderable\"\nimport type { RenderContext } from \"../types\"\n\nexport interface SelectOption {\n name: string\n description: string\n value?: any\n}\n\nexport interface SelectRenderableOptions extends RenderableOptions<SelectRenderable> {\n backgroundColor?: ColorInput\n textColor?: ColorInput\n focusedBackgroundColor?: ColorInput\n focusedTextColor?: ColorInput\n options?: SelectOption[]\n selectedIndex?: number\n selectedBackgroundColor?: ColorInput\n selectedTextColor?: ColorInput\n descriptionColor?: ColorInput\n selectedDescriptionColor?: ColorInput\n showScrollIndicator?: boolean\n wrapSelection?: boolean\n showDescription?: boolean\n font?: keyof typeof fonts\n itemSpacing?: number\n fastScrollStep?: number\n}\n\nexport enum SelectRenderableEvents {\n SELECTION_CHANGED = \"selectionChanged\",\n ITEM_SELECTED = \"itemSelected\",\n}\n\nexport class SelectRenderable extends Renderable {\n protected _focusable: boolean = true\n\n private _options: SelectOption[] = []\n private _selectedIndex: number = 0\n private scrollOffset: number = 0\n private maxVisibleItems: number\n\n private _backgroundColor: RGBA\n private _textColor: RGBA\n private _focusedBackgroundColor: RGBA\n private _focusedTextColor: RGBA\n private _selectedBackgroundColor: RGBA\n private _selectedTextColor: RGBA\n private _descriptionColor: RGBA\n private _selectedDescriptionColor: RGBA\n private _showScrollIndicator: boolean\n private _wrapSelection: boolean\n private _showDescription: boolean\n private _font?: keyof typeof fonts\n private _itemSpacing: number\n private linesPerItem: number\n private fontHeight: number\n private _fastScrollStep: number\n\n protected _defaultOptions = {\n backgroundColor: \"transparent\",\n textColor: \"#FFFFFF\",\n focusedBackgroundColor: \"#1a1a1a\",\n focusedTextColor: \"#FFFFFF\",\n selectedBackgroundColor: \"#334455\",\n selectedTextColor: \"#FFFF00\",\n selectedIndex: 0,\n descriptionColor: \"#888888\",\n selectedDescriptionColor: \"#CCCCCC\",\n showScrollIndicator: false,\n wrapSelection: false,\n showDescription: true,\n itemSpacing: 0,\n fastScrollStep: 5,\n } satisfies Partial<SelectRenderableOptions>\n\n constructor(ctx: RenderContext, options: SelectRenderableOptions) {\n super(ctx, { ...options, buffered: true })\n this._options = options.options || []\n const requestedIndex = options.selectedIndex ?? this._defaultOptions.selectedIndex\n this._selectedIndex = this._options.length > 0 ? Math.min(requestedIndex, this._options.length - 1) : 0\n this._backgroundColor = parseColor(options.backgroundColor || this._defaultOptions.backgroundColor)\n this._textColor = parseColor(options.textColor || this._defaultOptions.textColor)\n this._focusedBackgroundColor = parseColor(\n options.focusedBackgroundColor || this._defaultOptions.focusedBackgroundColor,\n )\n this._focusedTextColor = parseColor(options.focusedTextColor || this._defaultOptions.focusedTextColor)\n\n this._showScrollIndicator = options.showScrollIndicator ?? this._defaultOptions.showScrollIndicator\n this._wrapSelection = options.wrapSelection ?? this._defaultOptions.wrapSelection\n this._showDescription = options.showDescription ?? this._defaultOptions.showDescription\n this._font = options.font\n this._itemSpacing = options.itemSpacing || this._defaultOptions.itemSpacing\n\n this.fontHeight = this._font ? measureText({ text: \"A\", font: this._font }).height : 1\n this.linesPerItem = this._showDescription\n ? this._font\n ? this.fontHeight + 1\n : 2\n : this._font\n ? this.fontHeight\n : 1\n this.linesPerItem += this._itemSpacing\n\n this.maxVisibleItems = Math.max(1, Math.floor(this.height / this.linesPerItem))\n\n this._selectedBackgroundColor = parseColor(\n options.selectedBackgroundColor || this._defaultOptions.selectedBackgroundColor,\n )\n this._selectedTextColor = parseColor(options.selectedTextColor || this._defaultOptions.selectedTextColor)\n this._descriptionColor = parseColor(options.descriptionColor || this._defaultOptions.descriptionColor)\n this._selectedDescriptionColor = parseColor(\n options.selectedDescriptionColor || this._defaultOptions.selectedDescriptionColor,\n )\n this._fastScrollStep = options.fastScrollStep || this._defaultOptions.fastScrollStep\n\n this.requestRender() // Initial render needed\n }\n\n protected renderSelf(buffer: OptimizedBuffer, deltaTime: number): void {\n if (!this.visible || !this.frameBuffer) return\n\n if (this.isDirty) {\n this.refreshFrameBuffer()\n }\n }\n\n private refreshFrameBuffer(): void {\n if (!this.frameBuffer || this._options.length === 0) return\n\n const bgColor = this._focused ? this._focusedBackgroundColor : this._backgroundColor\n this.frameBuffer.clear(bgColor)\n\n const contentX = 0\n const contentY = 0\n const contentWidth = this.width\n const contentHeight = this.height\n\n const visibleOptions = this._options.slice(this.scrollOffset, this.scrollOffset + this.maxVisibleItems)\n\n for (let i = 0; i < visibleOptions.length; i++) {\n const actualIndex = this.scrollOffset + i\n const option = visibleOptions[i]\n const isSelected = actualIndex === this._selectedIndex\n const itemY = contentY + i * this.linesPerItem\n\n if (itemY + this.linesPerItem - 1 >= contentY + contentHeight) break\n\n if (isSelected) {\n const contentHeight = this.linesPerItem - this._itemSpacing\n this.frameBuffer.fillRect(contentX, itemY, contentWidth, contentHeight, this._selectedBackgroundColor)\n }\n\n const nameContent = `${isSelected ? \"▶ \" : \" \"}${option.name}`\n const baseTextColor = this._focused ? this._focusedTextColor : this._textColor\n const nameColor = isSelected ? this._selectedTextColor : baseTextColor\n let descX = contentX + 3\n\n if (this._font) {\n const indicator = isSelected ? \"▶ \" : \" \"\n this.frameBuffer.drawText(indicator, contentX + 1, itemY, nameColor)\n\n const indicatorWidth = 2\n renderFontToFrameBuffer(this.frameBuffer, {\n text: option.name,\n x: contentX + 1 + indicatorWidth,\n y: itemY,\n fg: nameColor,\n bg: isSelected ? this._selectedBackgroundColor : bgColor,\n font: this._font,\n })\n descX = contentX + 1 + indicatorWidth\n } else {\n this.frameBuffer.drawText(nameContent, contentX + 1, itemY, nameColor)\n }\n\n if (this._showDescription && itemY + this.fontHeight < contentY + contentHeight) {\n const descColor = isSelected ? this._selectedDescriptionColor : this._descriptionColor\n const descBg = this._focused ? this._focusedBackgroundColor : this._backgroundColor\n this.frameBuffer.drawText(option.description, descX, itemY + this.fontHeight, descColor)\n }\n }\n\n if (this._showScrollIndicator && this._options.length > this.maxVisibleItems) {\n this.renderScrollIndicatorToFrameBuffer(contentX, contentY, contentWidth, contentHeight)\n }\n }\n\n private renderScrollIndicatorToFrameBuffer(\n contentX: number,\n contentY: number,\n contentWidth: number,\n contentHeight: number,\n ): void {\n if (!this.frameBuffer) return\n\n const scrollPercent = this._selectedIndex / Math.max(1, this._options.length - 1)\n const indicatorHeight = Math.max(1, contentHeight - 2)\n const indicatorY = contentY + 1 + Math.floor(scrollPercent * indicatorHeight)\n const indicatorX = contentX + contentWidth - 1\n\n this.frameBuffer.drawText(\"█\", indicatorX, indicatorY, parseColor(\"#666666\"))\n }\n\n public get options(): SelectOption[] {\n return this._options\n }\n\n public set options(options: SelectOption[]) {\n this._options = options\n this._selectedIndex = Math.min(this._selectedIndex, Math.max(0, options.length - 1))\n this.updateScrollOffset()\n this.requestRender()\n }\n\n public getSelectedOption(): SelectOption | null {\n return this._options[this._selectedIndex] || null\n }\n\n public getSelectedIndex(): number {\n return this._selectedIndex\n }\n\n public moveUp(steps: number = 1): void {\n const newIndex = this._selectedIndex - steps\n\n if (newIndex >= 0) {\n this._selectedIndex = newIndex\n } else if (this._wrapSelection && this._options.length > 0) {\n this._selectedIndex = this._options.length - 1\n } else {\n this._selectedIndex = 0\n }\n\n this.updateScrollOffset()\n this.requestRender()\n this.emit(SelectRenderableEvents.SELECTION_CHANGED, this._selectedIndex, this.getSelectedOption())\n }\n\n public moveDown(steps: number = 1): void {\n const newIndex = this._selectedIndex + steps\n\n if (newIndex < this._options.length) {\n this._selectedIndex = newIndex\n } else if (this._wrapSelection && this._options.length > 0) {\n this._selectedIndex = 0\n } else {\n this._selectedIndex = this._options.length - 1\n }\n\n this.updateScrollOffset()\n this.requestRender()\n this.emit(SelectRenderableEvents.SELECTION_CHANGED, this._selectedIndex, this.getSelectedOption())\n }\n\n public selectCurrent(): void {\n const selected = this.getSelectedOption()\n if (selected) {\n this.emit(SelectRenderableEvents.ITEM_SELECTED, this._selectedIndex, selected)\n }\n }\n\n public setSelectedIndex(index: number): void {\n if (index >= 0 && index < this._options.length) {\n this._selectedIndex = index\n this.updateScrollOffset()\n this.requestRender()\n this.emit(SelectRenderableEvents.SELECTION_CHANGED, this._selectedIndex, this.getSelectedOption())\n }\n }\n\n private updateScrollOffset(): void {\n if (!this._options) return\n\n const halfVisible = Math.floor(this.maxVisibleItems / 2)\n const newScrollOffset = Math.max(\n 0,\n Math.min(this._selectedIndex - halfVisible, this._options.length - this.maxVisibleItems),\n )\n\n if (newScrollOffset !== this.scrollOffset) {\n this.scrollOffset = newScrollOffset\n this.requestRender()\n }\n }\n\n protected onResize(width: number, height: number): void {\n this.maxVisibleItems = Math.max(1, Math.floor(height / this.linesPerItem))\n this.updateScrollOffset()\n this.requestRender()\n }\n\n public handleKeyPress(key: KeyEvent | string): boolean {\n const keyName = typeof key === \"string\" ? key : key.name\n const isShift = typeof key !== \"string\" && key.shift\n\n switch (keyName) {\n case \"up\":\n case \"k\":\n this.moveUp(isShift ? this._fastScrollStep : 1)\n return true\n case \"down\":\n case \"j\":\n this.moveDown(isShift ? this._fastScrollStep : 1)\n return true\n case \"return\":\n case \"linefeed\":\n this.selectCurrent()\n return true\n }\n\n return false\n }\n\n public get showScrollIndicator(): boolean {\n return this._showScrollIndicator\n }\n\n public set showScrollIndicator(show: boolean) {\n this._showScrollIndicator = show\n this.requestRender()\n }\n\n public get showDescription(): boolean {\n return this._showDescription\n }\n\n public set showDescription(show: boolean) {\n if (this._showDescription !== show) {\n this._showDescription = show\n this.linesPerItem = this._showDescription\n ? this._font\n ? this.fontHeight + 1\n : 2\n : this._font\n ? this.fontHeight\n : 1\n this.linesPerItem += this._itemSpacing\n\n this.maxVisibleItems = Math.max(1, Math.floor(this.height / this.linesPerItem))\n this.updateScrollOffset()\n this.requestRender()\n }\n }\n\n public get wrapSelection(): boolean {\n return this._wrapSelection\n }\n\n public set wrapSelection(wrap: boolean) {\n this._wrapSelection = wrap\n }\n\n public set backgroundColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.backgroundColor)\n if (this._backgroundColor !== newColor) {\n this._backgroundColor = newColor\n this.requestRender()\n }\n }\n\n public set textColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.textColor)\n if (this._textColor !== newColor) {\n this._textColor = newColor\n this.requestRender()\n }\n }\n\n public set focusedBackgroundColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.focusedBackgroundColor)\n if (this._focusedBackgroundColor !== newColor) {\n this._focusedBackgroundColor = newColor\n this.requestRender()\n }\n }\n\n public set focusedTextColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.focusedTextColor)\n if (this._focusedTextColor !== newColor) {\n this._focusedTextColor = newColor\n this.requestRender()\n }\n }\n\n public set selectedBackgroundColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.selectedBackgroundColor)\n if (this._selectedBackgroundColor !== newColor) {\n this._selectedBackgroundColor = newColor\n this.requestRender()\n }\n }\n\n public set selectedTextColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.selectedTextColor)\n if (this._selectedTextColor !== newColor) {\n this._selectedTextColor = newColor\n this.requestRender()\n }\n }\n\n public set descriptionColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.descriptionColor)\n if (this._descriptionColor !== newColor) {\n this._descriptionColor = newColor\n this.requestRender()\n }\n }\n\n public set selectedDescriptionColor(value: ColorInput) {\n const newColor = parseColor(value ?? this._defaultOptions.selectedDescriptionColor)\n if (this._selectedDescriptionColor !== newColor) {\n this._selectedDescriptionColor = newColor\n this.requestRender()\n }\n }\n\n public set font(font: keyof typeof fonts) {\n this._font = font\n this.fontHeight = measureText({ text: \"A\", font: this._font }).height\n this.linesPerItem = this._showDescription\n ? this._font\n ? this.fontHeight + 1\n : 2\n : this._font\n ? this.fontHeight\n : 1\n this.linesPerItem += this._itemSpacing\n this.maxVisibleItems = Math.max(1, Math.floor(this.height / this.linesPerItem))\n this.updateScrollOffset()\n this.requestRender()\n }\n\n public set itemSpacing(spacing: number) {\n this._itemSpacing = spacing\n this.linesPerItem = this._showDescription\n ? this._font\n ? this.fontHeight + 1\n : 2\n : this._font\n ? this.fontHeight\n : 1\n this.linesPerItem += this._itemSpacing\n this.maxVisibleItems = Math.max(1, Math.floor(this.height / this.linesPerItem))\n this.updateScrollOffset()\n this.requestRender()\n }\n\n public set fastScrollStep(step: number) {\n this._fastScrollStep = step\n }\n\n public set selectedIndex(value: number) {\n const newIndex = value ?? this._defaultOptions.selectedIndex\n const clampedIndex = this._options.length > 0 ? Math.min(Math.max(0, newIndex), this._options.length - 1) : 0\n if (this._selectedIndex !== clampedIndex) {\n this._selectedIndex = clampedIndex\n this.updateScrollOffset()\n this.requestRender()\n }\n }\n}\n",
|
|
24
24
|
"import { Renderable, type RenderableOptions } from \"../Renderable\"\nimport { OptimizedBuffer } from \"../buffer\"\nimport { RGBA, parseColor, type ColorInput } from \"../lib/RGBA\"\nimport type { KeyEvent } from \"../lib/KeyHandler\"\nimport type { RenderContext } from \"../types\"\n\nexport interface TabSelectOption {\n name: string\n description: string\n value?: any\n}\n\nexport interface TabSelectRenderableOptions extends Omit<RenderableOptions<TabSelectRenderable>, \"height\"> {\n height?: number\n options?: TabSelectOption[]\n tabWidth?: number\n backgroundColor?: ColorInput\n textColor?: ColorInput\n focusedBackgroundColor?: ColorInput\n focusedTextColor?: ColorInput\n selectedBackgroundColor?: ColorInput\n selectedTextColor?: ColorInput\n selectedDescriptionColor?: ColorInput\n showScrollArrows?: boolean\n showDescription?: boolean\n showUnderline?: boolean\n wrapSelection?: boolean\n}\n\nexport enum TabSelectRenderableEvents {\n SELECTION_CHANGED = \"selectionChanged\",\n ITEM_SELECTED = \"itemSelected\",\n}\n\nfunction calculateDynamicHeight(showUnderline: boolean, showDescription: boolean): number {\n let height = 1\n\n if (showUnderline) {\n height += 1\n }\n\n if (showDescription) {\n height += 1\n }\n\n return height\n}\n\nexport class TabSelectRenderable extends Renderable {\n protected _focusable: boolean = true\n\n private _options: TabSelectOption[] = []\n private selectedIndex: number = 0\n private scrollOffset: number = 0\n private _tabWidth: number\n private maxVisibleTabs: number\n\n private _backgroundColor: RGBA\n private _textColor: RGBA\n private _focusedBackgroundColor: RGBA\n private _focusedTextColor: RGBA\n private _selectedBackgroundColor: RGBA\n private _selectedTextColor: RGBA\n private _selectedDescriptionColor: RGBA\n private _showScrollArrows: boolean\n private _showDescription: boolean\n private _showUnderline: boolean\n private _wrapSelection: boolean\n\n constructor(ctx: RenderContext, options: TabSelectRenderableOptions) {\n const calculatedHeight = calculateDynamicHeight(options.showUnderline ?? true, options.showDescription ?? true)\n\n super(ctx, { ...options, height: calculatedHeight, buffered: true })\n\n this._backgroundColor = parseColor(options.backgroundColor || \"transparent\")\n this._textColor = parseColor(options.textColor || \"#FFFFFF\")\n this._focusedBackgroundColor = parseColor(options.focusedBackgroundColor || options.backgroundColor || \"#1a1a1a\")\n this._focusedTextColor = parseColor(options.focusedTextColor || options.textColor || \"#FFFFFF\")\n this._options = options.options || []\n this._tabWidth = options.tabWidth || 20\n this._showDescription = options.showDescription ?? true\n this._showUnderline = options.showUnderline ?? true\n this._showScrollArrows = options.showScrollArrows ?? true\n this._wrapSelection = options.wrapSelection ?? false\n\n this.maxVisibleTabs = Math.max(1, Math.floor(this.width / this._tabWidth))\n\n this._selectedBackgroundColor = parseColor(options.selectedBackgroundColor || \"#334455\")\n this._selectedTextColor = parseColor(options.selectedTextColor || \"#FFFF00\")\n this._selectedDescriptionColor = parseColor(options.selectedDescriptionColor || \"#CCCCCC\")\n }\n\n private calculateDynamicHeight(): number {\n return calculateDynamicHeight(this._showUnderline, this._showDescription)\n }\n\n protected renderSelf(buffer: OptimizedBuffer, deltaTime: number): void {\n if (!this.visible || !this.frameBuffer) return\n\n if (this.isDirty) {\n this.refreshFrameBuffer()\n }\n }\n\n private refreshFrameBuffer(): void {\n if (!this.frameBuffer || this._options.length === 0) return\n\n // Use focused colors if focused\n const bgColor = this._focused ? this._focusedBackgroundColor : this._backgroundColor\n this.frameBuffer.clear(bgColor)\n\n const contentX = 0\n const contentY = 0\n const contentWidth = this.width\n const contentHeight = this.height\n\n const visibleOptions = this._options.slice(this.scrollOffset, this.scrollOffset + this.maxVisibleTabs)\n\n // Render tab names\n for (let i = 0; i < visibleOptions.length; i++) {\n const actualIndex = this.scrollOffset + i\n const option = visibleOptions[i]\n const isSelected = actualIndex === this.selectedIndex\n const tabX = contentX + i * this._tabWidth\n\n if (tabX >= contentX + contentWidth) break\n\n const actualTabWidth = Math.min(this._tabWidth, contentWidth - i * this._tabWidth)\n\n if (isSelected) {\n this.frameBuffer.fillRect(tabX, contentY, actualTabWidth, 1, this._selectedBackgroundColor)\n }\n\n const baseTextColor = this._focused ? this._focusedTextColor : this._textColor\n const nameColor = isSelected ? this._selectedTextColor : baseTextColor\n const nameContent = this.truncateText(option.name, actualTabWidth - 2)\n this.frameBuffer.drawText(nameContent, tabX + 1, contentY, nameColor)\n\n if (isSelected && this._showUnderline && contentHeight >= 2) {\n const underlineY = contentY + 1\n const underlineBg = isSelected ? this._selectedBackgroundColor : bgColor\n this.frameBuffer.drawText(\"▬\".repeat(actualTabWidth), tabX, underlineY, nameColor, underlineBg)\n }\n }\n\n if (this._showDescription && contentHeight >= (this._showUnderline ? 3 : 2)) {\n const selectedOption = this.getSelectedOption()\n if (selectedOption) {\n const descriptionY = contentY + (this._showUnderline ? 2 : 1)\n const descColor = this._selectedDescriptionColor\n const descContent = this.truncateText(selectedOption.description, contentWidth - 2)\n this.frameBuffer.drawText(descContent, contentX + 1, descriptionY, descColor)\n }\n }\n\n if (this._showScrollArrows && this._options.length > this.maxVisibleTabs) {\n this.renderScrollArrowsToFrameBuffer(contentX, contentY, contentWidth, contentHeight)\n }\n }\n\n private truncateText(text: string, maxWidth: number): string {\n if (text.length <= maxWidth) return text\n return text.substring(0, Math.max(0, maxWidth - 1)) + \"…\"\n }\n\n private renderScrollArrowsToFrameBuffer(\n contentX: number,\n contentY: number,\n contentWidth: number,\n contentHeight: number,\n ): void {\n if (!this.frameBuffer) return\n\n const hasMoreLeft = this.scrollOffset > 0\n const hasMoreRight = this.scrollOffset + this.maxVisibleTabs < this._options.length\n\n if (hasMoreLeft) {\n this.frameBuffer.drawText(\"‹\", contentX, contentY, parseColor(\"#AAAAAA\"))\n }\n\n if (hasMoreRight) {\n this.frameBuffer.drawText(\"›\", contentX + contentWidth - 1, contentY, parseColor(\"#AAAAAA\"))\n }\n }\n\n public setOptions(options: TabSelectOption[]): void {\n this._options = options\n this.selectedIndex = Math.min(this.selectedIndex, Math.max(0, options.length - 1))\n this.updateScrollOffset()\n this.requestRender()\n }\n\n public getSelectedOption(): TabSelectOption | null {\n return this._options[this.selectedIndex] || null\n }\n\n public getSelectedIndex(): number {\n return this.selectedIndex\n }\n\n public moveLeft(): void {\n if (this.selectedIndex > 0) {\n this.selectedIndex--\n } else if (this._wrapSelection && this._options.length > 0) {\n this.selectedIndex = this._options.length - 1\n } else {\n return\n }\n\n this.updateScrollOffset()\n this.requestRender()\n this.emit(TabSelectRenderableEvents.SELECTION_CHANGED, this.selectedIndex, this.getSelectedOption())\n }\n\n public moveRight(): void {\n if (this.selectedIndex < this._options.length - 1) {\n this.selectedIndex++\n } else if (this._wrapSelection && this._options.length > 0) {\n this.selectedIndex = 0\n } else {\n return\n }\n\n this.updateScrollOffset()\n this.requestRender()\n this.emit(TabSelectRenderableEvents.SELECTION_CHANGED, this.selectedIndex, this.getSelectedOption())\n }\n\n public selectCurrent(): void {\n const selected = this.getSelectedOption()\n if (selected) {\n this.emit(TabSelectRenderableEvents.ITEM_SELECTED, this.selectedIndex, selected)\n }\n }\n\n public setSelectedIndex(index: number): void {\n if (index >= 0 && index < this._options.length) {\n this.selectedIndex = index\n this.updateScrollOffset()\n this.requestRender()\n this.emit(TabSelectRenderableEvents.SELECTION_CHANGED, this.selectedIndex, this.getSelectedOption())\n }\n }\n\n private updateScrollOffset(): void {\n const halfVisible = Math.floor(this.maxVisibleTabs / 2)\n const newScrollOffset = Math.max(\n 0,\n Math.min(this.selectedIndex - halfVisible, this._options.length - this.maxVisibleTabs),\n )\n\n if (newScrollOffset !== this.scrollOffset) {\n this.scrollOffset = newScrollOffset\n this.requestRender()\n }\n }\n\n protected onResize(width: number, height: number): void {\n this.maxVisibleTabs = Math.max(1, Math.floor(width / this._tabWidth))\n this.updateScrollOffset()\n this.requestRender()\n }\n\n public setTabWidth(tabWidth: number): void {\n if (this._tabWidth === tabWidth) return\n\n this._tabWidth = tabWidth\n this.maxVisibleTabs = Math.max(1, Math.floor(this.width / this._tabWidth))\n\n this.updateScrollOffset()\n this.requestRender()\n }\n\n public getTabWidth(): number {\n return this._tabWidth\n }\n\n public handleKeyPress(key: KeyEvent | string): boolean {\n const keyName = typeof key === \"string\" ? key : key.name\n\n switch (keyName) {\n case \"left\":\n case \"[\":\n this.moveLeft()\n return true\n case \"right\":\n case \"]\":\n this.moveRight()\n return true\n case \"return\":\n case \"linefeed\":\n this.selectCurrent()\n return true\n }\n\n return false\n }\n\n public get options(): TabSelectOption[] {\n return this._options\n }\n\n public set options(options: TabSelectOption[]) {\n this._options = options\n this.selectedIndex = Math.min(this.selectedIndex, Math.max(0, options.length - 1))\n this.updateScrollOffset()\n this.requestRender()\n }\n\n public set backgroundColor(color: ColorInput) {\n this._backgroundColor = parseColor(color)\n this.requestRender()\n }\n\n public set textColor(color: ColorInput) {\n this._textColor = parseColor(color)\n this.requestRender()\n }\n\n public set focusedBackgroundColor(color: ColorInput) {\n this._focusedBackgroundColor = parseColor(color)\n this.requestRender()\n }\n\n public set focusedTextColor(color: ColorInput) {\n this._focusedTextColor = parseColor(color)\n this.requestRender()\n }\n\n public set selectedBackgroundColor(color: ColorInput) {\n this._selectedBackgroundColor = parseColor(color)\n this.requestRender()\n }\n\n public set selectedTextColor(color: ColorInput) {\n this._selectedTextColor = parseColor(color)\n this.requestRender()\n }\n\n public set selectedDescriptionColor(color: ColorInput) {\n this._selectedDescriptionColor = parseColor(color)\n this.requestRender()\n }\n\n public get showDescription(): boolean {\n return this._showDescription\n }\n\n public set showDescription(show: boolean) {\n if (this._showDescription !== show) {\n this._showDescription = show\n const newHeight = this.calculateDynamicHeight()\n this.height = newHeight\n this.requestRender()\n }\n }\n\n public get showUnderline(): boolean {\n return this._showUnderline\n }\n\n public set showUnderline(show: boolean) {\n if (this._showUnderline !== show) {\n this._showUnderline = show\n const newHeight = this.calculateDynamicHeight()\n this.height = newHeight\n this.requestRender()\n }\n }\n\n public get showScrollArrows(): boolean {\n return this._showScrollArrows\n }\n\n public set showScrollArrows(show: boolean) {\n if (this._showScrollArrows !== show) {\n this._showScrollArrows = show\n this.requestRender()\n }\n }\n\n public get wrapSelection(): boolean {\n return this._wrapSelection\n }\n\n public set wrapSelection(wrap: boolean) {\n this._wrapSelection = wrap\n }\n\n public get tabWidth(): number {\n return this._tabWidth\n }\n\n public set tabWidth(tabWidth: number) {\n if (this._tabWidth === tabWidth) return\n\n this._tabWidth = tabWidth\n this.maxVisibleTabs = Math.max(1, Math.floor(this.width / this._tabWidth))\n\n this.updateScrollOffset()\n this.requestRender()\n }\n}\n",
|
|
25
25
|
"import { BaseRenderable } from \"../Renderable\"\nimport { stringToStyledText, StyledText } from \"../lib/styled-text\"\nimport { type TextChunk } from \"../text-buffer\"\nimport { RGBA } from \"../lib/RGBA\"\nimport { type RenderContext } from \"../types\"\nimport { RootTextNodeRenderable, TextNodeRenderable } from \"./TextNode\"\nimport { TextBufferRenderable, type TextBufferOptions } from \"./TextBufferRenderable\"\n\nexport interface TextOptions extends TextBufferOptions {\n content?: StyledText | string\n}\n\nexport class TextRenderable extends TextBufferRenderable {\n private _text: StyledText\n\n // TODO: The TextRenderable is currently juggling both a StyledText and a RootTextNodeRenderable.\n // We should refactor this to only use the RootTextNodeRenderable here and have a separate StyledTextRenderable with `content`.\n private _hasManualStyledText: boolean = false\n\n protected rootTextNode: RootTextNodeRenderable\n\n protected _contentDefaultOptions = {\n content: \"\",\n } satisfies Partial<TextOptions>\n\n constructor(ctx: RenderContext, options: TextOptions) {\n super(ctx, options)\n\n const content = options.content ?? this._contentDefaultOptions.content\n const styledText = typeof content === \"string\" ? stringToStyledText(content) : content\n this._text = styledText\n this._hasManualStyledText = options.content !== undefined && content !== \"\"\n\n this.rootTextNode = new RootTextNodeRenderable(\n ctx,\n {\n id: `${this.id}-root`,\n fg: this._defaultFg,\n bg: this._defaultBg,\n attributes: this._defaultAttributes,\n },\n this,\n )\n\n this.updateTextBuffer(styledText)\n }\n\n private updateTextBuffer(styledText: StyledText): void {\n this.textBuffer.setStyledText(styledText)\n this.clearChunks(styledText)\n }\n\n private clearChunks(styledText: StyledText): void {\n // Clearing chunks that were already writtend to the text buffer,\n // to not retain references to the text data in js\n // TODO: This is causing issues in the solid renderer\n // styledText.chunks.forEach((chunk) => {\n // // @ts-ignore\n // chunk.text = undefined\n // })\n }\n\n get content(): StyledText {\n return this._text\n }\n\n get chunks(): TextChunk[] {\n return this._text.chunks\n }\n\n get textNode(): RootTextNodeRenderable {\n return this.rootTextNode\n }\n\n set content(value: StyledText | string) {\n this._hasManualStyledText = true\n const styledText = typeof value === \"string\" ? stringToStyledText(value) : value\n if (this._text !== styledText) {\n this._text = styledText\n this.updateTextBuffer(styledText)\n this.updateTextInfo()\n }\n }\n\n private updateTextFromNodes(): void {\n if (this.rootTextNode.isDirty && !this._hasManualStyledText) {\n const chunks = this.rootTextNode.gatherWithInheritedStyle({\n fg: this._defaultFg,\n bg: this._defaultBg,\n attributes: this._defaultAttributes,\n })\n this.textBuffer.setStyledText(new StyledText(chunks))\n this.refreshLocalSelection()\n this.yogaNode.markDirty()\n }\n }\n\n public add(obj: TextNodeRenderable | StyledText | string, index?: number): number {\n return this.rootTextNode.add(obj, index)\n }\n\n public remove(id: string): void {\n this.rootTextNode.remove(id)\n }\n\n public insertBefore(obj: BaseRenderable | any, anchor?: TextNodeRenderable): number {\n this.rootTextNode.insertBefore(obj, anchor)\n return this.rootTextNode.children.indexOf(obj)\n }\n\n public getTextChildren(): BaseRenderable[] {\n return this.rootTextNode.getChildren()\n }\n\n public clear(): void {\n this.rootTextNode.clear()\n\n const emptyStyledText = stringToStyledText(\"\")\n this._text = emptyStyledText\n this.updateTextBuffer(emptyStyledText)\n this.updateTextInfo()\n\n this.requestRender()\n }\n\n public onLifecyclePass = () => {\n this.updateTextFromNodes()\n }\n\n protected onFgChanged(newColor: RGBA): void {\n this.rootTextNode.fg = newColor\n }\n\n protected onBgChanged(newColor: RGBA): void {\n this.rootTextNode.bg = newColor\n }\n\n protected onAttributesChanged(newAttributes: number): void {\n this.rootTextNode.attributes = newAttributes\n }\n\n destroy(): void {\n this.rootTextNode.children.length = 0\n super.destroy()\n }\n}\n",
|
|
26
|
-
"import { Renderable, type RenderableOptions } from \"../Renderable\"\nimport { convertGlobalToLocalSelection, Selection, type LocalSelectionBounds } from \"../lib/selection\"\nimport { EditBuffer, type LogicalCursor } from \"../edit-buffer\"\nimport { EditorView, type VisualCursor } from \"../editor-view\"\nimport { RGBA, parseColor } from \"../lib/RGBA\"\nimport { type RenderContext, type Highlight } from \"../types\"\nimport type { OptimizedBuffer } from \"../buffer\"\nimport { MeasureMode } from \"yoga-layout\"\nimport type { SyntaxStyle } from \"../syntax-style\"\n\nexport interface CursorChangeEvent {\n line: number\n visualColumn: number\n}\n\nexport interface ContentChangeEvent {\n // No payload - use getText() to retrieve content if needed\n}\n\nexport interface EditBufferOptions extends RenderableOptions<EditBufferRenderable> {\n textColor?: string | RGBA\n backgroundColor?: string | RGBA\n selectionBg?: string | RGBA\n selectionFg?: string | RGBA\n selectable?: boolean\n attributes?: number\n wrapMode?: \"none\" | \"char\" | \"word\"\n scrollMargin?: number\n showCursor?: boolean\n cursorColor?: string | RGBA\n syntaxStyle?: SyntaxStyle\n tabIndicator?: string | number\n tabIndicatorColor?: string | RGBA\n onCursorChange?: (event: CursorChangeEvent) => void\n onContentChange?: (event: ContentChangeEvent) => void\n}\n\nexport abstract class EditBufferRenderable extends Renderable {\n protected _focusable: boolean = true\n public selectable: boolean = true\n\n protected _textColor: RGBA\n protected _backgroundColor: RGBA\n protected _defaultAttributes: number\n protected _selectionBg: RGBA | undefined\n protected _selectionFg: RGBA | undefined\n protected _wrapMode: \"none\" | \"char\" | \"word\" = \"word\"\n protected _scrollMargin: number = 0.2\n protected _showCursor: boolean = true\n protected _cursorColor: RGBA\n protected lastLocalSelection: LocalSelectionBounds | null = null\n protected _tabIndicator?: string | number\n protected _tabIndicatorColor?: RGBA\n\n private _cursorChangeListener: ((event: CursorChangeEvent) => void) | undefined = undefined\n private _contentChangeListener: ((event: ContentChangeEvent) => void) | undefined = undefined\n\n public readonly editBuffer: EditBuffer\n public readonly editorView: EditorView\n\n protected _defaultOptions = {\n textColor: RGBA.fromValues(1, 1, 1, 1),\n backgroundColor: \"transparent\",\n selectionBg: undefined,\n selectionFg: undefined,\n selectable: true,\n attributes: 0,\n wrapMode: \"word\" as \"none\" | \"char\" | \"word\",\n scrollMargin: 0.2,\n showCursor: true,\n cursorColor: RGBA.fromValues(1, 1, 1, 1),\n tabIndicator: undefined,\n tabIndicatorColor: undefined,\n } satisfies Partial<EditBufferOptions>\n\n constructor(ctx: RenderContext, options: EditBufferOptions) {\n super(ctx, options)\n\n this._textColor = parseColor(options.textColor ?? this._defaultOptions.textColor)\n this._backgroundColor = parseColor(options.backgroundColor ?? this._defaultOptions.backgroundColor)\n this._defaultAttributes = options.attributes ?? this._defaultOptions.attributes\n this._selectionBg = options.selectionBg ? parseColor(options.selectionBg) : this._defaultOptions.selectionBg\n this._selectionFg = options.selectionFg ? parseColor(options.selectionFg) : this._defaultOptions.selectionFg\n this.selectable = options.selectable ?? this._defaultOptions.selectable\n this._wrapMode = options.wrapMode ?? this._defaultOptions.wrapMode\n this._scrollMargin = options.scrollMargin ?? this._defaultOptions.scrollMargin\n this._showCursor = options.showCursor ?? this._defaultOptions.showCursor\n this._cursorColor = parseColor(options.cursorColor ?? this._defaultOptions.cursorColor)\n this._tabIndicator = options.tabIndicator ?? this._defaultOptions.tabIndicator\n this._tabIndicatorColor = options.tabIndicatorColor\n ? parseColor(options.tabIndicatorColor)\n : this._defaultOptions.tabIndicatorColor\n\n this.editBuffer = EditBuffer.create(this._ctx.widthMethod)\n this.editorView = EditorView.create(this.editBuffer, this.width || 80, this.height || 24)\n\n this.editorView.setWrapMode(this._wrapMode)\n this.editorView.setScrollMargin(this._scrollMargin)\n\n this.editBuffer.setDefaultFg(this._textColor)\n this.editBuffer.setDefaultBg(this._backgroundColor)\n this.editBuffer.setDefaultAttributes(this._defaultAttributes)\n\n if (options.syntaxStyle) {\n this.editBuffer.setSyntaxStyle(options.syntaxStyle)\n }\n\n if (this._tabIndicator !== undefined) {\n this.editorView.setTabIndicator(this._tabIndicator)\n }\n if (this._tabIndicatorColor !== undefined) {\n this.editorView.setTabIndicatorColor(this._tabIndicatorColor)\n }\n\n this.setupMeasureFunc()\n this.setupEventListeners(options)\n }\n\n private setupEventListeners(options: EditBufferOptions): void {\n this._cursorChangeListener = options.onCursorChange\n this._contentChangeListener = options.onContentChange\n\n this.editBuffer.on(\"cursor-changed\", () => {\n if (this._cursorChangeListener) {\n const cursor = this.editBuffer.getCursorPosition()\n this._cursorChangeListener({\n line: cursor.row,\n visualColumn: cursor.col,\n })\n }\n })\n\n this.editBuffer.on(\"content-changed\", () => {\n this.yogaNode.markDirty()\n this.requestRender()\n if (this._contentChangeListener) {\n this._contentChangeListener({})\n }\n })\n }\n\n get plainText(): string {\n return this.editBuffer.getText()\n }\n\n get logicalCursor(): LogicalCursor {\n return this.editBuffer.getCursorPosition()\n }\n\n get visualCursor(): VisualCursor {\n return this.editorView.getVisualCursor()\n }\n\n get cursorOffset(): number {\n return this.editorView.getVisualCursor().offset\n }\n\n set cursorOffset(offset: number) {\n this.editorView.setCursorByOffset(offset)\n this.requestRender()\n }\n\n get textColor(): RGBA {\n return this._textColor\n }\n\n set textColor(value: RGBA | string | undefined) {\n const newColor = parseColor(value ?? this._defaultOptions.textColor)\n if (this._textColor !== newColor) {\n this._textColor = newColor\n this.editBuffer.setDefaultFg(newColor)\n this.requestRender()\n }\n }\n\n get selectionBg(): RGBA | undefined {\n return this._selectionBg\n }\n\n set selectionBg(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : this._defaultOptions.selectionBg\n if (this._selectionBg !== newColor) {\n this._selectionBg = newColor\n if (this.lastLocalSelection) {\n this.updateLocalSelection(this.lastLocalSelection)\n }\n this.requestRender()\n }\n }\n\n get selectionFg(): RGBA | undefined {\n return this._selectionFg\n }\n\n set selectionFg(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : this._defaultOptions.selectionFg\n if (this._selectionFg !== newColor) {\n this._selectionFg = newColor\n if (this.lastLocalSelection) {\n this.updateLocalSelection(this.lastLocalSelection)\n }\n this.requestRender()\n }\n }\n\n get backgroundColor(): RGBA {\n return this._backgroundColor\n }\n\n set backgroundColor(value: RGBA | string | undefined) {\n const newColor = parseColor(value ?? this._defaultOptions.backgroundColor)\n if (this._backgroundColor !== newColor) {\n this._backgroundColor = newColor\n this.editBuffer.setDefaultBg(newColor)\n this.requestRender()\n }\n }\n\n get attributes(): number {\n return this._defaultAttributes\n }\n\n set attributes(value: number) {\n if (this._defaultAttributes !== value) {\n this._defaultAttributes = value\n this.editBuffer.setDefaultAttributes(value)\n this.requestRender()\n }\n }\n\n get wrapMode(): \"none\" | \"char\" | \"word\" {\n return this._wrapMode\n }\n\n set wrapMode(value: \"none\" | \"char\" | \"word\") {\n if (this._wrapMode !== value) {\n this._wrapMode = value\n this.editorView.setWrapMode(value)\n this.yogaNode.markDirty()\n this.requestRender()\n }\n }\n\n get showCursor(): boolean {\n return this._showCursor\n }\n\n set showCursor(value: boolean) {\n if (this._showCursor !== value) {\n this._showCursor = value\n this.requestRender()\n }\n }\n\n get cursorColor(): RGBA {\n return this._cursorColor\n }\n\n set cursorColor(value: RGBA | string) {\n const newColor = parseColor(value)\n if (this._cursorColor !== newColor) {\n this._cursorColor = newColor\n this.requestRender()\n }\n }\n\n get tabIndicator(): string | number | undefined {\n return this._tabIndicator\n }\n\n set tabIndicator(value: string | number | undefined) {\n if (this._tabIndicator !== value) {\n this._tabIndicator = value\n if (value !== undefined) {\n this.editorView.setTabIndicator(value)\n }\n this.requestRender()\n }\n }\n\n get tabIndicatorColor(): RGBA | undefined {\n return this._tabIndicatorColor\n }\n\n set tabIndicatorColor(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : undefined\n if (this._tabIndicatorColor !== newColor) {\n this._tabIndicatorColor = newColor\n if (newColor !== undefined) {\n this.editorView.setTabIndicatorColor(newColor)\n }\n this.requestRender()\n }\n }\n\n protected onResize(width: number, height: number): void {\n this.editorView.setViewportSize(width, height)\n if (this.lastLocalSelection) {\n const changed = this.updateLocalSelection(this.lastLocalSelection)\n if (changed) {\n this.requestRender()\n }\n }\n }\n\n protected refreshLocalSelection(): boolean {\n if (this.lastLocalSelection) {\n return this.updateLocalSelection(this.lastLocalSelection)\n }\n return false\n }\n\n private updateLocalSelection(localSelection: LocalSelectionBounds | null): boolean {\n if (!localSelection?.isActive) {\n this.editorView.resetLocalSelection()\n return true\n }\n return this.editorView.setLocalSelection(\n localSelection.anchorX,\n localSelection.anchorY,\n localSelection.focusX,\n localSelection.focusY,\n this._selectionBg,\n this._selectionFg,\n )\n }\n\n shouldStartSelection(x: number, y: number): boolean {\n if (!this.selectable) return false\n\n const localX = x - this.x\n const localY = y - this.y\n\n return localX >= 0 && localX < this.width && localY >= 0 && localY < this.height\n }\n\n onSelectionChanged(selection: Selection | null): boolean {\n const localSelection = convertGlobalToLocalSelection(selection, this.x, this.y)\n this.lastLocalSelection = localSelection\n\n const changed = this.updateLocalSelection(localSelection)\n\n if (changed) {\n this.requestRender()\n }\n\n return this.hasSelection()\n }\n\n getSelectedText(): string {\n return this.editorView.getSelectedText()\n }\n\n hasSelection(): boolean {\n return this.editorView.hasSelection()\n }\n\n getSelection(): { start: number; end: number } | null {\n return this.editorView.getSelection()\n }\n\n private setupMeasureFunc(): void {\n const measureFunc = (\n width: number,\n widthMode: MeasureMode,\n height: number,\n heightMode: MeasureMode,\n ): { width: number; height: number } => {\n // Use a reasonable default for NaN/undefined height to allow measuring content\n // This happens when Yoga calls measure with height/widthMode=\"Undefined\" (0)\n const effectiveHeight = isNaN(height) ? 1 : height\n const effectiveWidth = isNaN(width) ? 1 : width\n\n // Update viewport size to match measured dimensions\n // When wrapping and width changes, this will trigger wrap recalculation\n if (this._wrapMode !== \"none\" && this.width !== effectiveWidth) {\n this.editorView.setViewportSize(effectiveWidth, effectiveHeight)\n } else {\n this.editorView.setViewportSize(effectiveWidth, effectiveHeight)\n }\n\n const lineInfo = this.editorView.getLogicalLineInfo()\n const measuredWidth = lineInfo.maxLineWidth\n const measuredHeight = lineInfo.lineStarts.length\n\n return {\n width: Math.max(1, measuredWidth),\n height: Math.max(1, measuredHeight),\n }\n }\n\n this.yogaNode.setMeasureFunc(measureFunc)\n }\n\n render(buffer: OptimizedBuffer, deltaTime: number): void {\n if (!this.visible) return\n if (this.isDestroyed) return\n\n this.markClean()\n this._ctx.addToHitGrid(this.x, this.y, this.width, this.height, this.num)\n\n this.renderSelf(buffer)\n this.renderCursor(buffer)\n }\n\n protected renderSelf(buffer: OptimizedBuffer): void {\n buffer.drawEditorView(this.editorView, this.x, this.y)\n }\n\n protected renderCursor(buffer: OptimizedBuffer): void {\n if (!this._showCursor || !this._focused) return\n\n const visualCursor = this.editorView.getVisualCursor()\n\n const cursorX = this.x + visualCursor.visualCol + 1 // +1 for 1-based terminal coords\n const cursorY = this.y + visualCursor.visualRow + 1 // +1 for 1-based terminal coords\n\n this._ctx.setCursorPosition(cursorX, cursorY, true)\n this._ctx.setCursorColor(this._cursorColor)\n this._ctx.setCursorStyle(\"block\", true)\n }\n\n public focus(): void {\n super.focus()\n this._ctx.setCursorStyle(\"block\", true)\n this._ctx.setCursorColor(this._cursorColor)\n this.requestRender()\n }\n\n public blur(): void {\n super.blur()\n this._ctx.setCursorPosition(0, 0, false)\n this.requestRender()\n }\n\n protected onRemove(): void {\n if (this._focused) {\n this._ctx.setCursorPosition(0, 0, false)\n }\n }\n\n destroy(): void {\n if (this._focused) {\n this._ctx.setCursorPosition(0, 0, false)\n }\n super.destroy()\n this.editorView.destroy()\n this.editBuffer.destroy()\n }\n\n public set onCursorChange(handler: ((event: CursorChangeEvent) => void) | undefined) {\n this._cursorChangeListener = handler\n }\n\n public get onCursorChange(): ((event: CursorChangeEvent) => void) | undefined {\n return this._cursorChangeListener\n }\n\n public set onContentChange(handler: ((event: ContentChangeEvent) => void) | undefined) {\n this._contentChangeListener = handler\n }\n\n public get onContentChange(): ((event: ContentChangeEvent) => void) | undefined {\n return this._contentChangeListener\n }\n\n get syntaxStyle(): SyntaxStyle | null {\n return this.editBuffer.getSyntaxStyle()\n }\n\n set syntaxStyle(style: SyntaxStyle | null) {\n this.editBuffer.setSyntaxStyle(style)\n this.requestRender()\n }\n\n public addHighlight(lineIdx: number, highlight: Highlight): void {\n this.editBuffer.addHighlight(lineIdx, highlight)\n this.requestRender()\n }\n\n public addHighlightByCharRange(highlight: Highlight): void {\n this.editBuffer.addHighlightByCharRange(highlight)\n this.requestRender()\n }\n\n public removeHighlightsByRef(hlRef: number): void {\n this.editBuffer.removeHighlightsByRef(hlRef)\n this.requestRender()\n }\n\n public clearLineHighlights(lineIdx: number): void {\n this.editBuffer.clearLineHighlights(lineIdx)\n this.requestRender()\n }\n\n public clearAllHighlights(): void {\n this.editBuffer.clearAllHighlights()\n this.requestRender()\n }\n\n public getLineHighlights(lineIdx: number): Array<Highlight> {\n return this.editBuffer.getLineHighlights(lineIdx)\n }\n\n public setText(text: string, opts?: { history?: boolean }): void {\n this.editBuffer.setText(text, opts)\n this.yogaNode.markDirty()\n this.requestRender()\n }\n\n public clear(): void {\n this.editBuffer.clear()\n this.editBuffer.clearAllHighlights()\n this.yogaNode.markDirty()\n this.requestRender()\n }\n\n public deleteRange(startLine: number, startCol: number, endLine: number, endCol: number): void {\n this.editBuffer.deleteRange(startLine, startCol, endLine, endCol)\n this.yogaNode.markDirty()\n this.requestRender()\n }\n\n public insertText(text: string): void {\n this.editBuffer.insertText(text)\n this.yogaNode.markDirty()\n this.requestRender()\n }\n}\n",
|
|
26
|
+
"import { Renderable, type RenderableOptions } from \"../Renderable\"\nimport { convertGlobalToLocalSelection, Selection, type LocalSelectionBounds } from \"../lib/selection\"\nimport { EditBuffer, type LogicalCursor } from \"../edit-buffer\"\nimport { EditorView, type VisualCursor } from \"../editor-view\"\nimport { RGBA, parseColor } from \"../lib/RGBA\"\nimport type { RenderContext, Highlight, CursorStyleOptions } from \"../types\"\nimport type { OptimizedBuffer } from \"../buffer\"\nimport { MeasureMode } from \"yoga-layout\"\nimport type { SyntaxStyle } from \"../syntax-style\"\n\nexport interface CursorChangeEvent {\n line: number\n visualColumn: number\n}\n\nexport interface ContentChangeEvent {\n // No payload - use getText() to retrieve content if needed\n}\n\nexport interface EditBufferOptions extends RenderableOptions<EditBufferRenderable> {\n textColor?: string | RGBA\n backgroundColor?: string | RGBA\n selectionBg?: string | RGBA\n selectionFg?: string | RGBA\n selectable?: boolean\n attributes?: number\n wrapMode?: \"none\" | \"char\" | \"word\"\n scrollMargin?: number\n showCursor?: boolean\n cursorColor?: string | RGBA\n cursorStyle?: CursorStyleOptions\n syntaxStyle?: SyntaxStyle\n tabIndicator?: string | number\n tabIndicatorColor?: string | RGBA\n onCursorChange?: (event: CursorChangeEvent) => void\n onContentChange?: (event: ContentChangeEvent) => void\n}\n\nexport abstract class EditBufferRenderable extends Renderable {\n protected _focusable: boolean = true\n public selectable: boolean = true\n\n protected _textColor: RGBA\n protected _backgroundColor: RGBA\n protected _defaultAttributes: number\n protected _selectionBg: RGBA | undefined\n protected _selectionFg: RGBA | undefined\n protected _wrapMode: \"none\" | \"char\" | \"word\" = \"word\"\n protected _scrollMargin: number = 0.2\n protected _showCursor: boolean = true\n protected _cursorColor: RGBA\n protected _cursorStyle: CursorStyleOptions\n protected lastLocalSelection: LocalSelectionBounds | null = null\n protected _tabIndicator?: string | number\n protected _tabIndicatorColor?: RGBA\n\n private _cursorChangeListener: ((event: CursorChangeEvent) => void) | undefined = undefined\n private _contentChangeListener: ((event: ContentChangeEvent) => void) | undefined = undefined\n\n public readonly editBuffer: EditBuffer\n public readonly editorView: EditorView\n\n protected _defaultOptions = {\n textColor: RGBA.fromValues(1, 1, 1, 1),\n backgroundColor: \"transparent\",\n selectionBg: undefined,\n selectionFg: undefined,\n selectable: true,\n attributes: 0,\n wrapMode: \"word\" as \"none\" | \"char\" | \"word\",\n scrollMargin: 0.2,\n showCursor: true,\n cursorColor: RGBA.fromValues(1, 1, 1, 1),\n cursorStyle: {\n style: \"block\",\n blinking: true,\n },\n tabIndicator: undefined,\n tabIndicatorColor: undefined,\n } satisfies Partial<EditBufferOptions>\n\n constructor(ctx: RenderContext, options: EditBufferOptions) {\n super(ctx, options)\n\n this._textColor = parseColor(options.textColor ?? this._defaultOptions.textColor)\n this._backgroundColor = parseColor(options.backgroundColor ?? this._defaultOptions.backgroundColor)\n this._defaultAttributes = options.attributes ?? this._defaultOptions.attributes\n this._selectionBg = options.selectionBg ? parseColor(options.selectionBg) : this._defaultOptions.selectionBg\n this._selectionFg = options.selectionFg ? parseColor(options.selectionFg) : this._defaultOptions.selectionFg\n this.selectable = options.selectable ?? this._defaultOptions.selectable\n this._wrapMode = options.wrapMode ?? this._defaultOptions.wrapMode\n this._scrollMargin = options.scrollMargin ?? this._defaultOptions.scrollMargin\n this._showCursor = options.showCursor ?? this._defaultOptions.showCursor\n this._cursorColor = parseColor(options.cursorColor ?? this._defaultOptions.cursorColor)\n this._cursorStyle = options.cursorStyle ?? this._defaultOptions.cursorStyle\n this._tabIndicator = options.tabIndicator ?? this._defaultOptions.tabIndicator\n this._tabIndicatorColor = options.tabIndicatorColor\n ? parseColor(options.tabIndicatorColor)\n : this._defaultOptions.tabIndicatorColor\n\n this.editBuffer = EditBuffer.create(this._ctx.widthMethod)\n this.editorView = EditorView.create(this.editBuffer, this.width || 80, this.height || 24)\n\n this.editorView.setWrapMode(this._wrapMode)\n this.editorView.setScrollMargin(this._scrollMargin)\n\n this.editBuffer.setDefaultFg(this._textColor)\n this.editBuffer.setDefaultBg(this._backgroundColor)\n this.editBuffer.setDefaultAttributes(this._defaultAttributes)\n\n if (options.syntaxStyle) {\n this.editBuffer.setSyntaxStyle(options.syntaxStyle)\n }\n\n if (this._tabIndicator !== undefined) {\n this.editorView.setTabIndicator(this._tabIndicator)\n }\n if (this._tabIndicatorColor !== undefined) {\n this.editorView.setTabIndicatorColor(this._tabIndicatorColor)\n }\n\n this.setupMeasureFunc()\n this.setupEventListeners(options)\n }\n\n private setupEventListeners(options: EditBufferOptions): void {\n this._cursorChangeListener = options.onCursorChange\n this._contentChangeListener = options.onContentChange\n\n this.editBuffer.on(\"cursor-changed\", () => {\n if (this._cursorChangeListener) {\n const cursor = this.editBuffer.getCursorPosition()\n this._cursorChangeListener({\n line: cursor.row,\n visualColumn: cursor.col,\n })\n }\n })\n\n this.editBuffer.on(\"content-changed\", () => {\n this.yogaNode.markDirty()\n this.requestRender()\n if (this._contentChangeListener) {\n this._contentChangeListener({})\n }\n })\n }\n\n get plainText(): string {\n return this.editBuffer.getText()\n }\n\n get logicalCursor(): LogicalCursor {\n return this.editBuffer.getCursorPosition()\n }\n\n get visualCursor(): VisualCursor {\n return this.editorView.getVisualCursor()\n }\n\n get cursorOffset(): number {\n return this.editorView.getVisualCursor().offset\n }\n\n set cursorOffset(offset: number) {\n this.editorView.setCursorByOffset(offset)\n this.requestRender()\n }\n\n get textColor(): RGBA {\n return this._textColor\n }\n\n set textColor(value: RGBA | string | undefined) {\n const newColor = parseColor(value ?? this._defaultOptions.textColor)\n if (this._textColor !== newColor) {\n this._textColor = newColor\n this.editBuffer.setDefaultFg(newColor)\n this.requestRender()\n }\n }\n\n get selectionBg(): RGBA | undefined {\n return this._selectionBg\n }\n\n set selectionBg(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : this._defaultOptions.selectionBg\n if (this._selectionBg !== newColor) {\n this._selectionBg = newColor\n if (this.lastLocalSelection) {\n this.updateLocalSelection(this.lastLocalSelection)\n }\n this.requestRender()\n }\n }\n\n get selectionFg(): RGBA | undefined {\n return this._selectionFg\n }\n\n set selectionFg(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : this._defaultOptions.selectionFg\n if (this._selectionFg !== newColor) {\n this._selectionFg = newColor\n if (this.lastLocalSelection) {\n this.updateLocalSelection(this.lastLocalSelection)\n }\n this.requestRender()\n }\n }\n\n get backgroundColor(): RGBA {\n return this._backgroundColor\n }\n\n set backgroundColor(value: RGBA | string | undefined) {\n const newColor = parseColor(value ?? this._defaultOptions.backgroundColor)\n if (this._backgroundColor !== newColor) {\n this._backgroundColor = newColor\n this.editBuffer.setDefaultBg(newColor)\n this.requestRender()\n }\n }\n\n get attributes(): number {\n return this._defaultAttributes\n }\n\n set attributes(value: number) {\n if (this._defaultAttributes !== value) {\n this._defaultAttributes = value\n this.editBuffer.setDefaultAttributes(value)\n this.requestRender()\n }\n }\n\n get wrapMode(): \"none\" | \"char\" | \"word\" {\n return this._wrapMode\n }\n\n set wrapMode(value: \"none\" | \"char\" | \"word\") {\n if (this._wrapMode !== value) {\n this._wrapMode = value\n this.editorView.setWrapMode(value)\n this.yogaNode.markDirty()\n this.requestRender()\n }\n }\n\n get showCursor(): boolean {\n return this._showCursor\n }\n\n set showCursor(value: boolean) {\n if (this._showCursor !== value) {\n this._showCursor = value\n this.requestRender()\n }\n }\n\n get cursorColor(): RGBA {\n return this._cursorColor\n }\n\n set cursorColor(value: RGBA | string) {\n const newColor = parseColor(value)\n if (this._cursorColor !== newColor) {\n this._cursorColor = newColor\n if (this._focused) {\n this.requestRender()\n }\n }\n }\n\n get cursorStyle(): CursorStyleOptions {\n return this._cursorStyle\n }\n\n set cursorStyle(style: CursorStyleOptions) {\n const newStyle = style\n if (this.cursorStyle.style !== newStyle.style || this.cursorStyle.blinking !== newStyle.blinking) {\n this._cursorStyle = newStyle\n if (this._focused) {\n this.requestRender()\n }\n }\n }\n\n get tabIndicator(): string | number | undefined {\n return this._tabIndicator\n }\n\n set tabIndicator(value: string | number | undefined) {\n if (this._tabIndicator !== value) {\n this._tabIndicator = value\n if (value !== undefined) {\n this.editorView.setTabIndicator(value)\n }\n this.requestRender()\n }\n }\n\n get tabIndicatorColor(): RGBA | undefined {\n return this._tabIndicatorColor\n }\n\n set tabIndicatorColor(value: RGBA | string | undefined) {\n const newColor = value ? parseColor(value) : undefined\n if (this._tabIndicatorColor !== newColor) {\n this._tabIndicatorColor = newColor\n if (newColor !== undefined) {\n this.editorView.setTabIndicatorColor(newColor)\n }\n this.requestRender()\n }\n }\n\n protected onResize(width: number, height: number): void {\n this.editorView.setViewportSize(width, height)\n if (this.lastLocalSelection) {\n const changed = this.updateLocalSelection(this.lastLocalSelection)\n if (changed) {\n this.requestRender()\n }\n }\n }\n\n protected refreshLocalSelection(): boolean {\n if (this.lastLocalSelection) {\n return this.updateLocalSelection(this.lastLocalSelection)\n }\n return false\n }\n\n private updateLocalSelection(localSelection: LocalSelectionBounds | null): boolean {\n if (!localSelection?.isActive) {\n this.editorView.resetLocalSelection()\n return true\n }\n return this.editorView.setLocalSelection(\n localSelection.anchorX,\n localSelection.anchorY,\n localSelection.focusX,\n localSelection.focusY,\n this._selectionBg,\n this._selectionFg,\n )\n }\n\n shouldStartSelection(x: number, y: number): boolean {\n if (!this.selectable) return false\n\n const localX = x - this.x\n const localY = y - this.y\n\n return localX >= 0 && localX < this.width && localY >= 0 && localY < this.height\n }\n\n onSelectionChanged(selection: Selection | null): boolean {\n const localSelection = convertGlobalToLocalSelection(selection, this.x, this.y)\n this.lastLocalSelection = localSelection\n\n const changed = this.updateLocalSelection(localSelection)\n\n if (changed) {\n this.requestRender()\n }\n\n return this.hasSelection()\n }\n\n getSelectedText(): string {\n return this.editorView.getSelectedText()\n }\n\n hasSelection(): boolean {\n return this.editorView.hasSelection()\n }\n\n getSelection(): { start: number; end: number } | null {\n return this.editorView.getSelection()\n }\n\n private setupMeasureFunc(): void {\n const measureFunc = (\n width: number,\n widthMode: MeasureMode,\n height: number,\n heightMode: MeasureMode,\n ): { width: number; height: number } => {\n // Use a reasonable default for NaN/undefined height to allow measuring content\n // This happens when Yoga calls measure with height/widthMode=\"Undefined\" (0)\n const effectiveHeight = isNaN(height) ? 1 : height\n const effectiveWidth = isNaN(width) ? 1 : width\n\n // Update viewport size to match measured dimensions\n // When wrapping and width changes, this will trigger wrap recalculation\n if (this._wrapMode !== \"none\" && this.width !== effectiveWidth) {\n this.editorView.setViewportSize(effectiveWidth, effectiveHeight)\n } else {\n this.editorView.setViewportSize(effectiveWidth, effectiveHeight)\n }\n\n const lineInfo = this.editorView.getLogicalLineInfo()\n const measuredWidth = lineInfo.maxLineWidth\n const measuredHeight = lineInfo.lineStarts.length\n\n return {\n width: Math.max(1, measuredWidth),\n height: Math.max(1, measuredHeight),\n }\n }\n\n this.yogaNode.setMeasureFunc(measureFunc)\n }\n\n render(buffer: OptimizedBuffer, deltaTime: number): void {\n if (!this.visible) return\n if (this.isDestroyed) return\n\n this.markClean()\n this._ctx.addToHitGrid(this.x, this.y, this.width, this.height, this.num)\n\n this.renderSelf(buffer)\n this.renderCursor(buffer)\n }\n\n protected renderSelf(buffer: OptimizedBuffer): void {\n buffer.drawEditorView(this.editorView, this.x, this.y)\n }\n\n protected renderCursor(buffer: OptimizedBuffer): void {\n if (!this._showCursor || !this._focused) return\n\n const visualCursor = this.editorView.getVisualCursor()\n\n const cursorX = this.x + visualCursor.visualCol + 1 // +1 for 1-based terminal coords\n const cursorY = this.y + visualCursor.visualRow + 1 // +1 for 1-based terminal coords\n\n this._ctx.setCursorPosition(cursorX, cursorY, true)\n this._ctx.setCursorColor(this._cursorColor)\n this._ctx.setCursorStyle(this._cursorStyle.style, this._cursorStyle.blinking)\n }\n\n public focus(): void {\n super.focus()\n this._ctx.setCursorStyle(this._cursorStyle.style, this._cursorStyle.blinking)\n this._ctx.setCursorColor(this._cursorColor)\n this.requestRender()\n }\n\n public blur(): void {\n super.blur()\n this._ctx.setCursorPosition(0, 0, false)\n this.requestRender()\n }\n\n protected onRemove(): void {\n if (this._focused) {\n this._ctx.setCursorPosition(0, 0, false)\n }\n }\n\n destroy(): void {\n if (this._focused) {\n this._ctx.setCursorPosition(0, 0, false)\n }\n super.destroy()\n this.editorView.destroy()\n this.editBuffer.destroy()\n }\n\n public set onCursorChange(handler: ((event: CursorChangeEvent) => void) | undefined) {\n this._cursorChangeListener = handler\n }\n\n public get onCursorChange(): ((event: CursorChangeEvent) => void) | undefined {\n return this._cursorChangeListener\n }\n\n public set onContentChange(handler: ((event: ContentChangeEvent) => void) | undefined) {\n this._contentChangeListener = handler\n }\n\n public get onContentChange(): ((event: ContentChangeEvent) => void) | undefined {\n return this._contentChangeListener\n }\n\n get syntaxStyle(): SyntaxStyle | null {\n return this.editBuffer.getSyntaxStyle()\n }\n\n set syntaxStyle(style: SyntaxStyle | null) {\n this.editBuffer.setSyntaxStyle(style)\n this.requestRender()\n }\n\n public addHighlight(lineIdx: number, highlight: Highlight): void {\n this.editBuffer.addHighlight(lineIdx, highlight)\n this.requestRender()\n }\n\n public addHighlightByCharRange(highlight: Highlight): void {\n this.editBuffer.addHighlightByCharRange(highlight)\n this.requestRender()\n }\n\n public removeHighlightsByRef(hlRef: number): void {\n this.editBuffer.removeHighlightsByRef(hlRef)\n this.requestRender()\n }\n\n public clearLineHighlights(lineIdx: number): void {\n this.editBuffer.clearLineHighlights(lineIdx)\n this.requestRender()\n }\n\n public clearAllHighlights(): void {\n this.editBuffer.clearAllHighlights()\n this.requestRender()\n }\n\n public getLineHighlights(lineIdx: number): Array<Highlight> {\n return this.editBuffer.getLineHighlights(lineIdx)\n }\n\n public setText(text: string, opts?: { history?: boolean }): void {\n this.editBuffer.setText(text, opts)\n this.yogaNode.markDirty()\n this.requestRender()\n }\n\n public clear(): void {\n this.editBuffer.clear()\n this.editBuffer.clearAllHighlights()\n this.yogaNode.markDirty()\n this.requestRender()\n }\n\n public deleteRange(startLine: number, startCol: number, endLine: number, endCol: number): void {\n this.editBuffer.deleteRange(startLine, startCol, endLine, endCol)\n this.yogaNode.markDirty()\n this.requestRender()\n }\n\n public insertText(text: string): void {\n this.editBuffer.insertText(text)\n this.yogaNode.markDirty()\n this.requestRender()\n }\n\n public getTextRange(startOffset: number, endOffset: number): string {\n return this.editBuffer.getTextRange(startOffset, endOffset)\n }\n\n public getTextRangeByCoords(startRow: number, startCol: number, endRow: number, endCol: number): string {\n return this.editBuffer.getTextRangeByCoords(startRow, startCol, endRow, endCol)\n }\n}\n",
|
|
27
27
|
"export interface KeyBinding<Action extends string = string> {\n name: string\n ctrl?: boolean\n shift?: boolean\n meta?: boolean\n action: Action\n}\n\nexport function mergeKeyBindings<Action extends string>(\n defaults: KeyBinding<Action>[],\n custom: KeyBinding<Action>[],\n): KeyBinding<Action>[] {\n const map = new Map<string, KeyBinding<Action>>()\n for (const binding of defaults) {\n const key = getKeyBindingKey(binding)\n map.set(key, binding)\n }\n for (const binding of custom) {\n const key = getKeyBindingKey(binding)\n map.set(key, binding)\n }\n return Array.from(map.values())\n}\n\nexport function getKeyBindingKey<Action extends string>(binding: KeyBinding<Action>): string {\n return `${binding.name}:${!!binding.ctrl}:${!!binding.shift}:${!!binding.meta}`\n}\n\nexport function buildKeyBindingsMap<Action extends string>(bindings: KeyBinding<Action>[]): Map<string, Action> {\n const map = new Map<string, Action>()\n for (const binding of bindings) {\n const key = getKeyBindingKey(binding)\n map.set(key, binding.action)\n }\n return map\n}\n",
|
|
28
28
|
"import { type RenderContext } from \"../types\"\nimport { EditBufferRenderable, type EditBufferOptions } from \"./EditBufferRenderable\"\nimport type { KeyEvent, PasteEvent } from \"../lib/KeyHandler\"\nimport { RGBA, parseColor, type ColorInput } from \"../lib/RGBA\"\nimport {\n type KeyBinding as BaseKeyBinding,\n mergeKeyBindings,\n getKeyBindingKey,\n buildKeyBindingsMap,\n} from \"../lib/keymapping\"\nimport { type StyledText, fg } from \"../lib/styled-text\"\nimport type { ExtmarksController } from \"../lib/extmarks\"\n\nexport type TextareaAction =\n | \"move-left\"\n | \"move-right\"\n | \"move-up\"\n | \"move-down\"\n | \"select-left\"\n | \"select-right\"\n | \"select-up\"\n | \"select-down\"\n | \"line-home\"\n | \"line-end\"\n | \"select-line-home\"\n | \"select-line-end\"\n | \"buffer-home\"\n | \"buffer-end\"\n | \"delete-line\"\n | \"delete-to-line-end\"\n | \"backspace\"\n | \"delete\"\n | \"newline\"\n | \"undo\"\n | \"redo\"\n | \"word-forward\"\n | \"word-backward\"\n | \"select-word-forward\"\n | \"select-word-backward\"\n | \"delete-word-forward\"\n | \"delete-word-backward\"\n | \"submit\"\n\nexport type KeyBinding = BaseKeyBinding<TextareaAction>\n\nconst defaultTextareaKeybindings: KeyBinding[] = [\n { name: \"left\", action: \"move-left\" },\n { name: \"right\", action: \"move-right\" },\n { name: \"up\", action: \"move-up\" },\n { name: \"down\", action: \"move-down\" },\n { name: \"left\", shift: true, action: \"select-left\" },\n { name: \"right\", shift: true, action: \"select-right\" },\n { name: \"up\", shift: true, action: \"select-up\" },\n { name: \"down\", shift: true, action: \"select-down\" },\n { name: \"home\", action: \"line-home\" },\n { name: \"end\", action: \"line-end\" },\n { name: \"home\", shift: true, action: \"select-line-home\" },\n { name: \"end\", shift: true, action: \"select-line-end\" },\n { name: \"a\", ctrl: true, action: \"buffer-home\" },\n { name: \"e\", ctrl: true, action: \"buffer-end\" },\n { name: \"d\", ctrl: true, action: \"delete-line\" },\n { name: \"k\", ctrl: true, action: \"delete-to-line-end\" },\n { name: \"backspace\", action: \"backspace\" },\n { name: \"delete\", action: \"delete\" },\n { name: \"return\", action: \"newline\" },\n { name: \"linefeed\", action: \"newline\" },\n { name: \"return\", meta: true, action: \"submit\" },\n { name: \"z\", ctrl: true, action: \"undo\" },\n { name: \"Z\", ctrl: true, shift: true, action: \"redo\" },\n { name: \"y\", ctrl: true, action: \"redo\" },\n { name: \"f\", meta: true, action: \"word-forward\" },\n { name: \"b\", meta: true, action: \"word-backward\" },\n { name: \"right\", meta: true, action: \"word-forward\" },\n { name: \"left\", meta: true, action: \"word-backward\" },\n { name: \"F\", meta: true, shift: true, action: \"select-word-forward\" },\n { name: \"B\", meta: true, shift: true, action: \"select-word-backward\" },\n { name: \"right\", meta: true, shift: true, action: \"select-word-forward\" },\n { name: \"left\", meta: true, shift: true, action: \"select-word-backward\" },\n { name: \"d\", meta: true, action: \"delete-word-forward\" },\n { name: \"backspace\", meta: true, action: \"delete-word-backward\" },\n { name: \"w\", ctrl: true, action: \"delete-word-backward\" },\n]\n\nexport interface SubmitEvent {}\n\nexport interface TextareaOptions extends EditBufferOptions {\n initialValue?: string\n backgroundColor?: ColorInput\n textColor?: ColorInput\n focusedBackgroundColor?: ColorInput\n focusedTextColor?: ColorInput\n placeholder?: StyledText | string | null\n keyBindings?: KeyBinding[]\n onSubmit?: (event: SubmitEvent) => void\n}\n\nexport class TextareaRenderable extends EditBufferRenderable {\n private _placeholder: StyledText | string | null\n private _unfocusedBackgroundColor: RGBA\n private _unfocusedTextColor: RGBA\n private _focusedBackgroundColor: RGBA\n private _focusedTextColor: RGBA\n private _keyBindingsMap: Map<string, TextareaAction>\n private _actionHandlers: Map<TextareaAction, () => boolean>\n private _initialValueSet: boolean = false\n private _submitListener: ((event: SubmitEvent) => void) | undefined = undefined\n\n private static readonly defaults = {\n backgroundColor: \"transparent\",\n textColor: \"#FFFFFF\",\n focusedBackgroundColor: \"transparent\",\n focusedTextColor: \"#FFFFFF\",\n placeholder: null,\n } satisfies Partial<TextareaOptions>\n\n constructor(ctx: RenderContext, options: TextareaOptions) {\n const defaults = TextareaRenderable.defaults\n\n // Pass base colors to parent constructor (these become the unfocused colors)\n const baseOptions = {\n ...options,\n backgroundColor: options.backgroundColor || defaults.backgroundColor,\n textColor: options.textColor || defaults.textColor,\n }\n super(ctx, baseOptions)\n\n // Store unfocused colors separately (parent's properties get overwritten when focused)\n this._unfocusedBackgroundColor = parseColor(options.backgroundColor || defaults.backgroundColor)\n this._unfocusedTextColor = parseColor(options.textColor || defaults.textColor)\n this._focusedBackgroundColor = parseColor(\n options.focusedBackgroundColor || options.backgroundColor || defaults.focusedBackgroundColor,\n )\n this._focusedTextColor = parseColor(options.focusedTextColor || options.textColor || defaults.focusedTextColor)\n this._placeholder = options.placeholder ?? defaults.placeholder\n\n const mergedBindings = mergeKeyBindings(defaultTextareaKeybindings, options.keyBindings || [])\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings)\n this._actionHandlers = this.buildActionHandlers()\n this._submitListener = options.onSubmit\n\n if (options.initialValue) {\n this.setText(options.initialValue)\n this._initialValueSet = true\n }\n this.updateColors()\n\n this.applyPlaceholder(this._placeholder)\n }\n\n private applyPlaceholder(placeholder: StyledText | string | null): void {\n if (placeholder === null) {\n this.editorView.setPlaceholderStyledText([])\n return\n }\n\n if (typeof placeholder === \"string\") {\n const defaultGray = fg(\"#666666\")\n const chunks = [defaultGray(placeholder)]\n this.editorView.setPlaceholderStyledText(chunks)\n } else {\n this.editorView.setPlaceholderStyledText(placeholder.chunks)\n }\n }\n\n private buildActionHandlers(): Map<TextareaAction, () => boolean> {\n return new Map([\n [\"move-left\", () => this.moveCursorLeft()],\n [\"move-right\", () => this.moveCursorRight()],\n [\"move-up\", () => this.moveCursorUp()],\n [\"move-down\", () => this.moveCursorDown()],\n [\"select-left\", () => this.moveCursorLeft({ select: true })],\n [\"select-right\", () => this.moveCursorRight({ select: true })],\n [\"select-up\", () => this.moveCursorUp({ select: true })],\n [\"select-down\", () => this.moveCursorDown({ select: true })],\n [\"line-home\", () => this.gotoLineHome()],\n [\"line-end\", () => this.gotoLineEnd()],\n [\"select-line-home\", () => this.gotoLineHome({ select: true })],\n [\"select-line-end\", () => this.gotoLineEnd({ select: true })],\n [\"buffer-home\", () => this.gotoBufferHome()],\n [\"buffer-end\", () => this.gotoBufferEnd()],\n [\"delete-line\", () => this.deleteLine()],\n [\"delete-to-line-end\", () => this.deleteToLineEnd()],\n [\"backspace\", () => this.deleteCharBackward()],\n [\"delete\", () => this.deleteChar()],\n [\"newline\", () => this.newLine()],\n [\"undo\", () => this.undo()],\n [\"redo\", () => this.redo()],\n [\"word-forward\", () => this.moveWordForward()],\n [\"word-backward\", () => this.moveWordBackward()],\n [\"select-word-forward\", () => this.moveWordForward({ select: true })],\n [\"select-word-backward\", () => this.moveWordBackward({ select: true })],\n [\"delete-word-forward\", () => this.deleteWordForward()],\n [\"delete-word-backward\", () => this.deleteWordBackward()],\n [\"submit\", () => this.submit()],\n ])\n }\n\n public handlePaste(event: PasteEvent): void {\n this.insertText(event.text)\n }\n\n public handleKeyPress(key: KeyEvent | string): boolean {\n const keyName = typeof key === \"string\" ? key : key.name\n const keySequence = typeof key === \"string\" ? key : key.sequence\n const keyCtrl = typeof key === \"string\" ? false : key.ctrl\n const keyShift = typeof key === \"string\" ? false : key.shift\n const keyMeta = typeof key === \"string\" ? false : key.meta\n\n const bindingKey = getKeyBindingKey({\n name: keyName,\n ctrl: keyCtrl,\n shift: keyShift,\n meta: keyMeta,\n action: \"move-left\" as TextareaAction,\n })\n\n const action = this._keyBindingsMap.get(bindingKey)\n\n if (action) {\n const handler = this._actionHandlers.get(action)\n if (handler) {\n return handler()\n }\n }\n\n if (keySequence && !keyCtrl && !keyMeta) {\n const firstCharCode = keySequence.charCodeAt(0)\n\n if (firstCharCode < 32) {\n return false\n }\n\n if (firstCharCode === 127) {\n return false\n }\n\n this.insertText(keySequence)\n return true\n }\n\n return false\n }\n\n private updateColors(): void {\n const effectiveBg = this._focused ? this._focusedBackgroundColor : this._unfocusedBackgroundColor\n const effectiveFg = this._focused ? this._focusedTextColor : this._unfocusedTextColor\n\n super.backgroundColor = effectiveBg\n super.textColor = effectiveFg\n }\n\n public insertChar(char: string): void {\n if (this.hasSelection()) {\n this.deleteSelectedText()\n }\n\n this.editBuffer.insertChar(char)\n this.requestRender()\n }\n\n public insertText(text: string): void {\n if (this.hasSelection()) {\n this.deleteSelectedText()\n }\n\n this.editBuffer.insertText(text)\n this.requestRender()\n }\n\n public deleteChar(): boolean {\n if (this.hasSelection()) {\n this.deleteSelectedText()\n return true\n }\n\n this._ctx.clearSelection()\n this.editBuffer.deleteChar()\n this.requestRender()\n return true\n }\n\n public deleteCharBackward(): boolean {\n if (this.hasSelection()) {\n this.deleteSelectedText()\n return true\n }\n\n this._ctx.clearSelection()\n this.editBuffer.deleteCharBackward()\n this.requestRender()\n return true\n }\n\n private deleteSelectedText(): void {\n this.editorView.deleteSelectedText()\n\n this._ctx.clearSelection()\n this.requestRender()\n }\n\n public newLine(): boolean {\n this._ctx.clearSelection()\n this.editBuffer.newLine()\n this.requestRender()\n return true\n }\n\n public deleteLine(): boolean {\n this._ctx.clearSelection()\n this.editBuffer.deleteLine()\n this.requestRender()\n return true\n }\n\n public moveCursorLeft(options?: { select?: boolean }): boolean {\n const select = options?.select ?? false\n this.handleShiftSelection(select, true)\n this.editBuffer.moveCursorLeft()\n this.handleShiftSelection(select, false)\n this.requestRender()\n return true\n }\n\n public moveCursorRight(options?: { select?: boolean }): boolean {\n const select = options?.select ?? false\n this.handleShiftSelection(select, true)\n this.editBuffer.moveCursorRight()\n this.handleShiftSelection(select, false)\n this.requestRender()\n return true\n }\n\n public moveCursorUp(options?: { select?: boolean }): boolean {\n const select = options?.select ?? false\n this.handleShiftSelection(select, true)\n this.editorView.moveUpVisual()\n this.handleShiftSelection(select, false)\n this.requestRender()\n return true\n }\n\n public moveCursorDown(options?: { select?: boolean }): boolean {\n const select = options?.select ?? false\n this.handleShiftSelection(select, true)\n this.editorView.moveDownVisual()\n this.handleShiftSelection(select, false)\n this.requestRender()\n return true\n }\n\n public gotoLine(line: number): void {\n this.editBuffer.gotoLine(line)\n this.requestRender()\n }\n\n public gotoLineHome(options?: { select?: boolean }): boolean {\n const select = options?.select ?? false\n this.handleShiftSelection(select, true)\n const cursor = this.editorView.getCursor()\n this.editBuffer.setCursor(cursor.row, 0)\n this.handleShiftSelection(select, false)\n this.requestRender()\n return true\n }\n\n public gotoLineEnd(options?: { select?: boolean }): boolean {\n const select = options?.select ?? false\n this.handleShiftSelection(select, true)\n const eol = this.editBuffer.getEOL()\n this.editBuffer.setCursor(eol.row, eol.col)\n this.handleShiftSelection(select, false)\n this.requestRender()\n return true\n }\n\n public gotoBufferHome(): boolean {\n this.editBuffer.setCursor(0, 0)\n this.requestRender()\n return true\n }\n\n public gotoBufferEnd(): boolean {\n this.editBuffer.gotoLine(999999)\n this.requestRender()\n return true\n }\n\n public deleteToLineEnd(): boolean {\n const cursor = this.editorView.getCursor()\n const eol = this.editBuffer.getEOL()\n\n if (eol.col > cursor.col) {\n this.editBuffer.deleteRange(cursor.row, cursor.col, eol.row, eol.col)\n }\n\n this.requestRender()\n return true\n }\n\n public undo(): boolean {\n this._ctx.clearSelection()\n this.editBuffer.undo()\n this.requestRender()\n return true\n }\n\n public redo(): boolean {\n this._ctx.clearSelection()\n this.editBuffer.redo()\n this.requestRender()\n return true\n }\n\n public moveWordForward(options?: { select?: boolean }): boolean {\n const select = options?.select ?? false\n this.handleShiftSelection(select, true)\n const nextWord = this.editBuffer.getNextWordBoundary()\n this.editBuffer.setCursorByOffset(nextWord.offset)\n this.handleShiftSelection(select, false)\n this.requestRender()\n return true\n }\n\n public moveWordBackward(options?: { select?: boolean }): boolean {\n const select = options?.select ?? false\n this.handleShiftSelection(select, true)\n const prevWord = this.editBuffer.getPrevWordBoundary()\n this.editBuffer.setCursorByOffset(prevWord.offset)\n this.handleShiftSelection(select, false)\n this.requestRender()\n return true\n }\n\n public deleteWordForward(): boolean {\n if (this.hasSelection()) {\n this.deleteSelectedText()\n return true\n }\n\n const currentCursor = this.editBuffer.getCursorPosition()\n const nextWord = this.editBuffer.getNextWordBoundary()\n\n if (nextWord.offset > currentCursor.offset) {\n this.editBuffer.deleteRange(currentCursor.row, currentCursor.col, nextWord.row, nextWord.col)\n }\n\n this._ctx.clearSelection()\n this.requestRender()\n return true\n }\n\n public deleteWordBackward(): boolean {\n if (this.hasSelection()) {\n this.deleteSelectedText()\n return true\n }\n\n const currentCursor = this.editBuffer.getCursorPosition()\n const prevWord = this.editBuffer.getPrevWordBoundary()\n\n if (prevWord.offset < currentCursor.offset) {\n this.editBuffer.deleteRange(prevWord.row, prevWord.col, currentCursor.row, currentCursor.col)\n }\n\n this._ctx.clearSelection()\n this.requestRender()\n return true\n }\n\n private handleShiftSelection(shiftPressed: boolean, isBeforeMovement: boolean): void {\n if (!this.selectable) return\n\n if (!shiftPressed) {\n this._ctx.clearSelection()\n return\n }\n\n const visualCursor = this.editorView.getVisualCursor()\n\n const viewport = this.editorView.getViewport()\n const cursorX = this.x + visualCursor.visualCol\n const cursorY = this.y + (visualCursor.visualRow - viewport.offsetY)\n\n if (isBeforeMovement) {\n if (!this._ctx.hasSelection) {\n this._ctx.startSelection(this, cursorX, cursorY)\n }\n } else {\n this._ctx.updateSelection(this, cursorX, cursorY)\n }\n }\n\n public focus(): void {\n super.focus()\n this.updateColors()\n }\n\n public blur(): void {\n super.blur()\n this.updateColors()\n }\n\n get placeholder(): StyledText | string | null {\n return this._placeholder\n }\n\n set placeholder(value: StyledText | string | null) {\n if (this._placeholder !== value) {\n this._placeholder = value\n this.applyPlaceholder(value)\n this.requestRender()\n }\n }\n\n override get backgroundColor(): RGBA {\n return this._unfocusedBackgroundColor\n }\n\n override set backgroundColor(value: RGBA | string | undefined) {\n const newColor = parseColor(value ?? TextareaRenderable.defaults.backgroundColor)\n if (this._unfocusedBackgroundColor !== newColor) {\n this._unfocusedBackgroundColor = newColor\n this.updateColors()\n }\n }\n\n override get textColor(): RGBA {\n return this._unfocusedTextColor\n }\n\n override set textColor(value: RGBA | string | undefined) {\n const newColor = parseColor(value ?? TextareaRenderable.defaults.textColor)\n if (this._unfocusedTextColor !== newColor) {\n this._unfocusedTextColor = newColor\n this.updateColors()\n }\n }\n\n set focusedBackgroundColor(value: ColorInput) {\n const newColor = parseColor(value ?? TextareaRenderable.defaults.focusedBackgroundColor)\n if (this._focusedBackgroundColor !== newColor) {\n this._focusedBackgroundColor = newColor\n this.updateColors()\n }\n }\n\n set focusedTextColor(value: ColorInput) {\n const newColor = parseColor(value ?? TextareaRenderable.defaults.focusedTextColor)\n if (this._focusedTextColor !== newColor) {\n this._focusedTextColor = newColor\n this.updateColors()\n }\n }\n\n set initialValue(value: string) {\n if (!this._initialValueSet) {\n this.setText(value)\n this._initialValueSet = true\n }\n }\n\n public submit(): boolean {\n if (this._submitListener) {\n this._submitListener({})\n }\n return true\n }\n\n public set onSubmit(handler: ((event: SubmitEvent) => void) | undefined) {\n this._submitListener = handler\n }\n\n public get onSubmit(): ((event: SubmitEvent) => void) | undefined {\n return this._submitListener\n }\n\n public set keyBindings(bindings: KeyBinding[]) {\n const mergedBindings = mergeKeyBindings(defaultTextareaKeybindings, bindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings)\n }\n\n public get extmarks(): ExtmarksController {\n return this.editorView.extmarks\n }\n}\n"
|
|
29
29
|
],
|
|
30
|
-
"mappings": "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",
|
|
31
|
-
"debugId": "
|
|
30
|
+
"mappings": "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",
|
|
31
|
+
"debugId": "027AE54A57A8DE7D64756E2164756E21",
|
|
32
32
|
"names": []
|
|
33
33
|
}
|