@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.
Files changed (49) hide show
  1. package/README.md +260 -0
  2. package/dist/index.cjs +1125 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.d.cts +337 -0
  5. package/dist/index.d.ts +337 -12
  6. package/dist/index.js +1084 -51
  7. package/dist/index.js.map +1 -1
  8. package/package.json +30 -18
  9. package/dist/commands.d.ts +0 -27
  10. package/dist/commands.d.ts.map +0 -1
  11. package/dist/commands.js +0 -106
  12. package/dist/commands.js.map +0 -1
  13. package/dist/index.d.ts.map +0 -1
  14. package/dist/input.d.ts +0 -8
  15. package/dist/input.d.ts.map +0 -1
  16. package/dist/input.js +0 -98
  17. package/dist/input.js.map +0 -1
  18. package/dist/keys.d.ts +0 -86
  19. package/dist/keys.d.ts.map +0 -1
  20. package/dist/keys.js +0 -317
  21. package/dist/keys.js.map +0 -1
  22. package/dist/messages.d.ts +0 -78
  23. package/dist/messages.d.ts.map +0 -1
  24. package/dist/messages.js +0 -104
  25. package/dist/messages.js.map +0 -1
  26. package/dist/mouse.d.ts +0 -46
  27. package/dist/mouse.d.ts.map +0 -1
  28. package/dist/mouse.js +0 -167
  29. package/dist/mouse.js.map +0 -1
  30. package/dist/program.d.ts +0 -39
  31. package/dist/program.d.ts.map +0 -1
  32. package/dist/program.js +0 -231
  33. package/dist/program.js.map +0 -1
  34. package/dist/renderer.d.ts +0 -19
  35. package/dist/renderer.d.ts.map +0 -1
  36. package/dist/renderer.js +0 -49
  37. package/dist/renderer.js.map +0 -1
  38. package/dist/screen.d.ts +0 -22
  39. package/dist/screen.d.ts.map +0 -1
  40. package/dist/screen.js +0 -35
  41. package/dist/screen.js.map +0 -1
  42. package/dist/terminal.d.ts +0 -32
  43. package/dist/terminal.d.ts.map +0 -1
  44. package/dist/terminal.js +0 -119
  45. package/dist/terminal.js.map +0 -1
  46. package/dist/types.d.ts +0 -36
  47. package/dist/types.d.ts.map +0 -1
  48. package/dist/types.js +0 -3
  49. package/dist/types.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2CAA4D;AAAnD,qGAAA,OAAO,OAAA;AAGhB,WAAW;AACX,6CAmBuB;AAlBrB,sGAAA,OAAO,OAAA;AACP,2GAAA,YAAY,OAAA;AACZ,yGAAA,UAAU,OAAA;AACV,wGAAA,SAAS,OAAA;AACT,4GAAA,aAAa,OAAA;AACb,uGAAA,QAAQ,OAAA;AACR,sGAAA,OAAO,OAAA;AACP,6GAAA,cAAc,OAAA;AACd,gHAAA,iBAAiB,OAAA;AACjB,+GAAA,gBAAgB,OAAA;AAChB,uHAAA,wBAAwB,OAAA;AACxB,sHAAA,uBAAuB,OAAA;AACvB,8GAAA,eAAe,OAAA;AACf,4GAAA,aAAa,OAAA;AACb,4GAAA,aAAa,OAAA;AACb,mHAAA,oBAAoB,OAAA;AACpB,oHAAA,qBAAqB,OAAA;AACrB,gHAAA,iBAAiB,OAAA;AAGnB,iBAAiB;AACjB,qCAAmE;AAA1D,iGAAA,MAAM,OAAA;AAAE,kGAAA,OAAO,OAAA;AAAY,sGAAA,WAAW,OAAA;AAC/C,uCAKoB;AAJlB,oGAAA,QAAQ,OAAA;AACR,uGAAA,WAAW,OAAA;AACX,uGAAA,WAAW,OAAA;AASb,WAAW;AACX,6CAAwE;AAA/D,oGAAA,KAAK,OAAA;AAAE,uGAAA,QAAQ,OAAA;AAAE,mGAAA,IAAI,OAAA;AAAE,oGAAA,KAAK,OAAA;AAAE,mGAAA,IAAI,OAAA;AAAE,kGAAA,GAAG,OAAA;AAChD,yCASqB;AARnB,wGAAA,WAAW,OAAA;AACX,kHAAA,qBAAqB,OAAA;AACrB,iHAAA,oBAAoB,OAAA;AACpB,yGAAA,YAAY,OAAA;AACZ,uGAAA,UAAU,OAAA;AACV,uGAAA,UAAU,OAAA;AACV,2GAAA,cAAc,OAAA;AACd,uGAAA,UAAU,OAAA"}
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","rune","MouseAction","MouseButton","decodeString","CLEAR_SCREEN","CURSOR_HOME","msg"],"mappings":"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","file":"index.js","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/package.json CHANGED
@@ -1,33 +1,45 @@
1
1
  {
2
2
  "name": "@suds-cli/tea",
3
- "version": "0.0.0",
4
3
  "description": "Bubble Tea-inspired runtime for Suds terminal UIs",
5
- "type": "module",
6
- "main": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
4
+ "version": "0.1.0-alpha.0",
5
+ "dependencies": {
6
+ "@suds-cli/machine": "0.1.0-alpha.0"
7
+ },
8
+ "devDependencies": {
9
+ "@types/node": "^24.10.2",
10
+ "typescript": "5.8.2",
11
+ "vitest": "^4.0.16"
12
+ },
13
+ "engines": {
14
+ "node": ">=20.0.0"
15
+ },
8
16
  "exports": {
9
- ".": "./dist/index.js",
17
+ ".": {
18
+ "import": {
19
+ "types": "./dist/index.d.ts",
20
+ "default": "./dist/index.js"
21
+ },
22
+ "require": {
23
+ "types": "./dist/index.d.cts",
24
+ "default": "./dist/index.cjs"
25
+ }
26
+ },
10
27
  "./package.json": "./package.json"
11
28
  },
12
29
  "files": [
13
30
  "dist"
14
31
  ],
32
+ "main": "./dist/index.cjs",
33
+ "module": "./dist/index.js",
15
34
  "sideEffects": false,
16
- "devDependencies": {
17
- "@types/node": "^20.0.0",
18
- "vitest": "^4.0.15",
19
- "typescript": "5.8.2"
20
- },
21
- "engines": {
22
- "node": ">=20.0.0"
23
- },
35
+ "type": "module",
36
+ "types": "./dist/index.d.ts",
24
37
  "scripts": {
25
- "clean": "rm -rf dist",
26
- "build": "pnpm run clean && tsc -p ./tsconfig.json",
27
- "test": "vitest run --passWithNoTests",
28
- "generate:api-report": "api-extractor run --local",
38
+ "build": "tsup",
29
39
  "check:api-report": "pnpm run generate:api-report",
30
40
  "check:eslint": "pnpm run lint",
31
- "lint": "eslint \"src/**/*.{ts,tsx}\""
41
+ "generate:api-report": "api-extractor run --local",
42
+ "lint": "eslint \"{src,test}/**/*.{ts,tsx}\"",
43
+ "test": "vitest run --passWithNoTests"
32
44
  }
33
45
  }
@@ -1,27 +0,0 @@
1
- import { Cmd, Msg } from "./types.js";
2
- /**
3
- * @public
4
- * Run multiple commands concurrently and flatten their results.
5
- */
6
- export declare function batch<M extends Msg>(...cmds: Array<Cmd<M>>): Cmd<M>;
7
- /**
8
- * @public
9
- * Run commands sequentially, preserving order and skipping nulls.
10
- */
11
- export declare function sequence<M extends Msg>(...cmds: Array<Cmd<M>>): Cmd<M>;
12
- /**
13
- * @public
14
- * Emit a message after a delay.
15
- */
16
- export declare function tick<M extends Msg>(ms: number, fn: (t: Date) => M): Cmd<M>;
17
- /**
18
- * @public
19
- * Schedule a single message aligned to the next interval boundary.
20
- * Call again from your update loop to continue a repeating cadence.
21
- */
22
- export declare function every<M extends Msg>(ms: number, fn: (t: Date) => M): Cmd<M>;
23
- /** @public Lift a message into a command. */
24
- export declare const msg: <M extends Msg>(value: M) => Cmd<M>;
25
- /** @public Command that emits a QuitMsg. */
26
- export declare const quit: () => Cmd<Msg>;
27
- //# sourceMappingURL=commands.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAU,GAAG,EAAE,MAAM,YAAY,CAAC;AAM9C;;;GAGG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAenE;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAmBtE;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAK1E;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAO3E;AAED,6CAA6C;AAC7C,eAAO,MAAM,GAAG,GACb,CAAC,SAAS,GAAG,EAAE,OAAO,CAAC,KAAG,GAAG,CAAC,CAAC,CAEzB,CAAC;AACV,4CAA4C;AAC5C,eAAO,MAAM,IAAI,QAAO,GAAG,CAAC,GAAG,CAAuB,CAAC"}
package/dist/commands.js DELETED
@@ -1,106 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.quit = exports.msg = void 0;
4
- exports.batch = batch;
5
- exports.sequence = sequence;
6
- exports.tick = tick;
7
- exports.every = every;
8
- const messages_js_1 = require("./messages.js");
9
- const now = () => new Date();
10
- /**
11
- * @public
12
- * Run multiple commands concurrently and flatten their results.
13
- */
14
- function batch(...cmds) {
15
- const valid = cmds.filter((cmd) => Boolean(cmd));
16
- if (valid.length === 0) {
17
- return null;
18
- }
19
- if (valid.length === 1) {
20
- const [only] = valid;
21
- return only ?? null;
22
- }
23
- return async () => {
24
- const results = await Promise.all(valid.map((cmd) => Promise.resolve(cmd?.())));
25
- return flatten(results);
26
- };
27
- }
28
- /**
29
- * @public
30
- * Run commands sequentially, preserving order and skipping nulls.
31
- */
32
- function sequence(...cmds) {
33
- const valid = cmds.filter((cmd) => Boolean(cmd));
34
- if (valid.length === 0) {
35
- return null;
36
- }
37
- if (valid.length === 1) {
38
- const [only] = valid;
39
- return only ?? null;
40
- }
41
- return async () => {
42
- const messages = [];
43
- for (const cmd of valid) {
44
- const result = await Promise.resolve(cmd?.());
45
- if (result !== null && result !== undefined) {
46
- messages.push(result);
47
- }
48
- }
49
- return flatten(messages);
50
- };
51
- }
52
- /**
53
- * @public
54
- * Emit a message after a delay.
55
- */
56
- function tick(ms, fn) {
57
- return () => new Promise((resolve) => {
58
- setTimeout(() => resolve(fn(now())), ms);
59
- });
60
- }
61
- /**
62
- * @public
63
- * Schedule a single message aligned to the next interval boundary.
64
- * Call again from your update loop to continue a repeating cadence.
65
- */
66
- function every(ms, fn) {
67
- return () => new Promise((resolve) => {
68
- const current = now();
69
- const delay = alignToInterval(current, ms);
70
- setTimeout(() => resolve(fn(now())), delay);
71
- });
72
- }
73
- /** @public Lift a message into a command. */
74
- const msg = (value) => () => value;
75
- exports.msg = msg;
76
- /** @public Command that emits a QuitMsg. */
77
- const quit = () => (0, exports.msg)(new messages_js_1.QuitMsg());
78
- exports.quit = quit;
79
- function flatten(values) {
80
- const results = [];
81
- for (const value of values) {
82
- if (value === null || value === undefined) {
83
- continue;
84
- }
85
- if (Array.isArray(value)) {
86
- results.push(...value);
87
- }
88
- else {
89
- results.push(value);
90
- }
91
- }
92
- if (results.length === 0) {
93
- return null;
94
- }
95
- if (results.length === 1) {
96
- return results[0];
97
- }
98
- return results;
99
- }
100
- function alignToInterval(date, ms) {
101
- const next = new Date(date);
102
- next.setMilliseconds(0);
103
- const remainder = date.getTime() % ms;
104
- return remainder === 0 ? ms : ms - remainder;
105
- }
106
- //# sourceMappingURL=commands.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGjE,OAAO,EACL,OAAO,EACP,YAAY,EACZ,UAAU,EACV,SAAS,EACT,aAAa,EACb,QAAQ,EACR,OAAO,EACP,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,GAAG,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EACL,QAAQ,EACR,WAAW,EACX,WAAW,EACX,KAAK,UAAU,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,UAAU,EACV,cAAc,EACd,UAAU,GACX,MAAM,aAAa,CAAC"}
package/dist/input.d.ts DELETED
@@ -1,8 +0,0 @@
1
- import type { Msg } from "./types.js";
2
- /** @public Options for the input reader. */
3
- export interface InputOptions {
4
- input?: NodeJS.ReadableStream;
5
- onMessage: (msg: Msg) => void;
6
- }
7
- export declare function startInput(options: InputOptions): () => void;
8
- //# sourceMappingURL=input.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;CAC/B;AAKD,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI,CAgB5D"}
package/dist/input.js DELETED
@@ -1,98 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.startInput = startInput;
4
- const node_buffer_1 = require("node:buffer");
5
- const messages_js_1 = require("./messages.js");
6
- const keys_js_1 = require("./keys.js");
7
- const mouse_js_1 = require("./mouse.js");
8
- const BRACKET_PASTE_START = "\u001b[200~";
9
- const BRACKET_PASTE_END = "\u001b[201~";
10
- function startInput(options) {
11
- const input = options.input ?? process.stdin;
12
- let buffer = node_buffer_1.Buffer.alloc(0);
13
- const onData = (data) => {
14
- const chunk = typeof data === "string" ? node_buffer_1.Buffer.from(data, "utf8") : data;
15
- buffer = node_buffer_1.Buffer.concat([buffer, chunk]);
16
- buffer = consumeBuffer(buffer, options.onMessage);
17
- };
18
- input.on("data", onData);
19
- input.resume();
20
- return () => {
21
- input.off("data", onData);
22
- };
23
- }
24
- function consumeBuffer(buffer, push) {
25
- let offset = 0;
26
- while (offset < buffer.length) {
27
- const slice = buffer.subarray(offset);
28
- const result = detectOne(slice, offset + slice.length === buffer.length);
29
- if (!result || "needMore" in result) {
30
- break;
31
- }
32
- offset += result.length;
33
- if (result.msg) {
34
- push(result.msg);
35
- }
36
- }
37
- return buffer.subarray(offset);
38
- }
39
- function detectOne(buffer, allowMoreData) {
40
- if (buffer.length === 0) {
41
- return allowMoreData ? { needMore: true } : undefined;
42
- }
43
- const mouse = (0, mouse_js_1.parseMouse)(buffer, allowMoreData);
44
- if (mouse) {
45
- if ("needMore" in mouse) {
46
- return mouse;
47
- }
48
- return { msg: mouse.msg, length: mouse.length };
49
- }
50
- const focus = detectFocus(buffer);
51
- if (focus) {
52
- return focus;
53
- }
54
- const paste = detectBracketedPaste(buffer, allowMoreData);
55
- if (paste) {
56
- return paste;
57
- }
58
- const key = (0, keys_js_1.parseKey)(buffer, allowMoreData);
59
- if (!key) {
60
- return undefined;
61
- }
62
- if ("needMore" in key) {
63
- return key;
64
- }
65
- return { msg: new keys_js_1.KeyMsg(key.key), length: key.length };
66
- }
67
- function detectFocus(buffer) {
68
- // Focus in: ESC [ I, Focus out: ESC [ O (exactly three bytes)
69
- if (buffer.length === 3 && buffer[0] === 0x1b && buffer[1] === 0x5b) {
70
- if (buffer[2] === 0x49) {
71
- return { msg: new messages_js_1.FocusMsg(), length: 3 };
72
- }
73
- if (buffer[2] === 0x4f) {
74
- return { msg: new messages_js_1.BlurMsg(), length: 3 };
75
- }
76
- }
77
- return undefined;
78
- }
79
- function detectBracketedPaste(buffer, allowMoreData) {
80
- const asString = buffer.toString("utf8");
81
- if (!asString.startsWith(BRACKET_PASTE_START)) {
82
- return undefined;
83
- }
84
- const endIndex = asString.indexOf(BRACKET_PASTE_END, BRACKET_PASTE_START.length);
85
- if (endIndex === -1) {
86
- return allowMoreData ? { needMore: true } : undefined;
87
- }
88
- const content = asString.slice(BRACKET_PASTE_START.length, endIndex);
89
- const length = node_buffer_1.Buffer.byteLength(BRACKET_PASTE_START + content + BRACKET_PASTE_END, "utf8");
90
- const key = new keys_js_1.KeyMsg({
91
- type: keys_js_1.KeyType.Runes,
92
- runes: content,
93
- alt: false,
94
- paste: true,
95
- });
96
- return { msg: key, length };
97
- }
98
- //# sourceMappingURL=input.js.map
package/dist/input.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"input.js","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":";;AAeA,gCAgBC;AA/BD,6CAAqC;AACrC,+CAAkD;AAClD,uCAAsD;AACtD,yCAAwC;AASxC,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAC1C,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAExC,SAAgB,UAAU,CAAC,OAAqB;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IAC7C,IAAI,MAAM,GAAW,oBAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAErC,MAAM,MAAM,GAAG,CAAC,IAAqB,EAAE,EAAE;QACvC,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,oBAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1E,MAAM,GAAG,oBAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QACxC,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC,CAAC;IAEF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,KAAK,CAAC,MAAM,EAAE,CAAC;IAEf,OAAO,GAAG,EAAE;QACV,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,MAAc,EAAE,IAAwB;IAC7D,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC;QAEzE,IAAI,CAAC,MAAM,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;YACpC,MAAM;QACR,CAAC;QAED,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;QACxB,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAOD,SAAS,SAAS,CAChB,MAAc,EACd,aAAsB;IAEtB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,aAAa,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,CAAC;IACD,MAAM,KAAK,GAAG,IAAA,qBAAU,EAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAChD,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IAClD,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,oBAAoB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1D,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,GAAG,GAAG,IAAA,kBAAQ,EAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,UAAU,IAAI,GAAG,EAAE,CAAC;QACtB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,IAAI,gBAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;AAC1D,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,8DAA8D;IAC9D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACpE,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,EAAE,GAAG,EAAE,IAAI,sBAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAC5C,CAAC;QACD,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,EAAE,GAAG,EAAE,IAAI,qBAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,oBAAoB,CAC3B,MAAc,EACd,aAAsB;IAEtB,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC9C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAC/B,iBAAiB,EACjB,mBAAmB,CAAC,MAAM,CAC3B,CAAC;IACF,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACpB,OAAO,aAAa,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,oBAAM,CAAC,UAAU,CAC9B,mBAAmB,GAAG,OAAO,GAAG,iBAAiB,EACjD,MAAM,CACP,CAAC;IACF,MAAM,GAAG,GAAQ,IAAI,gBAAM,CAAC;QAC1B,IAAI,EAAE,iBAAO,CAAC,KAAK;QACnB,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,KAAK;QACV,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IACH,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC"}
package/dist/keys.d.ts DELETED
@@ -1,86 +0,0 @@
1
- import { Buffer } from "node:buffer";
2
- /** @public Known key types parsed from terminal input. */
3
- export declare enum KeyType {
4
- Null = "null",
5
- Break = "break",
6
- Enter = "enter",
7
- Backspace = "backspace",
8
- Tab = "tab",
9
- Esc = "esc",
10
- Space = "space",
11
- Runes = "runes",
12
- Up = "up",
13
- Down = "down",
14
- Right = "right",
15
- Left = "left",
16
- ShiftTab = "shift+tab",
17
- Home = "home",
18
- End = "end",
19
- PgUp = "pgup",
20
- PgDown = "pgdown",
21
- CtrlPgUp = "ctrl+pgup",
22
- CtrlPgDown = "ctrl+pgdown",
23
- Delete = "delete",
24
- Insert = "insert",
25
- CtrlUp = "ctrl+up",
26
- CtrlDown = "ctrl+down",
27
- CtrlRight = "ctrl+right",
28
- CtrlLeft = "ctrl+left",
29
- CtrlHome = "ctrl+home",
30
- CtrlEnd = "ctrl+end",
31
- ShiftUp = "shift+up",
32
- ShiftDown = "shift+down",
33
- ShiftRight = "shift+right",
34
- ShiftLeft = "shift+left",
35
- ShiftHome = "shift+home",
36
- ShiftEnd = "shift+end",
37
- CtrlShiftUp = "ctrl+shift+up",
38
- CtrlShiftDown = "ctrl+shift+down",
39
- CtrlShiftLeft = "ctrl+shift+left",
40
- CtrlShiftRight = "ctrl+shift+right",
41
- CtrlShiftHome = "ctrl+shift+home",
42
- CtrlShiftEnd = "ctrl+shift+end",
43
- F1 = "f1",
44
- F2 = "f2",
45
- F3 = "f3",
46
- F4 = "f4",
47
- F5 = "f5",
48
- F6 = "f6",
49
- F7 = "f7",
50
- F8 = "f8",
51
- F9 = "f9",
52
- F10 = "f10",
53
- F11 = "f11",
54
- F12 = "f12",
55
- F13 = "f13",
56
- F14 = "f14",
57
- F15 = "f15",
58
- F16 = "f16",
59
- F17 = "f17",
60
- F18 = "f18",
61
- F19 = "f19",
62
- F20 = "f20"
63
- }
64
- /** @public Parsed key metadata. */
65
- export interface Key {
66
- type: KeyType;
67
- runes: string;
68
- alt: boolean;
69
- paste: boolean;
70
- }
71
- /** @public Message representing a parsed key event. */
72
- export declare class KeyMsg {
73
- readonly key: Key;
74
- readonly _tag = "key";
75
- constructor(key: Key);
76
- toString(): string;
77
- }
78
- /** @public Convert a parsed key to a human-readable string. */
79
- export declare function keyToString(key: Key): string;
80
- export declare function parseKey(buffer: Buffer, allowMoreData: boolean): {
81
- key: Key;
82
- length: number;
83
- } | {
84
- needMore: true;
85
- } | undefined;
86
- //# sourceMappingURL=keys.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,0DAA0D;AAC1D,oBAAY,OAAO;IACjB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,KAAK,UAAU;IACf,SAAS,cAAc;IACvB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,KAAK,UAAU;IACf,EAAE,OAAO;IACT,IAAI,SAAS;IACb,KAAK,UAAU;IACf,IAAI,SAAS;IACb,QAAQ,cAAc;IACtB,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,QAAQ,cAAc;IACtB,UAAU,gBAAgB;IAC1B,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,YAAY;IAClB,QAAQ,cAAc;IACtB,SAAS,eAAe;IACxB,QAAQ,cAAc;IACtB,QAAQ,cAAc;IACtB,OAAO,aAAa;IACpB,OAAO,aAAa;IACpB,SAAS,eAAe;IACxB,UAAU,gBAAgB;IAC1B,SAAS,eAAe;IACxB,SAAS,eAAe;IACxB,QAAQ,cAAc;IACtB,WAAW,kBAAkB;IAC7B,aAAa,oBAAoB;IACjC,aAAa,oBAAoB;IACjC,cAAc,qBAAqB;IACnC,aAAa,oBAAoB;IACjC,YAAY,mBAAmB;IAC/B,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;CACZ;AAED,mCAAmC;AACnC,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AA6KD,uDAAuD;AACvD,qBAAa,MAAM;aAEW,GAAG,EAAE,GAAG;IADpC,QAAQ,CAAC,IAAI,SAAS;gBACM,GAAG,EAAE,GAAG;IAEpC,QAAQ,IAAI,MAAM;CAGnB;AAED,+DAA+D;AAC/D,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAO5C;AAED,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,OAAO,GACrB;IAAE,GAAG,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,GAAG,SAAS,CAwD/D"}