@suds-cli/tea 0.0.0 → 0.1.0-alpha.0
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/README.md +260 -0
- package/dist/index.cjs +1125 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +337 -0
- package/dist/index.d.ts +337 -12
- package/dist/index.js +1084 -51
- package/dist/index.js.map +1 -1
- package/package.json +30 -18
- package/dist/commands.d.ts +0 -27
- package/dist/commands.d.ts.map +0 -1
- package/dist/commands.js +0 -106
- package/dist/commands.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/input.d.ts +0 -8
- package/dist/input.d.ts.map +0 -1
- package/dist/input.js +0 -98
- package/dist/input.js.map +0 -1
- package/dist/keys.d.ts +0 -86
- package/dist/keys.d.ts.map +0 -1
- package/dist/keys.js +0 -317
- package/dist/keys.js.map +0 -1
- package/dist/messages.d.ts +0 -78
- package/dist/messages.d.ts.map +0 -1
- package/dist/messages.js +0 -104
- package/dist/messages.js.map +0 -1
- package/dist/mouse.d.ts +0 -46
- package/dist/mouse.d.ts.map +0 -1
- package/dist/mouse.js +0 -167
- package/dist/mouse.js.map +0 -1
- package/dist/program.d.ts +0 -39
- package/dist/program.d.ts.map +0 -1
- package/dist/program.js +0 -231
- package/dist/program.js.map +0 -1
- package/dist/renderer.d.ts +0 -19
- package/dist/renderer.d.ts.map +0 -1
- package/dist/renderer.js +0 -49
- package/dist/renderer.js.map +0 -1
- package/dist/screen.d.ts +0 -22
- package/dist/screen.d.ts.map +0 -1
- package/dist/screen.js +0 -35
- package/dist/screen.js.map +0 -1
- package/dist/terminal.d.ts +0 -32
- package/dist/terminal.d.ts.map +0 -1
- package/dist/terminal.js +0 -119
- package/dist/terminal.js.map +0 -1
- package/dist/types.d.ts +0 -36
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/messages.ts","../src/keys.ts","../src/mouse.ts","../src/input.ts","../src/renderer.ts","../src/terminal.ts","../src/program.ts","../src/commands.ts","../src/screen.ts"],"names":["KeyType","decodeString","byteLength","rune","decodeFirstRune","MouseAction","MouseButton","allocBytes","concatBytes","encodeString","CLEAR_SCREEN","CURSOR_HOME","ALT_SCREEN_ON","ALT_SCREEN_OFF","CURSOR_SHOW","CURSOR_HIDE","MOUSE_CELL_ON","MOUSE_SGR_ON","MOUSE_ALL_ON","MOUSE_CELL_OFF","MOUSE_ALL_OFF","MOUSE_SGR_OFF","BRACKETED_PASTE_ON","BRACKETED_PASTE_OFF","REPORT_FOCUS_ON","REPORT_FOCUS_OFF","msg"],"mappings":"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","file":"index.cjs","sourcesContent":["/** @public Request graceful program termination. */\nexport class QuitMsg {\n readonly _tag = 'quit'\n}\n\n/** @public Interrupt the program (SIGINT). */\nexport class InterruptMsg {\n readonly _tag = 'interrupt'\n}\n\n/** @public Suspend the program (Ctrl+Z). */\nexport class SuspendMsg {\n readonly _tag = 'suspend'\n}\n\n/** @public Resume the program after suspension. */\nexport class ResumeMsg {\n readonly _tag = 'resume'\n}\n\n/** @public Report the current terminal width and height. */\nexport class WindowSizeMsg {\n readonly _tag = 'window-size'\n constructor(\n public readonly width: number,\n public readonly height: number,\n ) {}\n}\n\n/** @public Terminal focus gained. */\nexport class FocusMsg {\n readonly _tag = 'focus'\n}\n\n/** @public Terminal focus lost. */\nexport class BlurMsg {\n readonly _tag = 'blur'\n}\n\n/** @public Clear the terminal screen. */\nexport class ClearScreenMsg {\n readonly _tag = 'clear-screen'\n}\n\n/** @public Enter the alternate screen buffer. */\nexport class EnterAltScreenMsg {\n readonly _tag = 'enter-alt-screen'\n}\n\n/** @public Exit the alternate screen buffer. */\nexport class ExitAltScreenMsg {\n readonly _tag = 'exit-alt-screen'\n}\n\n/** @public Enable cell-based mouse reporting. */\nexport class EnableMouseCellMotionMsg {\n readonly _tag = 'enable-mouse-cell-motion'\n}\n\n/** @public Enable all-motion mouse reporting. */\nexport class EnableMouseAllMotionMsg {\n readonly _tag = 'enable-mouse-all-motion'\n}\n\n/** @public Disable mouse reporting. */\nexport class DisableMouseMsg {\n readonly _tag = 'disable-mouse'\n}\n\n/** @public Show the cursor. */\nexport class ShowCursorMsg {\n readonly _tag = 'show-cursor'\n}\n\n/** @public Hide the cursor. */\nexport class HideCursorMsg {\n readonly _tag = 'hide-cursor'\n}\n\n/** @public Enable focus in/out reporting. */\nexport class EnableReportFocusMsg {\n readonly _tag = 'enable-report-focus'\n}\n\n/** @public Disable focus in/out reporting. */\nexport class DisableReportFocusMsg {\n readonly _tag = 'disable-report-focus'\n}\n\n/** @public Set the terminal window title. */\nexport class SetWindowTitleMsg {\n readonly _tag = 'set-window-title'\n constructor(public readonly title: string) {}\n}\n","import { decodeFirstRune, decodeString, byteLength } from '@suds-cli/machine'\n\n/** @public Known key types parsed from terminal input. */\nexport enum KeyType {\n Null = 'null',\n Break = 'break',\n Enter = 'enter',\n Backspace = 'backspace',\n Tab = 'tab',\n Esc = 'esc',\n Space = 'space',\n Runes = 'runes',\n Up = 'up',\n Down = 'down',\n Right = 'right',\n Left = 'left',\n ShiftTab = 'shift+tab',\n Home = 'home',\n End = 'end',\n PgUp = 'pgup',\n PgDown = 'pgdown',\n CtrlPgUp = 'ctrl+pgup',\n CtrlPgDown = 'ctrl+pgdown',\n Delete = 'delete',\n Insert = 'insert',\n CtrlUp = 'ctrl+up',\n CtrlDown = 'ctrl+down',\n CtrlRight = 'ctrl+right',\n CtrlLeft = 'ctrl+left',\n CtrlHome = 'ctrl+home',\n CtrlEnd = 'ctrl+end',\n ShiftUp = 'shift+up',\n ShiftDown = 'shift+down',\n ShiftRight = 'shift+right',\n ShiftLeft = 'shift+left',\n ShiftHome = 'shift+home',\n ShiftEnd = 'shift+end',\n CtrlShiftUp = 'ctrl+shift+up',\n CtrlShiftDown = 'ctrl+shift+down',\n CtrlShiftLeft = 'ctrl+shift+left',\n CtrlShiftRight = 'ctrl+shift+right',\n CtrlShiftHome = 'ctrl+shift+home',\n CtrlShiftEnd = 'ctrl+shift+end',\n F1 = 'f1',\n F2 = 'f2',\n F3 = 'f3',\n F4 = 'f4',\n F5 = 'f5',\n F6 = 'f6',\n F7 = 'f7',\n F8 = 'f8',\n F9 = 'f9',\n F10 = 'f10',\n F11 = 'f11',\n F12 = 'f12',\n F13 = 'f13',\n F14 = 'f14',\n F15 = 'f15',\n F16 = 'f16',\n F17 = 'f17',\n F18 = 'f18',\n F19 = 'f19',\n F20 = 'f20',\n}\n\n/** @public Parsed key metadata. */\nexport interface Key {\n type: KeyType\n runes: string\n alt: boolean\n paste: boolean\n}\n\nconst keyNames: Record<KeyType, string> = {\n [KeyType.Null]: 'ctrl+@',\n [KeyType.Break]: 'ctrl+c',\n [KeyType.Enter]: 'enter',\n [KeyType.Backspace]: 'backspace',\n [KeyType.Tab]: 'tab',\n [KeyType.Esc]: 'esc',\n [KeyType.Space]: ' ',\n [KeyType.Runes]: 'runes',\n [KeyType.Up]: 'up',\n [KeyType.Down]: 'down',\n [KeyType.Right]: 'right',\n [KeyType.Left]: 'left',\n [KeyType.ShiftTab]: 'shift+tab',\n [KeyType.Home]: 'home',\n [KeyType.End]: 'end',\n [KeyType.PgUp]: 'pgup',\n [KeyType.PgDown]: 'pgdown',\n [KeyType.CtrlPgUp]: 'ctrl+pgup',\n [KeyType.CtrlPgDown]: 'ctrl+pgdown',\n [KeyType.Delete]: 'delete',\n [KeyType.Insert]: 'insert',\n [KeyType.CtrlUp]: 'ctrl+up',\n [KeyType.CtrlDown]: 'ctrl+down',\n [KeyType.CtrlRight]: 'ctrl+right',\n [KeyType.CtrlLeft]: 'ctrl+left',\n [KeyType.CtrlHome]: 'ctrl+home',\n [KeyType.CtrlEnd]: 'ctrl+end',\n [KeyType.ShiftUp]: 'shift+up',\n [KeyType.ShiftDown]: 'shift+down',\n [KeyType.ShiftRight]: 'shift+right',\n [KeyType.ShiftLeft]: 'shift+left',\n [KeyType.ShiftHome]: 'shift+home',\n [KeyType.ShiftEnd]: 'shift+end',\n [KeyType.CtrlShiftUp]: 'ctrl+shift+up',\n [KeyType.CtrlShiftDown]: 'ctrl+shift+down',\n [KeyType.CtrlShiftLeft]: 'ctrl+shift+left',\n [KeyType.CtrlShiftRight]: 'ctrl+shift+right',\n [KeyType.CtrlShiftHome]: 'ctrl+shift+home',\n [KeyType.CtrlShiftEnd]: 'ctrl+shift+end',\n [KeyType.F1]: 'f1',\n [KeyType.F2]: 'f2',\n [KeyType.F3]: 'f3',\n [KeyType.F4]: 'f4',\n [KeyType.F5]: 'f5',\n [KeyType.F6]: 'f6',\n [KeyType.F7]: 'f7',\n [KeyType.F8]: 'f8',\n [KeyType.F9]: 'f9',\n [KeyType.F10]: 'f10',\n [KeyType.F11]: 'f11',\n [KeyType.F12]: 'f12',\n [KeyType.F13]: 'f13',\n [KeyType.F14]: 'f14',\n [KeyType.F15]: 'f15',\n [KeyType.F16]: 'f16',\n [KeyType.F17]: 'f17',\n [KeyType.F18]: 'f18',\n [KeyType.F19]: 'f19',\n [KeyType.F20]: 'f20',\n}\n\nconst controlKeyMap: Record<number, KeyType | undefined> = {\n 0: KeyType.Null,\n 3: KeyType.Break,\n 9: KeyType.Tab,\n 10: KeyType.Enter,\n 13: KeyType.Enter,\n 27: KeyType.Esc,\n 127: KeyType.Backspace,\n}\n\ntype Sequence = [string, Key]\n\nconst sequences: Sequence[] = [\n ['\\u001b[A', { type: KeyType.Up, runes: '', alt: false, paste: false }],\n ['\\u001b[B', { type: KeyType.Down, runes: '', alt: false, paste: false }],\n ['\\u001b[C', { type: KeyType.Right, runes: '', alt: false, paste: false }],\n ['\\u001b[D', { type: KeyType.Left, runes: '', alt: false, paste: false }],\n ['\\u001b[Z', { type: KeyType.ShiftTab, runes: '', alt: false, paste: false }],\n ['\\u001b[2~', { type: KeyType.Insert, runes: '', alt: false, paste: false }],\n ['\\u001b[3~', { type: KeyType.Delete, runes: '', alt: false, paste: false }],\n ['\\u001b[5~', { type: KeyType.PgUp, runes: '', alt: false, paste: false }],\n ['\\u001b[6~', { type: KeyType.PgDown, runes: '', alt: false, paste: false }],\n ['\\u001b[1~', { type: KeyType.Home, runes: '', alt: false, paste: false }],\n ['\\u001b[4~', { type: KeyType.End, runes: '', alt: false, paste: false }],\n ['\\u001b[H', { type: KeyType.Home, runes: '', alt: false, paste: false }],\n ['\\u001b[F', { type: KeyType.End, runes: '', alt: false, paste: false }],\n ['\\u001bOP', { type: KeyType.F1, runes: '', alt: false, paste: false }],\n ['\\u001bOQ', { type: KeyType.F2, runes: '', alt: false, paste: false }],\n ['\\u001bOR', { type: KeyType.F3, runes: '', alt: false, paste: false }],\n ['\\u001bOS', { type: KeyType.F4, runes: '', alt: false, paste: false }],\n ['\\u001b[15~', { type: KeyType.F5, runes: '', alt: false, paste: false }],\n ['\\u001b[17~', { type: KeyType.F6, runes: '', alt: false, paste: false }],\n ['\\u001b[18~', { type: KeyType.F7, runes: '', alt: false, paste: false }],\n ['\\u001b[19~', { type: KeyType.F8, runes: '', alt: false, paste: false }],\n ['\\u001b[20~', { type: KeyType.F9, runes: '', alt: false, paste: false }],\n ['\\u001b[21~', { type: KeyType.F10, runes: '', alt: false, paste: false }],\n ['\\u001b[23~', { type: KeyType.F11, runes: '', alt: false, paste: false }],\n ['\\u001b[24~', { type: KeyType.F12, runes: '', alt: false, paste: false }],\n [\n '\\u001b[1;2A',\n { type: KeyType.ShiftUp, runes: '', alt: false, paste: false },\n ],\n [\n '\\u001b[1;2B',\n { type: KeyType.ShiftDown, runes: '', alt: false, paste: false },\n ],\n [\n '\\u001b[1;2C',\n { type: KeyType.ShiftRight, runes: '', alt: false, paste: false },\n ],\n [\n '\\u001b[1;2D',\n { type: KeyType.ShiftLeft, runes: '', alt: false, paste: false },\n ],\n [\n '\\u001b[1;5A',\n { type: KeyType.CtrlUp, runes: '', alt: false, paste: false },\n ],\n [\n '\\u001b[1;5B',\n { type: KeyType.CtrlDown, runes: '', alt: false, paste: false },\n ],\n [\n '\\u001b[1;5C',\n { type: KeyType.CtrlRight, runes: '', alt: false, paste: false },\n ],\n [\n '\\u001b[1;5D',\n { type: KeyType.CtrlLeft, runes: '', alt: false, paste: false },\n ],\n [\n '\\u001b[1;6A',\n { type: KeyType.CtrlShiftUp, runes: '', alt: false, paste: false },\n ],\n [\n '\\u001b[1;6B',\n { type: KeyType.CtrlShiftDown, runes: '', alt: false, paste: false },\n ],\n [\n '\\u001b[1;6C',\n { type: KeyType.CtrlShiftRight, runes: '', alt: false, paste: false },\n ],\n [\n '\\u001b[1;6D',\n { type: KeyType.CtrlShiftLeft, runes: '', alt: false, paste: false },\n ],\n ['\\u001b[1;3A', { type: KeyType.Up, runes: '', alt: true, paste: false }],\n ['\\u001b[1;3B', { type: KeyType.Down, runes: '', alt: true, paste: false }],\n ['\\u001b[1;3C', { type: KeyType.Right, runes: '', alt: true, paste: false }],\n ['\\u001b[1;3D', { type: KeyType.Left, runes: '', alt: true, paste: false }],\n [\n '\\u001b[5;5~',\n { type: KeyType.CtrlPgUp, runes: '', alt: false, paste: false },\n ],\n [\n '\\u001b[6;5~',\n { type: KeyType.CtrlPgDown, runes: '', alt: false, paste: false },\n ],\n ['\\u001b[5;3~', { type: KeyType.PgUp, runes: '', alt: true, paste: false }],\n ['\\u001b[6;3~', { type: KeyType.PgDown, runes: '', alt: true, paste: false }],\n ['\\u001b[3;2~', { type: KeyType.Insert, runes: '', alt: true, paste: false }],\n ['\\u001b[3;3~', { type: KeyType.Delete, runes: '', alt: true, paste: false }],\n ['\\u001b[[A', { type: KeyType.F1, runes: '', alt: false, paste: false }],\n ['\\u001b[[B', { type: KeyType.F2, runes: '', alt: false, paste: false }],\n ['\\u001b[[C', { type: KeyType.F3, runes: '', alt: false, paste: false }],\n ['\\u001b[[D', { type: KeyType.F4, runes: '', alt: false, paste: false }],\n ['\\u001b[[E', { type: KeyType.F5, runes: '', alt: false, paste: false }],\n]\n\n/** @public Message representing a parsed key event. */\nexport class KeyMsg {\n readonly _tag = 'key'\n constructor(public readonly key: Key) {}\n\n toString(): string {\n return keyToString(this.key)\n }\n}\n\n/** @public Convert a parsed key to a human-readable string. */\nexport function keyToString(key: Key): string {\n if (key.type === KeyType.Runes) {\n const value = key.paste ? `[${key.runes}]` : key.runes\n return key.alt ? `alt+${value}` : value\n }\n const base = keyNames[key.type] ?? ''\n return key.alt ? `alt+${base}` : base\n}\n\nexport function parseKey(\n buffer: Uint8Array,\n allowMoreData: boolean,\n): { key: Key; length: number } | { needMore: true } | undefined {\n if (buffer.length === 0) {\n return allowMoreData ? { needMore: true } : undefined\n }\n const input = decodeString(buffer)\n\n for (const [seq, key] of sequences) {\n if (input.startsWith(seq)) {\n return { key, length: byteLength(seq) }\n }\n if (allowMoreData && seq.startsWith(input)) {\n return { needMore: true }\n }\n }\n\n if (buffer[0] === 0x1b && buffer.length > 1) {\n const [rune, altLength] = decodeFirstRune(buffer, 1)\n if (altLength > 0 && rune !== null) {\n return {\n key: { type: KeyType.Runes, runes: rune, alt: true, paste: false },\n length: 1 + altLength,\n }\n }\n }\n\n const code: number = buffer[0] ?? 0\n const mapped: KeyType | undefined = Object.prototype.hasOwnProperty.call(\n controlKeyMap,\n code,\n )\n ? controlKeyMap[code]\n : undefined\n if (mapped !== undefined) {\n return {\n key: { type: mapped, runes: '', alt: false, paste: false },\n length: 1,\n }\n }\n\n const [rune, runeLength] = decodeFirstRune(buffer)\n if (runeLength === 0 || rune === null) {\n return allowMoreData ? { needMore: true } : undefined\n }\n\n if (rune === ' ') {\n return {\n key: { type: KeyType.Space, runes: rune, alt: false, paste: false },\n length: runeLength,\n }\n }\n\n return {\n key: { type: KeyType.Runes, runes: rune, alt: false, paste: false },\n length: runeLength,\n }\n}\n","import { decodeString } from '@suds-cli/machine'\n\n/** @public Mouse action type. */\nexport enum MouseAction {\n Press = 'press',\n Release = 'release',\n Motion = 'motion',\n}\n\n/** @public Mouse button identifiers, including wheels. */\nexport enum MouseButton {\n None = 'none',\n Left = 'left',\n Middle = 'middle',\n Right = 'right',\n WheelUp = 'wheel-up',\n WheelDown = 'wheel-down',\n WheelLeft = 'wheel-left',\n WheelRight = 'wheel-right',\n Backward = 'backward',\n Forward = 'forward',\n Button10 = 'button-10',\n Button11 = 'button-11',\n}\n\n/** @public Parsed mouse event payload. */\nexport interface MouseEvent {\n x: number\n y: number\n shift: boolean\n alt: boolean\n ctrl: boolean\n action: MouseAction\n button: MouseButton\n}\n\n/** @public Message representing a parsed mouse event. */\nexport class MouseMsg {\n readonly _tag = 'mouse'\n constructor(public readonly event: MouseEvent) {}\n\n toString(): string {\n const parts = [\n this.event.ctrl ? 'ctrl' : '',\n this.event.alt ? 'alt' : '',\n this.event.shift ? 'shift' : '',\n ].filter(Boolean)\n const mods = parts.length > 0 ? `${parts.join('+')}+` : ''\n return `${mods}${this.event.button} ${this.event.action} @${this.event.x},${this.event.y}`\n }\n}\n\nconst mouseSGRRegex = /(\\d+);(\\d+);(\\d+)([Mm])/\nconst mouseEventX10Len = 6\nconst x10MouseByteOffset = 32\n\nexport function parseMouse(\n buffer: Uint8Array,\n allowMoreData: boolean,\n): { msg: MouseMsg; length: number } | { needMore: true } | undefined {\n if (buffer.length < 3 || buffer[0] !== 0x1b || buffer[1] !== 0x5b) {\n return undefined\n }\n\n if (buffer[2] === 0x4d) {\n if (buffer.length < mouseEventX10Len) {\n return allowMoreData ? { needMore: true } : undefined\n }\n const event = parseX10MouseEvent(buffer.subarray(0, mouseEventX10Len))\n return { msg: new MouseMsg(event), length: mouseEventX10Len }\n }\n\n if (buffer[2] === 0x3c) {\n const slice = decodeString(buffer)\n const match = mouseSGRRegex.exec(slice.slice(3))\n if (!match) {\n return allowMoreData ? { needMore: true } : undefined\n }\n const event = parseSGRMouseEvent(slice)\n const matchedLength = match[0]?.length ?? 0\n return { msg: new MouseMsg(event), length: matchedLength + 3 }\n }\n\n return undefined\n}\n\nfunction parseSGRMouseEvent(seq: string): MouseEvent {\n const match = mouseSGRRegex.exec(seq.slice(3))\n if (!match) {\n return defaultMouseEvent()\n }\n\n const buttonCode = Number.parseInt(match[1] ?? '0', 10)\n const px = Number.parseInt(match[2] ?? '0', 10)\n const py = Number.parseInt(match[3] ?? '0', 10)\n const release = match[4] === 'm'\n\n const event = parseMouseButton(buttonCode, true)\n\n if (event.action !== MouseAction.Motion && !eventIsWheel(event) && release) {\n event.action = MouseAction.Release\n }\n\n event.x = px - 1\n event.y = py - 1\n\n return event\n}\n\nfunction parseX10MouseEvent(buf: Uint8Array): MouseEvent {\n const buttonByte = buf[3] ?? 0\n const c1 = buf[4] ?? 0\n const c2 = buf[5] ?? 0\n const event = parseMouseButton(buttonByte, false)\n event.x = c1 - x10MouseByteOffset - 1\n event.y = c2 - x10MouseByteOffset - 1\n return event\n}\n\nfunction parseMouseButton(code: number, isSGR: boolean): MouseEvent {\n let e = code\n if (!isSGR) {\n e -= x10MouseByteOffset\n }\n\n const bitShift = 0b0000_0100\n const bitAlt = 0b0000_1000\n const bitCtrl = 0b0001_0000\n const bitMotion = 0b0010_0000\n const bitWheel = 0b0100_0000\n const bitAdd = 0b1000_0000\n const bitsMask = 0b0000_0011\n\n const event = defaultMouseEvent()\n\n if ((e & bitAdd) !== 0) {\n const extraButtons: Record<number, MouseButton> = {\n 0: MouseButton.Backward,\n 1: MouseButton.Forward,\n 2: MouseButton.Button10,\n 3: MouseButton.Button11,\n }\n event.button = extraButtons[e & bitsMask] ?? MouseButton.None\n } else if ((e & bitWheel) !== 0) {\n const wheelButtons: Record<number, MouseButton> = {\n 0: MouseButton.WheelUp,\n 1: MouseButton.WheelDown,\n 2: MouseButton.WheelLeft,\n 3: MouseButton.WheelRight,\n }\n event.button = wheelButtons[e & bitsMask] ?? MouseButton.None\n } else {\n const baseButtons: Record<number, MouseButton> = {\n 0: MouseButton.Left,\n 1: MouseButton.Middle,\n 2: MouseButton.Right,\n 3: MouseButton.None,\n }\n event.button = baseButtons[e & bitsMask] ?? MouseButton.None\n if ((e & bitsMask) === bitsMask) {\n event.action = MouseAction.Release\n event.button = MouseButton.None\n }\n }\n\n if ((e & bitMotion) !== 0 && !eventIsWheel(event)) {\n event.action = MouseAction.Motion\n }\n\n event.alt = (e & bitAlt) !== 0\n event.ctrl = (e & bitCtrl) !== 0\n event.shift = (e & bitShift) !== 0\n\n return event\n}\n\nfunction eventIsWheel(event: MouseEvent): boolean {\n return (\n event.button === MouseButton.WheelUp ||\n event.button === MouseButton.WheelDown ||\n event.button === MouseButton.WheelLeft ||\n event.button === MouseButton.WheelRight\n )\n}\n\nfunction defaultMouseEvent(): MouseEvent {\n return {\n x: 0,\n y: 0,\n shift: false,\n alt: false,\n ctrl: false,\n action: MouseAction.Press,\n button: MouseButton.None,\n }\n}\n","import type { Disposable, PlatformAdapter } from '@suds-cli/machine'\nimport { allocBytes, concatBytes, encodeString } from '@suds-cli/machine'\nimport { BlurMsg, FocusMsg } from './messages.js'\nimport { KeyMsg, KeyType, parseKey } from './keys.js'\nimport { parseMouse } from './mouse.js'\nimport type { Msg } from './types.js'\n\n/** @public Options for the input reader. */\nexport interface InputOptions {\n platform?: PlatformAdapter\n onMessage: (msg: Msg) => void\n}\n\nconst BRACKET_PASTE_START = '\\u001b[200~'\nconst BRACKET_PASTE_END = '\\u001b[201~'\n\nexport function startInput(options: InputOptions): () => void {\n if (!options.platform) {\n // No platform adapter available, return no-op cleanup\n return () => {}\n }\n\n let buffer: Uint8Array = allocBytes(0)\n let disposable: Disposable | null = null\n\n const onData = (data: Uint8Array) => {\n buffer = concatBytes(buffer, data)\n buffer = consumeBuffer(buffer, options.onMessage)\n }\n\n disposable = options.platform.terminal.onInput(onData)\n\n return () => {\n if (disposable) {\n disposable.dispose()\n }\n }\n}\n\nfunction consumeBuffer(buffer: Uint8Array, push: (msg: Msg) => void): Uint8Array {\n let offset = 0\n\n while (offset < buffer.length) {\n const slice = buffer.subarray(offset)\n const result = detectOne(slice, offset + slice.length === buffer.length)\n\n if (!result || 'needMore' in result) {\n break\n }\n\n offset += result.length\n if (result.msg) {\n push(result.msg)\n }\n }\n\n return buffer.subarray(offset)\n}\n\ntype DetectResult =\n | { msg: Msg; length: number }\n | { msg?: Msg; length: number }\n | { needMore: true }\n\nfunction detectOne(\n buffer: Uint8Array,\n allowMoreData: boolean,\n): DetectResult | undefined {\n if (buffer.length === 0) {\n return allowMoreData ? { needMore: true } : undefined\n }\n const mouse = parseMouse(buffer, allowMoreData)\n if (mouse) {\n if ('needMore' in mouse) {\n return mouse\n }\n return { msg: mouse.msg, length: mouse.length }\n }\n\n const focus = detectFocus(buffer)\n if (focus) {\n return focus\n }\n\n const paste = detectBracketedPaste(buffer, allowMoreData)\n if (paste) {\n return paste\n }\n\n const key = parseKey(buffer, allowMoreData)\n if (!key) {\n return undefined\n }\n if ('needMore' in key) {\n return key\n }\n\n return { msg: new KeyMsg(key.key), length: key.length }\n}\n\nfunction detectFocus(buffer: Uint8Array): DetectResult | undefined {\n // Focus in: ESC [ I, Focus out: ESC [ O (exactly three bytes)\n if (buffer.length === 3 && buffer[0] === 0x1b && buffer[1] === 0x5b) {\n if (buffer[2] === 0x49) {\n return { msg: new FocusMsg(), length: 3 }\n }\n if (buffer[2] === 0x4f) {\n return { msg: new BlurMsg(), length: 3 }\n }\n }\n return undefined\n}\n\nfunction detectBracketedPaste(\n buffer: Uint8Array,\n allowMoreData: boolean,\n): DetectResult | undefined {\n const decoder = new TextDecoder('utf-8', { fatal: false })\n const asString = decoder.decode(buffer)\n if (!asString.startsWith(BRACKET_PASTE_START)) {\n return undefined\n }\n const endIndex = asString.indexOf(\n BRACKET_PASTE_END,\n BRACKET_PASTE_START.length,\n )\n if (endIndex === -1) {\n return allowMoreData ? { needMore: true } : undefined\n }\n const content = asString.slice(BRACKET_PASTE_START.length, endIndex)\n const fullString = BRACKET_PASTE_START + content + BRACKET_PASTE_END\n const length = encodeString(fullString).length\n const key: Msg = new KeyMsg({\n type: KeyType.Runes,\n runes: content,\n alt: false,\n paste: true,\n })\n return { msg: key, length }\n}\n","import type { PlatformAdapter, TerminalAdapter } from '@suds-cli/machine'\nimport { CURSOR_HOME, CLEAR_SCREEN } from '@suds-cli/machine'\n\n/** @public Options for the standard renderer. */\nexport interface RendererOptions {\n platform?: PlatformAdapter\n fps?: number\n}\n\nexport class StandardRenderer {\n private nextFrame: string | null = null\n private lastFrame = ''\n private ticker: ReturnType<typeof setInterval> | null = null\n private readonly terminal: TerminalAdapter | null\n private readonly frameInterval: number\n\n constructor(options: RendererOptions = {}) {\n this.terminal = options.platform?.terminal ?? null\n const fps = Math.min(Math.max(options.fps ?? 60, 1), 120)\n this.frameInterval = Math.round(1000 / fps)\n }\n\n start(): void {\n if (this.ticker) {\n return\n }\n this.ticker = setInterval(() => this.flush(), this.frameInterval)\n }\n\n stop(): void {\n this.flush()\n if (this.ticker) {\n clearInterval(this.ticker)\n this.ticker = null\n }\n }\n\n write(view: string): void {\n this.nextFrame = view ?? ''\n }\n\n repaint(): void {\n this.lastFrame = ''\n }\n\n private flush(): void {\n if (this.nextFrame === null) {\n return\n }\n const frame = this.nextFrame\n if (frame === this.lastFrame) {\n return\n }\n this.lastFrame = frame\n // Clear the full screen before writing the next frame to avoid leftover characters\n if (this.terminal) {\n this.terminal.write(`${CLEAR_SCREEN}${CURSOR_HOME}${frame}`)\n }\n }\n}\n","import type { PlatformAdapter, TerminalAdapter } from '@suds-cli/machine'\nimport {\n CURSOR_SHOW,\n CURSOR_HIDE,\n CLEAR_SCREEN,\n CURSOR_HOME,\n ALT_SCREEN_ON,\n ALT_SCREEN_OFF,\n MOUSE_CELL_ON,\n MOUSE_ALL_ON,\n MOUSE_SGR_ON,\n MOUSE_CELL_OFF,\n MOUSE_ALL_OFF,\n MOUSE_SGR_OFF,\n BRACKETED_PASTE_ON,\n BRACKETED_PASTE_OFF,\n REPORT_FOCUS_ON,\n REPORT_FOCUS_OFF,\n} from '@suds-cli/machine'\n\n/** @public Options for the terminal controller. */\nexport interface TerminalOptions {\n platform?: PlatformAdapter\n}\n\nexport class TerminalController {\n private rawMode = false\n private altScreen = false\n private bracketedPaste = false\n private focusReporting = false\n private readonly terminal: TerminalAdapter | null\n\n constructor(platform?: PlatformAdapter) {\n this.terminal = platform?.terminal ?? null\n }\n\n enableRawMode(): void {\n if (this.terminal && !this.rawMode) {\n this.terminal.enableRawMode()\n this.rawMode = true\n }\n }\n\n disableRawMode(): void {\n if (this.terminal && this.rawMode) {\n this.terminal.disableRawMode()\n this.rawMode = false\n }\n }\n\n enterAltScreen(): void {\n this.write(ALT_SCREEN_ON)\n this.altScreen = true\n }\n\n exitAltScreen(): void {\n this.write(ALT_SCREEN_OFF)\n this.altScreen = false\n }\n\n clearScreen(): void {\n this.write(`${CLEAR_SCREEN}${CURSOR_HOME}`)\n }\n\n showCursor(): void {\n this.write(CURSOR_SHOW)\n }\n\n hideCursor(): void {\n this.write(CURSOR_HIDE)\n }\n\n enableMouseCellMotion(): void {\n this.write(MOUSE_CELL_ON)\n this.write(MOUSE_SGR_ON)\n }\n\n enableMouseAllMotion(): void {\n this.write(MOUSE_ALL_ON)\n this.write(MOUSE_SGR_ON)\n }\n\n disableMouse(): void {\n this.write(MOUSE_CELL_OFF)\n this.write(MOUSE_ALL_OFF)\n this.write(MOUSE_SGR_OFF)\n }\n\n enableBracketedPaste(): void {\n this.write(BRACKETED_PASTE_ON)\n this.bracketedPaste = true\n }\n\n disableBracketedPaste(): void {\n this.write(BRACKETED_PASTE_OFF)\n this.bracketedPaste = false\n }\n\n enableReportFocus(): void {\n this.write(REPORT_FOCUS_ON)\n this.focusReporting = true\n }\n\n disableReportFocus(): void {\n this.write(REPORT_FOCUS_OFF)\n this.focusReporting = false\n }\n\n setWindowTitle(title: string): void {\n this.write(`\\u001b]0;${title}\\u0007`)\n }\n\n cleanup(): void {\n this.disableMouse()\n if (this.focusReporting) {\n this.disableReportFocus()\n }\n if (this.bracketedPaste) {\n this.disableBracketedPaste()\n }\n this.showCursor()\n if (this.altScreen) {\n this.exitAltScreen()\n }\n this.disableRawMode()\n }\n\n write(data: string): void {\n if (data.length === 0) {\n return\n }\n if (this.terminal) {\n this.terminal.write(data)\n }\n }\n}\n","import type { PlatformAdapter } from '@suds-cli/machine'\nimport { startInput } from './input.js'\nimport {\n ClearScreenMsg,\n DisableMouseMsg,\n EnableMouseAllMotionMsg,\n EnableMouseCellMotionMsg,\n EnterAltScreenMsg,\n ExitAltScreenMsg,\n HideCursorMsg,\n InterruptMsg,\n QuitMsg,\n ResumeMsg,\n SetWindowTitleMsg,\n ShowCursorMsg,\n} from './messages.js'\nimport { StandardRenderer } from './renderer.js'\nimport { TerminalController } from './terminal.js'\nimport type { Cmd, Model, ModelMsg, Msg, ProgramResult } from './types.js'\nimport { WindowSizeMsg } from './messages.js'\n\n/** @public Configure program runtime options. */\nexport interface ProgramOptions {\n altScreen?: boolean\n mouseMode?: 'cell' | 'all' | false\n platform?: PlatformAdapter\n fps?: number\n reportFocus?: boolean\n bracketedPaste?: boolean\n}\n\n/** @public Bubble Tea-style program runner. */\nexport class Program<M extends Model<Msg, M>> {\n private model: M\n private readonly terminal: TerminalController\n private readonly renderer: StandardRenderer\n private readonly opts: ProgramOptions\n private readonly platform: PlatformAdapter | undefined\n private stopInput?: () => void\n private running = false\n private queue: Msg[] = []\n private draining = false\n private result: ProgramResult<M> | null = null\n private resolveWait?: () => void\n\n constructor(model: M, options: ProgramOptions = {}) {\n this.model = model\n this.opts = options\n this.platform = options.platform\n this.terminal = new TerminalController(options.platform)\n this.renderer = new StandardRenderer({\n platform: options.platform,\n fps: options.fps,\n })\n }\n\n async run(): Promise<ProgramResult<M>> {\n this.running = true\n this.setupTerminal()\n this.setupSignals()\n this.renderer.start()\n\n try {\n this.runCmd(this.model.init())\n this.renderer.write(this.model.view())\n this.startInputLoop()\n // Wait until the program is explicitly quit\n await this.waitUntilDone()\n this.result = { model: this.model }\n } catch (err) {\n this.result = { model: this.model, error: err }\n } finally {\n this.shutdown()\n }\n\n return this.result ?? { model: this.model }\n }\n\n private waitUntilDone(): Promise<void> {\n return new Promise((resolve) => {\n this.resolveWait = resolve\n // If already not running, resolve immediately\n if (!this.running) {\n resolve()\n }\n })\n }\n\n send(msg: Msg): void {\n if (!msg) {\n return\n }\n this.queue.push(msg)\n if (!this.draining) {\n void this.drainQueue()\n }\n }\n\n quit(): void {\n this.send(new QuitMsg())\n }\n\n kill(): void {\n this.running = false\n this.shutdown()\n }\n\n private drainQueue(): void {\n if (this.draining) {\n return\n }\n this.draining = true\n\n while (this.running && this.queue.length > 0) {\n const msg = this.queue.shift()\n if (msg === undefined) {\n continue\n }\n\n const consumed = this.handleInternal(msg)\n if (consumed) {\n continue\n }\n\n const [nextModel, cmd] = this.model.update(msg)\n this.model = nextModel\n\n this.runCmd(cmd)\n this.renderer.write(this.model.view())\n }\n\n this.draining = false\n }\n\n private handleInternal(msg: Msg): boolean {\n if (msg instanceof QuitMsg || msg instanceof InterruptMsg) {\n this.running = false\n if (this.resolveWait) {\n this.resolveWait()\n }\n return true\n }\n if (msg instanceof ClearScreenMsg) {\n this.terminal.clearScreen()\n return false\n }\n if (msg instanceof EnterAltScreenMsg) {\n this.terminal.enterAltScreen()\n this.renderer.repaint()\n return false\n }\n if (msg instanceof ExitAltScreenMsg) {\n this.terminal.exitAltScreen()\n this.renderer.repaint()\n return false\n }\n if (msg instanceof EnableMouseCellMotionMsg) {\n this.terminal.enableMouseCellMotion()\n return false\n }\n if (msg instanceof EnableMouseAllMotionMsg) {\n this.terminal.enableMouseAllMotion()\n return false\n }\n if (msg instanceof DisableMouseMsg) {\n this.terminal.disableMouse()\n return false\n }\n if (msg instanceof ShowCursorMsg) {\n this.terminal.showCursor()\n return false\n }\n if (msg instanceof HideCursorMsg) {\n this.terminal.hideCursor()\n return false\n }\n if (msg instanceof SetWindowTitleMsg) {\n this.terminal.setWindowTitle(msg.title)\n return false\n }\n if (msg instanceof ResumeMsg) {\n return false\n }\n return false\n }\n\n private runCmd<T extends Msg>(cmd: Cmd<T> | undefined): void {\n if (!cmd) {\n return\n }\n\n const handleResult = (result: T | T[] | null | undefined) => {\n if (result === null || result === undefined) {\n return\n }\n if (Array.isArray(result)) {\n for (const msg of result) {\n this.send(msg)\n }\n } else {\n this.send(result)\n }\n }\n\n try {\n const effect = cmd()\n if (effect instanceof Promise) {\n effect.then(handleResult).catch((err) => {\n // Preserve behavior but don't block other messages\n console.error(err)\n })\n } else {\n handleResult(effect)\n }\n } catch (err) {\n console.error(err)\n }\n }\n\n private setupTerminal(): void {\n this.terminal.enableRawMode()\n this.terminal.hideCursor()\n\n if (this.opts.altScreen) {\n this.terminal.enterAltScreen()\n this.terminal.clearScreen()\n }\n\n if (this.opts.mouseMode === 'cell') {\n this.terminal.enableMouseCellMotion()\n } else if (this.opts.mouseMode === 'all') {\n this.terminal.enableMouseAllMotion()\n }\n\n if (this.opts.bracketedPaste !== false) {\n this.terminal.enableBracketedPaste()\n }\n\n if (this.opts.reportFocus) {\n this.terminal.enableReportFocus()\n }\n }\n\n private startInputLoop(): void {\n this.stopInput = startInput({\n platform: this.platform,\n onMessage: (msg) => this.send(msg as ModelMsg<M>),\n })\n }\n\n private setupSignals(): void {\n const disposables: (() => void)[] = []\n\n // Set up signal handlers if platform adapter is available\n if (this.platform) {\n const intDisposable = this.platform.signals.onInterrupt(this.onSigInt)\n const termDisposable = this.platform.signals.onTerminate(this.onSigTerm)\n disposables.push(\n () => intDisposable.dispose(),\n () => termDisposable.dispose(),\n )\n\n // Set up resize handler\n const handleResize = (size: { columns: number; rows: number }) => {\n this.send(new WindowSizeMsg(size.columns, size.rows))\n }\n const resizeDisposable =\n this.platform.terminal.onResize(handleResize)\n disposables.push(() => resizeDisposable.dispose())\n\n // Send initial size\n const initialSize = this.platform.terminal.getSize()\n this.send(new WindowSizeMsg(initialSize.columns, initialSize.rows))\n }\n\n this.disposeSignals = () => {\n for (const dispose of disposables) {\n dispose()\n }\n }\n }\n\n private disposeSignals: (() => void) | null = null\n\n private onSigInt = (): void => {\n this.send(new InterruptMsg())\n }\n\n private onSigTerm = (): void => {\n this.send(new QuitMsg())\n }\n\n private shutdown(): void {\n if (this.disposeSignals) {\n this.disposeSignals()\n this.disposeSignals = null\n }\n if (this.stopInput) {\n this.stopInput()\n this.stopInput = undefined\n }\n this.renderer.stop()\n this.terminal.cleanup()\n if (this.platform) {\n this.platform.dispose()\n }\n }\n}\n","import { QuitMsg } from './messages.js'\nimport { Cmd, Effect, Msg } from './types.js'\n\ntype MsgOrArray<M extends Msg> = M | M[]\n\nconst now = () => new Date()\n\n/**\n * @public\n * Run multiple commands concurrently and flatten their results.\n */\nexport function batch<M extends Msg>(...cmds: Array<Cmd<M>>): Cmd<M> {\n const valid = cmds.filter((cmd): cmd is Cmd<M> => Boolean(cmd))\n if (valid.length === 0) {\n return null\n }\n if (valid.length === 1) {\n const [only] = valid\n return only ?? null\n }\n return async () => {\n const results = await Promise.all(\n valid.map((cmd) => Promise.resolve(cmd?.())),\n )\n return flatten(results)\n }\n}\n\n/**\n * @public\n * Run commands sequentially, preserving order and skipping nulls.\n */\nexport function sequence<M extends Msg>(...cmds: Array<Cmd<M>>): Cmd<M> {\n const valid = cmds.filter((cmd): cmd is Cmd<M> => Boolean(cmd))\n if (valid.length === 0) {\n return null\n }\n if (valid.length === 1) {\n const [only] = valid\n return only ?? null\n }\n return async () => {\n const messages: Array<MsgOrArray<M>> = []\n for (const cmd of valid) {\n const result = await Promise.resolve(cmd?.())\n if (result !== null && result !== undefined) {\n messages.push(result)\n }\n }\n return flatten(messages)\n }\n}\n\n/**\n * @public\n * Emit a message after a delay.\n */\nexport function tick<M extends Msg>(ms: number, fn: (t: Date) => M): Cmd<M> {\n return () =>\n new Promise<M>((resolve) => {\n setTimeout(() => resolve(fn(now())), ms)\n })\n}\n\n/**\n * @public\n * Schedule a single message aligned to the next interval boundary.\n * Call again from your update loop to continue a repeating cadence.\n */\nexport function every<M extends Msg>(ms: number, fn: (t: Date) => M): Cmd<M> {\n return () =>\n new Promise<M>((resolve) => {\n const current = now()\n const delay = alignToInterval(current, ms)\n setTimeout(() => resolve(fn(now())), delay)\n })\n}\n\n/** @public Lift a message into a command. */\nexport const msg =\n <M extends Msg>(value: M): Cmd<M> =>\n () =>\n value\n/** @public Command that emits a QuitMsg. */\nexport const quit = (): Cmd<Msg> => msg(new QuitMsg())\n\nfunction flatten<M extends Msg>(\n values: Array<Effect<M>>,\n): MsgOrArray<M> | null {\n const results: M[] = []\n for (const value of values) {\n if (value === null || value === undefined) {\n continue\n }\n if (Array.isArray(value)) {\n results.push(...value)\n } else {\n results.push(value)\n }\n }\n if (results.length === 0) {\n return null\n }\n if (results.length === 1) {\n return results[0] as M\n }\n return results\n}\n\nfunction alignToInterval(date: Date, ms: number): number {\n const next = new Date(date)\n next.setMilliseconds(0)\n const remainder = date.getTime() % ms\n return remainder === 0 ? ms : ms - remainder\n}\n","import type { PlatformAdapter } from '@suds-cli/machine'\nimport {\n ClearScreenMsg,\n DisableMouseMsg,\n EnableMouseAllMotionMsg,\n EnableMouseCellMotionMsg,\n EnterAltScreenMsg,\n ExitAltScreenMsg,\n HideCursorMsg,\n SetWindowTitleMsg,\n ShowCursorMsg,\n WindowSizeMsg,\n} from './messages.js'\nimport type { Cmd, Msg } from './types.js'\n\n/** @public Clear the terminal screen. */\nexport const clearScreen = (): Cmd<Msg> => () => new ClearScreenMsg()\n/** @public Enter the alternate screen buffer. */\nexport const enterAltScreen = (): Cmd<Msg> => () => new EnterAltScreenMsg()\n/** @public Exit the alternate screen buffer. */\nexport const exitAltScreen = (): Cmd<Msg> => () => new ExitAltScreenMsg()\n/** @public Enable cell-motion mouse reporting. */\nexport const enableMouseCellMotion = (): Cmd<Msg> => () =>\n new EnableMouseCellMotionMsg()\n/** @public Enable all-motion mouse reporting. */\nexport const enableMouseAllMotion = (): Cmd<Msg> => () =>\n new EnableMouseAllMotionMsg()\n/** @public Disable mouse reporting. */\nexport const disableMouse = (): Cmd<Msg> => () => new DisableMouseMsg()\n/** @public Show the cursor. */\nexport const showCursor = (): Cmd<Msg> => () => new ShowCursorMsg()\n/** @public Hide the cursor. */\nexport const hideCursor = (): Cmd<Msg> => () => new HideCursorMsg()\n/** @public Set the terminal window title. */\nexport const setWindowTitle =\n (title: string): Cmd<Msg> =>\n () =>\n new SetWindowTitleMsg(title)\n/**\n * @public\n * Emit the current window size.\n * @param platform - Optional platform adapter to get terminal size from\n */\nexport const windowSize =\n (platform?: PlatformAdapter): Cmd<Msg> =>\n () => {\n if (platform) {\n const size = platform.terminal.getSize()\n return new WindowSizeMsg(size.columns, size.rows)\n }\n return new WindowSizeMsg(0, 0)\n }\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
import { PlatformAdapter } from '@suds-cli/machine';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Message - any value that triggers an update.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* @public
|
|
8
|
+
* Message - must be discriminated for safe matching.
|
|
9
|
+
*/
|
|
10
|
+
type Msg = {
|
|
11
|
+
readonly _tag: string;
|
|
12
|
+
};
|
|
13
|
+
type Effect<M extends Msg = Msg> = M | M[] | null | undefined;
|
|
14
|
+
/** @public Function producing an effectful message or messages. */
|
|
15
|
+
type EffectFn<M extends Msg = Msg> = () => Effect<M> | Promise<Effect<M>>;
|
|
16
|
+
/**
|
|
17
|
+
* @public
|
|
18
|
+
* Command - an async side effect that eventually yields a message.
|
|
19
|
+
* Use `null` to indicate no-op.
|
|
20
|
+
*/
|
|
21
|
+
type Cmd<M extends Msg = Msg> = EffectFn<M> | null;
|
|
22
|
+
/**
|
|
23
|
+
* @public
|
|
24
|
+
* Elm-like model contract.
|
|
25
|
+
*/
|
|
26
|
+
interface Model<M extends Msg = Msg, Self extends Model<M, Self> = any> {
|
|
27
|
+
init(): Cmd<M>;
|
|
28
|
+
update(msg: M): [Self, Cmd<M>];
|
|
29
|
+
view(): string;
|
|
30
|
+
}
|
|
31
|
+
/** @public Outcome of running a program. */
|
|
32
|
+
type ProgramResult<M extends Model> = {
|
|
33
|
+
model: M;
|
|
34
|
+
error?: unknown;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/** @public Configure program runtime options. */
|
|
38
|
+
interface ProgramOptions {
|
|
39
|
+
altScreen?: boolean;
|
|
40
|
+
mouseMode?: 'cell' | 'all' | false;
|
|
41
|
+
platform?: PlatformAdapter;
|
|
42
|
+
fps?: number;
|
|
43
|
+
reportFocus?: boolean;
|
|
44
|
+
bracketedPaste?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/** @public Bubble Tea-style program runner. */
|
|
47
|
+
declare class Program<M extends Model<Msg, M>> {
|
|
48
|
+
private model;
|
|
49
|
+
private readonly terminal;
|
|
50
|
+
private readonly renderer;
|
|
51
|
+
private readonly opts;
|
|
52
|
+
private readonly platform;
|
|
53
|
+
private stopInput?;
|
|
54
|
+
private running;
|
|
55
|
+
private queue;
|
|
56
|
+
private draining;
|
|
57
|
+
private result;
|
|
58
|
+
private resolveWait?;
|
|
59
|
+
constructor(model: M, options?: ProgramOptions);
|
|
60
|
+
run(): Promise<ProgramResult<M>>;
|
|
61
|
+
private waitUntilDone;
|
|
62
|
+
send(msg: Msg): void;
|
|
63
|
+
quit(): void;
|
|
64
|
+
kill(): void;
|
|
65
|
+
private drainQueue;
|
|
66
|
+
private handleInternal;
|
|
67
|
+
private runCmd;
|
|
68
|
+
private setupTerminal;
|
|
69
|
+
private startInputLoop;
|
|
70
|
+
private setupSignals;
|
|
71
|
+
private disposeSignals;
|
|
72
|
+
private onSigInt;
|
|
73
|
+
private onSigTerm;
|
|
74
|
+
private shutdown;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** @public Request graceful program termination. */
|
|
78
|
+
declare class QuitMsg {
|
|
79
|
+
readonly _tag = "quit";
|
|
80
|
+
}
|
|
81
|
+
/** @public Interrupt the program (SIGINT). */
|
|
82
|
+
declare class InterruptMsg {
|
|
83
|
+
readonly _tag = "interrupt";
|
|
84
|
+
}
|
|
85
|
+
/** @public Suspend the program (Ctrl+Z). */
|
|
86
|
+
declare class SuspendMsg {
|
|
87
|
+
readonly _tag = "suspend";
|
|
88
|
+
}
|
|
89
|
+
/** @public Resume the program after suspension. */
|
|
90
|
+
declare class ResumeMsg {
|
|
91
|
+
readonly _tag = "resume";
|
|
92
|
+
}
|
|
93
|
+
/** @public Report the current terminal width and height. */
|
|
94
|
+
declare class WindowSizeMsg {
|
|
95
|
+
readonly width: number;
|
|
96
|
+
readonly height: number;
|
|
97
|
+
readonly _tag = "window-size";
|
|
98
|
+
constructor(width: number, height: number);
|
|
99
|
+
}
|
|
100
|
+
/** @public Terminal focus gained. */
|
|
101
|
+
declare class FocusMsg {
|
|
102
|
+
readonly _tag = "focus";
|
|
103
|
+
}
|
|
104
|
+
/** @public Terminal focus lost. */
|
|
105
|
+
declare class BlurMsg {
|
|
106
|
+
readonly _tag = "blur";
|
|
107
|
+
}
|
|
108
|
+
/** @public Clear the terminal screen. */
|
|
109
|
+
declare class ClearScreenMsg {
|
|
110
|
+
readonly _tag = "clear-screen";
|
|
111
|
+
}
|
|
112
|
+
/** @public Enter the alternate screen buffer. */
|
|
113
|
+
declare class EnterAltScreenMsg {
|
|
114
|
+
readonly _tag = "enter-alt-screen";
|
|
115
|
+
}
|
|
116
|
+
/** @public Exit the alternate screen buffer. */
|
|
117
|
+
declare class ExitAltScreenMsg {
|
|
118
|
+
readonly _tag = "exit-alt-screen";
|
|
119
|
+
}
|
|
120
|
+
/** @public Enable cell-based mouse reporting. */
|
|
121
|
+
declare class EnableMouseCellMotionMsg {
|
|
122
|
+
readonly _tag = "enable-mouse-cell-motion";
|
|
123
|
+
}
|
|
124
|
+
/** @public Enable all-motion mouse reporting. */
|
|
125
|
+
declare class EnableMouseAllMotionMsg {
|
|
126
|
+
readonly _tag = "enable-mouse-all-motion";
|
|
127
|
+
}
|
|
128
|
+
/** @public Disable mouse reporting. */
|
|
129
|
+
declare class DisableMouseMsg {
|
|
130
|
+
readonly _tag = "disable-mouse";
|
|
131
|
+
}
|
|
132
|
+
/** @public Show the cursor. */
|
|
133
|
+
declare class ShowCursorMsg {
|
|
134
|
+
readonly _tag = "show-cursor";
|
|
135
|
+
}
|
|
136
|
+
/** @public Hide the cursor. */
|
|
137
|
+
declare class HideCursorMsg {
|
|
138
|
+
readonly _tag = "hide-cursor";
|
|
139
|
+
}
|
|
140
|
+
/** @public Enable focus in/out reporting. */
|
|
141
|
+
declare class EnableReportFocusMsg {
|
|
142
|
+
readonly _tag = "enable-report-focus";
|
|
143
|
+
}
|
|
144
|
+
/** @public Disable focus in/out reporting. */
|
|
145
|
+
declare class DisableReportFocusMsg {
|
|
146
|
+
readonly _tag = "disable-report-focus";
|
|
147
|
+
}
|
|
148
|
+
/** @public Set the terminal window title. */
|
|
149
|
+
declare class SetWindowTitleMsg {
|
|
150
|
+
readonly title: string;
|
|
151
|
+
readonly _tag = "set-window-title";
|
|
152
|
+
constructor(title: string);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/** @public Known key types parsed from terminal input. */
|
|
156
|
+
declare enum KeyType {
|
|
157
|
+
Null = "null",
|
|
158
|
+
Break = "break",
|
|
159
|
+
Enter = "enter",
|
|
160
|
+
Backspace = "backspace",
|
|
161
|
+
Tab = "tab",
|
|
162
|
+
Esc = "esc",
|
|
163
|
+
Space = "space",
|
|
164
|
+
Runes = "runes",
|
|
165
|
+
Up = "up",
|
|
166
|
+
Down = "down",
|
|
167
|
+
Right = "right",
|
|
168
|
+
Left = "left",
|
|
169
|
+
ShiftTab = "shift+tab",
|
|
170
|
+
Home = "home",
|
|
171
|
+
End = "end",
|
|
172
|
+
PgUp = "pgup",
|
|
173
|
+
PgDown = "pgdown",
|
|
174
|
+
CtrlPgUp = "ctrl+pgup",
|
|
175
|
+
CtrlPgDown = "ctrl+pgdown",
|
|
176
|
+
Delete = "delete",
|
|
177
|
+
Insert = "insert",
|
|
178
|
+
CtrlUp = "ctrl+up",
|
|
179
|
+
CtrlDown = "ctrl+down",
|
|
180
|
+
CtrlRight = "ctrl+right",
|
|
181
|
+
CtrlLeft = "ctrl+left",
|
|
182
|
+
CtrlHome = "ctrl+home",
|
|
183
|
+
CtrlEnd = "ctrl+end",
|
|
184
|
+
ShiftUp = "shift+up",
|
|
185
|
+
ShiftDown = "shift+down",
|
|
186
|
+
ShiftRight = "shift+right",
|
|
187
|
+
ShiftLeft = "shift+left",
|
|
188
|
+
ShiftHome = "shift+home",
|
|
189
|
+
ShiftEnd = "shift+end",
|
|
190
|
+
CtrlShiftUp = "ctrl+shift+up",
|
|
191
|
+
CtrlShiftDown = "ctrl+shift+down",
|
|
192
|
+
CtrlShiftLeft = "ctrl+shift+left",
|
|
193
|
+
CtrlShiftRight = "ctrl+shift+right",
|
|
194
|
+
CtrlShiftHome = "ctrl+shift+home",
|
|
195
|
+
CtrlShiftEnd = "ctrl+shift+end",
|
|
196
|
+
F1 = "f1",
|
|
197
|
+
F2 = "f2",
|
|
198
|
+
F3 = "f3",
|
|
199
|
+
F4 = "f4",
|
|
200
|
+
F5 = "f5",
|
|
201
|
+
F6 = "f6",
|
|
202
|
+
F7 = "f7",
|
|
203
|
+
F8 = "f8",
|
|
204
|
+
F9 = "f9",
|
|
205
|
+
F10 = "f10",
|
|
206
|
+
F11 = "f11",
|
|
207
|
+
F12 = "f12",
|
|
208
|
+
F13 = "f13",
|
|
209
|
+
F14 = "f14",
|
|
210
|
+
F15 = "f15",
|
|
211
|
+
F16 = "f16",
|
|
212
|
+
F17 = "f17",
|
|
213
|
+
F18 = "f18",
|
|
214
|
+
F19 = "f19",
|
|
215
|
+
F20 = "f20"
|
|
216
|
+
}
|
|
217
|
+
/** @public Parsed key metadata. */
|
|
218
|
+
interface Key {
|
|
219
|
+
type: KeyType;
|
|
220
|
+
runes: string;
|
|
221
|
+
alt: boolean;
|
|
222
|
+
paste: boolean;
|
|
223
|
+
}
|
|
224
|
+
/** @public Message representing a parsed key event. */
|
|
225
|
+
declare class KeyMsg {
|
|
226
|
+
readonly key: Key;
|
|
227
|
+
readonly _tag = "key";
|
|
228
|
+
constructor(key: Key);
|
|
229
|
+
toString(): string;
|
|
230
|
+
}
|
|
231
|
+
/** @public Convert a parsed key to a human-readable string. */
|
|
232
|
+
declare function keyToString(key: Key): string;
|
|
233
|
+
|
|
234
|
+
/** @public Mouse action type. */
|
|
235
|
+
declare enum MouseAction {
|
|
236
|
+
Press = "press",
|
|
237
|
+
Release = "release",
|
|
238
|
+
Motion = "motion"
|
|
239
|
+
}
|
|
240
|
+
/** @public Mouse button identifiers, including wheels. */
|
|
241
|
+
declare enum MouseButton {
|
|
242
|
+
None = "none",
|
|
243
|
+
Left = "left",
|
|
244
|
+
Middle = "middle",
|
|
245
|
+
Right = "right",
|
|
246
|
+
WheelUp = "wheel-up",
|
|
247
|
+
WheelDown = "wheel-down",
|
|
248
|
+
WheelLeft = "wheel-left",
|
|
249
|
+
WheelRight = "wheel-right",
|
|
250
|
+
Backward = "backward",
|
|
251
|
+
Forward = "forward",
|
|
252
|
+
Button10 = "button-10",
|
|
253
|
+
Button11 = "button-11"
|
|
254
|
+
}
|
|
255
|
+
/** @public Parsed mouse event payload. */
|
|
256
|
+
interface MouseEvent {
|
|
257
|
+
x: number;
|
|
258
|
+
y: number;
|
|
259
|
+
shift: boolean;
|
|
260
|
+
alt: boolean;
|
|
261
|
+
ctrl: boolean;
|
|
262
|
+
action: MouseAction;
|
|
263
|
+
button: MouseButton;
|
|
264
|
+
}
|
|
265
|
+
/** @public Message representing a parsed mouse event. */
|
|
266
|
+
declare class MouseMsg {
|
|
267
|
+
readonly event: MouseEvent;
|
|
268
|
+
readonly _tag = "mouse";
|
|
269
|
+
constructor(event: MouseEvent);
|
|
270
|
+
toString(): string;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/** @public Options for the input reader. */
|
|
274
|
+
interface InputOptions {
|
|
275
|
+
platform?: PlatformAdapter;
|
|
276
|
+
onMessage: (msg: Msg) => void;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/** @public Options for the terminal controller. */
|
|
280
|
+
interface TerminalOptions {
|
|
281
|
+
platform?: PlatformAdapter;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/** @public Options for the standard renderer. */
|
|
285
|
+
interface RendererOptions {
|
|
286
|
+
platform?: PlatformAdapter;
|
|
287
|
+
fps?: number;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* @public
|
|
292
|
+
* Run multiple commands concurrently and flatten their results.
|
|
293
|
+
*/
|
|
294
|
+
declare function batch<M extends Msg>(...cmds: Array<Cmd<M>>): Cmd<M>;
|
|
295
|
+
/**
|
|
296
|
+
* @public
|
|
297
|
+
* Run commands sequentially, preserving order and skipping nulls.
|
|
298
|
+
*/
|
|
299
|
+
declare function sequence<M extends Msg>(...cmds: Array<Cmd<M>>): Cmd<M>;
|
|
300
|
+
/**
|
|
301
|
+
* @public
|
|
302
|
+
* Emit a message after a delay.
|
|
303
|
+
*/
|
|
304
|
+
declare function tick<M extends Msg>(ms: number, fn: (t: Date) => M): Cmd<M>;
|
|
305
|
+
/**
|
|
306
|
+
* @public
|
|
307
|
+
* Schedule a single message aligned to the next interval boundary.
|
|
308
|
+
* Call again from your update loop to continue a repeating cadence.
|
|
309
|
+
*/
|
|
310
|
+
declare function every<M extends Msg>(ms: number, fn: (t: Date) => M): Cmd<M>;
|
|
311
|
+
/** @public Lift a message into a command. */
|
|
312
|
+
declare const msg: <M extends Msg>(value: M) => Cmd<M>;
|
|
313
|
+
/** @public Command that emits a QuitMsg. */
|
|
314
|
+
declare const quit: () => Cmd<Msg>;
|
|
315
|
+
|
|
316
|
+
/** @public Clear the terminal screen. */
|
|
317
|
+
declare const clearScreen: () => Cmd<Msg>;
|
|
318
|
+
/** @public Enable cell-motion mouse reporting. */
|
|
319
|
+
declare const enableMouseCellMotion: () => Cmd<Msg>;
|
|
320
|
+
/** @public Enable all-motion mouse reporting. */
|
|
321
|
+
declare const enableMouseAllMotion: () => Cmd<Msg>;
|
|
322
|
+
/** @public Disable mouse reporting. */
|
|
323
|
+
declare const disableMouse: () => Cmd<Msg>;
|
|
324
|
+
/** @public Show the cursor. */
|
|
325
|
+
declare const showCursor: () => Cmd<Msg>;
|
|
326
|
+
/** @public Hide the cursor. */
|
|
327
|
+
declare const hideCursor: () => Cmd<Msg>;
|
|
328
|
+
/** @public Set the terminal window title. */
|
|
329
|
+
declare const setWindowTitle: (title: string) => Cmd<Msg>;
|
|
330
|
+
/**
|
|
331
|
+
* @public
|
|
332
|
+
* Emit the current window size.
|
|
333
|
+
* @param platform - Optional platform adapter to get terminal size from
|
|
334
|
+
*/
|
|
335
|
+
declare const windowSize: (platform?: PlatformAdapter) => Cmd<Msg>;
|
|
336
|
+
|
|
337
|
+
export { BlurMsg, ClearScreenMsg, type Cmd, DisableMouseMsg, DisableReportFocusMsg, type EffectFn, EnableMouseAllMotionMsg, EnableMouseCellMotionMsg, EnableReportFocusMsg, EnterAltScreenMsg, ExitAltScreenMsg, FocusMsg, HideCursorMsg, type InputOptions, InterruptMsg, type Key, KeyMsg, KeyType, type Model, MouseAction, MouseButton, type MouseEvent, MouseMsg, type Msg, Program, type ProgramOptions, type ProgramResult, QuitMsg, type RendererOptions, ResumeMsg, SetWindowTitleMsg, ShowCursorMsg, SuspendMsg, type TerminalOptions, WindowSizeMsg, batch, clearScreen, disableMouse, enableMouseAllMotion, enableMouseCellMotion, every, hideCursor, keyToString, msg, quit, sequence, setWindowTitle, showCursor, tick, windowSize };
|