@jitl/opentui-core 0.1.97-next.61f6679
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/3d/SpriteResourceManager.d.ts +74 -0
- package/3d/SpriteUtils.d.ts +13 -0
- package/3d/TextureUtils.d.ts +24 -0
- package/3d/ThreeRenderable.d.ts +40 -0
- package/3d/WGPURenderer.d.ts +61 -0
- package/3d/animation/ExplodingSpriteEffect.d.ts +71 -0
- package/3d/animation/PhysicsExplodingSpriteEffect.d.ts +76 -0
- package/3d/animation/SpriteAnimator.d.ts +124 -0
- package/3d/animation/SpriteParticleGenerator.d.ts +62 -0
- package/3d/canvas.d.ts +44 -0
- package/3d/index.d.ts +12 -0
- package/3d/physics/PlanckPhysicsAdapter.d.ts +19 -0
- package/3d/physics/RapierPhysicsAdapter.d.ts +19 -0
- package/3d/physics/physics-interface.d.ts +27 -0
- package/3d.d.ts +2 -0
- package/3d.js +33843 -0
- package/3d.js.map +155 -0
- package/LICENSE +21 -0
- package/NativeSpanFeed.d.ts +41 -0
- package/README.md +65 -0
- package/Renderable.d.ts +334 -0
- package/Worker-vajwjk0s.js +94 -0
- package/Worker-vajwjk0s.js.map +10 -0
- package/animation/Timeline.d.ts +126 -0
- package/ansi.d.ts +13 -0
- package/assets/javascript/highlights.scm +205 -0
- package/assets/javascript/tree-sitter-javascript.wasm +0 -0
- package/assets/markdown/highlights.scm +150 -0
- package/assets/markdown/injections.scm +27 -0
- package/assets/markdown/tree-sitter-markdown.wasm +0 -0
- package/assets/markdown_inline/highlights.scm +115 -0
- package/assets/markdown_inline/tree-sitter-markdown_inline.wasm +0 -0
- package/assets/typescript/highlights.scm +604 -0
- package/assets/typescript/tree-sitter-typescript.wasm +0 -0
- package/assets/zig/highlights.scm +284 -0
- package/assets/zig/tree-sitter-zig.wasm +0 -0
- package/buffer.d.ts +111 -0
- package/compat/FFIType.d.ts +304 -0
- package/compat/Worker.d.ts +1 -0
- package/compat/bun-ffi-structs.d.ts +2 -0
- package/compat/ffi.d.ts +86 -0
- package/compat/nodejs/Worker.d.ts +16 -0
- package/compat/nodejs/bun-ffi-structs/index.d.ts +46 -0
- package/compat/nodejs/ffi.d.ts +21 -0
- package/compat/nodejs/registerBun.d.ts +1 -0
- package/compat/nodejs/registerResolveJs.d.ts +1 -0
- package/compat/nodejs/runtime.d.ts +7 -0
- package/compat/nodejs/test.d.ts +4 -0
- package/compat/nodejs/trampoline.worker.d.ts +1 -0
- package/compat/runtime.d.ts +8 -0
- package/compat/test.d.ts +1 -0
- package/compat/testHelpers.d.ts +18 -0
- package/console.d.ts +144 -0
- package/edit-buffer.d.ts +98 -0
- package/editor-view.d.ts +73 -0
- package/ffi-x3zvcksd.js +25 -0
- package/ffi-x3zvcksd.js.map +9 -0
- package/index-5yqvbmcz.js +220 -0
- package/index-5yqvbmcz.js.map +10 -0
- package/index-bnfz2g63.js +654 -0
- package/index-bnfz2g63.js.map +10 -0
- package/index-cbvybypy.js +43 -0
- package/index-cbvybypy.js.map +10 -0
- package/index-hjna9d1h.js +12074 -0
- package/index-hjna9d1h.js.map +42 -0
- package/index-jjp8mmgk.js +19991 -0
- package/index-jjp8mmgk.js.map +70 -0
- package/index-re3ntm60.js +51 -0
- package/index-re3ntm60.js.map +9 -0
- package/index-t16hn6zn.js +411 -0
- package/index-t16hn6zn.js.map +10 -0
- package/index-tkk6cmr2.js +650 -0
- package/index-tkk6cmr2.js.map +10 -0
- package/index.d.ts +23 -0
- package/index.js +480 -0
- package/index.js.map +9 -0
- package/lib/KeyHandler.d.ts +61 -0
- package/lib/RGBA.d.ts +26 -0
- package/lib/ascii.font.d.ts +508 -0
- package/lib/border.d.ts +51 -0
- package/lib/bunfs.d.ts +7 -0
- package/lib/clipboard.d.ts +17 -0
- package/lib/clock.d.ts +15 -0
- package/lib/data-paths.d.ts +26 -0
- package/lib/debounce.d.ts +42 -0
- package/lib/detect-links.d.ts +6 -0
- package/lib/env.d.ts +42 -0
- package/lib/extmarks-history.d.ts +17 -0
- package/lib/extmarks.d.ts +89 -0
- package/lib/hast-styled-text.d.ts +17 -0
- package/lib/index.d.ts +21 -0
- package/lib/keymapping.d.ts +25 -0
- package/lib/objects-in-viewport.d.ts +24 -0
- package/lib/output.capture.d.ts +24 -0
- package/lib/parse.keypress-kitty.d.ts +2 -0
- package/lib/parse.keypress.d.ts +26 -0
- package/lib/parse.mouse.d.ts +30 -0
- package/lib/paste.d.ts +7 -0
- package/lib/queue.d.ts +15 -0
- package/lib/renderable.validations.d.ts +12 -0
- package/lib/scroll-acceleration.d.ts +43 -0
- package/lib/selection.d.ts +64 -0
- package/lib/singleton.d.ts +7 -0
- package/lib/stdin-parser.d.ts +87 -0
- package/lib/styled-text.d.ts +63 -0
- package/lib/terminal-capability-detection.d.ts +30 -0
- package/lib/terminal-palette.d.ts +50 -0
- package/lib/tree-sitter/assets/update.d.ts +11 -0
- package/lib/tree-sitter/client.d.ts +47 -0
- package/lib/tree-sitter/default-parsers.d.ts +2 -0
- package/lib/tree-sitter/download-utils.d.ts +21 -0
- package/lib/tree-sitter/index.d.ts +8 -0
- package/lib/tree-sitter/parser.worker.d.ts +1 -0
- package/lib/tree-sitter/parsers-config.d.ts +53 -0
- package/lib/tree-sitter/resolve-ft.d.ts +5 -0
- package/lib/tree-sitter/types.d.ts +82 -0
- package/lib/tree-sitter-styled-text.d.ts +14 -0
- package/lib/validate-dir-name.d.ts +1 -0
- package/lib/yoga.options.d.ts +32 -0
- package/package.json +80 -0
- package/parser.worker.js +888 -0
- package/parser.worker.js.map +12 -0
- package/plugins/core-slot.d.ts +72 -0
- package/plugins/registry.d.ts +42 -0
- package/plugins/types.d.ts +34 -0
- package/post/effects.d.ts +147 -0
- package/post/filters.d.ts +65 -0
- package/post/matrices.d.ts +20 -0
- package/renderables/ASCIIFont.d.ts +52 -0
- package/renderables/Box.d.ts +81 -0
- package/renderables/Code.d.ts +78 -0
- package/renderables/Diff.d.ts +142 -0
- package/renderables/EditBufferRenderable.d.ts +237 -0
- package/renderables/FrameBuffer.d.ts +16 -0
- package/renderables/Input.d.ts +67 -0
- package/renderables/LineNumberRenderable.d.ts +78 -0
- package/renderables/Markdown.d.ts +181 -0
- package/renderables/ScrollBar.d.ts +77 -0
- package/renderables/ScrollBox.d.ts +124 -0
- package/renderables/Select.d.ts +115 -0
- package/renderables/Slider.d.ts +47 -0
- package/renderables/TabSelect.d.ts +96 -0
- package/renderables/Text.d.ts +36 -0
- package/renderables/TextBufferRenderable.d.ts +105 -0
- package/renderables/TextNode.d.ts +91 -0
- package/renderables/TextTable.d.ts +140 -0
- package/renderables/Textarea.d.ts +63 -0
- package/renderables/TimeToFirstDraw.d.ts +24 -0
- package/renderables/__tests__/renderable-test-utils.d.ts +12 -0
- package/renderables/composition/VRenderable.d.ts +16 -0
- package/renderables/composition/constructs.d.ts +35 -0
- package/renderables/composition/vnode.d.ts +46 -0
- package/renderables/index.d.ts +23 -0
- package/renderables/markdown-parser.d.ts +10 -0
- package/renderer.d.ts +419 -0
- package/runtime-hdpkc6qf.js +220 -0
- package/runtime-hdpkc6qf.js.map +17 -0
- package/runtime-plugin-support.d.ts +3 -0
- package/runtime-plugin-support.js +31 -0
- package/runtime-plugin-support.js.map +10 -0
- package/runtime-plugin.d.ts +19 -0
- package/runtime-plugin.js +18 -0
- package/runtime-plugin.js.map +9 -0
- package/syntax-style.d.ts +54 -0
- package/testing/manual-clock.d.ts +17 -0
- package/testing/mock-keys.d.ts +81 -0
- package/testing/mock-mouse.d.ts +38 -0
- package/testing/mock-tree-sitter-client.d.ts +23 -0
- package/testing/spy.d.ts +7 -0
- package/testing/test-recorder.d.ts +61 -0
- package/testing/test-renderer.d.ts +23 -0
- package/testing.d.ts +6 -0
- package/testing.js +699 -0
- package/testing.js.map +15 -0
- package/text-buffer-view.d.ts +42 -0
- package/text-buffer.d.ts +67 -0
- package/types.d.ts +139 -0
- package/utils.d.ts +14 -0
- package/zig-structs.d.ts +155 -0
- package/zig.d.ts +353 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/compat/nodejs/runtime.ts", "../../../node_modules/.bun/ansi-regex@6.2.2/node_modules/ansi-regex/index.js", "../../../node_modules/.bun/strip-ansi@7.2.0/node_modules/strip-ansi/index.js", "../../../node_modules/.bun/get-east-asian-width@1.5.0/node_modules/get-east-asian-width/lookup-data.js", "../../../node_modules/.bun/get-east-asian-width@1.5.0/node_modules/get-east-asian-width/utilities.js", "../../../node_modules/.bun/get-east-asian-width@1.5.0/node_modules/get-east-asian-width/lookup.js", "../../../node_modules/.bun/get-east-asian-width@1.5.0/node_modules/get-east-asian-width/index.js", "../../../node_modules/.bun/string-width@8.2.0/node_modules/string-width/index.js"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import { mkdir, writeFile as writeFileNode } from \"node:fs/promises\"\nimport { dirname } from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\n\nimport stringWidthLib from \"string-width\"\nimport stripAnsiLib from \"strip-ansi\"\n\nimport type { WriteFileOptions } from \"../runtime.js\"\n\nexport function sleep(msOrDate: number | Date): Promise<void> {\n const ms = msOrDate instanceof Date ? msOrDate.getTime() - Date.now() : msOrDate\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport const stringWidth = stringWidthLib\nexport const stripANSI = stripAnsiLib\n\nexport async function writeFile(\n destination: string | URL,\n data: string | ArrayBufferView,\n options?: WriteFileOptions,\n): Promise<number> {\n const destinationPath = destination instanceof URL ? fileURLToPath(destination) : destination\n\n if (options?.createPath) {\n await mkdir(dirname(destinationPath), { recursive: true })\n }\n\n if (typeof data === \"string\") {\n await writeFileNode(destination, data, { mode: options?.mode, encoding: \"utf8\" })\n return new TextEncoder().encode(data).length\n }\n\n const bytes = new Uint8Array(data.buffer, data.byteOffset, data.byteLength)\n await writeFileNode(destination, bytes, { mode: options?.mode })\n return bytes.length\n}\n",
|
|
6
|
+
"export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\n\t// OSC sequences only: ESC ] ... ST (non-greedy until the first ST)\n\tconst osc = `(?:\\\\u001B\\\\][\\\\s\\\\S]*?${ST})`;\n\n\t// CSI and related: ESC/C1, optional intermediates, optional params (supports ; and :) then final byte\n\tconst csi = '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:\\\\d{1,4}(?:[;:]\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]';\n\n\tconst pattern = `${osc}|${csi}`;\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n",
|
|
7
|
+
"import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Fast path: ANSI codes require ESC (7-bit) or CSI (8-bit) introducer\n\tif (!string.includes('\\u001B') && !string.includes('\\u009B')) {\n\t\treturn string;\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n",
|
|
8
|
+
"// Generated by scripts/build.js\n\n// prettier-ignore\nconst ambiguousRanges = [161, 161, 164, 164, 167, 168, 170, 170, 173, 174, 176, 180, 182, 186, 188, 191, 198, 198, 208, 208, 215, 216, 222, 225, 230, 230, 232, 234, 236, 237, 240, 240, 242, 243, 247, 250, 252, 252, 254, 254, 257, 257, 273, 273, 275, 275, 283, 283, 294, 295, 299, 299, 305, 307, 312, 312, 319, 322, 324, 324, 328, 331, 333, 333, 338, 339, 358, 359, 363, 363, 462, 462, 464, 464, 466, 466, 468, 468, 470, 470, 472, 472, 474, 474, 476, 476, 593, 593, 609, 609, 708, 708, 711, 711, 713, 715, 717, 717, 720, 720, 728, 731, 733, 733, 735, 735, 768, 879, 913, 929, 931, 937, 945, 961, 963, 969, 1025, 1025, 1040, 1103, 1105, 1105, 8208, 8208, 8211, 8214, 8216, 8217, 8220, 8221, 8224, 8226, 8228, 8231, 8240, 8240, 8242, 8243, 8245, 8245, 8251, 8251, 8254, 8254, 8308, 8308, 8319, 8319, 8321, 8324, 8364, 8364, 8451, 8451, 8453, 8453, 8457, 8457, 8467, 8467, 8470, 8470, 8481, 8482, 8486, 8486, 8491, 8491, 8531, 8532, 8539, 8542, 8544, 8555, 8560, 8569, 8585, 8585, 8592, 8601, 8632, 8633, 8658, 8658, 8660, 8660, 8679, 8679, 8704, 8704, 8706, 8707, 8711, 8712, 8715, 8715, 8719, 8719, 8721, 8721, 8725, 8725, 8730, 8730, 8733, 8736, 8739, 8739, 8741, 8741, 8743, 8748, 8750, 8750, 8756, 8759, 8764, 8765, 8776, 8776, 8780, 8780, 8786, 8786, 8800, 8801, 8804, 8807, 8810, 8811, 8814, 8815, 8834, 8835, 8838, 8839, 8853, 8853, 8857, 8857, 8869, 8869, 8895, 8895, 8978, 8978, 9312, 9449, 9451, 9547, 9552, 9587, 9600, 9615, 9618, 9621, 9632, 9633, 9635, 9641, 9650, 9651, 9654, 9655, 9660, 9661, 9664, 9665, 9670, 9672, 9675, 9675, 9678, 9681, 9698, 9701, 9711, 9711, 9733, 9734, 9737, 9737, 9742, 9743, 9756, 9756, 9758, 9758, 9792, 9792, 9794, 9794, 9824, 9825, 9827, 9829, 9831, 9834, 9836, 9837, 9839, 9839, 9886, 9887, 9919, 9919, 9926, 9933, 9935, 9939, 9941, 9953, 9955, 9955, 9960, 9961, 9963, 9969, 9972, 9972, 9974, 9977, 9979, 9980, 9982, 9983, 10045, 10045, 10102, 10111, 11094, 11097, 12872, 12879, 57344, 63743, 65024, 65039, 65533, 65533, 127232, 127242, 127248, 127277, 127280, 127337, 127344, 127373, 127375, 127376, 127387, 127404, 917760, 917999, 983040, 1048573, 1048576, 1114109];\n\n// prettier-ignore\nconst fullwidthRanges = [12288, 12288, 65281, 65376, 65504, 65510];\n\n// prettier-ignore\nconst halfwidthRanges = [8361, 8361, 65377, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65512, 65518];\n\n// prettier-ignore\nconst narrowRanges = [32, 126, 162, 163, 165, 166, 172, 172, 175, 175, 10214, 10221, 10629, 10630];\n\n// prettier-ignore\nconst wideRanges = [4352, 4447, 8986, 8987, 9001, 9002, 9193, 9196, 9200, 9200, 9203, 9203, 9725, 9726, 9748, 9749, 9776, 9783, 9800, 9811, 9855, 9855, 9866, 9871, 9875, 9875, 9889, 9889, 9898, 9899, 9917, 9918, 9924, 9925, 9934, 9934, 9940, 9940, 9962, 9962, 9970, 9971, 9973, 9973, 9978, 9978, 9981, 9981, 9989, 9989, 9994, 9995, 10024, 10024, 10060, 10060, 10062, 10062, 10067, 10069, 10071, 10071, 10133, 10135, 10160, 10160, 10175, 10175, 11035, 11036, 11088, 11088, 11093, 11093, 11904, 11929, 11931, 12019, 12032, 12245, 12272, 12287, 12289, 12350, 12353, 12438, 12441, 12543, 12549, 12591, 12593, 12686, 12688, 12773, 12783, 12830, 12832, 12871, 12880, 42124, 42128, 42182, 43360, 43388, 44032, 55203, 63744, 64255, 65040, 65049, 65072, 65106, 65108, 65126, 65128, 65131, 94176, 94180, 94192, 94198, 94208, 101589, 101631, 101662, 101760, 101874, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 119552, 119638, 119648, 119670, 126980, 126980, 127183, 127183, 127374, 127374, 127377, 127386, 127488, 127490, 127504, 127547, 127552, 127560, 127568, 127569, 127584, 127589, 127744, 127776, 127789, 127797, 127799, 127868, 127870, 127891, 127904, 127946, 127951, 127955, 127968, 127984, 127988, 127988, 127992, 128062, 128064, 128064, 128066, 128252, 128255, 128317, 128331, 128334, 128336, 128359, 128378, 128378, 128405, 128406, 128420, 128420, 128507, 128591, 128640, 128709, 128716, 128716, 128720, 128722, 128725, 128728, 128732, 128735, 128747, 128748, 128756, 128764, 128992, 129003, 129008, 129008, 129292, 129338, 129340, 129349, 129351, 129535, 129648, 129660, 129664, 129674, 129678, 129734, 129736, 129736, 129741, 129756, 129759, 129770, 129775, 129784, 131072, 196605, 196608, 262141];\n\nexport {ambiguousRanges, fullwidthRanges, halfwidthRanges, narrowRanges, wideRanges};\n",
|
|
9
|
+
"/**\nBinary search on a sorted flat array of [start, end] pairs.\n\n@param {number[]} ranges - Flat array of inclusive [start, end] range pairs, e.g. [0, 5, 10, 20].\n@param {number} codePoint - The value to search for.\n@returns {boolean} Whether the value falls within any of the ranges.\n*/\nexport const isInRange = (ranges, codePoint) => {\n\tlet low = 0;\n\tlet high = Math.floor(ranges.length / 2) - 1;\n\twhile (low <= high) {\n\t\tconst mid = Math.floor((low + high) / 2);\n\t\tconst i = mid * 2;\n\t\tif (codePoint < ranges[i]) {\n\t\t\thigh = mid - 1;\n\t\t} else if (codePoint > ranges[i + 1]) {\n\t\t\tlow = mid + 1;\n\t\t} else {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n};\n",
|
|
10
|
+
"import {\n\tambiguousRanges,\n\tfullwidthRanges,\n\thalfwidthRanges,\n\tnarrowRanges,\n\twideRanges,\n} from './lookup-data.js';\nimport {isInRange} from './utilities.js';\n\nconst minimumAmbiguousCodePoint = ambiguousRanges[0];\nconst maximumAmbiguousCodePoint = ambiguousRanges.at(-1);\nconst minimumFullWidthCodePoint = fullwidthRanges[0];\nconst maximumFullWidthCodePoint = fullwidthRanges.at(-1);\nconst minimumHalfWidthCodePoint = halfwidthRanges[0];\nconst maximumHalfWidthCodePoint = halfwidthRanges.at(-1);\nconst minimumNarrowCodePoint = narrowRanges[0];\nconst maximumNarrowCodePoint = narrowRanges.at(-1);\nconst minimumWideCodePoint = wideRanges[0];\nconst maximumWideCodePoint = wideRanges.at(-1);\n\nconst commonCjkCodePoint = 0x4E_00;\nconst [wideFastPathStart, wideFastPathEnd] = findWideFastPathRange(wideRanges);\n\n// Use a hot-path range so common `isWide` calls can skip binary search.\n// The range containing U+4E00 covers common CJK ideographs;\n// fallback to the largest range for resilience to Unicode table changes.\nfunction findWideFastPathRange(ranges) {\n\tlet fastPathStart = ranges[0];\n\tlet fastPathEnd = ranges[1];\n\n\tfor (let index = 0; index < ranges.length; index += 2) {\n\t\tconst start = ranges[index];\n\t\tconst end = ranges[index + 1];\n\n\t\tif (\n\t\t\tcommonCjkCodePoint >= start\n\t\t\t&& commonCjkCodePoint <= end\n\t\t) {\n\t\t\treturn [start, end];\n\t\t}\n\n\t\tif ((end - start) > (fastPathEnd - fastPathStart)) {\n\t\t\tfastPathStart = start;\n\t\t\tfastPathEnd = end;\n\t\t}\n\t}\n\n\treturn [fastPathStart, fastPathEnd];\n}\n\nexport const isAmbiguous = codePoint => {\n\tif (\n\t\tcodePoint < minimumAmbiguousCodePoint\n\t\t|| codePoint > maximumAmbiguousCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(ambiguousRanges, codePoint);\n};\n\nexport const isFullWidth = codePoint => {\n\tif (\n\t\tcodePoint < minimumFullWidthCodePoint\n\t\t|| codePoint > maximumFullWidthCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(fullwidthRanges, codePoint);\n};\n\nconst isHalfWidth = codePoint => {\n\tif (\n\t\tcodePoint < minimumHalfWidthCodePoint\n\t\t|| codePoint > maximumHalfWidthCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(halfwidthRanges, codePoint);\n};\n\nconst isNarrow = codePoint => {\n\tif (\n\t\tcodePoint < minimumNarrowCodePoint\n\t\t|| codePoint > maximumNarrowCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(narrowRanges, codePoint);\n};\n\nexport const isWide = codePoint => {\n\tif (\n\t\tcodePoint >= wideFastPathStart\n\t\t&& codePoint <= wideFastPathEnd\n\t) {\n\t\treturn true;\n\t}\n\n\tif (\n\t\tcodePoint < minimumWideCodePoint\n\t\t|| codePoint > maximumWideCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(wideRanges, codePoint);\n};\n\nexport function getCategory(codePoint) {\n\tif (isAmbiguous(codePoint)) {\n\t\treturn 'ambiguous';\n\t}\n\n\tif (isFullWidth(codePoint)) {\n\t\treturn 'fullwidth';\n\t}\n\n\tif (isHalfWidth(codePoint)) {\n\t\treturn 'halfwidth';\n\t}\n\n\tif (isNarrow(codePoint)) {\n\t\treturn 'narrow';\n\t}\n\n\tif (isWide(codePoint)) {\n\t\treturn 'wide';\n\t}\n\n\treturn 'neutral';\n}\n",
|
|
11
|
+
"import {getCategory, isAmbiguous, isFullWidth, isWide} from './lookup.js';\n\nfunction validate(codePoint) {\n\tif (!Number.isSafeInteger(codePoint)) {\n\t\tthrow new TypeError(`Expected a code point, got \\`${typeof codePoint}\\`.`);\n\t}\n}\n\nexport function eastAsianWidthType(codePoint) {\n\tvalidate(codePoint);\n\n\treturn getCategory(codePoint);\n}\n\nexport function eastAsianWidth(codePoint, {ambiguousAsWide = false} = {}) {\n\tvalidate(codePoint);\n\n\tif (\n\t\tisFullWidth(codePoint)\n\t\t|| isWide(codePoint)\n\t\t|| (ambiguousAsWide && isAmbiguous(codePoint))\n\t) {\n\t\treturn 2;\n\t}\n\n\treturn 1;\n}\n\n// Private exports for https://github.com/sindresorhus/is-fullwidth-code-point\nexport {isFullWidth as _isFullWidth, isWide as _isWide} from './lookup.js';\n",
|
|
12
|
+
"import stripAnsi from 'strip-ansi';\nimport {eastAsianWidth} from 'get-east-asian-width';\n\n/**\nLogic:\n- Segment graphemes to match how terminals render clusters.\n- Width rules:\n\t1. Skip non-printing clusters (Default_Ignorable, Control, pure Mark, lone Surrogates). Tabs are ignored by design.\n\t2. RGI emoji clusters (\\p{RGI_Emoji}) are double-width.\n\t3. Minimally-qualified/unqualified emoji clusters (ZWJ sequences with 2+ Extended_Pictographic, or keycap sequences) are double-width.\n\t4. Otherwise use East Asian Width of the cluster's first visible code point, and add widths for trailing Halfwidth/Fullwidth Forms within the same cluster (e.g., dakuten/handakuten/prolonged sound mark).\n*/\n\nconst segmenter = new Intl.Segmenter();\n\n// Whole-cluster zero-width\nconst zeroWidthClusterRegex = /^(?:\\p{Default_Ignorable_Code_Point}|\\p{Control}|\\p{Format}|\\p{Mark}|\\p{Surrogate})+$/v;\n\n// Pick the base scalar if the cluster starts with Prepend/Format/Marks\nconst leadingNonPrintingRegex = /^[\\p{Default_Ignorable_Code_Point}\\p{Control}\\p{Format}\\p{Mark}\\p{Surrogate}]+/v;\n\n// RGI emoji sequences\nconst rgiEmojiRegex = /^\\p{RGI_Emoji}$/v;\n\n// Detect minimally-qualified/unqualified emoji sequences (missing VS16 but still render as double-width)\nconst unqualifiedKeycapRegex = /^[\\d#*]\\u20E3$/;\nconst extendedPictographicRegex = /\\p{Extended_Pictographic}/gu;\n\nfunction isDoubleWidthNonRgiEmojiSequence(segment) {\n\t// Real emoji clusters are < 30 chars; guard against pathological input\n\tif (segment.length > 50) {\n\t\treturn false;\n\t}\n\n\tif (unqualifiedKeycapRegex.test(segment)) {\n\t\treturn true;\n\t}\n\n\t// ZWJ sequences with 2+ Extended_Pictographic\n\tif (segment.includes('\\u200D')) {\n\t\tconst pictographics = segment.match(extendedPictographicRegex);\n\t\treturn pictographics !== null && pictographics.length >= 2;\n\t}\n\n\treturn false;\n}\n\nfunction baseVisible(segment) {\n\treturn segment.replace(leadingNonPrintingRegex, '');\n}\n\nfunction isZeroWidthCluster(segment) {\n\treturn zeroWidthClusterRegex.test(segment);\n}\n\nfunction trailingHalfwidthWidth(segment, eastAsianWidthOptions) {\n\tlet extra = 0;\n\tif (segment.length > 1) {\n\t\tfor (const char of segment.slice(1)) {\n\t\t\tif (char >= '\\uFF00' && char <= '\\uFFEF') {\n\t\t\t\textra += eastAsianWidth(char.codePointAt(0), eastAsianWidthOptions);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn extra;\n}\n\nexport default function stringWidth(input, options = {}) {\n\tif (typeof input !== 'string' || input.length === 0) {\n\t\treturn 0;\n\t}\n\n\tconst {\n\t\tambiguousIsNarrow = true,\n\t\tcountAnsiEscapeCodes = false,\n\t} = options;\n\n\tlet string = input;\n\n\t// Avoid calling stripAnsi when there are no ANSI escape sequences (ESC = 0x1B, CSI = 0x9B)\n\tif (!countAnsiEscapeCodes && (string.includes('\\u001B') || string.includes('\\u009B'))) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\t// Fast path: printable ASCII (0x20–0x7E) needs no segmenter, regex, or EAW lookup — width equals length.\n\tif (/^[\\u0020-\\u007E]*$/.test(string)) {\n\t\treturn string.length;\n\t}\n\n\tlet width = 0;\n\tconst eastAsianWidthOptions = {ambiguousAsWide: !ambiguousIsNarrow};\n\n\tfor (const {segment} of segmenter.segment(string)) {\n\t\t// Zero-width / non-printing clusters\n\t\tif (isZeroWidthCluster(segment)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Emoji width logic\n\t\tif (rgiEmojiRegex.test(segment) || isDoubleWidthNonRgiEmojiSequence(segment)) {\n\t\t\twidth += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Everything else: EAW of the cluster’s first visible scalar\n\t\tconst codePoint = baseVisible(segment).codePointAt(0);\n\t\twidth += eastAsianWidth(codePoint, eastAsianWidthOptions);\n\n\t\t// Add width for trailing Halfwidth and Fullwidth Forms (e.g., ゙, ゚, ー)\n\t\twidth += trailingHalfwidthWidth(segment, eastAsianWidthOptions);\n\t}\n\n\treturn width;\n}\n"
|
|
13
|
+
],
|
|
14
|
+
"mappings": "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",
|
|
15
|
+
"debugId": "A6AAD9748045471764756E2164756E21",
|
|
16
|
+
"names": []
|
|
17
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { createRuntimePlugin, runtimeModuleIdForSpecifier, type CreateRuntimePluginOptions, type RuntimeModuleEntry, type RuntimeModuleExports, type RuntimeModuleLoader } from "./runtime-plugin.js";
|
|
2
|
+
export declare function ensureRuntimePluginSupport(options?: CreateRuntimePluginOptions): boolean;
|
|
3
|
+
export { createRuntimePlugin, runtimeModuleIdForSpecifier, type CreateRuntimePluginOptions, type RuntimeModuleEntry, type RuntimeModuleExports, type RuntimeModuleLoader, };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
createRuntimePlugin,
|
|
4
|
+
runtimeModuleIdForSpecifier
|
|
5
|
+
} from "./index-t16hn6zn.js";
|
|
6
|
+
import"./index-hjna9d1h.js";
|
|
7
|
+
import"./index-jjp8mmgk.js";
|
|
8
|
+
import"./index-cbvybypy.js";
|
|
9
|
+
import"./index-re3ntm60.js";
|
|
10
|
+
|
|
11
|
+
// src/runtime-plugin-support.ts
|
|
12
|
+
var {plugin: registerBunPlugin } = globalThis.Bun;
|
|
13
|
+
var runtimePluginSupportInstalledKey = "__opentuiCoreRuntimePluginSupportInstalled__";
|
|
14
|
+
function ensureRuntimePluginSupport(options = {}) {
|
|
15
|
+
const state = globalThis;
|
|
16
|
+
if (state[runtimePluginSupportInstalledKey]) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
registerBunPlugin(createRuntimePlugin(options));
|
|
20
|
+
state[runtimePluginSupportInstalledKey] = true;
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
ensureRuntimePluginSupport();
|
|
24
|
+
export {
|
|
25
|
+
runtimeModuleIdForSpecifier,
|
|
26
|
+
ensureRuntimePluginSupport,
|
|
27
|
+
createRuntimePlugin
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
//# debugId=4FFB83ECD35A04F464756E2164756E21
|
|
31
|
+
//# sourceMappingURL=runtime-plugin-support.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/runtime-plugin-support.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import { plugin as registerBunPlugin } from \"bun\"\nimport {\n createRuntimePlugin,\n runtimeModuleIdForSpecifier,\n type CreateRuntimePluginOptions,\n type RuntimeModuleEntry,\n type RuntimeModuleExports,\n type RuntimeModuleLoader,\n} from \"./runtime-plugin.js\"\n\nconst runtimePluginSupportInstalledKey = \"__opentuiCoreRuntimePluginSupportInstalled__\"\n\ntype RuntimePluginSupportState = typeof globalThis & {\n [runtimePluginSupportInstalledKey]?: boolean\n}\n\nexport function ensureRuntimePluginSupport(options: CreateRuntimePluginOptions = {}): boolean {\n const state = globalThis as RuntimePluginSupportState\n\n if (state[runtimePluginSupportInstalledKey]) {\n return false\n }\n\n registerBunPlugin(createRuntimePlugin(options))\n\n state[runtimePluginSupportInstalledKey] = true\n return true\n}\n\nensureRuntimePluginSupport()\n\nexport {\n createRuntimePlugin,\n runtimeModuleIdForSpecifier,\n type CreateRuntimePluginOptions,\n type RuntimeModuleEntry,\n type RuntimeModuleExports,\n type RuntimeModuleLoader,\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": ";;;;;;;;;;;AAAA;AAUA,IAAM,mCAAmC;AAMlC,SAAS,0BAA0B,CAAC,UAAsC,CAAC,GAAY;AAAA,EAC5F,MAAM,QAAQ;AAAA,EAEd,IAAI,MAAM,mCAAmC;AAAA,IAC3C,OAAO;AAAA,EACT;AAAA,EAEA,kBAAkB,oBAAoB,OAAO,CAAC;AAAA,EAE9C,MAAM,oCAAoC;AAAA,EAC1C,OAAO;AAAA;AAGT,2BAA2B;",
|
|
8
|
+
"debugId": "4FFB83ECD35A04F464756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type RuntimeModuleExports = Record<string, unknown>;
|
|
2
|
+
export type RuntimeModuleLoader = () => RuntimeModuleExports | Promise<RuntimeModuleExports>;
|
|
3
|
+
export type RuntimeModuleEntry = RuntimeModuleExports | RuntimeModuleLoader;
|
|
4
|
+
export interface RuntimePluginRewriteOptions {
|
|
5
|
+
nodeModulesRuntimeSpecifiers?: boolean;
|
|
6
|
+
nodeModulesBareSpecifiers?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface CreateRuntimePluginOptions {
|
|
9
|
+
core?: RuntimeModuleEntry;
|
|
10
|
+
additional?: Record<string, RuntimeModuleEntry>;
|
|
11
|
+
rewrite?: RuntimePluginRewriteOptions;
|
|
12
|
+
}
|
|
13
|
+
export interface BunPlugin {
|
|
14
|
+
name: string;
|
|
15
|
+
setup(build: any): void | Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
export declare const isCoreRuntimeModuleSpecifier: (specifier: string) => boolean;
|
|
18
|
+
export declare const runtimeModuleIdForSpecifier: (specifier: string) => string;
|
|
19
|
+
export declare function createRuntimePlugin(input?: CreateRuntimePluginOptions): BunPlugin;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
createRuntimePlugin,
|
|
4
|
+
isCoreRuntimeModuleSpecifier,
|
|
5
|
+
runtimeModuleIdForSpecifier
|
|
6
|
+
} from "./index-t16hn6zn.js";
|
|
7
|
+
import"./index-hjna9d1h.js";
|
|
8
|
+
import"./index-jjp8mmgk.js";
|
|
9
|
+
import"./index-cbvybypy.js";
|
|
10
|
+
import"./index-re3ntm60.js";
|
|
11
|
+
export {
|
|
12
|
+
runtimeModuleIdForSpecifier,
|
|
13
|
+
isCoreRuntimeModuleSpecifier,
|
|
14
|
+
createRuntimePlugin
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
//# debugId=69606475FBD9C5FB64756E2164756E21
|
|
18
|
+
//# sourceMappingURL=runtime-plugin.js.map
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { RGBA, type ColorInput } from "./lib/RGBA.js";
|
|
2
|
+
import { type RenderLib } from "./zig.js";
|
|
3
|
+
import { type Pointer } from "./compat/ffi.js";
|
|
4
|
+
export interface StyleDefinition {
|
|
5
|
+
fg?: RGBA;
|
|
6
|
+
bg?: RGBA;
|
|
7
|
+
bold?: boolean;
|
|
8
|
+
italic?: boolean;
|
|
9
|
+
underline?: boolean;
|
|
10
|
+
dim?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface MergedStyle {
|
|
13
|
+
fg?: RGBA;
|
|
14
|
+
bg?: RGBA;
|
|
15
|
+
attributes: number;
|
|
16
|
+
}
|
|
17
|
+
export interface ThemeTokenStyle {
|
|
18
|
+
scope: string[];
|
|
19
|
+
style: {
|
|
20
|
+
foreground?: ColorInput;
|
|
21
|
+
background?: ColorInput;
|
|
22
|
+
bold?: boolean;
|
|
23
|
+
italic?: boolean;
|
|
24
|
+
underline?: boolean;
|
|
25
|
+
dim?: boolean;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export declare function convertThemeToStyles(theme: ThemeTokenStyle[]): Record<string, StyleDefinition>;
|
|
29
|
+
export declare class SyntaxStyle {
|
|
30
|
+
private lib;
|
|
31
|
+
private stylePtr;
|
|
32
|
+
private _destroyed;
|
|
33
|
+
private nameCache;
|
|
34
|
+
private styleDefs;
|
|
35
|
+
private mergedCache;
|
|
36
|
+
constructor(lib: RenderLib, ptr: Pointer);
|
|
37
|
+
static create(): SyntaxStyle;
|
|
38
|
+
static fromTheme(theme: ThemeTokenStyle[]): SyntaxStyle;
|
|
39
|
+
static fromStyles(styles: Record<string, StyleDefinition>): SyntaxStyle;
|
|
40
|
+
private guard;
|
|
41
|
+
registerStyle(name: string, style: StyleDefinition): number;
|
|
42
|
+
resolveStyleId(name: string): number | null;
|
|
43
|
+
getStyleId(name: string): number | null;
|
|
44
|
+
get ptr(): Pointer;
|
|
45
|
+
getStyleCount(): number;
|
|
46
|
+
clearNameCache(): void;
|
|
47
|
+
getStyle(name: string): StyleDefinition | undefined;
|
|
48
|
+
mergeStyles(...styleNames: string[]): MergedStyle;
|
|
49
|
+
clearCache(): void;
|
|
50
|
+
getCacheSize(): number;
|
|
51
|
+
getAllStyles(): Map<string, StyleDefinition>;
|
|
52
|
+
getRegisteredNames(): string[];
|
|
53
|
+
destroy(): void;
|
|
54
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Clock, TimerHandle } from "../lib/clock.js";
|
|
2
|
+
export declare class ManualClock implements Clock {
|
|
3
|
+
private time;
|
|
4
|
+
private nextId;
|
|
5
|
+
private nextOrder;
|
|
6
|
+
private readonly timers;
|
|
7
|
+
now(): number;
|
|
8
|
+
setTime(time: number): void;
|
|
9
|
+
setTimeout(fn: () => void, delayMs: number): TimerHandle;
|
|
10
|
+
clearTimeout(handle: TimerHandle): void;
|
|
11
|
+
setInterval(fn: () => void, delayMs: number): TimerHandle;
|
|
12
|
+
clearInterval(handle: TimerHandle): void;
|
|
13
|
+
advance(delayMs: number): void;
|
|
14
|
+
runAll(): void;
|
|
15
|
+
private schedule;
|
|
16
|
+
private peekNextTimer;
|
|
17
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { CliRenderer } from "../renderer.js";
|
|
2
|
+
export declare function pasteBytes(text: string): Uint8Array;
|
|
3
|
+
export declare const KeyCodes: {
|
|
4
|
+
readonly RETURN: "\r";
|
|
5
|
+
readonly LINEFEED: "\n";
|
|
6
|
+
readonly TAB: "\t";
|
|
7
|
+
readonly BACKSPACE: "\b";
|
|
8
|
+
readonly DELETE: "\u001B[3~";
|
|
9
|
+
readonly HOME: "\u001B[H";
|
|
10
|
+
readonly END: "\u001B[F";
|
|
11
|
+
readonly ESCAPE: "\u001B";
|
|
12
|
+
readonly ARROW_UP: "\u001B[A";
|
|
13
|
+
readonly ARROW_DOWN: "\u001B[B";
|
|
14
|
+
readonly ARROW_RIGHT: "\u001B[C";
|
|
15
|
+
readonly ARROW_LEFT: "\u001B[D";
|
|
16
|
+
readonly F1: "\u001BOP";
|
|
17
|
+
readonly F2: "\u001BOQ";
|
|
18
|
+
readonly F3: "\u001BOR";
|
|
19
|
+
readonly F4: "\u001BOS";
|
|
20
|
+
readonly F5: "\u001B[15~";
|
|
21
|
+
readonly F6: "\u001B[17~";
|
|
22
|
+
readonly F7: "\u001B[18~";
|
|
23
|
+
readonly F8: "\u001B[19~";
|
|
24
|
+
readonly F9: "\u001B[20~";
|
|
25
|
+
readonly F10: "\u001B[21~";
|
|
26
|
+
readonly F11: "\u001B[23~";
|
|
27
|
+
readonly F12: "\u001B[24~";
|
|
28
|
+
};
|
|
29
|
+
export type KeyInput = string | keyof typeof KeyCodes;
|
|
30
|
+
export interface MockKeysOptions {
|
|
31
|
+
kittyKeyboard?: boolean;
|
|
32
|
+
otherModifiersMode?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export declare function createMockKeys(renderer: CliRenderer, options?: MockKeysOptions): {
|
|
35
|
+
pressKeys: (keys: KeyInput[], delayMs?: number) => Promise<void>;
|
|
36
|
+
pressKey: (key: KeyInput, modifiers?: {
|
|
37
|
+
shift?: boolean;
|
|
38
|
+
ctrl?: boolean;
|
|
39
|
+
meta?: boolean;
|
|
40
|
+
super?: boolean;
|
|
41
|
+
hyper?: boolean;
|
|
42
|
+
}) => void;
|
|
43
|
+
typeText: (text: string, delayMs?: number) => Promise<void>;
|
|
44
|
+
pressEnter: (modifiers?: {
|
|
45
|
+
shift?: boolean;
|
|
46
|
+
ctrl?: boolean;
|
|
47
|
+
meta?: boolean;
|
|
48
|
+
super?: boolean;
|
|
49
|
+
hyper?: boolean;
|
|
50
|
+
}) => void;
|
|
51
|
+
pressEscape: (modifiers?: {
|
|
52
|
+
shift?: boolean;
|
|
53
|
+
ctrl?: boolean;
|
|
54
|
+
meta?: boolean;
|
|
55
|
+
super?: boolean;
|
|
56
|
+
hyper?: boolean;
|
|
57
|
+
}) => void;
|
|
58
|
+
pressTab: (modifiers?: {
|
|
59
|
+
shift?: boolean;
|
|
60
|
+
ctrl?: boolean;
|
|
61
|
+
meta?: boolean;
|
|
62
|
+
super?: boolean;
|
|
63
|
+
hyper?: boolean;
|
|
64
|
+
}) => void;
|
|
65
|
+
pressBackspace: (modifiers?: {
|
|
66
|
+
shift?: boolean;
|
|
67
|
+
ctrl?: boolean;
|
|
68
|
+
meta?: boolean;
|
|
69
|
+
super?: boolean;
|
|
70
|
+
hyper?: boolean;
|
|
71
|
+
}) => void;
|
|
72
|
+
pressArrow: (direction: "up" | "down" | "left" | "right", modifiers?: {
|
|
73
|
+
shift?: boolean;
|
|
74
|
+
ctrl?: boolean;
|
|
75
|
+
meta?: boolean;
|
|
76
|
+
super?: boolean;
|
|
77
|
+
hyper?: boolean;
|
|
78
|
+
}) => void;
|
|
79
|
+
pressCtrlC: () => void;
|
|
80
|
+
pasteBracketedText: (text: string) => Promise<void>;
|
|
81
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { CliRenderer } from "../renderer.js";
|
|
2
|
+
export declare const MouseButtons: {
|
|
3
|
+
readonly LEFT: 0;
|
|
4
|
+
readonly MIDDLE: 1;
|
|
5
|
+
readonly RIGHT: 2;
|
|
6
|
+
readonly WHEEL_UP: 64;
|
|
7
|
+
readonly WHEEL_DOWN: 65;
|
|
8
|
+
readonly WHEEL_LEFT: 66;
|
|
9
|
+
readonly WHEEL_RIGHT: 67;
|
|
10
|
+
};
|
|
11
|
+
export type MouseButton = (typeof MouseButtons)[keyof typeof MouseButtons];
|
|
12
|
+
export interface MousePosition {
|
|
13
|
+
x: number;
|
|
14
|
+
y: number;
|
|
15
|
+
}
|
|
16
|
+
export interface MouseModifiers {
|
|
17
|
+
shift?: boolean;
|
|
18
|
+
alt?: boolean;
|
|
19
|
+
ctrl?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export type MouseEventType = "down" | "up" | "move" | "drag" | "scroll";
|
|
22
|
+
export interface MouseEventOptions {
|
|
23
|
+
button?: MouseButton;
|
|
24
|
+
modifiers?: MouseModifiers;
|
|
25
|
+
delayMs?: number;
|
|
26
|
+
}
|
|
27
|
+
export declare function createMockMouse(renderer: CliRenderer): {
|
|
28
|
+
moveTo: (x: number, y: number, options?: MouseEventOptions) => Promise<void>;
|
|
29
|
+
click: (x: number, y: number, button?: MouseButton, options?: MouseEventOptions) => Promise<void>;
|
|
30
|
+
doubleClick: (x: number, y: number, button?: MouseButton, options?: MouseEventOptions) => Promise<void>;
|
|
31
|
+
pressDown: (x: number, y: number, button?: MouseButton, options?: MouseEventOptions) => Promise<void>;
|
|
32
|
+
release: (x: number, y: number, button?: MouseButton, options?: MouseEventOptions) => Promise<void>;
|
|
33
|
+
drag: (startX: number, startY: number, endX: number, endY: number, button?: MouseButton, options?: MouseEventOptions) => Promise<void>;
|
|
34
|
+
scroll: (x: number, y: number, direction: "up" | "down" | "left" | "right", options?: MouseEventOptions) => Promise<void>;
|
|
35
|
+
getCurrentPosition: () => MousePosition;
|
|
36
|
+
getPressedButtons: () => MouseButton[];
|
|
37
|
+
emitMouseEvent: (type: MouseEventType, x: number, y: number, button?: MouseButton, options?: Omit<MouseEventOptions, "button">) => Promise<void>;
|
|
38
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { TreeSitterClient } from "../lib/tree-sitter/index.js";
|
|
2
|
+
import type { SimpleHighlight } from "../lib/tree-sitter/types.js";
|
|
3
|
+
export declare class MockTreeSitterClient extends TreeSitterClient {
|
|
4
|
+
private _highlightPromises;
|
|
5
|
+
private _mockResult;
|
|
6
|
+
private _autoResolveTimeout?;
|
|
7
|
+
constructor(options?: {
|
|
8
|
+
autoResolveTimeout?: number;
|
|
9
|
+
});
|
|
10
|
+
highlightOnce(content: string, filetype: string): Promise<{
|
|
11
|
+
highlights?: SimpleHighlight[];
|
|
12
|
+
warning?: string;
|
|
13
|
+
error?: string;
|
|
14
|
+
}>;
|
|
15
|
+
setMockResult(result: {
|
|
16
|
+
highlights?: SimpleHighlight[];
|
|
17
|
+
warning?: string;
|
|
18
|
+
error?: string;
|
|
19
|
+
}): void;
|
|
20
|
+
resolveHighlightOnce(index?: number): void;
|
|
21
|
+
resolveAllHighlightOnce(): void;
|
|
22
|
+
isHighlighting(): boolean;
|
|
23
|
+
}
|
package/testing/spy.d.ts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { TestRenderer } from "./test-renderer.js";
|
|
2
|
+
export interface RecordBuffersOptions {
|
|
3
|
+
fg?: boolean;
|
|
4
|
+
bg?: boolean;
|
|
5
|
+
attributes?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface RecordedBuffers {
|
|
8
|
+
fg?: Float32Array;
|
|
9
|
+
bg?: Float32Array;
|
|
10
|
+
attributes?: Uint8Array;
|
|
11
|
+
}
|
|
12
|
+
export interface RecordedFrame {
|
|
13
|
+
frame: string;
|
|
14
|
+
timestamp: number;
|
|
15
|
+
frameNumber: number;
|
|
16
|
+
buffers?: RecordedBuffers;
|
|
17
|
+
}
|
|
18
|
+
export interface TestRecorderOptions {
|
|
19
|
+
recordBuffers?: RecordBuffersOptions;
|
|
20
|
+
now?: () => number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* TestRecorder records frames from a TestRenderer by hooking into the render pipeline.
|
|
24
|
+
* It captures the character frame after each native render pass.
|
|
25
|
+
*/
|
|
26
|
+
export declare class TestRecorder {
|
|
27
|
+
private renderer;
|
|
28
|
+
private frames;
|
|
29
|
+
private recording;
|
|
30
|
+
private frameNumber;
|
|
31
|
+
private startTime;
|
|
32
|
+
private originalRenderNative?;
|
|
33
|
+
private decoder;
|
|
34
|
+
private recordBuffers;
|
|
35
|
+
private now;
|
|
36
|
+
constructor(renderer: TestRenderer, options?: TestRecorderOptions);
|
|
37
|
+
/**
|
|
38
|
+
* Start recording frames. This hooks into the renderer's renderNative method.
|
|
39
|
+
*/
|
|
40
|
+
rec(): void;
|
|
41
|
+
/**
|
|
42
|
+
* Stop recording frames and restore the original renderNative method.
|
|
43
|
+
*/
|
|
44
|
+
stop(): void;
|
|
45
|
+
/**
|
|
46
|
+
* Get the recorded frames.
|
|
47
|
+
*/
|
|
48
|
+
get recordedFrames(): RecordedFrame[];
|
|
49
|
+
/**
|
|
50
|
+
* Clear all recorded frames.
|
|
51
|
+
*/
|
|
52
|
+
clear(): void;
|
|
53
|
+
/**
|
|
54
|
+
* Check if currently recording.
|
|
55
|
+
*/
|
|
56
|
+
get isRecording(): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Capture the current frame from the renderer's buffer.
|
|
59
|
+
*/
|
|
60
|
+
private captureFrame;
|
|
61
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { CliRenderer, type CliRendererConfig } from "../renderer.js";
|
|
2
|
+
import { createMockKeys } from "./mock-keys.js";
|
|
3
|
+
import { createMockMouse } from "./mock-mouse.js";
|
|
4
|
+
import type { CapturedFrame } from "../types.js";
|
|
5
|
+
export interface TestRendererOptions extends CliRendererConfig {
|
|
6
|
+
width?: number;
|
|
7
|
+
height?: number;
|
|
8
|
+
kittyKeyboard?: boolean;
|
|
9
|
+
otherModifiersMode?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface TestRenderer extends CliRenderer {
|
|
12
|
+
}
|
|
13
|
+
export type MockInput = ReturnType<typeof createMockKeys>;
|
|
14
|
+
export type MockMouse = ReturnType<typeof createMockMouse>;
|
|
15
|
+
export declare function createTestRenderer(options: TestRendererOptions): Promise<{
|
|
16
|
+
renderer: TestRenderer;
|
|
17
|
+
mockInput: MockInput;
|
|
18
|
+
mockMouse: MockMouse;
|
|
19
|
+
renderOnce: () => Promise<void>;
|
|
20
|
+
captureCharFrame: () => string;
|
|
21
|
+
captureSpans: () => CapturedFrame;
|
|
22
|
+
resize: (width: number, height: number) => void;
|
|
23
|
+
}>;
|
package/testing.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from "./testing/test-renderer.js";
|
|
2
|
+
export * from "./testing/mock-keys.js";
|
|
3
|
+
export * from "./testing/mock-mouse.js";
|
|
4
|
+
export * from "./testing/mock-tree-sitter-client.js";
|
|
5
|
+
export * from "./testing/spy.js";
|
|
6
|
+
export { TestRecorder, type RecordedFrame } from "./testing/test-recorder.js";
|