@opentui/core 0.1.59 → 0.1.61
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/Renderable.d.ts +14 -3
- package/buffer.d.ts +4 -0
- package/console.d.ts +53 -1
- package/edit-buffer.d.ts +20 -6
- package/editor-view.d.ts +2 -0
- package/{index-crebvcxc.js → index-rysm4rsr.js} +745 -166
- package/{index-crebvcxc.js.map → index-rysm4rsr.js.map} +11 -10
- package/index.js +110 -117
- package/index.js.map +12 -13
- package/lib/extmarks.d.ts +1 -0
- package/lib/keymapping.d.ts +11 -0
- package/package.json +8 -8
- package/renderables/EditBufferRenderable.d.ts +10 -3
- package/renderables/Input.d.ts +1 -1
- package/renderables/ScrollBar.d.ts +1 -1
- package/renderables/ScrollBox.d.ts +1 -1
- package/renderables/Select.d.ts +1 -1
- package/renderables/TabSelect.d.ts +1 -1
- package/renderables/Textarea.d.ts +8 -2
- package/renderer.d.ts +13 -1
- package/testing.js +15 -5
- package/testing.js.map +4 -4
- package/zig.d.ts +12 -4
package/index.js.map
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 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/LineNumberRenderable.ts", "../../../node_modules/diff/libesm/diff/base.js", "../../../node_modules/diff/libesm/diff/character.js", "../../../node_modules/diff/libesm/util/string.js", "../../../node_modules/diff/libesm/diff/word.js", "../../../node_modules/diff/libesm/diff/line.js", "../../../node_modules/diff/libesm/diff/sentence.js", "../../../node_modules/diff/libesm/diff/css.js", "../../../node_modules/diff/libesm/diff/json.js", "../../../node_modules/diff/libesm/diff/array.js", "../../../node_modules/diff/libesm/patch/parse.js", "../src/renderables/Text.ts", "../src/renderables/Diff.ts", "../src/
|
|
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/LineNumberRenderable.ts", "../../../node_modules/diff/libesm/diff/base.js", "../../../node_modules/diff/libesm/diff/character.js", "../../../node_modules/diff/libesm/util/string.js", "../../../node_modules/diff/libesm/diff/word.js", "../../../node_modules/diff/libesm/diff/line.js", "../../../node_modules/diff/libesm/diff/sentence.js", "../../../node_modules/diff/libesm/diff/css.js", "../../../node_modules/diff/libesm/diff/json.js", "../../../node_modules/diff/libesm/diff/array.js", "../../../node_modules/diff/libesm/patch/parse.js", "../src/renderables/Text.ts", "../src/renderables/Diff.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/EditBufferRenderable.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 setViewport(x: number, y: number, width: number, height: number): void {\n this.guard()\n this.lib.textBufferViewSetViewport(this.viewPtr, x, y, 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 measureForDimensions(width: number, height: number): { lineCount: number; maxWidth: number } | null {\n this.guard()\n return this.lib.textBufferViewMeasureForDimensions(this.viewPtr, width, height)\n }\n\n public getVirtualLineCount(): number {\n this.guard()\n return this.lib.textBufferViewGetVirtualLineCount(this.viewPtr)\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 getLineCount(): number {\n this.guard()\n return this.lib.textBufferGetLineCount(this.textBufferPtr)\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
|
-
"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 private _textBufferViewPtr?: Pointer\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 measureForDimensions(width: number, height: number): { lineCount: number; maxWidth: number } | null {\n this.guard()\n if (!this._textBufferViewPtr) {\n this._textBufferViewPtr = this.lib.editorViewGetTextBufferView(this.viewPtr)\n }\n return this.lib.textBufferViewMeasureForDimensions(this._textBufferViewPtr, width, height)\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",
|
|
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 /**\n * Set text and completely reset the buffer state (clears history, resets add_buffer).\n * Use this for initial text setting or when you want a clean slate.\n */\n public setText(text: string): void {\n this.guard()\n const textBytes = this.lib.encoder.encode(text)\n\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)\n }\n\n /**\n * Set text using owned memory and completely reset the buffer state (clears history, resets add_buffer).\n * The native code takes ownership of the memory.\n */\n public setTextOwned(text: string): void {\n this.guard()\n const textBytes = this.lib.encoder.encode(text)\n this.lib.editBufferSetText(this.bufferPtr, textBytes)\n }\n\n /**\n * Replace text while preserving undo history (creates an undo point).\n * Use this when you want the setText operation to be undoable.\n */\n public replaceText(text: string): void {\n this.guard()\n const textBytes = this.lib.encoder.encode(text)\n this._textBytes.push(textBytes)\n const memId = this.lib.textBufferRegisterMemBuffer(this.textBufferPtr, textBytes, false)\n this.lib.editBufferReplaceTextFromMem(this.bufferPtr, memId)\n }\n\n /**\n * Replace text using owned memory while preserving undo history (creates an undo point).\n * The native code takes ownership of the memory.\n */\n public replaceTextOwned(text: string): void {\n this.guard()\n const textBytes = this.lib.encoder.encode(text)\n this.lib.editBufferReplaceText(this.bufferPtr, textBytes)\n }\n\n public getLineCount(): number {\n this.guard()\n return this.lib.textBufferGetLineCount(this.textBufferPtr)\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
|
+
"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 private _textBufferViewPtr?: Pointer\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 getVisualSOL(): VisualCursor {\n this.guard()\n return this.lib.editorViewGetVisualSOL(this.viewPtr)\n }\n\n public getVisualEOL(): VisualCursor {\n this.guard()\n return this.lib.editorViewGetVisualEOL(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 measureForDimensions(width: number, height: number): { lineCount: number; maxWidth: number } | null {\n this.guard()\n if (!this._textBufferViewPtr) {\n this._textBufferViewPtr = this.lib.editorViewGetTextBufferView(this.viewPtr)\n }\n return this.lib.textBufferViewMeasureForDimensions(this._textBufferViewPtr, width, height)\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",
|
|
10
10
|
"import type { CliRenderer } from \"../renderer\"\n\nexport interface TimelineOptions {\n duration?: number\n loop?: boolean\n autoplay?: boolean\n onComplete?: () => void\n onPause?: () => void\n}\n\nexport interface AnimationOptions {\n duration: number\n ease?: EasingFunctions\n onUpdate?: (animation: JSAnimation) => void\n onComplete?: () => void\n onStart?: () => void\n onLoop?: () => void\n loop?: boolean | number\n loopDelay?: number\n alternate?: boolean\n once?: boolean\n [key: string]: any\n}\n\nexport interface JSAnimation {\n targets: any[]\n deltaTime: number\n progress: number\n currentTime: number\n}\n\ninterface TimelineItem {\n type: \"animation\" | \"callback\" | \"timeline\"\n startTime: number\n}\n\ninterface TimelineTimelineItem extends TimelineItem {\n type: \"timeline\"\n timeline: Timeline\n timelineStarted?: boolean\n}\n\ninterface TimelineCallbackItem extends TimelineItem {\n type: \"callback\"\n callback: () => void\n executed: boolean\n}\n\ninterface TimelineAnimationItem extends TimelineItem {\n type: \"animation\"\n\n target: any[]\n properties?: Record<string, number>\n initialValues?: Record<string, number>[]\n duration?: number\n ease?: keyof typeof easingFunctions\n loop?: boolean | number\n loopDelay?: number\n alternate?: boolean\n onUpdate?: (animation: JSAnimation) => void\n onComplete?: () => void\n onStart?: () => void\n onLoop?: () => void\n completed?: boolean\n started?: boolean\n currentLoop?: number\n once?: boolean\n}\n\nexport type EasingFunctions = keyof typeof easingFunctions\n\nconst easingFunctions = {\n linear: (t: number) => t,\n inQuad: (t: number) => t * t,\n outQuad: (t: number) => t * (2 - t),\n inOutQuad: (t: number) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t),\n inExpo: (t: number) => (t === 0 ? 0 : Math.pow(2, 10 * (t - 1))),\n outExpo: (t: number) => (t === 1 ? 1 : 1 - Math.pow(2, -10 * t)),\n inOutSine: (t: number) => -(Math.cos(Math.PI * t) - 1) / 2,\n outBounce: (t: number) => {\n const n1 = 7.5625\n const d1 = 2.75\n if (t < 1 / d1) {\n return n1 * t * t\n } else if (t < 2 / d1) {\n return n1 * (t -= 1.5 / d1) * t + 0.75\n } else if (t < 2.5 / d1) {\n return n1 * (t -= 2.25 / d1) * t + 0.9375\n } else {\n return n1 * (t -= 2.625 / d1) * t + 0.984375\n }\n },\n outElastic: (t: number) => {\n const c4 = (2 * Math.PI) / 3\n return t === 0 ? 0 : t === 1 ? 1 : Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * c4) + 1\n },\n inBounce: (t: number) => 1 - easingFunctions.outBounce(1 - t),\n inCirc: (t: number) => 1 - Math.sqrt(1 - t * t),\n outCirc: (t: number) => Math.sqrt(1 - Math.pow(t - 1, 2)),\n inOutCirc: (t: number) => {\n if ((t *= 2) < 1) return -0.5 * (Math.sqrt(1 - t * t) - 1)\n return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1)\n },\n inBack: (t: number, s: number = 1.70158) => t * t * ((s + 1) * t - s),\n outBack: (t: number, s: number = 1.70158) => --t * t * ((s + 1) * t + s) + 1,\n inOutBack: (t: number, s: number = 1.70158) => {\n s *= 1.525\n if ((t *= 2) < 1) return 0.5 * (t * t * ((s + 1) * t - s))\n return 0.5 * ((t -= 2) * t * ((s + 1) * t + s) + 2)\n },\n}\n\nfunction captureInitialValues(item: TimelineAnimationItem): void {\n if (!item.properties) return\n if (!item.initialValues || item.initialValues.length === 0) {\n const initialValues: Record<string, number>[] = []\n\n for (let i = 0; i < item.target.length; i++) {\n const target = item.target[i]\n const targetInitialValues: Record<string, number> = {}\n\n for (const key of Object.keys(item.properties)) {\n if (typeof target[key] === \"number\") {\n targetInitialValues[key] = target[key]\n }\n }\n\n initialValues.push(targetInitialValues)\n }\n\n item.initialValues = initialValues\n }\n}\n\nfunction applyAnimationAtProgress(\n item: TimelineAnimationItem,\n progress: number,\n reversed: boolean,\n timelineTime: number,\n deltaTime: number = 0,\n): void {\n if (!item.properties || !item.initialValues) return\n\n const easingFn = easingFunctions[item.ease || \"linear\"] || easingFunctions.linear\n const easedProgress = easingFn(Math.max(0, Math.min(1, progress)))\n const finalProgress = reversed ? 1 - easedProgress : easedProgress\n\n for (let i = 0; i < item.target.length; i++) {\n const target = item.target[i]\n const targetInitialValues = item.initialValues[i]\n\n if (!targetInitialValues) continue\n\n for (const [key, endValue] of Object.entries(item.properties)) {\n const startValue = targetInitialValues[key]\n const newValue = startValue + (endValue - startValue) * finalProgress\n target[key] = newValue\n }\n }\n\n if (item.onUpdate) {\n const animation: JSAnimation = {\n targets: item.target,\n progress: easedProgress,\n currentTime: timelineTime,\n deltaTime: deltaTime,\n }\n item.onUpdate(animation)\n }\n}\n\nfunction evaluateAnimation(item: TimelineAnimationItem, timelineTime: number, deltaTime: number = 0): void {\n if (timelineTime < item.startTime) {\n return\n }\n\n const animationTime = timelineTime - item.startTime\n const duration = item.duration || 0\n\n if (timelineTime >= item.startTime && !item.started) {\n captureInitialValues(item)\n if (item.onStart) {\n item.onStart()\n }\n item.started = true\n }\n\n if (duration === 0) {\n if (!item.completed) {\n applyAnimationAtProgress(item, 1, false, timelineTime, deltaTime)\n if (item.onComplete) {\n item.onComplete()\n }\n item.completed = true\n }\n return\n }\n\n // Unified looping logic - single execution is just maxLoops = 1\n const maxLoops = !item.loop || item.loop === 1 ? 1 : typeof item.loop === \"number\" ? item.loop : Infinity\n const loopDelay = item.loopDelay || 0\n const cycleTime = duration + loopDelay\n let currentCycle = Math.floor(animationTime / cycleTime)\n let timeInCycle = animationTime % cycleTime\n\n // Trigger onLoop if a loop cycle (not the final one) completes\n if (item.onLoop && item.currentLoop !== undefined && currentCycle > item.currentLoop && currentCycle < maxLoops) {\n item.onLoop()\n }\n item.currentLoop = currentCycle\n\n // Check if the animation part of the *final loop* has just completed\n if (item.onComplete && !item.completed && currentCycle === maxLoops - 1 && timeInCycle >= duration) {\n const finalLoopReversed = (item.alternate || false) && currentCycle % 2 === 1\n applyAnimationAtProgress(item, 1, finalLoopReversed, timelineTime, deltaTime)\n\n item.onComplete()\n item.completed = true\n return\n }\n\n if (currentCycle >= maxLoops) {\n if (!item.completed) {\n const finalReversed = (item.alternate || false) && (maxLoops - 1) % 2 === 1\n applyAnimationAtProgress(item, 1, finalReversed, timelineTime, deltaTime)\n\n if (item.onComplete) {\n item.onComplete()\n }\n item.completed = true\n }\n return\n }\n\n if (timeInCycle === 0 && animationTime > 0 && currentCycle < maxLoops) {\n currentCycle = currentCycle - 1\n timeInCycle = cycleTime\n }\n\n if (timeInCycle >= duration) {\n const isReversed = (item.alternate || false) && currentCycle % 2 === 1\n applyAnimationAtProgress(item, 1, isReversed, timelineTime, deltaTime)\n return\n }\n\n const progress = timeInCycle / duration\n const isReversed = (item.alternate || false) && currentCycle % 2 === 1\n applyAnimationAtProgress(item, progress, isReversed, timelineTime, deltaTime)\n}\n\nfunction evaluateCallback(item: TimelineCallbackItem, timelineTime: number): void {\n if (!item.executed && timelineTime >= item.startTime && item.callback) {\n item.callback()\n item.executed = true\n }\n}\n\nfunction evaluateTimelineSync(item: TimelineTimelineItem, timelineTime: number, deltaTime: number = 0): void {\n if (!item.timeline) return\n if (timelineTime < item.startTime) {\n return\n }\n\n if (!item.timelineStarted) {\n item.timelineStarted = true\n item.timeline.play()\n\n const overshoot = timelineTime - item.startTime\n item.timeline.update(overshoot)\n return\n }\n\n item.timeline.update(deltaTime)\n}\n\nfunction evaluateItem(item: TimelineItem, timelineTime: number, deltaTime: number = 0): void {\n if (item.type === \"animation\") {\n evaluateAnimation(item as TimelineAnimationItem, timelineTime, deltaTime)\n } else if (item.type === \"callback\") {\n evaluateCallback(item as TimelineCallbackItem, timelineTime)\n }\n}\n\nexport class Timeline {\n public items: (TimelineAnimationItem | TimelineCallbackItem)[] = []\n public subTimelines: TimelineTimelineItem[] = []\n public currentTime: number = 0\n public isPlaying: boolean = false\n public isComplete: boolean = false\n public duration: number\n public loop: boolean\n public synced: boolean = false\n private autoplay: boolean\n private onComplete?: () => void\n private onPause?: () => void\n private stateChangeListeners: ((timeline: Timeline) => void)[] = []\n\n constructor(options: TimelineOptions = {}) {\n this.duration = options.duration || 1000\n this.loop = options.loop === true\n this.autoplay = options.autoplay !== false\n this.onComplete = options.onComplete\n this.onPause = options.onPause\n }\n\n public addStateChangeListener(listener: (timeline: Timeline) => void): void {\n this.stateChangeListeners.push(listener)\n }\n\n public removeStateChangeListener(listener: (timeline: Timeline) => void): void {\n this.stateChangeListeners = this.stateChangeListeners.filter((l) => l !== listener)\n }\n\n private notifyStateChange(): void {\n for (const listener of this.stateChangeListeners) {\n listener(this)\n }\n }\n\n add(target: any, properties: AnimationOptions, startTime: number | string = 0): this {\n const resolvedStartTime = typeof startTime === \"string\" ? 0 : startTime\n\n const animationProperties: Record<string, number> = {}\n\n // Extract animation properties (don't capture initial values here)\n for (const key in properties) {\n if (\n ![\"duration\", \"ease\", \"onUpdate\", \"onComplete\", \"onStart\", \"onLoop\", \"loop\", \"loopDelay\", \"alternate\"].includes(\n key,\n )\n ) {\n if (typeof properties[key] === \"number\") {\n animationProperties[key] = properties[key]\n }\n }\n }\n\n this.items.push({\n type: \"animation\",\n startTime: resolvedStartTime,\n target: Array.isArray(target) ? target : [target],\n properties: animationProperties,\n initialValues: [], // Will be captured when animation starts\n duration: properties.duration !== undefined ? properties.duration : 1000,\n ease: properties.ease || \"linear\",\n loop: properties.loop,\n loopDelay: properties.loopDelay || 0,\n alternate: properties.alternate || false,\n onUpdate: properties.onUpdate,\n onComplete: properties.onComplete,\n onStart: properties.onStart,\n onLoop: properties.onLoop,\n completed: false,\n started: false,\n currentLoop: 0,\n once: properties.once ?? false,\n })\n\n return this\n }\n\n once(target: any, properties: AnimationOptions): this {\n this.add(\n target,\n {\n ...properties,\n once: true,\n },\n this.currentTime,\n )\n\n return this\n }\n\n call(callback: () => void, startTime: number | string = 0): this {\n const resolvedStartTime = typeof startTime === \"string\" ? 0 : startTime\n\n this.items.push({\n type: \"callback\",\n startTime: resolvedStartTime,\n callback,\n executed: false,\n })\n\n return this\n }\n\n sync(timeline: Timeline, startTime: number = 0): this {\n if (timeline.synced) {\n throw new Error(\"Timeline already synced\")\n }\n this.subTimelines.push({\n type: \"timeline\",\n startTime,\n timeline,\n })\n timeline.synced = true\n\n return this\n }\n\n play(): this {\n if (this.isComplete) {\n return this.restart()\n }\n this.subTimelines.forEach((subTimeline) => {\n if (subTimeline.timelineStarted) {\n subTimeline.timeline.play()\n }\n })\n this.isPlaying = true\n this.notifyStateChange()\n return this\n }\n\n pause(): this {\n this.subTimelines.forEach((subTimeline) => {\n subTimeline.timeline.pause()\n })\n this.isPlaying = false\n if (this.onPause) {\n this.onPause()\n }\n this.notifyStateChange()\n return this\n }\n\n resetItems() {\n this.items.forEach((item) => {\n if (item.type === \"callback\") {\n item.executed = false\n } else if (item.type === \"animation\") {\n item.completed = false\n item.started = false\n item.currentLoop = 0\n }\n })\n this.subTimelines.forEach((subTimeline) => {\n subTimeline.timelineStarted = false\n if (subTimeline.timeline) {\n subTimeline.timeline.restart()\n subTimeline.timeline.pause()\n }\n })\n }\n\n restart(): this {\n this.isComplete = false\n this.currentTime = 0\n this.isPlaying = true\n this.resetItems()\n this.notifyStateChange()\n\n return this\n }\n\n update(deltaTime: number): void {\n for (const subTimeline of this.subTimelines) {\n evaluateTimelineSync(subTimeline, this.currentTime + deltaTime, deltaTime)\n }\n\n if (!this.isPlaying) return\n\n this.currentTime += deltaTime\n\n for (const item of this.items) {\n evaluateItem(item, this.currentTime, deltaTime)\n }\n\n // Remove completed \"once\" items (iterate backwards to avoid index shifting)\n for (let i = this.items.length - 1; i >= 0; i--) {\n const item = this.items[i]\n if (item.type === \"animation\" && item.once && item.completed) {\n this.items.splice(i, 1)\n }\n }\n\n if (this.loop && this.currentTime >= this.duration) {\n const overshoot = this.currentTime % this.duration\n\n this.resetItems()\n this.currentTime = 0\n\n if (overshoot > 0) {\n this.update(overshoot)\n }\n } else if (!this.loop && this.currentTime >= this.duration) {\n this.currentTime = this.duration\n this.isPlaying = false\n this.isComplete = true\n\n if (this.onComplete) {\n this.onComplete()\n }\n this.notifyStateChange()\n }\n }\n}\n\nclass TimelineEngine {\n private timelines: Set<Timeline> = new Set()\n private renderer: CliRenderer | null = null\n private frameCallback: ((deltaTime: number) => Promise<void>) | null = null\n private isLive: boolean = false\n public defaults = {\n frameRate: 60,\n }\n\n attach(renderer: CliRenderer): void {\n if (this.renderer) {\n this.detach()\n }\n\n this.renderer = renderer\n this.frameCallback = async (deltaTime: number) => {\n this.update(deltaTime)\n }\n\n renderer.setFrameCallback(this.frameCallback)\n }\n\n detach(): void {\n if (this.renderer && this.frameCallback) {\n this.renderer.removeFrameCallback(this.frameCallback)\n if (this.isLive) {\n this.renderer.dropLive()\n this.isLive = false\n }\n }\n this.renderer = null\n this.frameCallback = null\n }\n\n private updateLiveState(): void {\n if (!this.renderer) return\n\n const hasRunningTimelines = Array.from(this.timelines).some(\n (timeline) => !timeline.synced && timeline.isPlaying && !timeline.isComplete,\n )\n\n if (hasRunningTimelines && !this.isLive) {\n this.renderer.requestLive()\n this.isLive = true\n } else if (!hasRunningTimelines && this.isLive) {\n this.renderer.dropLive()\n this.isLive = false\n }\n }\n\n private onTimelineStateChange = (timeline: Timeline): void => {\n this.updateLiveState()\n }\n\n register(timeline: Timeline): void {\n if (!this.timelines.has(timeline)) {\n this.timelines.add(timeline)\n timeline.addStateChangeListener(this.onTimelineStateChange)\n this.updateLiveState()\n }\n }\n\n unregister(timeline: Timeline): void {\n if (this.timelines.has(timeline)) {\n this.timelines.delete(timeline)\n timeline.removeStateChangeListener(this.onTimelineStateChange)\n this.updateLiveState()\n }\n }\n\n clear(): void {\n for (const timeline of this.timelines) {\n timeline.removeStateChangeListener(this.onTimelineStateChange)\n }\n this.timelines.clear()\n this.updateLiveState()\n }\n\n update(deltaTime: number): void {\n for (const timeline of this.timelines) {\n if (!timeline.synced) {\n timeline.update(deltaTime)\n }\n }\n }\n}\n\nexport const engine = new TimelineEngine()\n\nexport function createTimeline(options: TimelineOptions = {}): Timeline {\n const timeline = new Timeline(options)\n if (options.autoplay !== false) {\n timeline.play()\n }\n\n engine.register(timeline)\n\n return timeline\n}\n",
|
|
@@ -29,17 +29,16 @@
|
|
|
29
29
|
"/**\n * Parses a patch into structured data, in the same structure returned by `structuredPatch`.\n *\n * @return a JSON object representation of the a patch, suitable for use with the `applyPatch` method.\n */\nexport function parsePatch(uniDiff) {\n const diffstr = uniDiff.split(/\\n/), list = [];\n let i = 0;\n function parseIndex() {\n const index = {};\n list.push(index);\n // Parse diff metadata\n while (i < diffstr.length) {\n const line = diffstr[i];\n // File header found, end parsing diff metadata\n if ((/^(---|\\+\\+\\+|@@)\\s/).test(line)) {\n break;\n }\n // Diff index\n const header = (/^(?:Index:|diff(?: -r \\w+)+)\\s+(.+?)\\s*$/).exec(line);\n if (header) {\n index.index = header[1];\n }\n i++;\n }\n // Parse file headers if they are defined. Unified diff requires them, but\n // there's no technical issues to have an isolated hunk without file header\n parseFileHeader(index);\n parseFileHeader(index);\n // Parse hunks\n index.hunks = [];\n while (i < diffstr.length) {\n const line = diffstr[i];\n if ((/^(Index:\\s|diff\\s|---\\s|\\+\\+\\+\\s|===================================================================)/).test(line)) {\n break;\n }\n else if ((/^@@/).test(line)) {\n index.hunks.push(parseHunk());\n }\n else if (line) {\n throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(line));\n }\n else {\n i++;\n }\n }\n }\n // Parses the --- and +++ headers, if none are found, no lines\n // are consumed.\n function parseFileHeader(index) {\n const fileHeader = (/^(---|\\+\\+\\+)\\s+(.*)\\r?$/).exec(diffstr[i]);\n if (fileHeader) {\n const data = fileHeader[2].split('\\t', 2), header = (data[1] || '').trim();\n let fileName = data[0].replace(/\\\\\\\\/g, '\\\\');\n if ((/^\".*\"$/).test(fileName)) {\n fileName = fileName.substr(1, fileName.length - 2);\n }\n if (fileHeader[1] === '---') {\n index.oldFileName = fileName;\n index.oldHeader = header;\n }\n else {\n index.newFileName = fileName;\n index.newHeader = header;\n }\n i++;\n }\n }\n // Parses a hunk\n // This assumes that we are at the start of a hunk.\n function parseHunk() {\n var _a;\n const chunkHeaderIndex = i, chunkHeaderLine = diffstr[i++], chunkHeader = chunkHeaderLine.split(/@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/);\n const hunk = {\n oldStart: +chunkHeader[1],\n oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2],\n newStart: +chunkHeader[3],\n newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4],\n lines: []\n };\n // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n if (hunk.oldLines === 0) {\n hunk.oldStart += 1;\n }\n if (hunk.newLines === 0) {\n hunk.newStart += 1;\n }\n let addCount = 0, removeCount = 0;\n for (; i < diffstr.length && (removeCount < hunk.oldLines || addCount < hunk.newLines || ((_a = diffstr[i]) === null || _a === void 0 ? void 0 : _a.startsWith('\\\\'))); i++) {\n const operation = (diffstr[i].length == 0 && i != (diffstr.length - 1)) ? ' ' : diffstr[i][0];\n if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\\\') {\n hunk.lines.push(diffstr[i]);\n if (operation === '+') {\n addCount++;\n }\n else if (operation === '-') {\n removeCount++;\n }\n else if (operation === ' ') {\n addCount++;\n removeCount++;\n }\n }\n else {\n throw new Error(`Hunk at line ${chunkHeaderIndex + 1} contained invalid line ${diffstr[i]}`);\n }\n }\n // Handle the empty block count case\n if (!addCount && hunk.newLines === 1) {\n hunk.newLines = 0;\n }\n if (!removeCount && hunk.oldLines === 1) {\n hunk.oldLines = 0;\n }\n // Perform sanity checking\n if (addCount !== hunk.newLines) {\n throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n if (removeCount !== hunk.oldLines) {\n throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n return hunk;\n }\n while (i < diffstr.length) {\n parseIndex();\n }\n return list;\n}\n",
|
|
30
30
|
"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",
|
|
31
31
|
"import { Renderable, type RenderableOptions } from \"../Renderable\"\nimport type { RenderContext } from \"../types\"\nimport { CodeRenderable, type CodeOptions } from \"./Code\"\nimport { LineNumberRenderable, type LineSign, type LineColorConfig } from \"./LineNumberRenderable\"\nimport { RGBA, parseColor } from \"../lib/RGBA\"\nimport { SyntaxStyle } from \"../syntax-style\"\nimport { parsePatch, type StructuredPatch } from \"diff\"\nimport { TextRenderable } from \"./Text\"\nimport type { TreeSitterClient } from \"../lib/tree-sitter\"\n\ninterface LogicalLine {\n content: string\n lineNum?: number\n hideLineNumber?: boolean\n color?: string | RGBA\n sign?: LineSign\n type: \"context\" | \"add\" | \"remove\" | \"empty\"\n}\n\nexport interface DiffRenderableOptions extends RenderableOptions<DiffRenderable> {\n diff?: string\n view?: \"unified\" | \"split\"\n\n // CodeRenderable options\n fg?: string | RGBA\n filetype?: string\n syntaxStyle?: SyntaxStyle\n wrapMode?: \"word\" | \"char\" | \"none\"\n conceal?: boolean\n selectionBg?: string | RGBA\n selectionFg?: string | RGBA\n treeSitterClient?: TreeSitterClient\n\n // LineNumberRenderable options\n showLineNumbers?: boolean\n lineNumberFg?: string | RGBA\n lineNumberBg?: string | RGBA\n\n // Diff styling\n addedBg?: string | RGBA\n removedBg?: string | RGBA\n contextBg?: string | RGBA\n addedContentBg?: string | RGBA\n removedContentBg?: string | RGBA\n contextContentBg?: string | RGBA\n addedSignColor?: string | RGBA\n removedSignColor?: string | RGBA\n addedLineNumberBg?: string | RGBA\n removedLineNumberBg?: string | RGBA\n}\n\nexport class DiffRenderable extends Renderable {\n private _diff: string\n private _view: \"unified\" | \"split\"\n private _parsedDiff: StructuredPatch | null = null\n private _parseError: Error | null = null\n\n // CodeRenderable options\n private _fg?: RGBA\n private _filetype?: string\n private _syntaxStyle?: SyntaxStyle\n private _wrapMode?: \"word\" | \"char\" | \"none\"\n private _conceal: boolean\n private _selectionBg?: RGBA\n private _selectionFg?: RGBA\n private _treeSitterClient?: TreeSitterClient\n\n // LineNumberRenderable options\n private _showLineNumbers: boolean\n private _lineNumberFg: RGBA\n private _lineNumberBg: RGBA\n\n // Diff styling\n private _addedBg: RGBA\n private _removedBg: RGBA\n private _contextBg: RGBA\n private _addedContentBg: RGBA | null\n private _removedContentBg: RGBA | null\n private _contextContentBg: RGBA | null\n private _addedSignColor: RGBA\n private _removedSignColor: RGBA\n private _addedLineNumberBg: RGBA\n private _removedLineNumberBg: RGBA\n\n // Child renderables - reused for both unified and split views\n // Unified view uses only leftSide, split view uses both leftSide and rightSide\n private leftSide: LineNumberRenderable | null = null\n private rightSide: LineNumberRenderable | null = null\n\n // Track whether renderables are currently in the render tree\n private leftSideAdded: boolean = false\n private rightSideAdded: boolean = false\n\n // Reusable CodeRenderables (not recreated on rebuild)\n // These are created once and updated with new content to avoid expensive recreation\n private leftCodeRenderable: CodeRenderable | null = null\n private rightCodeRenderable: CodeRenderable | null = null\n\n // Lazy rebuild strategy: For split view, use microtask to coalesce rebuilds.\n // This avoids expensive re-parsing and re-rendering on rapid changes (e.g., width changes).\n // CodeRenderables are reused and only their content is updated.\n private pendingRebuild: boolean = false\n private _lastWidth: number = 0\n\n // Error renderables for displaying parse errors\n private errorTextRenderable: TextRenderable | null = null\n private errorCodeRenderable: CodeRenderable | null = null\n\n constructor(ctx: RenderContext, options: DiffRenderableOptions) {\n super(ctx, {\n ...options,\n flexDirection: options.view === \"split\" ? \"row\" : \"column\",\n })\n\n this._diff = options.diff ?? \"\"\n this._view = options.view ?? \"unified\"\n\n // CodeRenderable options\n this._fg = options.fg ? parseColor(options.fg) : undefined\n this._filetype = options.filetype\n this._syntaxStyle = options.syntaxStyle\n this._wrapMode = options.wrapMode\n this._conceal = options.conceal ?? false\n this._selectionBg = options.selectionBg ? parseColor(options.selectionBg) : undefined\n this._selectionFg = options.selectionFg ? parseColor(options.selectionFg) : undefined\n this._treeSitterClient = options.treeSitterClient\n\n // LineNumberRenderable options\n this._showLineNumbers = options.showLineNumbers ?? true\n this._lineNumberFg = parseColor(options.lineNumberFg ?? \"#888888\")\n this._lineNumberBg = parseColor(options.lineNumberBg ?? \"transparent\")\n\n // Diff styling\n this._addedBg = parseColor(options.addedBg ?? \"#1a4d1a\")\n this._removedBg = parseColor(options.removedBg ?? \"#4d1a1a\")\n this._contextBg = parseColor(options.contextBg ?? \"transparent\")\n this._addedContentBg = options.addedContentBg ? parseColor(options.addedContentBg) : null\n this._removedContentBg = options.removedContentBg ? parseColor(options.removedContentBg) : null\n this._contextContentBg = options.contextContentBg ? parseColor(options.contextContentBg) : null\n this._addedSignColor = parseColor(options.addedSignColor ?? \"#22c55e\")\n this._removedSignColor = parseColor(options.removedSignColor ?? \"#ef4444\")\n this._addedLineNumberBg = parseColor(options.addedLineNumberBg ?? \"transparent\")\n this._removedLineNumberBg = parseColor(options.removedLineNumberBg ?? \"transparent\")\n\n // Only parse and build if diff is provided\n if (this._diff) {\n this.parseDiff()\n this.buildView()\n }\n }\n\n private parseDiff(): void {\n if (!this._diff) {\n this._parsedDiff = null\n this._parseError = null\n return\n }\n\n try {\n // Use jsdiff's parsePatch to parse the diff string\n const patches = parsePatch(this._diff)\n\n if (patches.length === 0) {\n this._parsedDiff = null\n this._parseError = null\n return\n }\n\n // Use the first patch (most diffs have only one file)\n this._parsedDiff = patches[0]\n this._parseError = null\n } catch (error) {\n // Catch parsing errors from invalid diff format\n this._parsedDiff = null\n this._parseError = error instanceof Error ? error : new Error(String(error))\n }\n }\n\n private buildView(): void {\n // Never destroy anything - just update existing renderables or create new ones\n // Unified view uses leftSide only, split view uses both leftSide and rightSide\n\n // If there's a parse error, show error message instead\n if (this._parseError) {\n this.buildErrorView()\n return\n }\n\n if (!this._parsedDiff || this._parsedDiff.hunks.length === 0) {\n return\n }\n\n if (this._view === \"unified\") {\n this.buildUnifiedView()\n } else {\n this.buildSplitView()\n }\n }\n\n protected override onResize(width: number, height: number): void {\n super.onResize(width, height)\n\n // Only rebuild on width changes to avoid endless loops (height is a consequence of wrapping, not an input)\n if (this._view === \"split\" && this._wrapMode !== \"none\" && this._wrapMode !== undefined) {\n if (this._lastWidth !== width) {\n this._lastWidth = width\n this.requestRebuild()\n }\n }\n }\n\n private requestRebuild(): void {\n if (this.pendingRebuild) {\n return\n }\n\n this.pendingRebuild = true\n queueMicrotask(() => {\n if (!this.isDestroyed && this.pendingRebuild) {\n this.pendingRebuild = false\n this.buildView()\n this.requestRender()\n }\n })\n }\n\n private rebuildView(): void {\n // Use microtask rebuild for split view, immediate for unified\n if (this._view === \"split\") {\n this.requestRebuild()\n } else {\n this.buildView()\n }\n }\n\n public override destroyRecursively(): void {\n this.pendingRebuild = false\n this.leftSideAdded = false\n this.rightSideAdded = false\n super.destroyRecursively()\n }\n\n /**\n * Create or update a CodeRenderable with the given content and options.\n * Reuses existing instances to avoid expensive recreation.\n */\n private buildErrorView(): void {\n // Ensure column layout for error view\n this.flexDirection = \"column\"\n\n // Remove any existing diff view renderables\n if (this.leftSide && this.leftSideAdded) {\n super.remove(this.leftSide.id)\n this.leftSideAdded = false\n }\n if (this.rightSide && this.rightSideAdded) {\n super.remove(this.rightSide.id)\n this.rightSideAdded = false\n }\n\n // Create or update error text renderable\n const errorMessage = `Error parsing diff: ${this._parseError?.message || \"Unknown error\"}\\n`\n if (!this.errorTextRenderable) {\n this.errorTextRenderable = new TextRenderable(this.ctx, {\n id: this.id ? `${this.id}-error-text` : undefined,\n content: errorMessage,\n fg: \"#ef4444\",\n width: \"100%\",\n flexShrink: 0,\n })\n super.add(this.errorTextRenderable)\n } else {\n this.errorTextRenderable.content = errorMessage\n // Ensure it's in the render tree\n const errorTextIndex = this.getChildren().indexOf(this.errorTextRenderable)\n if (errorTextIndex === -1) {\n super.add(this.errorTextRenderable)\n }\n }\n\n // Create or update error code renderable to show the raw diff\n if (!this.errorCodeRenderable) {\n this.errorCodeRenderable = new CodeRenderable(this.ctx, {\n id: this.id ? `${this.id}-error-code` : undefined,\n content: this._diff,\n filetype: \"diff\",\n syntaxStyle: this._syntaxStyle ?? SyntaxStyle.create(),\n wrapMode: this._wrapMode,\n conceal: this._conceal,\n width: \"100%\",\n flexGrow: 1,\n flexShrink: 1,\n ...(this._treeSitterClient !== undefined && { treeSitterClient: this._treeSitterClient }),\n })\n super.add(this.errorCodeRenderable)\n } else {\n this.errorCodeRenderable.content = this._diff\n this.errorCodeRenderable.wrapMode = this._wrapMode ?? \"none\"\n if (this._syntaxStyle) {\n this.errorCodeRenderable.syntaxStyle = this._syntaxStyle\n }\n // Ensure it's in the render tree\n const errorCodeIndex = this.getChildren().indexOf(this.errorCodeRenderable)\n if (errorCodeIndex === -1) {\n super.add(this.errorCodeRenderable)\n }\n }\n }\n\n private createOrUpdateCodeRenderable(\n side: \"left\" | \"right\",\n content: string,\n wrapMode: \"word\" | \"char\" | \"none\" | undefined,\n drawUnstyledText?: boolean,\n ): CodeRenderable {\n const existingRenderable = side === \"left\" ? this.leftCodeRenderable : this.rightCodeRenderable\n\n if (!existingRenderable) {\n // Create new CodeRenderable\n const codeOptions: CodeOptions = {\n id: this.id ? `${this.id}-${side}-code` : undefined,\n content,\n filetype: this._filetype,\n wrapMode,\n conceal: this._conceal,\n syntaxStyle: this._syntaxStyle ?? SyntaxStyle.create(),\n width: \"100%\",\n height: \"100%\",\n ...(this._fg !== undefined && { fg: this._fg }),\n ...(drawUnstyledText !== undefined && { drawUnstyledText }),\n ...(this._selectionBg !== undefined && { selectionBg: this._selectionBg }),\n ...(this._selectionFg !== undefined && { selectionFg: this._selectionFg }),\n ...(this._treeSitterClient !== undefined && { treeSitterClient: this._treeSitterClient }),\n }\n const newRenderable = new CodeRenderable(this.ctx, codeOptions)\n\n if (side === \"left\") {\n this.leftCodeRenderable = newRenderable\n } else {\n this.rightCodeRenderable = newRenderable\n }\n\n return newRenderable\n } else {\n // Update existing CodeRenderable\n existingRenderable.content = content\n existingRenderable.wrapMode = wrapMode ?? \"none\"\n existingRenderable.conceal = this._conceal\n if (drawUnstyledText !== undefined) {\n existingRenderable.drawUnstyledText = drawUnstyledText\n }\n if (this._filetype !== undefined) {\n existingRenderable.filetype = this._filetype\n }\n if (this._syntaxStyle !== undefined) {\n existingRenderable.syntaxStyle = this._syntaxStyle\n }\n if (this._selectionBg !== undefined) {\n existingRenderable.selectionBg = this._selectionBg\n }\n if (this._selectionFg !== undefined) {\n existingRenderable.selectionFg = this._selectionFg\n }\n if (this._fg !== undefined) {\n existingRenderable.fg = this._fg\n }\n\n return existingRenderable\n }\n }\n\n /**\n * Create or update a LineNumberRenderable side panel.\n * Handles both creation and updates, ensuring the side is properly added to the render tree.\n */\n private createOrUpdateSide(\n side: \"left\" | \"right\",\n target: CodeRenderable,\n lineColors: Map<number, string | RGBA | LineColorConfig>,\n lineSigns: Map<number, LineSign>,\n lineNumbers: Map<number, number>,\n hideLineNumbers: Set<number>,\n width: \"50%\" | \"100%\",\n ): void {\n const sideRef = side === \"left\" ? this.leftSide : this.rightSide\n const addedFlag = side === \"left\" ? this.leftSideAdded : this.rightSideAdded\n\n if (!sideRef) {\n // Create new LineNumberRenderable\n const newSide = new LineNumberRenderable(this.ctx, {\n id: this.id ? `${this.id}-${side}` : undefined,\n target,\n fg: this._lineNumberFg,\n bg: this._lineNumberBg,\n lineColors,\n lineSigns,\n lineNumbers,\n lineNumberOffset: 0,\n hideLineNumbers,\n width,\n height: \"100%\",\n })\n newSide.showLineNumbers = this._showLineNumbers\n super.add(newSide)\n\n if (side === \"left\") {\n this.leftSide = newSide\n this.leftSideAdded = true\n } else {\n this.rightSide = newSide\n this.rightSideAdded = true\n }\n } else {\n // Update existing LineNumberRenderable\n sideRef.width = width\n sideRef.setLineColors(lineColors)\n sideRef.setLineSigns(lineSigns)\n sideRef.setLineNumbers(lineNumbers)\n sideRef.setHideLineNumbers(hideLineNumbers)\n\n // Ensure side is added if not already\n if (!addedFlag) {\n super.add(sideRef)\n if (side === \"left\") {\n this.leftSideAdded = true\n } else {\n this.rightSideAdded = true\n }\n }\n }\n }\n\n private buildUnifiedView(): void {\n if (!this._parsedDiff) return\n\n // Ensure column layout for unified view\n this.flexDirection = \"column\"\n\n // Remove error renderables if they exist\n if (this.errorTextRenderable) {\n const errorTextIndex = this.getChildren().indexOf(this.errorTextRenderable)\n if (errorTextIndex !== -1) {\n super.remove(this.errorTextRenderable.id)\n }\n }\n if (this.errorCodeRenderable) {\n const errorCodeIndex = this.getChildren().indexOf(this.errorCodeRenderable)\n if (errorCodeIndex !== -1) {\n super.remove(this.errorCodeRenderable.id)\n }\n }\n\n const contentLines: string[] = []\n const lineColors = new Map<number, string | RGBA | LineColorConfig>()\n const lineSigns = new Map<number, LineSign>()\n const lineNumbers = new Map<number, number>()\n\n let lineIndex = 0\n\n // Process each hunk\n for (const hunk of this._parsedDiff.hunks) {\n let oldLineNum = hunk.oldStart\n let newLineNum = hunk.newStart\n\n for (const line of hunk.lines) {\n const firstChar = line[0]\n const content = line.slice(1)\n\n if (firstChar === \"+\") {\n // Added line\n contentLines.push(content)\n const config: LineColorConfig = {\n gutter: this._addedLineNumberBg,\n }\n // If explicit content background is set, use it; otherwise use gutter color (will be darkened)\n if (this._addedContentBg) {\n config.content = this._addedContentBg\n } else {\n config.content = this._addedBg\n }\n lineColors.set(lineIndex, config)\n lineSigns.set(lineIndex, {\n after: \" +\",\n afterColor: this._addedSignColor,\n })\n lineNumbers.set(lineIndex, newLineNum)\n newLineNum++\n lineIndex++\n } else if (firstChar === \"-\") {\n // Removed line\n contentLines.push(content)\n const config: LineColorConfig = {\n gutter: this._removedLineNumberBg,\n }\n // If explicit content background is set, use it; otherwise use gutter color (will be darkened)\n if (this._removedContentBg) {\n config.content = this._removedContentBg\n } else {\n config.content = this._removedBg\n }\n lineColors.set(lineIndex, config)\n lineSigns.set(lineIndex, {\n after: \" -\",\n afterColor: this._removedSignColor,\n })\n lineNumbers.set(lineIndex, oldLineNum)\n oldLineNum++\n lineIndex++\n } else if (firstChar === \" \") {\n // Context line\n contentLines.push(content)\n const config: LineColorConfig = {\n gutter: this._lineNumberBg,\n }\n // If explicit content background is set, use it; otherwise use contextBg\n if (this._contextContentBg) {\n config.content = this._contextContentBg\n } else {\n config.content = this._contextBg\n }\n lineColors.set(lineIndex, config)\n lineNumbers.set(lineIndex, newLineNum)\n oldLineNum++\n newLineNum++\n lineIndex++\n }\n // Skip \"\\" lines\n }\n }\n\n const content = contentLines.join(\"\\n\")\n\n // Create or update CodeRenderable for left side (used for unified view)\n const codeRenderable = this.createOrUpdateCodeRenderable(\"left\", content, this._wrapMode)\n\n // Create or update LineNumberRenderable (leftSide used for unified view)\n this.createOrUpdateSide(\"left\", codeRenderable, lineColors, lineSigns, lineNumbers, new Set<number>(), \"100%\")\n\n // Remove rightSide from render tree for unified view\n if (this.rightSide && this.rightSideAdded) {\n super.remove(this.rightSide.id)\n this.rightSideAdded = false\n }\n }\n\n private buildSplitView(): void {\n if (!this._parsedDiff) return\n\n // Ensure row layout for split view\n this.flexDirection = \"row\"\n\n // Remove error renderables if they exist\n if (this.errorTextRenderable) {\n const errorTextIndex = this.getChildren().indexOf(this.errorTextRenderable)\n if (errorTextIndex !== -1) {\n super.remove(this.errorTextRenderable.id)\n }\n }\n if (this.errorCodeRenderable) {\n const errorCodeIndex = this.getChildren().indexOf(this.errorCodeRenderable)\n if (errorCodeIndex !== -1) {\n super.remove(this.errorCodeRenderable.id)\n }\n }\n\n // Step 1: Build initial content without wrapping alignment\n const leftLogicalLines: LogicalLine[] = []\n const rightLogicalLines: LogicalLine[] = []\n\n // Process each hunk to build logical lines\n for (const hunk of this._parsedDiff.hunks) {\n let oldLineNum = hunk.oldStart\n let newLineNum = hunk.newStart\n\n let i = 0\n while (i < hunk.lines.length) {\n const line = hunk.lines[i]\n const firstChar = line[0]\n\n if (firstChar === \" \") {\n // Context line - add to both sides\n const content = line.slice(1)\n leftLogicalLines.push({\n content,\n lineNum: oldLineNum,\n color: this._contextBg,\n type: \"context\",\n })\n rightLogicalLines.push({\n content,\n lineNum: newLineNum,\n color: this._contextBg,\n type: \"context\",\n })\n oldLineNum++\n newLineNum++\n i++\n } else if (firstChar === \"\\\\\") {\n // Skip \"\\"\n i++\n } else {\n // Collect consecutive removes and adds as a block\n const removes: { content: string; lineNum: number }[] = []\n const adds: { content: string; lineNum: number }[] = []\n\n while (i < hunk.lines.length) {\n const currentLine = hunk.lines[i]\n const currentChar = currentLine[0]\n\n if (currentChar === \" \" || currentChar === \"\\\\\") {\n break\n }\n\n const content = currentLine.slice(1)\n\n if (currentChar === \"-\") {\n removes.push({ content, lineNum: oldLineNum })\n oldLineNum++\n } else if (currentChar === \"+\") {\n adds.push({ content, lineNum: newLineNum })\n newLineNum++\n }\n i++\n }\n\n // Align the block: pair up removes and adds, padding as needed\n const maxLength = Math.max(removes.length, adds.length)\n\n for (let j = 0; j < maxLength; j++) {\n if (j < removes.length) {\n leftLogicalLines.push({\n content: removes[j].content,\n lineNum: removes[j].lineNum,\n color: this._removedBg,\n sign: {\n after: \" -\",\n afterColor: this._removedSignColor,\n },\n type: \"remove\",\n })\n } else {\n leftLogicalLines.push({\n content: \"\",\n hideLineNumber: true,\n type: \"empty\",\n })\n }\n\n if (j < adds.length) {\n rightLogicalLines.push({\n content: adds[j].content,\n lineNum: adds[j].lineNum,\n color: this._addedBg,\n sign: {\n after: \" +\",\n afterColor: this._addedSignColor,\n },\n type: \"add\",\n })\n } else {\n rightLogicalLines.push({\n content: \"\",\n hideLineNumber: true,\n type: \"empty\",\n })\n }\n }\n }\n }\n }\n\n // Step 2: Determine if we can do wrap-aware alignment\n // We need valid widths for wrap calculation, which requires a layout pass\n // On first build (from constructor), widths are 0, so we skip wrap alignment\n // and schedule a rebuild after layout\n const canDoWrapAlignment = this.width > 0 && (this._wrapMode === \"word\" || this._wrapMode === \"char\")\n\n const preLeftContent = leftLogicalLines.map((l) => l.content).join(\"\\n\")\n const preRightContent = rightLogicalLines.map((l) => l.content).join(\"\\n\")\n\n // Don't draw unstyled text when using wrap+conceal to avoid race conditions where sides wrap differently\n const needsConsistentConcealing =\n (this._wrapMode === \"word\" || this._wrapMode === \"char\") && this._conceal && this._filetype\n const drawUnstyledText = !needsConsistentConcealing\n const leftCodeRenderable = this.createOrUpdateCodeRenderable(\n \"left\",\n preLeftContent,\n this._wrapMode,\n drawUnstyledText,\n )\n const rightCodeRenderable = this.createOrUpdateCodeRenderable(\n \"right\",\n preRightContent,\n this._wrapMode,\n drawUnstyledText,\n )\n\n // Step 3: Align lines using lineInfo (if we can)\n let finalLeftLines: LogicalLine[]\n let finalRightLines: LogicalLine[]\n\n if (canDoWrapAlignment) {\n const leftLineInfo = leftCodeRenderable.lineInfo\n const rightLineInfo = rightCodeRenderable.lineInfo\n\n const leftSources = leftLineInfo.lineSources || []\n const rightSources = rightLineInfo.lineSources || []\n\n // Build visual count per logical line\n const leftVisualCounts = new Map<number, number>()\n const rightVisualCounts = new Map<number, number>()\n\n for (const logicalLine of leftSources) {\n leftVisualCounts.set(logicalLine, (leftVisualCounts.get(logicalLine) || 0) + 1)\n }\n for (const logicalLine of rightSources) {\n rightVisualCounts.set(logicalLine, (rightVisualCounts.get(logicalLine) || 0) + 1)\n }\n\n // Align by inserting padding to ensure both sides stay synchronized\n // Each logical line should start at the same visual position on both sides\n finalLeftLines = []\n finalRightLines = []\n\n let leftVisualPos = 0\n let rightVisualPos = 0\n\n for (let i = 0; i < leftLogicalLines.length; i++) {\n const leftLine = leftLogicalLines[i]\n const rightLine = rightLogicalLines[i]\n\n const leftVisualCount = leftVisualCounts.get(i) || 1\n const rightVisualCount = rightVisualCounts.get(i) || 1\n\n // Both logical lines should start at the same visual position\n // If they don't, add padding to whichever side is behind\n if (leftVisualPos < rightVisualPos) {\n const pad = rightVisualPos - leftVisualPos\n for (let p = 0; p < pad; p++) {\n finalLeftLines.push({ content: \"\", hideLineNumber: true, type: \"empty\" })\n }\n leftVisualPos += pad\n } else if (rightVisualPos < leftVisualPos) {\n const pad = leftVisualPos - rightVisualPos\n for (let p = 0; p < pad; p++) {\n finalRightLines.push({ content: \"\", hideLineNumber: true, type: \"empty\" })\n }\n rightVisualPos += pad\n }\n\n // Now add the actual content line\n finalLeftLines.push(leftLine)\n finalRightLines.push(rightLine)\n\n // Update visual positions\n leftVisualPos += leftVisualCount\n rightVisualPos += rightVisualCount\n }\n\n // Final padding to make totals equal\n if (leftVisualPos < rightVisualPos) {\n const pad = rightVisualPos - leftVisualPos\n for (let p = 0; p < pad; p++) {\n finalLeftLines.push({ content: \"\", hideLineNumber: true, type: \"empty\" })\n }\n } else if (rightVisualPos < leftVisualPos) {\n const pad = leftVisualPos - rightVisualPos\n for (let p = 0; p < pad; p++) {\n finalRightLines.push({ content: \"\", hideLineNumber: true, type: \"empty\" })\n }\n }\n } else {\n // Can't do wrap alignment yet (no width), use logical lines as-is\n finalLeftLines = leftLogicalLines\n finalRightLines = rightLogicalLines\n\n // If wrapMode is set but we can't align yet, onResize will trigger a rebuild\n // once widths are available (no manual scheduling needed here)\n }\n\n // Step 4: Build final content and metadata\n const leftLineColors = new Map<number, string | RGBA | LineColorConfig>()\n const rightLineColors = new Map<number, string | RGBA | LineColorConfig>()\n const leftLineSigns = new Map<number, LineSign>()\n const rightLineSigns = new Map<number, LineSign>()\n const leftHideLineNumbers = new Set<number>()\n const rightHideLineNumbers = new Set<number>()\n const leftLineNumbers = new Map<number, number>()\n const rightLineNumbers = new Map<number, number>()\n\n finalLeftLines.forEach((line, index) => {\n if (line.lineNum !== undefined) {\n leftLineNumbers.set(index, line.lineNum)\n }\n if (line.hideLineNumber) {\n leftHideLineNumbers.add(index)\n }\n if (line.type === \"remove\") {\n const config: LineColorConfig = {\n gutter: this._removedLineNumberBg,\n }\n if (this._removedContentBg) {\n config.content = this._removedContentBg\n } else {\n config.content = this._removedBg\n }\n leftLineColors.set(index, config)\n } else if (line.type === \"context\") {\n const config: LineColorConfig = {\n gutter: this._lineNumberBg,\n }\n if (this._contextContentBg) {\n config.content = this._contextContentBg\n } else {\n config.content = this._contextBg\n }\n leftLineColors.set(index, config)\n }\n if (line.sign) {\n leftLineSigns.set(index, line.sign)\n }\n })\n\n finalRightLines.forEach((line, index) => {\n if (line.lineNum !== undefined) {\n rightLineNumbers.set(index, line.lineNum)\n }\n if (line.hideLineNumber) {\n rightHideLineNumbers.add(index)\n }\n if (line.type === \"add\") {\n const config: LineColorConfig = {\n gutter: this._addedLineNumberBg,\n }\n if (this._addedContentBg) {\n config.content = this._addedContentBg\n } else {\n config.content = this._addedBg\n }\n rightLineColors.set(index, config)\n } else if (line.type === \"context\") {\n const config: LineColorConfig = {\n gutter: this._lineNumberBg,\n }\n if (this._contextContentBg) {\n config.content = this._contextContentBg\n } else {\n config.content = this._contextBg\n }\n rightLineColors.set(index, config)\n }\n if (line.sign) {\n rightLineSigns.set(index, line.sign)\n }\n })\n\n const leftContentFinal = finalLeftLines.map((l) => l.content).join(\"\\n\")\n const rightContentFinal = finalRightLines.map((l) => l.content).join(\"\\n\")\n\n // Step 5: Update CodeRenderables with final content\n leftCodeRenderable.content = leftContentFinal\n rightCodeRenderable.content = rightContentFinal\n\n // Create or update LineNumberRenderables (they wrap the CodeRenderables)\n // leftSide might already exist from unified view, so we reuse it\n this.createOrUpdateSide(\n \"left\",\n leftCodeRenderable,\n leftLineColors,\n leftLineSigns,\n leftLineNumbers,\n leftHideLineNumbers,\n \"50%\",\n )\n this.createOrUpdateSide(\n \"right\",\n rightCodeRenderable,\n rightLineColors,\n rightLineSigns,\n rightLineNumbers,\n rightHideLineNumbers,\n \"50%\",\n )\n }\n\n // Getters and setters\n public get diff(): string {\n return this._diff\n }\n\n public set diff(value: string) {\n if (this._diff !== value) {\n this._diff = value\n this.parseDiff()\n this.rebuildView()\n }\n }\n\n public get view(): \"unified\" | \"split\" {\n return this._view\n }\n\n public set view(value: \"unified\" | \"split\") {\n if (this._view !== value) {\n this._view = value\n this.flexDirection = value === \"split\" ? \"row\" : \"column\"\n // Always rebuild immediately when changing view mode\n this.buildView()\n }\n }\n\n public get filetype(): string | undefined {\n return this._filetype\n }\n\n public set filetype(value: string | undefined) {\n if (this._filetype !== value) {\n this._filetype = value\n this.rebuildView()\n }\n }\n\n public get syntaxStyle(): SyntaxStyle | undefined {\n return this._syntaxStyle\n }\n\n public set syntaxStyle(value: SyntaxStyle | undefined) {\n if (this._syntaxStyle !== value) {\n this._syntaxStyle = value\n this.rebuildView()\n }\n }\n\n public get wrapMode(): \"word\" | \"char\" | \"none\" | undefined {\n return this._wrapMode\n }\n\n public set wrapMode(value: \"word\" | \"char\" | \"none\" | undefined) {\n if (this._wrapMode !== value) {\n this._wrapMode = value\n\n // For unified view, directly update wrapMode on the CodeRenderable\n if (this._view === \"unified\" && this.leftCodeRenderable) {\n this.leftCodeRenderable.wrapMode = value ?? \"none\"\n } else if (this._view === \"split\") {\n // For split view, wrapMode affects alignment, so rebuild\n this.requestRebuild()\n }\n }\n }\n\n public get showLineNumbers(): boolean {\n return this._showLineNumbers\n }\n\n public set showLineNumbers(value: boolean) {\n if (this._showLineNumbers !== value) {\n this._showLineNumbers = value\n if (this.leftSide) {\n this.leftSide.showLineNumbers = value\n }\n if (this.rightSide) {\n this.rightSide.showLineNumbers = value\n }\n }\n }\n\n public get addedBg(): RGBA {\n return this._addedBg\n }\n\n public set addedBg(value: string | RGBA) {\n const parsed = parseColor(value)\n if (this._addedBg !== parsed) {\n this._addedBg = parsed\n this.rebuildView()\n }\n }\n\n public get removedBg(): RGBA {\n return this._removedBg\n }\n\n public set removedBg(value: string | RGBA) {\n const parsed = parseColor(value)\n if (this._removedBg !== parsed) {\n this._removedBg = parsed\n this.rebuildView()\n }\n }\n\n public get contextBg(): RGBA {\n return this._contextBg\n }\n\n public set contextBg(value: string | RGBA) {\n const parsed = parseColor(value)\n if (this._contextBg !== parsed) {\n this._contextBg = parsed\n this.rebuildView()\n }\n }\n\n public get addedSignColor(): RGBA {\n return this._addedSignColor\n }\n\n public set addedSignColor(value: string | RGBA) {\n const parsed = parseColor(value)\n if (this._addedSignColor !== parsed) {\n this._addedSignColor = parsed\n this.rebuildView()\n }\n }\n\n public get removedSignColor(): RGBA {\n return this._removedSignColor\n }\n\n public set removedSignColor(value: string | RGBA) {\n const parsed = parseColor(value)\n if (this._removedSignColor !== parsed) {\n this._removedSignColor = parsed\n this.rebuildView()\n }\n }\n\n public get addedLineNumberBg(): RGBA {\n return this._addedLineNumberBg\n }\n\n public set addedLineNumberBg(value: string | RGBA) {\n const parsed = parseColor(value)\n if (this._addedLineNumberBg !== parsed) {\n this._addedLineNumberBg = parsed\n this.rebuildView()\n }\n }\n\n public get removedLineNumberBg(): RGBA {\n return this._removedLineNumberBg\n }\n\n public set removedLineNumberBg(value: string | RGBA) {\n const parsed = parseColor(value)\n if (this._removedLineNumberBg !== parsed) {\n this._removedLineNumberBg = parsed\n this.rebuildView()\n }\n }\n\n public get lineNumberFg(): RGBA {\n return this._lineNumberFg\n }\n\n public set lineNumberFg(value: string | RGBA) {\n const parsed = parseColor(value)\n if (this._lineNumberFg !== parsed) {\n this._lineNumberFg = parsed\n this.rebuildView()\n }\n }\n\n public get lineNumberBg(): RGBA {\n return this._lineNumberBg\n }\n\n public set lineNumberBg(value: string | RGBA) {\n const parsed = parseColor(value)\n if (this._lineNumberBg !== parsed) {\n this._lineNumberBg = parsed\n this.rebuildView()\n }\n }\n\n public get addedContentBg(): RGBA | null {\n return this._addedContentBg\n }\n\n public set addedContentBg(value: string | RGBA | null) {\n const parsed = value ? parseColor(value) : null\n if (this._addedContentBg !== parsed) {\n this._addedContentBg = parsed\n this.rebuildView()\n }\n }\n\n public get removedContentBg(): RGBA | null {\n return this._removedContentBg\n }\n\n public set removedContentBg(value: string | RGBA | null) {\n const parsed = value ? parseColor(value) : null\n if (this._removedContentBg !== parsed) {\n this._removedContentBg = parsed\n this.rebuildView()\n }\n }\n\n public get contextContentBg(): RGBA | null {\n return this._contextContentBg\n }\n\n public set contextContentBg(value: string | RGBA | null) {\n const parsed = value ? parseColor(value) : null\n if (this._contextContentBg !== parsed) {\n this._contextContentBg = parsed\n this.rebuildView()\n }\n }\n\n public get selectionBg(): RGBA | undefined {\n return this._selectionBg\n }\n\n public set selectionBg(value: string | RGBA | undefined) {\n const parsed = value ? parseColor(value) : undefined\n if (this._selectionBg !== parsed) {\n this._selectionBg = parsed\n if (this.leftCodeRenderable) {\n this.leftCodeRenderable.selectionBg = parsed\n }\n if (this.rightCodeRenderable) {\n this.rightCodeRenderable.selectionBg = parsed\n }\n }\n }\n\n public get selectionFg(): RGBA | undefined {\n return this._selectionFg\n }\n\n public set selectionFg(value: string | RGBA | undefined) {\n const parsed = value ? parseColor(value) : undefined\n if (this._selectionFg !== parsed) {\n this._selectionFg = parsed\n if (this.leftCodeRenderable) {\n this.leftCodeRenderable.selectionFg = parsed\n }\n if (this.rightCodeRenderable) {\n this.rightCodeRenderable.selectionFg = parsed\n }\n }\n }\n\n public get conceal(): boolean {\n return this._conceal\n }\n\n public set conceal(value: boolean) {\n if (this._conceal !== value) {\n this._conceal = value\n this.rebuildView()\n }\n }\n\n public get fg(): RGBA | undefined {\n return this._fg\n }\n\n public set fg(value: string | RGBA | undefined) {\n const parsed = value ? parseColor(value) : undefined\n if (this._fg !== parsed) {\n this._fg = parsed\n if (this.leftCodeRenderable) {\n this.leftCodeRenderable.fg = parsed\n }\n if (this.rightCodeRenderable) {\n this.rightCodeRenderable.fg = parsed\n }\n }\n }\n}\n",
|
|
32
|
-
"export interface KeyBinding<Action extends string = string> {\n name: string\n ctrl?: boolean\n shift?: boolean\n meta?: boolean\n super?: boolean\n action: Action\n}\n\nexport type KeyAliasMap = Record<string, string>\n\nexport const defaultKeyAliases: KeyAliasMap = {\n enter: \"return\",\n esc: \"escape\",\n}\n\nexport function mergeKeyAliases(defaults: KeyAliasMap, custom: KeyAliasMap): KeyAliasMap {\n return { ...defaults, ...custom }\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 ? 1 : 0}:${binding.shift ? 1 : 0}:${binding.meta ? 1 : 0}:${binding.super ? 1 : 0}`\n}\n\nexport function buildKeyBindingsMap<Action extends string>(\n bindings: KeyBinding<Action>[],\n aliasMap?: KeyAliasMap,\n): Map<string, Action> {\n const map = new Map<string, Action>()\n const aliases = aliasMap || {}\n\n for (const binding of bindings) {\n const key = getKeyBindingKey(binding)\n map.set(key, binding.action)\n }\n\n // Add aliased versions of all bindings\n for (const binding of bindings) {\n const normalizedName = aliases[binding.name] || binding.name\n if (normalizedName !== binding.name) {\n // Create aliased key with normalized name\n const aliasedKey = getKeyBindingKey({ ...binding, name: normalizedName })\n map.set(aliasedKey, binding.action)\n }\n }\n\n return map\n}\n",
|
|
33
|
-
"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\"\nimport {\n type KeyBinding as BaseKeyBinding,\n mergeKeyBindings,\n getKeyBindingKey,\n buildKeyBindingsMap,\n type KeyAliasMap,\n defaultKeyAliases,\n mergeKeyAliases,\n} from \"../lib/keymapping\"\n\nexport type InputAction =\n | \"move-left\"\n | \"move-right\"\n | \"move-home\"\n | \"move-end\"\n | \"delete-backward\"\n | \"delete-forward\"\n | \"submit\"\n\nexport type InputKeyBinding = BaseKeyBinding<InputAction>\n\nconst defaultInputKeybindings: InputKeyBinding[] = [\n { name: \"left\", action: \"move-left\" },\n { name: \"right\", action: \"move-right\" },\n { name: \"home\", action: \"move-home\" },\n { name: \"end\", action: \"move-end\" },\n { name: \"backspace\", action: \"delete-backward\" },\n { name: \"delete\", action: \"delete-forward\" },\n { name: \"return\", action: \"submit\" },\n { name: \"linefeed\", action: \"submit\" },\n // Emacs-style bindings\n { name: \"a\", ctrl: true, action: \"move-home\" },\n { name: \"e\", ctrl: true, action: \"move-end\" },\n { name: \"f\", ctrl: true, action: \"move-right\" },\n { name: \"b\", ctrl: true, action: \"move-left\" },\n { name: \"d\", ctrl: true, action: \"delete-forward\" },\n]\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 keyBindings?: InputKeyBinding[]\n keyAliasMap?: KeyAliasMap\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 private _keyBindingsMap: Map<string, InputAction>\n private _keyAliasMap: KeyAliasMap\n private _keyBindings: InputKeyBinding[]\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 this._keyAliasMap = mergeKeyAliases(defaultKeyAliases, options.keyAliasMap || {})\n this._keyBindings = options.keyBindings || []\n const mergedBindings = mergeKeyBindings(defaultInputKeybindings, this._keyBindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\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 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 const keySuper = typeof key === \"string\" ? false : key.super\n const keyHyper = typeof key === \"string\" ? false : key.hyper\n\n const bindingKey = getKeyBindingKey({\n name: keyName,\n ctrl: keyCtrl,\n shift: keyShift,\n meta: keyMeta,\n super: keySuper,\n action: \"move-left\" as InputAction,\n })\n\n const action = this._keyBindingsMap.get(bindingKey)\n\n if (action) {\n switch (action) {\n case \"move-left\":\n this.cursorPosition = this._cursorPosition - 1\n return true\n case \"move-right\":\n this.cursorPosition = this._cursorPosition + 1\n return true\n case \"move-home\":\n this.cursorPosition = 0\n return true\n case \"move-end\":\n this.cursorPosition = this._value.length\n return true\n case \"delete-backward\":\n this.deleteCharacter(\"backward\")\n return true\n case \"delete-forward\":\n this.deleteCharacter(\"forward\")\n return true\n case \"submit\":\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 }\n\n if (!keyCtrl && !keyMeta && !keySuper && !keyHyper) {\n if (keyName === \"space\") {\n this.insertText(\" \")\n return true\n }\n\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 }\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 public set keyBindings(bindings: InputKeyBinding[]) {\n this._keyBindings = bindings\n const mergedBindings = mergeKeyBindings(defaultInputKeybindings, bindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\n }\n\n public set keyAliasMap(aliases: KeyAliasMap) {\n this._keyAliasMap = mergeKeyAliases(defaultKeyAliases, aliases)\n const mergedBindings = mergeKeyBindings(defaultInputKeybindings, this._keyBindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\n }\n}\n",
|
|
32
|
+
"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\"\nimport {\n type KeyBinding as BaseKeyBinding,\n mergeKeyBindings,\n getKeyBindingKey,\n buildKeyBindingsMap,\n type KeyAliasMap,\n defaultKeyAliases,\n mergeKeyAliases,\n} from \"../lib/keymapping\"\n\nexport type InputAction =\n | \"move-left\"\n | \"move-right\"\n | \"move-home\"\n | \"move-end\"\n | \"delete-backward\"\n | \"delete-forward\"\n | \"submit\"\n\nexport type InputKeyBinding = BaseKeyBinding<InputAction>\n\nconst defaultInputKeybindings: InputKeyBinding[] = [\n { name: \"left\", action: \"move-left\" },\n { name: \"right\", action: \"move-right\" },\n { name: \"home\", action: \"move-home\" },\n { name: \"end\", action: \"move-end\" },\n { name: \"backspace\", action: \"delete-backward\" },\n { name: \"delete\", action: \"delete-forward\" },\n { name: \"return\", action: \"submit\" },\n { name: \"linefeed\", action: \"submit\" },\n // Emacs-style bindings\n { name: \"a\", ctrl: true, action: \"move-home\" },\n { name: \"e\", ctrl: true, action: \"move-end\" },\n { name: \"f\", ctrl: true, action: \"move-right\" },\n { name: \"b\", ctrl: true, action: \"move-left\" },\n { name: \"d\", ctrl: true, action: \"delete-forward\" },\n]\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 keyBindings?: InputKeyBinding[]\n keyAliasMap?: KeyAliasMap\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 private _keyBindingsMap: Map<string, InputAction>\n private _keyAliasMap: KeyAliasMap\n private _keyBindings: InputKeyBinding[]\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 this._keyAliasMap = mergeKeyAliases(defaultKeyAliases, options.keyAliasMap || {})\n this._keyBindings = options.keyBindings || []\n const mergedBindings = mergeKeyBindings(defaultInputKeybindings, this._keyBindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\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): boolean {\n const bindingKey = getKeyBindingKey({\n name: key.name,\n ctrl: key.ctrl,\n shift: key.shift,\n meta: key.meta,\n super: key.super,\n action: \"move-left\" as InputAction,\n })\n\n const action = this._keyBindingsMap.get(bindingKey)\n\n if (action) {\n switch (action) {\n case \"move-left\":\n this.cursorPosition = this._cursorPosition - 1\n return true\n case \"move-right\":\n this.cursorPosition = this._cursorPosition + 1\n return true\n case \"move-home\":\n this.cursorPosition = 0\n return true\n case \"move-end\":\n this.cursorPosition = this._value.length\n return true\n case \"delete-backward\":\n this.deleteCharacter(\"backward\")\n return true\n case \"delete-forward\":\n this.deleteCharacter(\"forward\")\n return true\n case \"submit\":\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 }\n\n if (!key.ctrl && !key.meta && !key.super && !key.hyper) {\n if (key.name === \"space\") {\n this.insertText(\" \")\n return true\n }\n\n if (\n key.sequence &&\n key.sequence.length === 1 &&\n key.sequence.charCodeAt(0) >= 32 &&\n key.sequence.charCodeAt(0) <= 126\n ) {\n this.insertText(key.sequence)\n return true\n }\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 public set keyBindings(bindings: InputKeyBinding[]) {\n this._keyBindings = bindings\n const mergedBindings = mergeKeyBindings(defaultInputKeybindings, bindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\n }\n\n public set keyAliasMap(aliases: KeyAliasMap) {\n this._keyAliasMap = mergeKeyAliases(defaultKeyAliases, aliases)\n const mergedBindings = mergeKeyBindings(defaultInputKeybindings, this._keyBindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\n }\n}\n",
|
|
34
33
|
"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",
|
|
35
|
-
"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",
|
|
36
|
-
"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 _getVisibleChildren(): number[] {\n if (this._viewportCulling) {\n return getObjectsInViewport(this.viewport, this.getChildrenSortedByPrimaryAxis(), this.primaryAxis, 0).map(\n (child) => child.num,\n )\n }\n return this.getChildrenSortedByPrimaryAxis().map((child) => child.num)\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 scrollAccumulatorX: number = 0\n private scrollAccumulatorY: 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 _isApplyingStickyScroll: 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 if (!this._isApplyingStickyScroll) {\n // Only mark as manual scroll if:\n // 1. We're not at a sticky position after scrolling (prevents programmatic scrolls to sticky edges from disabling sticky)\n // 2. There's actually meaningful scrollable content (prevents accidental scrolls when content is smaller than viewport from disabling sticky)\n // Use a small threshold (>1) to account for rounding/layout quirks\n const maxScrollTop = Math.max(0, this.scrollHeight - this.viewport.height)\n if (!this.isAtStickyPosition() && maxScrollTop > 1) {\n this._hasManualScroll = true\n }\n }\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 if (!this._isApplyingStickyScroll) {\n // Only mark as manual scroll if:\n // 1. We're not at a sticky position after scrolling (prevents programmatic scrolls to sticky edges from disabling sticky)\n // 2. There's actually meaningful scrollable content (prevents accidental scrolls when content is smaller than viewport from disabling sticky)\n // Use a small threshold (>1) to account for rounding/layout quirks\n const maxScrollLeft = Math.max(0, this.scrollWidth - this.viewport.width)\n if (!this.isAtStickyPosition() && maxScrollLeft > 1) {\n this._hasManualScroll = true\n }\n }\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 this._isApplyingStickyScroll = true\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 this._isApplyingStickyScroll = false\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 this.scrollAccel = scrollAcceleration ?? 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 if (!this._isApplyingStickyScroll) {\n // Only mark as manual scroll if we're not at a sticky position and there's meaningful scrollable content\n const maxScrollTop = Math.max(0, this.scrollHeight - this.viewport.height)\n if (!this.isAtStickyPosition() && maxScrollTop > 1) {\n this._hasManualScroll = true\n }\n }\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 if (!this._isApplyingStickyScroll) {\n // Only mark as manual scroll if we're not at a sticky position and there's meaningful scrollable content\n const maxScrollLeft = Math.max(0, this.scrollWidth - this.viewport.width)\n if (!this.isAtStickyPosition() && maxScrollLeft > 1) {\n this._hasManualScroll = true\n }\n }\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 // Note: scrollBy doesn't need to set _hasManualScroll here because the scrollbar\n // change will trigger the scrollTop setter which handles it\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 // Note: scrollTo doesn't need to set _hasManualScroll here because\n // the scrollTop/scrollLeft setters handle it\n }\n\n private isAtStickyPosition(): boolean {\n if (!this._stickyScroll || !this._stickyStart) {\n return false\n }\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 switch (this._stickyStart) {\n case \"top\":\n return this.scrollTop === 0\n case \"bottom\":\n return this.scrollTop >= maxScrollTop\n case \"left\":\n return this.scrollLeft === 0\n case \"right\":\n return this.scrollLeft >= maxScrollLeft\n default:\n return false\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 const scrollAmount = baseDelta * multiplier\n\n if (dir === \"up\") {\n this.scrollAccumulatorY -= scrollAmount\n const integerScroll = Math.trunc(this.scrollAccumulatorY)\n if (integerScroll !== 0) {\n this.scrollTop += integerScroll\n this.scrollAccumulatorY -= integerScroll\n }\n } else if (dir === \"down\") {\n this.scrollAccumulatorY += scrollAmount\n const integerScroll = Math.trunc(this.scrollAccumulatorY)\n if (integerScroll !== 0) {\n this.scrollTop += integerScroll\n this.scrollAccumulatorY -= integerScroll\n }\n } else if (dir === \"left\") {\n this.scrollAccumulatorX -= scrollAmount\n const integerScroll = Math.trunc(this.scrollAccumulatorX)\n if (integerScroll !== 0) {\n this.scrollLeft += integerScroll\n this.scrollAccumulatorX -= integerScroll\n }\n } else if (dir === \"right\") {\n this.scrollAccumulatorX += scrollAmount\n const integerScroll = Math.trunc(this.scrollAccumulatorX)\n if (integerScroll !== 0) {\n this.scrollLeft += integerScroll\n this.scrollAccumulatorX -= integerScroll\n }\n }\n\n // Only mark as manual scroll if there's meaningful scrollable content\n const maxScrollTop = Math.max(0, this.scrollHeight - this.viewport.height)\n const maxScrollLeft = Math.max(0, this.scrollWidth - this.viewport.width)\n if (maxScrollTop > 1 || maxScrollLeft > 1) {\n this._hasManualScroll = true\n }\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 this.resetScrollAccumulators()\n return true\n }\n if (this.horizontalScrollBar.handleKeyPress(key)) {\n this._hasManualScroll = true\n this.scrollAccel.reset()\n this.resetScrollAccumulators()\n return true\n }\n return false\n }\n\n private resetScrollAccumulators(): void {\n this.scrollAccumulatorX = 0\n this.scrollAccumulatorY = 0\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 // Wrap entire method to prevent scroll changes from being treated as manual\n const wasApplyingStickyScroll = this._isApplyingStickyScroll\n this._isApplyingStickyScroll = true\n\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 this._isApplyingStickyScroll = wasApplyingStickyScroll\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",
|
|
37
|
-
"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\"\nimport {\n type KeyBinding as BaseKeyBinding,\n mergeKeyBindings,\n getKeyBindingKey,\n buildKeyBindingsMap,\n type KeyAliasMap,\n defaultKeyAliases,\n mergeKeyAliases,\n} from \"../lib/keymapping\"\n\nexport interface SelectOption {\n name: string\n description: string\n value?: any\n}\n\nexport type SelectAction = \"move-up\" | \"move-down\" | \"move-up-fast\" | \"move-down-fast\" | \"select-current\"\n\nexport type SelectKeyBinding = BaseKeyBinding<SelectAction>\n\nconst defaultSelectKeybindings: SelectKeyBinding[] = [\n { name: \"up\", action: \"move-up\" },\n { name: \"k\", action: \"move-up\" },\n { name: \"down\", action: \"move-down\" },\n { name: \"j\", action: \"move-down\" },\n { name: \"up\", shift: true, action: \"move-up-fast\" },\n { name: \"down\", shift: true, action: \"move-down-fast\" },\n { name: \"return\", action: \"select-current\" },\n { name: \"linefeed\", action: \"select-current\" },\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 keyBindings?: SelectKeyBinding[]\n keyAliasMap?: KeyAliasMap\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 private _keyBindingsMap: Map<string, SelectAction>\n private _keyAliasMap: KeyAliasMap\n private _keyBindings: SelectKeyBinding[]\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._keyAliasMap = mergeKeyAliases(defaultKeyAliases, options.keyAliasMap || {})\n this._keyBindings = options.keyBindings || []\n const mergedBindings = mergeKeyBindings(defaultSelectKeybindings, this._keyBindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\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 color: nameColor,\n backgroundColor: 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 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 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 const keySuper = typeof key === \"string\" ? false : key.super\n\n const bindingKey = getKeyBindingKey({\n name: keyName,\n ctrl: keyCtrl,\n shift: keyShift,\n meta: keyMeta,\n super: keySuper,\n action: \"move-up\" as SelectAction,\n })\n\n const action = this._keyBindingsMap.get(bindingKey)\n\n if (action) {\n switch (action) {\n case \"move-up\":\n this.moveUp(1)\n return true\n case \"move-down\":\n this.moveDown(1)\n return true\n case \"move-up-fast\":\n this.moveUp(this._fastScrollStep)\n return true\n case \"move-down-fast\":\n this.moveDown(this._fastScrollStep)\n return true\n case \"select-current\":\n this.selectCurrent()\n return true\n }\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 keyBindings(bindings: SelectKeyBinding[]) {\n this._keyBindings = bindings\n const mergedBindings = mergeKeyBindings(defaultSelectKeybindings, bindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\n }\n\n public set keyAliasMap(aliases: KeyAliasMap) {\n this._keyAliasMap = mergeKeyAliases(defaultKeyAliases, aliases)\n const mergedBindings = mergeKeyBindings(defaultSelectKeybindings, this._keyBindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\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",
|
|
38
|
-
"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\"\nimport {\n type KeyBinding as BaseKeyBinding,\n mergeKeyBindings,\n getKeyBindingKey,\n buildKeyBindingsMap,\n type KeyAliasMap,\n defaultKeyAliases,\n mergeKeyAliases,\n} from \"../lib/keymapping\"\n\nexport interface TabSelectOption {\n name: string\n description: string\n value?: any\n}\n\nexport type TabSelectAction = \"move-left\" | \"move-right\" | \"select-current\"\n\nexport type TabSelectKeyBinding = BaseKeyBinding<TabSelectAction>\n\nconst defaultTabSelectKeybindings: TabSelectKeyBinding[] = [\n { name: \"left\", action: \"move-left\" },\n { name: \"[\", action: \"move-left\" },\n { name: \"right\", action: \"move-right\" },\n { name: \"]\", action: \"move-right\" },\n { name: \"return\", action: \"select-current\" },\n { name: \"linefeed\", action: \"select-current\" },\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 keyBindings?: TabSelectKeyBinding[]\n keyAliasMap?: KeyAliasMap\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 private _keyBindingsMap: Map<string, TabSelectAction>\n private _keyAliasMap: KeyAliasMap\n private _keyBindings: TabSelectKeyBinding[]\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 this._keyAliasMap = mergeKeyAliases(defaultKeyAliases, options.keyAliasMap || {})\n this._keyBindings = options.keyBindings || []\n const mergedBindings = mergeKeyBindings(defaultTabSelectKeybindings, this._keyBindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\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) return\n // Use focused colors if focused\n const bgColor = this._focused ? this._focusedBackgroundColor : this._backgroundColor\n this.frameBuffer.clear(bgColor)\n if (this._options.length === 0) return\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 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 const keySuper = typeof key === \"string\" ? false : key.super\n\n const bindingKey = getKeyBindingKey({\n name: keyName,\n ctrl: keyCtrl,\n shift: keyShift,\n meta: keyMeta,\n super: keySuper,\n action: \"move-left\" as TabSelectAction,\n })\n\n const action = this._keyBindingsMap.get(bindingKey)\n\n if (action) {\n switch (action) {\n case \"move-left\":\n this.moveLeft()\n return true\n case \"move-right\":\n this.moveRight()\n return true\n case \"select-current\":\n this.selectCurrent()\n return true\n }\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 public set keyBindings(bindings: TabSelectKeyBinding[]) {\n this._keyBindings = bindings\n const mergedBindings = mergeKeyBindings(defaultTabSelectKeybindings, bindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\n }\n\n public set keyAliasMap(aliases: KeyAliasMap) {\n this._keyAliasMap = mergeKeyAliases(defaultKeyAliases, aliases)\n const mergedBindings = mergeKeyBindings(defaultTabSelectKeybindings, this._keyBindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\n }\n}\n",
|
|
39
|
-
"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, LineInfoProvider, LineInfo } 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 implements LineInfoProvider {\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 private _selectionAnchorState: {\n screenX: number\n screenY: number\n viewportX: number\n viewportY: number\n } | null = null\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 public get lineInfo(): LineInfo {\n return this.editorView.getLogicalLineInfo()\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 this.emit(\"line-info-change\")\n if (this._contentChangeListener) {\n this._contentChangeListener({})\n }\n })\n }\n\n public get lineCount(): number {\n return this.editBuffer.getLineCount()\n }\n\n public get virtualLineCount(): number {\n return this.editorView.getVirtualLineCount()\n }\n\n public get scrollY(): number {\n return this.editorView.getViewport().offsetY\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 // Undefined = 0,\n // Exactly = 1,\n // AtMost = 2\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 // When widthMode is Undefined, Yoga is asking for the intrinsic/natural width\n // Pass width=0 to measureForDimensions to signal we want max-content (no wrapping)\n // The Zig code treats width=0 with wrap_mode != none as null wrap_width,\n // which triggers no-wrap mode and returns the text's intrinsic width\n let effectiveWidth: number\n if (widthMode === MeasureMode.Undefined || isNaN(width)) {\n effectiveWidth = 0\n } else {\n effectiveWidth = width\n }\n\n const effectiveHeight = isNaN(height) ? 1 : height\n\n const measureResult = this.editorView.measureForDimensions(\n Math.floor(effectiveWidth),\n Math.floor(effectiveHeight),\n )\n\n const measuredWidth = measureResult ? Math.max(1, measureResult.maxWidth) : 1\n const measuredHeight = measureResult ? Math.max(1, measureResult.lineCount) : 1\n\n if (widthMode === MeasureMode.AtMost && this._positionType !== \"absolute\") {\n return {\n width: Math.min(effectiveWidth, measuredWidth),\n height: Math.min(effectiveHeight, measuredHeight),\n }\n }\n\n return {\n width: measuredWidth,\n height: 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 override destroy(): void {\n if (this.isDestroyed) return\n\n if (this._focused) {\n this._ctx.setCursorPosition(0, 0, false)\n // Manually blur to unhook event handlers BEFORE setting destroyed flag\n // This prevents the guard in super.destroy() from skipping blur()\n this.blur()\n }\n\n // Destroy dependent resources in correct order BEFORE calling super\n // EditorView depends on EditBuffer, so destroy it first\n this.editorView.destroy()\n this.editBuffer.destroy()\n\n // Finally clean up parent resources\n // Note: super.destroy() will try to blur() again, but blur() has guards to prevent double-blur\n super.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 protected updateSelectionForMovement(shiftPressed: boolean, isBeforeMovement: boolean): void {\n if (!this.selectable) return\n\n if (!shiftPressed) {\n this._ctx.clearSelection()\n this._selectionAnchorState = null\n return\n }\n\n const visualCursor = this.editorView.getVisualCursor()\n const viewport = this.editorView.getViewport()\n\n const cursorX = this.x + visualCursor.visualCol\n const cursorY = this.y + visualCursor.visualRow\n\n if (isBeforeMovement) {\n if (!this._ctx.hasSelection) {\n this._ctx.startSelection(this, cursorX, cursorY)\n this._selectionAnchorState = {\n screenX: cursorX,\n screenY: cursorY,\n viewportX: viewport.offsetX,\n viewportY: viewport.offsetY,\n }\n } else if (!this._selectionAnchorState) {\n // Selection exists but we don't have state (e.g. from mouse), capture it\n const selection = this._ctx.getSelection()\n if (selection && selection.isActive) {\n this._selectionAnchorState = {\n screenX: selection.anchor.x,\n screenY: selection.anchor.y,\n viewportX: viewport.offsetX,\n viewportY: viewport.offsetY,\n }\n }\n }\n } else {\n // After movement - check if viewport changed\n if (this._selectionAnchorState) {\n const deltaY = viewport.offsetY - this._selectionAnchorState.viewportY\n const deltaX = viewport.offsetX - this._selectionAnchorState.viewportX\n\n if (deltaY !== 0 || deltaX !== 0) {\n const newAnchorX = this._selectionAnchorState.screenX - deltaX\n const newAnchorY = this._selectionAnchorState.screenY - deltaY\n\n // We need to update the anchor without losing focus position\n // startSelection sets both anchor and focus to the same point\n this._ctx.startSelection(this, newAnchorX, newAnchorY)\n this._ctx.updateSelection(this, cursorX, cursorY)\n } else {\n this._ctx.updateSelection(this, cursorX, cursorY)\n }\n } else {\n this._ctx.updateSelection(this, cursorX, cursorY)\n }\n }\n }\n}\n",
|
|
40
|
-
"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 type KeyAliasMap,\n defaultKeyAliases,\n mergeKeyAliases,\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 | \"select-buffer-home\"\n | \"select-buffer-end\"\n | \"delete-line\"\n | \"delete-to-line-end\"\n | \"delete-to-line-start\"\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: \"buffer-home\" },\n { name: \"end\", action: \"buffer-end\" },\n { name: \"home\", shift: true, action: \"select-buffer-home\" },\n { name: \"end\", shift: true, action: \"select-buffer-end\" },\n { name: \"a\", ctrl: true, action: \"line-home\" },\n { name: \"e\", ctrl: true, action: \"line-end\" },\n { name: \"f\", ctrl: true, action: \"move-right\" },\n { name: \"b\", ctrl: true, action: \"move-left\" },\n { name: \"d\", ctrl: true, action: \"delete-word-forward\" },\n { name: \"w\", ctrl: true, action: \"delete-word-backward\" },\n { name: \"k\", ctrl: true, action: \"delete-to-line-end\" },\n { name: \"u\", ctrl: true, action: \"delete-to-line-start\" },\n { name: \"backspace\", action: \"backspace\" },\n { name: \"backspace\", shift: true, action: \"backspace\" },\n { name: \"delete\", action: \"delete\" },\n { name: \"delete\", shift: true, action: \"delete\" },\n { name: \"return\", action: \"newline\" },\n { name: \"linefeed\", action: \"newline\" },\n { name: \"return\", meta: true, action: \"submit\" },\n\n // undo/redo\n { name: \"-\", ctrl: true, action: \"undo\" },\n { name: \".\", ctrl: true, action: \"redo\" },\n { name: \"z\", super: true, action: \"undo\" },\n { name: \"z\", super: true, shift: true, action: \"redo\" },\n\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-line\" },\n { name: \"backspace\", meta: 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 keyAliasMap?: KeyAliasMap\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 _keyAliasMap: KeyAliasMap\n private _keyBindings: KeyBinding[]\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 this._keyAliasMap = mergeKeyAliases(defaultKeyAliases, options.keyAliasMap || {})\n this._keyBindings = options.keyBindings || []\n const mergedBindings = mergeKeyBindings(defaultTextareaKeybindings, this._keyBindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\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 [\"select-buffer-home\", () => this.gotoBufferHome({ select: true })],\n [\"select-buffer-end\", () => this.gotoBufferEnd({ 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 [\"delete-to-line-start\", () => this.deleteToLineStart()],\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 const keySuper = typeof key === \"string\" ? false : key.super\n const keyHyper = typeof key === \"string\" ? false : key.hyper\n\n const bindingKey = getKeyBindingKey({\n name: keyName,\n ctrl: keyCtrl,\n shift: keyShift,\n meta: keyMeta,\n super: keySuper,\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 (!keyCtrl && !keyMeta && !keySuper && !keyHyper) {\n if (keyName === \"space\") {\n this.insertText(\" \")\n return true\n }\n\n if (keySequence) {\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\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.updateSelectionForMovement(select, true)\n this.editBuffer.moveCursorLeft()\n this.updateSelectionForMovement(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.updateSelectionForMovement(select, true)\n this.editBuffer.moveCursorRight()\n this.updateSelectionForMovement(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.updateSelectionForMovement(select, true)\n this.editorView.moveUpVisual()\n this.updateSelectionForMovement(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.updateSelectionForMovement(select, true)\n this.editorView.moveDownVisual()\n this.updateSelectionForMovement(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.updateSelectionForMovement(select, true)\n const cursor = this.editorView.getCursor()\n if (cursor.col === 0 && cursor.row > 0) {\n this.editBuffer.setCursor(cursor.row - 1, 0)\n const prevLineEol = this.editBuffer.getEOL()\n this.editBuffer.setCursor(prevLineEol.row, prevLineEol.col)\n } else {\n this.editBuffer.setCursor(cursor.row, 0)\n }\n\n this.updateSelectionForMovement(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.updateSelectionForMovement(select, true)\n const cursor = this.editorView.getCursor()\n const eol = this.editBuffer.getEOL()\n const lineCount = this.editBuffer.getLineCount()\n if (cursor.col === eol.col && cursor.row < lineCount - 1) {\n this.editBuffer.setCursor(cursor.row + 1, 0)\n } else {\n this.editBuffer.setCursor(eol.row, eol.col)\n }\n\n this.updateSelectionForMovement(select, false)\n this.requestRender()\n return true\n }\n\n public gotoBufferHome(options?: { select?: boolean }): boolean {\n const select = options?.select ?? false\n this.updateSelectionForMovement(select, true)\n this.editBuffer.setCursor(0, 0)\n this.updateSelectionForMovement(select, false)\n this.requestRender()\n return true\n }\n\n public gotoBufferEnd(options?: { select?: boolean }): boolean {\n const select = options?.select ?? false\n this.updateSelectionForMovement(select, true)\n this.editBuffer.gotoLine(999999)\n this.updateSelectionForMovement(select, false)\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 deleteToLineStart(): boolean {\n const cursor = this.editorView.getCursor()\n\n if (cursor.col > 0) {\n this.editBuffer.deleteRange(cursor.row, 0, cursor.row, cursor.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.updateSelectionForMovement(select, true)\n const nextWord = this.editBuffer.getNextWordBoundary()\n this.editBuffer.setCursorByOffset(nextWord.offset)\n this.updateSelectionForMovement(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.updateSelectionForMovement(select, true)\n const prevWord = this.editBuffer.getPrevWordBoundary()\n this.editBuffer.setCursorByOffset(prevWord.offset)\n this.updateSelectionForMovement(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 public focus(): void {\n super.focus()\n this.updateColors()\n }\n\n public blur(): void {\n super.blur()\n if (!this.isDestroyed) {\n this.updateColors()\n }\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 this._keyBindings = bindings\n const mergedBindings = mergeKeyBindings(defaultTextareaKeybindings, bindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\n }\n\n public set keyAliasMap(aliases: KeyAliasMap) {\n this._keyAliasMap = mergeKeyAliases(defaultKeyAliases, aliases)\n const mergedBindings = mergeKeyBindings(defaultTextareaKeybindings, this._keyBindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\n }\n\n public get extmarks(): ExtmarksController {\n return this.editorView.extmarks\n }\n}\n"
|
|
34
|
+
"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): boolean {\n switch (key.name) {\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",
|
|
35
|
+
"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 _getVisibleChildren(): number[] {\n if (this._viewportCulling) {\n return getObjectsInViewport(this.viewport, this.getChildrenSortedByPrimaryAxis(), this.primaryAxis, 0).map(\n (child) => child.num,\n )\n }\n return this.getChildrenSortedByPrimaryAxis().map((child) => child.num)\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 scrollAccumulatorX: number = 0\n private scrollAccumulatorY: 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 _isApplyingStickyScroll: 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 if (!this._isApplyingStickyScroll) {\n // Only mark as manual scroll if:\n // 1. We're not at a sticky position after scrolling (prevents programmatic scrolls to sticky edges from disabling sticky)\n // 2. There's actually meaningful scrollable content (prevents accidental scrolls when content is smaller than viewport from disabling sticky)\n // Use a small threshold (>1) to account for rounding/layout quirks\n const maxScrollTop = Math.max(0, this.scrollHeight - this.viewport.height)\n if (!this.isAtStickyPosition() && maxScrollTop > 1) {\n this._hasManualScroll = true\n }\n }\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 if (!this._isApplyingStickyScroll) {\n // Only mark as manual scroll if:\n // 1. We're not at a sticky position after scrolling (prevents programmatic scrolls to sticky edges from disabling sticky)\n // 2. There's actually meaningful scrollable content (prevents accidental scrolls when content is smaller than viewport from disabling sticky)\n // Use a small threshold (>1) to account for rounding/layout quirks\n const maxScrollLeft = Math.max(0, this.scrollWidth - this.viewport.width)\n if (!this.isAtStickyPosition() && maxScrollLeft > 1) {\n this._hasManualScroll = true\n }\n }\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 this._isApplyingStickyScroll = true\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 this._isApplyingStickyScroll = false\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 this.scrollAccel = scrollAcceleration ?? 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 if (!this._isApplyingStickyScroll) {\n // Only mark as manual scroll if we're not at a sticky position and there's meaningful scrollable content\n const maxScrollTop = Math.max(0, this.scrollHeight - this.viewport.height)\n if (!this.isAtStickyPosition() && maxScrollTop > 1) {\n this._hasManualScroll = true\n }\n }\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 if (!this._isApplyingStickyScroll) {\n // Only mark as manual scroll if we're not at a sticky position and there's meaningful scrollable content\n const maxScrollLeft = Math.max(0, this.scrollWidth - this.viewport.width)\n if (!this.isAtStickyPosition() && maxScrollLeft > 1) {\n this._hasManualScroll = true\n }\n }\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 // Note: scrollBy doesn't need to set _hasManualScroll here because the scrollbar\n // change will trigger the scrollTop setter which handles it\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 // Note: scrollTo doesn't need to set _hasManualScroll here because\n // the scrollTop/scrollLeft setters handle it\n }\n\n private isAtStickyPosition(): boolean {\n if (!this._stickyScroll || !this._stickyStart) {\n return false\n }\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 switch (this._stickyStart) {\n case \"top\":\n return this.scrollTop === 0\n case \"bottom\":\n return this.scrollTop >= maxScrollTop\n case \"left\":\n return this.scrollLeft === 0\n case \"right\":\n return this.scrollLeft >= maxScrollLeft\n default:\n return false\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 const scrollAmount = baseDelta * multiplier\n\n if (dir === \"up\") {\n this.scrollAccumulatorY -= scrollAmount\n const integerScroll = Math.trunc(this.scrollAccumulatorY)\n if (integerScroll !== 0) {\n this.scrollTop += integerScroll\n this.scrollAccumulatorY -= integerScroll\n }\n } else if (dir === \"down\") {\n this.scrollAccumulatorY += scrollAmount\n const integerScroll = Math.trunc(this.scrollAccumulatorY)\n if (integerScroll !== 0) {\n this.scrollTop += integerScroll\n this.scrollAccumulatorY -= integerScroll\n }\n } else if (dir === \"left\") {\n this.scrollAccumulatorX -= scrollAmount\n const integerScroll = Math.trunc(this.scrollAccumulatorX)\n if (integerScroll !== 0) {\n this.scrollLeft += integerScroll\n this.scrollAccumulatorX -= integerScroll\n }\n } else if (dir === \"right\") {\n this.scrollAccumulatorX += scrollAmount\n const integerScroll = Math.trunc(this.scrollAccumulatorX)\n if (integerScroll !== 0) {\n this.scrollLeft += integerScroll\n this.scrollAccumulatorX -= integerScroll\n }\n }\n\n // Only mark as manual scroll if there's meaningful scrollable content\n const maxScrollTop = Math.max(0, this.scrollHeight - this.viewport.height)\n const maxScrollLeft = Math.max(0, this.scrollWidth - this.viewport.width)\n if (maxScrollTop > 1 || maxScrollLeft > 1) {\n this._hasManualScroll = true\n }\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): boolean {\n // Let scrollbars handle their own acceleration\n if (this.verticalScrollBar.handleKeyPress(key)) {\n this._hasManualScroll = true\n this.scrollAccel.reset()\n this.resetScrollAccumulators()\n return true\n }\n if (this.horizontalScrollBar.handleKeyPress(key)) {\n this._hasManualScroll = true\n this.scrollAccel.reset()\n this.resetScrollAccumulators()\n return true\n }\n return false\n }\n\n private resetScrollAccumulators(): void {\n this.scrollAccumulatorX = 0\n this.scrollAccumulatorY = 0\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 // Wrap entire method to prevent scroll changes from being treated as manual\n const wasApplyingStickyScroll = this._isApplyingStickyScroll\n this._isApplyingStickyScroll = true\n\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 this._isApplyingStickyScroll = wasApplyingStickyScroll\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",
|
|
36
|
+
"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\"\nimport {\n type KeyBinding as BaseKeyBinding,\n mergeKeyBindings,\n getKeyBindingKey,\n buildKeyBindingsMap,\n type KeyAliasMap,\n defaultKeyAliases,\n mergeKeyAliases,\n} from \"../lib/keymapping\"\n\nexport interface SelectOption {\n name: string\n description: string\n value?: any\n}\n\nexport type SelectAction = \"move-up\" | \"move-down\" | \"move-up-fast\" | \"move-down-fast\" | \"select-current\"\n\nexport type SelectKeyBinding = BaseKeyBinding<SelectAction>\n\nconst defaultSelectKeybindings: SelectKeyBinding[] = [\n { name: \"up\", action: \"move-up\" },\n { name: \"k\", action: \"move-up\" },\n { name: \"down\", action: \"move-down\" },\n { name: \"j\", action: \"move-down\" },\n { name: \"up\", shift: true, action: \"move-up-fast\" },\n { name: \"down\", shift: true, action: \"move-down-fast\" },\n { name: \"return\", action: \"select-current\" },\n { name: \"linefeed\", action: \"select-current\" },\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 keyBindings?: SelectKeyBinding[]\n keyAliasMap?: KeyAliasMap\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 private _keyBindingsMap: Map<string, SelectAction>\n private _keyAliasMap: KeyAliasMap\n private _keyBindings: SelectKeyBinding[]\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._keyAliasMap = mergeKeyAliases(defaultKeyAliases, options.keyAliasMap || {})\n this._keyBindings = options.keyBindings || []\n const mergedBindings = mergeKeyBindings(defaultSelectKeybindings, this._keyBindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\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 color: nameColor,\n backgroundColor: 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 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): boolean {\n const bindingKey = getKeyBindingKey({\n name: key.name,\n ctrl: key.ctrl,\n shift: key.shift,\n meta: key.meta,\n super: key.super,\n action: \"move-up\" as SelectAction,\n })\n\n const action = this._keyBindingsMap.get(bindingKey)\n\n if (action) {\n switch (action) {\n case \"move-up\":\n this.moveUp(1)\n return true\n case \"move-down\":\n this.moveDown(1)\n return true\n case \"move-up-fast\":\n this.moveUp(this._fastScrollStep)\n return true\n case \"move-down-fast\":\n this.moveDown(this._fastScrollStep)\n return true\n case \"select-current\":\n this.selectCurrent()\n return true\n }\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 keyBindings(bindings: SelectKeyBinding[]) {\n this._keyBindings = bindings\n const mergedBindings = mergeKeyBindings(defaultSelectKeybindings, bindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\n }\n\n public set keyAliasMap(aliases: KeyAliasMap) {\n this._keyAliasMap = mergeKeyAliases(defaultKeyAliases, aliases)\n const mergedBindings = mergeKeyBindings(defaultSelectKeybindings, this._keyBindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\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",
|
|
37
|
+
"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\"\nimport {\n type KeyBinding as BaseKeyBinding,\n mergeKeyBindings,\n getKeyBindingKey,\n buildKeyBindingsMap,\n type KeyAliasMap,\n defaultKeyAliases,\n mergeKeyAliases,\n} from \"../lib/keymapping\"\n\nexport interface TabSelectOption {\n name: string\n description: string\n value?: any\n}\n\nexport type TabSelectAction = \"move-left\" | \"move-right\" | \"select-current\"\n\nexport type TabSelectKeyBinding = BaseKeyBinding<TabSelectAction>\n\nconst defaultTabSelectKeybindings: TabSelectKeyBinding[] = [\n { name: \"left\", action: \"move-left\" },\n { name: \"[\", action: \"move-left\" },\n { name: \"right\", action: \"move-right\" },\n { name: \"]\", action: \"move-right\" },\n { name: \"return\", action: \"select-current\" },\n { name: \"linefeed\", action: \"select-current\" },\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 keyBindings?: TabSelectKeyBinding[]\n keyAliasMap?: KeyAliasMap\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 private _keyBindingsMap: Map<string, TabSelectAction>\n private _keyAliasMap: KeyAliasMap\n private _keyBindings: TabSelectKeyBinding[]\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 this._keyAliasMap = mergeKeyAliases(defaultKeyAliases, options.keyAliasMap || {})\n this._keyBindings = options.keyBindings || []\n const mergedBindings = mergeKeyBindings(defaultTabSelectKeybindings, this._keyBindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\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) return\n // Use focused colors if focused\n const bgColor = this._focused ? this._focusedBackgroundColor : this._backgroundColor\n this.frameBuffer.clear(bgColor)\n if (this._options.length === 0) return\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): boolean {\n const bindingKey = getKeyBindingKey({\n name: key.name,\n ctrl: key.ctrl,\n shift: key.shift,\n meta: key.meta,\n super: key.super,\n action: \"move-left\" as TabSelectAction,\n })\n\n const action = this._keyBindingsMap.get(bindingKey)\n\n if (action) {\n switch (action) {\n case \"move-left\":\n this.moveLeft()\n return true\n case \"move-right\":\n this.moveRight()\n return true\n case \"select-current\":\n this.selectCurrent()\n return true\n }\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 public set keyBindings(bindings: TabSelectKeyBinding[]) {\n this._keyBindings = bindings\n const mergedBindings = mergeKeyBindings(defaultTabSelectKeybindings, bindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\n }\n\n public set keyAliasMap(aliases: KeyAliasMap) {\n this._keyAliasMap = mergeKeyAliases(defaultKeyAliases, aliases)\n const mergedBindings = mergeKeyBindings(defaultTabSelectKeybindings, this._keyBindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\n }\n}\n",
|
|
38
|
+
"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, LineInfoProvider, LineInfo } 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 implements LineInfoProvider {\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 private _selectionAnchorState: {\n screenX: number\n screenY: number\n viewportX: number\n viewportY: number\n } | null = null\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 public get lineInfo(): LineInfo {\n return this.editorView.getLogicalLineInfo()\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 this.emit(\"line-info-change\")\n if (this._contentChangeListener) {\n this._contentChangeListener({})\n }\n })\n }\n\n public get lineCount(): number {\n return this.editBuffer.getLineCount()\n }\n\n public get virtualLineCount(): number {\n return this.editorView.getVirtualLineCount()\n }\n\n public get scrollY(): number {\n return this.editorView.getViewport().offsetY\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 // Undefined = 0,\n // Exactly = 1,\n // AtMost = 2\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 // When widthMode is Undefined, Yoga is asking for the intrinsic/natural width\n // Pass width=0 to measureForDimensions to signal we want max-content (no wrapping)\n // The Zig code treats width=0 with wrap_mode != none as null wrap_width,\n // which triggers no-wrap mode and returns the text's intrinsic width\n let effectiveWidth: number\n if (widthMode === MeasureMode.Undefined || isNaN(width)) {\n effectiveWidth = 0\n } else {\n effectiveWidth = width\n }\n\n const effectiveHeight = isNaN(height) ? 1 : height\n\n const measureResult = this.editorView.measureForDimensions(\n Math.floor(effectiveWidth),\n Math.floor(effectiveHeight),\n )\n\n const measuredWidth = measureResult ? Math.max(1, measureResult.maxWidth) : 1\n const measuredHeight = measureResult ? Math.max(1, measureResult.lineCount) : 1\n\n if (widthMode === MeasureMode.AtMost && this._positionType !== \"absolute\") {\n return {\n width: Math.min(effectiveWidth, measuredWidth),\n height: Math.min(effectiveHeight, measuredHeight),\n }\n }\n\n return {\n width: measuredWidth,\n height: 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 override destroy(): void {\n if (this.isDestroyed) return\n\n if (this._focused) {\n this._ctx.setCursorPosition(0, 0, false)\n // Manually blur to unhook event handlers BEFORE setting destroyed flag\n // This prevents the guard in super.destroy() from skipping blur()\n this.blur()\n }\n\n // Destroy dependent resources in correct order BEFORE calling super\n // EditorView depends on EditBuffer, so destroy it first\n this.editorView.destroy()\n this.editBuffer.destroy()\n\n // Finally clean up parent resources\n // Note: super.destroy() will try to blur() again, but blur() has guards to prevent double-blur\n super.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 /**\n * Set text and completely reset the buffer state (clears history, resets add_buffer).\n * Use this for initial text setting or when you want a clean slate.\n */\n public setText(text: string): void {\n this.editBuffer.setText(text)\n this.yogaNode.markDirty()\n this.requestRender()\n }\n\n /**\n * Replace text while preserving undo history (creates an undo point).\n * Use this when you want the setText operation to be undoable.\n */\n public replaceText(text: string): void {\n this.editBuffer.replaceText(text)\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 protected updateSelectionForMovement(shiftPressed: boolean, isBeforeMovement: boolean): void {\n if (!this.selectable) return\n\n if (!shiftPressed) {\n this._ctx.clearSelection()\n this._selectionAnchorState = null\n return\n }\n\n const visualCursor = this.editorView.getVisualCursor()\n const viewport = this.editorView.getViewport()\n\n const cursorX = this.x + visualCursor.visualCol\n const cursorY = this.y + visualCursor.visualRow\n\n if (isBeforeMovement) {\n if (!this._ctx.hasSelection) {\n this._ctx.startSelection(this, cursorX, cursorY)\n this._selectionAnchorState = {\n screenX: cursorX,\n screenY: cursorY,\n viewportX: viewport.offsetX,\n viewportY: viewport.offsetY,\n }\n } else if (!this._selectionAnchorState) {\n // Selection exists but we don't have state (e.g. from mouse), capture it\n const selection = this._ctx.getSelection()\n if (selection && selection.isActive) {\n this._selectionAnchorState = {\n screenX: selection.anchor.x,\n screenY: selection.anchor.y,\n viewportX: viewport.offsetX,\n viewportY: viewport.offsetY,\n }\n }\n }\n } else {\n // After movement - check if viewport changed\n if (this._selectionAnchorState) {\n const deltaY = viewport.offsetY - this._selectionAnchorState.viewportY\n const deltaX = viewport.offsetX - this._selectionAnchorState.viewportX\n\n if (deltaY !== 0 || deltaX !== 0) {\n const newAnchorX = this._selectionAnchorState.screenX - deltaX\n const newAnchorY = this._selectionAnchorState.screenY - deltaY\n\n // We need to update the anchor without losing focus position\n // startSelection sets both anchor and focus to the same point\n this._ctx.startSelection(this, newAnchorX, newAnchorY)\n this._ctx.updateSelection(this, cursorX, cursorY)\n } else {\n this._ctx.updateSelection(this, cursorX, cursorY)\n }\n } else {\n this._ctx.updateSelection(this, cursorX, cursorY)\n }\n }\n }\n}\n",
|
|
39
|
+
"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 type KeyAliasMap,\n defaultKeyAliases,\n mergeKeyAliases,\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 | \"visual-line-home\"\n | \"visual-line-end\"\n | \"select-visual-line-home\"\n | \"select-visual-line-end\"\n | \"buffer-home\"\n | \"buffer-end\"\n | \"select-buffer-home\"\n | \"select-buffer-end\"\n | \"delete-line\"\n | \"delete-to-line-end\"\n | \"delete-to-line-start\"\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: \"buffer-home\" },\n { name: \"end\", action: \"buffer-end\" },\n { name: \"home\", shift: true, action: \"select-buffer-home\" },\n { name: \"end\", shift: true, action: \"select-buffer-end\" },\n { name: \"a\", ctrl: true, action: \"line-home\" },\n { name: \"e\", ctrl: true, action: \"line-end\" },\n { name: \"a\", ctrl: true, shift: true, action: \"select-line-home\" },\n { name: \"e\", ctrl: true, shift: true, action: \"select-line-end\" },\n { name: \"a\", meta: true, action: \"visual-line-home\" },\n { name: \"e\", meta: true, action: \"visual-line-end\" },\n { name: \"a\", meta: true, shift: true, action: \"select-visual-line-home\" },\n { name: \"e\", meta: true, shift: true, action: \"select-visual-line-end\" },\n { name: \"f\", ctrl: true, action: \"move-right\" },\n { name: \"b\", ctrl: true, action: \"move-left\" },\n { name: \"w\", ctrl: true, action: \"delete-word-backward\" },\n { name: \"backspace\", ctrl: true, action: \"delete-word-backward\" },\n { name: \"d\", meta: true, action: \"delete-word-forward\" },\n { name: \"delete\", meta: true, action: \"delete-word-forward\" },\n { name: \"delete\", ctrl: true, action: \"delete-word-forward\" },\n { name: \"d\", ctrl: true, shift: true, action: \"delete-line\" },\n { name: \"k\", ctrl: true, action: \"delete-to-line-end\" },\n { name: \"u\", ctrl: true, action: \"delete-to-line-start\" },\n { name: \"backspace\", action: \"backspace\" },\n { name: \"backspace\", shift: true, action: \"backspace\" },\n { name: \"d\", ctrl: true, action: \"delete\" },\n { name: \"delete\", action: \"delete\" },\n { name: \"delete\", shift: true, action: \"delete\" },\n { name: \"return\", action: \"newline\" },\n { name: \"linefeed\", action: \"newline\" },\n { name: \"return\", meta: true, action: \"submit\" },\n\n // undo/redo\n { name: \"-\", ctrl: true, action: \"undo\" },\n { name: \".\", ctrl: true, action: \"redo\" },\n { name: \"z\", super: true, action: \"undo\" },\n { name: \"z\", super: true, shift: true, action: \"redo\" },\n\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: \"right\", ctrl: true, action: \"word-forward\" },\n { name: \"left\", ctrl: 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: \"backspace\", meta: 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 keyAliasMap?: KeyAliasMap\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 _keyAliasMap: KeyAliasMap\n private _keyBindings: KeyBinding[]\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 this._keyAliasMap = mergeKeyAliases(defaultKeyAliases, options.keyAliasMap || {})\n this._keyBindings = options.keyBindings || []\n const mergedBindings = mergeKeyBindings(defaultTextareaKeybindings, this._keyBindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\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 [\"visual-line-home\", () => this.gotoVisualLineHome()],\n [\"visual-line-end\", () => this.gotoVisualLineEnd()],\n [\"select-visual-line-home\", () => this.gotoVisualLineHome({ select: true })],\n [\"select-visual-line-end\", () => this.gotoVisualLineEnd({ select: true })],\n [\"select-buffer-home\", () => this.gotoBufferHome({ select: true })],\n [\"select-buffer-end\", () => this.gotoBufferEnd({ 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 [\"delete-to-line-start\", () => this.deleteToLineStart()],\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): boolean {\n const bindingKey = getKeyBindingKey({\n name: key.name,\n ctrl: key.ctrl,\n shift: key.shift,\n meta: key.meta,\n super: key.super,\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 (!key.ctrl && !key.meta && !key.super && !key.hyper) {\n if (key.name === \"space\") {\n this.insertText(\" \")\n return true\n }\n\n if (key.sequence) {\n const firstCharCode = key.sequence.charCodeAt(0)\n\n if (firstCharCode < 32) {\n return false\n }\n\n if (firstCharCode === 127) {\n return false\n }\n\n this.insertText(key.sequence)\n return true\n }\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.updateSelectionForMovement(select, true)\n this.editBuffer.moveCursorLeft()\n this.updateSelectionForMovement(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.updateSelectionForMovement(select, true)\n this.editBuffer.moveCursorRight()\n this.updateSelectionForMovement(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.updateSelectionForMovement(select, true)\n this.editorView.moveUpVisual()\n this.updateSelectionForMovement(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.updateSelectionForMovement(select, true)\n this.editorView.moveDownVisual()\n this.updateSelectionForMovement(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.updateSelectionForMovement(select, true)\n const cursor = this.editorView.getCursor()\n if (cursor.col === 0 && cursor.row > 0) {\n this.editBuffer.setCursor(cursor.row - 1, 0)\n const prevLineEol = this.editBuffer.getEOL()\n this.editBuffer.setCursor(prevLineEol.row, prevLineEol.col)\n } else {\n this.editBuffer.setCursor(cursor.row, 0)\n }\n\n this.updateSelectionForMovement(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.updateSelectionForMovement(select, true)\n const cursor = this.editorView.getCursor()\n const eol = this.editBuffer.getEOL()\n const lineCount = this.editBuffer.getLineCount()\n if (cursor.col === eol.col && cursor.row < lineCount - 1) {\n this.editBuffer.setCursor(cursor.row + 1, 0)\n } else {\n this.editBuffer.setCursor(eol.row, eol.col)\n }\n\n this.updateSelectionForMovement(select, false)\n this.requestRender()\n return true\n }\n\n public gotoVisualLineHome(options?: { select?: boolean }): boolean {\n const select = options?.select ?? false\n this.updateSelectionForMovement(select, true)\n\n const sol = this.editorView.getVisualSOL()\n this.editBuffer.setCursor(sol.logicalRow, sol.logicalCol)\n\n this.updateSelectionForMovement(select, false)\n this.requestRender()\n return true\n }\n\n public gotoVisualLineEnd(options?: { select?: boolean }): boolean {\n const select = options?.select ?? false\n this.updateSelectionForMovement(select, true)\n\n const eol = this.editorView.getVisualEOL()\n this.editBuffer.setCursor(eol.logicalRow, eol.logicalCol)\n\n this.updateSelectionForMovement(select, false)\n this.requestRender()\n return true\n }\n\n public gotoBufferHome(options?: { select?: boolean }): boolean {\n const select = options?.select ?? false\n this.updateSelectionForMovement(select, true)\n this.editBuffer.setCursor(0, 0)\n this.updateSelectionForMovement(select, false)\n this.requestRender()\n return true\n }\n\n public gotoBufferEnd(options?: { select?: boolean }): boolean {\n const select = options?.select ?? false\n this.updateSelectionForMovement(select, true)\n this.editBuffer.gotoLine(999999)\n this.updateSelectionForMovement(select, false)\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 deleteToLineStart(): boolean {\n const cursor = this.editorView.getCursor()\n\n if (cursor.col > 0) {\n this.editBuffer.deleteRange(cursor.row, 0, cursor.row, cursor.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.updateSelectionForMovement(select, true)\n const nextWord = this.editBuffer.getNextWordBoundary()\n this.editBuffer.setCursorByOffset(nextWord.offset)\n this.updateSelectionForMovement(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.updateSelectionForMovement(select, true)\n const prevWord = this.editBuffer.getPrevWordBoundary()\n this.editBuffer.setCursorByOffset(prevWord.offset)\n this.updateSelectionForMovement(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 public focus(): void {\n super.focus()\n this.updateColors()\n }\n\n public blur(): void {\n super.blur()\n if (!this.isDestroyed) {\n this.updateColors()\n }\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 this._keyBindings = bindings\n const mergedBindings = mergeKeyBindings(defaultTextareaKeybindings, bindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\n }\n\n public set keyAliasMap(aliases: KeyAliasMap) {\n this._keyAliasMap = mergeKeyAliases(defaultKeyAliases, aliases)\n const mergedBindings = mergeKeyBindings(defaultTextareaKeybindings, this._keyBindings)\n this._keyBindingsMap = buildKeyBindingsMap(mergedBindings, this._keyAliasMap)\n }\n\n public get extmarks(): ExtmarksController {\n return this.editorView.extmarks\n }\n}\n"
|
|
41
40
|
],
|
|
42
|
-
"mappings": "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",
|
|
43
|
-
"debugId": "
|
|
41
|
+
"mappings": "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",
|
|
42
|
+
"debugId": "7F98B9DEC58574A464756E2164756E21",
|
|
44
43
|
"names": []
|
|
45
44
|
}
|