@fairyhunter13/opentui-core 0.1.112 → 0.1.114

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 (591) hide show
  1. package/dev/keypress-debug-renderer.ts +148 -0
  2. package/dev/keypress-debug.ts +43 -0
  3. package/dev/print-env-vars.ts +32 -0
  4. package/dev/test-tmux-graphics-334.sh +68 -0
  5. package/dev/thai-debug-test.ts +68 -0
  6. package/docs/development.md +144 -0
  7. package/package.json +63 -51
  8. package/scripts/build.ts +400 -0
  9. package/scripts/publish.ts +60 -0
  10. package/src/3d/SpriteResourceManager.ts +286 -0
  11. package/src/3d/SpriteUtils.ts +70 -0
  12. package/src/3d/TextureUtils.ts +196 -0
  13. package/src/3d/ThreeRenderable.ts +197 -0
  14. package/src/3d/WGPURenderer.ts +294 -0
  15. package/src/3d/animation/ExplodingSpriteEffect.ts +513 -0
  16. package/src/3d/animation/PhysicsExplodingSpriteEffect.ts +429 -0
  17. package/src/3d/animation/SpriteAnimator.ts +633 -0
  18. package/src/3d/animation/SpriteParticleGenerator.ts +435 -0
  19. package/src/3d/canvas.ts +464 -0
  20. package/src/3d/index.ts +12 -0
  21. package/src/3d/physics/PlanckPhysicsAdapter.ts +72 -0
  22. package/src/3d/physics/RapierPhysicsAdapter.ts +66 -0
  23. package/src/3d/physics/physics-interface.ts +31 -0
  24. package/src/3d/shaders/supersampling.wgsl +201 -0
  25. package/src/3d.ts +3 -0
  26. package/src/NativeSpanFeed.ts +300 -0
  27. package/src/Renderable.ts +1704 -0
  28. package/src/__snapshots__/buffer.test.ts.snap +28 -0
  29. package/src/animation/Timeline.test.ts +2709 -0
  30. package/src/animation/Timeline.ts +598 -0
  31. package/src/ansi.ts +18 -0
  32. package/src/benchmark/attenuation-benchmark.ts +81 -0
  33. package/src/benchmark/colormatrix-benchmark.ts +128 -0
  34. package/src/benchmark/gain-benchmark.ts +80 -0
  35. package/src/benchmark/latest-all-bench-run.json +707 -0
  36. package/src/benchmark/latest-async-bench-run.json +336 -0
  37. package/src/benchmark/latest-default-bench-run.json +657 -0
  38. package/src/benchmark/latest-large-bench-run.json +707 -0
  39. package/src/benchmark/latest-quick-bench-run.json +207 -0
  40. package/src/benchmark/markdown-benchmark.ts +1796 -0
  41. package/src/benchmark/native-span-feed-async-benchmark.ts +355 -0
  42. package/src/benchmark/native-span-feed-benchmark.md +56 -0
  43. package/src/benchmark/native-span-feed-benchmark.ts +596 -0
  44. package/src/benchmark/native-span-feed-compare.ts +280 -0
  45. package/src/benchmark/renderer-benchmark.ts +754 -0
  46. package/src/benchmark/text-table-benchmark.ts +948 -0
  47. package/src/buffer.test.ts +291 -0
  48. package/src/buffer.ts +554 -0
  49. package/src/console.test.ts +612 -0
  50. package/src/console.ts +1254 -0
  51. package/src/edit-buffer.test.ts +1769 -0
  52. package/src/edit-buffer.ts +411 -0
  53. package/src/editor-view.test.ts +1032 -0
  54. package/src/editor-view.ts +284 -0
  55. package/src/examples/ascii-font-selection-demo.ts +245 -0
  56. package/src/examples/assets/Water_2_M_Normal.jpg +0 -0
  57. package/src/examples/assets/concrete.png +0 -0
  58. package/src/examples/assets/crate.png +0 -0
  59. package/src/examples/assets/crate_emissive.png +0 -0
  60. package/src/examples/assets/forrest_background.png +0 -0
  61. package/src/examples/assets/hast-example.json +1018 -0
  62. package/src/examples/assets/heart.png +0 -0
  63. package/src/examples/assets/main_char_heavy_attack.png +0 -0
  64. package/src/examples/assets/main_char_idle.png +0 -0
  65. package/src/examples/assets/main_char_jump_end.png +0 -0
  66. package/src/examples/assets/main_char_jump_landing.png +0 -0
  67. package/src/examples/assets/main_char_jump_start.png +0 -0
  68. package/src/examples/assets/main_char_run_loop.png +0 -0
  69. package/src/examples/assets/roughness_map.jpg +0 -0
  70. package/src/examples/build.ts +115 -0
  71. package/src/examples/code-demo.ts +924 -0
  72. package/src/examples/console-demo.ts +358 -0
  73. package/src/examples/core-plugin-slots-demo.ts +759 -0
  74. package/src/examples/diff-demo.ts +701 -0
  75. package/src/examples/draggable-three-demo.ts +259 -0
  76. package/src/examples/editor-demo.ts +322 -0
  77. package/src/examples/extmarks-demo.ts +196 -0
  78. package/src/examples/focus-restore-demo.ts +310 -0
  79. package/src/examples/fonts.ts +245 -0
  80. package/src/examples/fractal-shader-demo.ts +268 -0
  81. package/src/examples/framebuffer-demo.ts +674 -0
  82. package/src/examples/full-unicode-demo.ts +241 -0
  83. package/src/examples/golden-star-demo.ts +933 -0
  84. package/src/examples/grayscale-buffer-demo.ts +249 -0
  85. package/src/examples/hast-syntax-highlighting-demo.ts +129 -0
  86. package/src/examples/index.ts +926 -0
  87. package/src/examples/input-demo.ts +377 -0
  88. package/src/examples/input-select-layout-demo.ts +425 -0
  89. package/src/examples/install.sh +143 -0
  90. package/src/examples/keypress-debug-demo.ts +452 -0
  91. package/src/examples/lib/HexList.ts +122 -0
  92. package/src/examples/lib/PaletteGrid.ts +125 -0
  93. package/src/examples/lib/standalone-keys.ts +25 -0
  94. package/src/examples/lib/tab-controller.ts +243 -0
  95. package/src/examples/lights-phong-demo.ts +290 -0
  96. package/src/examples/link-demo.ts +220 -0
  97. package/src/examples/live-state-demo.ts +480 -0
  98. package/src/examples/markdown-demo.ts +725 -0
  99. package/src/examples/mouse-interaction-demo.ts +428 -0
  100. package/src/examples/nested-zindex-demo.ts +357 -0
  101. package/src/examples/opacity-example.ts +235 -0
  102. package/src/examples/opentui-demo.ts +1057 -0
  103. package/src/examples/physx-planck-2d-demo.ts +623 -0
  104. package/src/examples/physx-rapier-2d-demo.ts +655 -0
  105. package/src/examples/relative-positioning-demo.ts +323 -0
  106. package/src/examples/scroll-example.ts +214 -0
  107. package/src/examples/scrollbox-mouse-test.ts +112 -0
  108. package/src/examples/scrollbox-overlay-hit-test.ts +206 -0
  109. package/src/examples/select-demo.ts +237 -0
  110. package/src/examples/shader-cube-demo.ts +1015 -0
  111. package/src/examples/simple-layout-example.ts +591 -0
  112. package/src/examples/slider-demo.ts +617 -0
  113. package/src/examples/split-mode-demo.ts +453 -0
  114. package/src/examples/sprite-animation-demo.ts +443 -0
  115. package/src/examples/sprite-particle-generator-demo.ts +486 -0
  116. package/src/examples/static-sprite-demo.ts +193 -0
  117. package/src/examples/sticky-scroll-example.ts +308 -0
  118. package/src/examples/styled-text-demo.ts +282 -0
  119. package/src/examples/tab-select-demo.ts +219 -0
  120. package/src/examples/terminal-title.ts +29 -0
  121. package/src/examples/terminal.ts +305 -0
  122. package/src/examples/text-node-demo.ts +416 -0
  123. package/src/examples/text-selection-demo.ts +377 -0
  124. package/src/examples/text-table-demo.ts +503 -0
  125. package/src/examples/text-truncation-demo.ts +481 -0
  126. package/src/examples/text-wrap.ts +757 -0
  127. package/src/examples/texture-loading-demo.ts +259 -0
  128. package/src/examples/timeline-example.ts +670 -0
  129. package/src/examples/transparency-demo.ts +400 -0
  130. package/src/examples/vnode-composition-demo.ts +404 -0
  131. package/src/examples/wide-grapheme-overlay-demo.ts +280 -0
  132. package/src/index.ts +24 -0
  133. package/src/lib/KeyHandler.integration.test.ts +292 -0
  134. package/src/lib/KeyHandler.stopPropagation.test.ts +289 -0
  135. package/src/lib/KeyHandler.test.ts +662 -0
  136. package/src/lib/KeyHandler.ts +222 -0
  137. package/src/lib/RGBA.test.ts +984 -0
  138. package/src/lib/RGBA.ts +204 -0
  139. package/src/lib/ascii.font.ts +330 -0
  140. package/src/lib/border.test.ts +83 -0
  141. package/src/lib/border.ts +170 -0
  142. package/src/lib/bunfs.test.ts +27 -0
  143. package/src/lib/bunfs.ts +18 -0
  144. package/src/lib/clipboard.test.ts +41 -0
  145. package/src/lib/clipboard.ts +47 -0
  146. package/src/lib/clock.ts +35 -0
  147. package/src/lib/data-paths.test.ts +133 -0
  148. package/src/lib/data-paths.ts +109 -0
  149. package/src/lib/debounce.ts +106 -0
  150. package/src/lib/detect-links.test.ts +98 -0
  151. package/src/lib/detect-links.ts +56 -0
  152. package/src/lib/env.test.ts +228 -0
  153. package/src/lib/env.ts +209 -0
  154. package/src/lib/extmarks-history.ts +51 -0
  155. package/src/lib/extmarks-multiwidth.test.ts +322 -0
  156. package/src/lib/extmarks.test.ts +3457 -0
  157. package/src/lib/extmarks.ts +843 -0
  158. package/src/lib/fonts/block.json +405 -0
  159. package/src/lib/fonts/grid.json +265 -0
  160. package/src/lib/fonts/huge.json +741 -0
  161. package/src/lib/fonts/pallet.json +314 -0
  162. package/src/lib/fonts/shade.json +591 -0
  163. package/src/lib/fonts/slick.json +321 -0
  164. package/src/lib/fonts/tiny.json +69 -0
  165. package/src/lib/hast-styled-text.ts +59 -0
  166. package/src/lib/index.ts +21 -0
  167. package/src/lib/keymapping.test.ts +317 -0
  168. package/src/lib/keymapping.ts +115 -0
  169. package/src/lib/objects-in-viewport.test.ts +787 -0
  170. package/src/lib/objects-in-viewport.ts +153 -0
  171. package/src/lib/output.capture.ts +58 -0
  172. package/src/lib/parse.keypress-kitty.protocol.test.ts +340 -0
  173. package/src/lib/parse.keypress-kitty.test.ts +663 -0
  174. package/src/lib/parse.keypress-kitty.ts +439 -0
  175. package/src/lib/parse.keypress.test.ts +1849 -0
  176. package/src/lib/parse.keypress.ts +397 -0
  177. package/src/lib/parse.mouse.test.ts +552 -0
  178. package/src/lib/parse.mouse.ts +232 -0
  179. package/src/lib/paste.ts +16 -0
  180. package/src/lib/queue.ts +65 -0
  181. package/src/lib/renderable.validations.test.ts +87 -0
  182. package/src/lib/renderable.validations.ts +83 -0
  183. package/src/lib/scroll-acceleration.ts +98 -0
  184. package/src/lib/selection.ts +240 -0
  185. package/src/lib/singleton.ts +28 -0
  186. package/src/lib/stdin-parser.test.ts +2290 -0
  187. package/src/lib/stdin-parser.ts +1810 -0
  188. package/src/lib/styled-text.ts +178 -0
  189. package/src/lib/terminal-capability-detection.test.ts +202 -0
  190. package/src/lib/terminal-capability-detection.ts +79 -0
  191. package/src/lib/terminal-palette.test.ts +878 -0
  192. package/src/lib/terminal-palette.ts +383 -0
  193. package/src/lib/tree-sitter/assets/README.md +118 -0
  194. package/src/lib/tree-sitter/assets/update.ts +334 -0
  195. package/src/lib/tree-sitter/assets.d.ts +9 -0
  196. package/src/lib/tree-sitter/cache.test.ts +273 -0
  197. package/src/lib/tree-sitter/client.test.ts +1165 -0
  198. package/src/lib/tree-sitter/client.ts +607 -0
  199. package/src/lib/tree-sitter/default-parsers.ts +86 -0
  200. package/src/lib/tree-sitter/download-utils.ts +148 -0
  201. package/src/lib/tree-sitter/index.ts +28 -0
  202. package/src/lib/tree-sitter/parser.worker.ts +1042 -0
  203. package/src/lib/tree-sitter/parsers-config.ts +81 -0
  204. package/src/lib/tree-sitter/resolve-ft.test.ts +55 -0
  205. package/src/lib/tree-sitter/resolve-ft.ts +189 -0
  206. package/src/lib/tree-sitter/types.ts +82 -0
  207. package/src/lib/tree-sitter-styled-text.test.ts +1253 -0
  208. package/src/lib/tree-sitter-styled-text.ts +306 -0
  209. package/src/lib/validate-dir-name.ts +55 -0
  210. package/src/lib/yoga.options.test.ts +628 -0
  211. package/src/lib/yoga.options.ts +346 -0
  212. package/src/plugins/core-slot.ts +579 -0
  213. package/src/plugins/registry.ts +402 -0
  214. package/src/plugins/types.ts +46 -0
  215. package/src/post/effects.ts +930 -0
  216. package/src/post/filters.ts +489 -0
  217. package/src/post/matrices.ts +288 -0
  218. package/src/renderables/ASCIIFont.ts +219 -0
  219. package/src/renderables/Box.test.ts +205 -0
  220. package/src/renderables/Box.ts +326 -0
  221. package/src/renderables/Code.test.ts +2062 -0
  222. package/src/renderables/Code.ts +357 -0
  223. package/src/renderables/Diff.regression.test.ts +226 -0
  224. package/src/renderables/Diff.test.ts +3101 -0
  225. package/src/renderables/Diff.ts +1211 -0
  226. package/src/renderables/EditBufferRenderable.test.ts +288 -0
  227. package/src/renderables/EditBufferRenderable.ts +1166 -0
  228. package/src/renderables/FrameBuffer.ts +47 -0
  229. package/src/renderables/Input.test.ts +1228 -0
  230. package/src/renderables/Input.ts +247 -0
  231. package/src/renderables/LineNumberRenderable.ts +724 -0
  232. package/src/renderables/Markdown.ts +1393 -0
  233. package/src/renderables/ScrollBar.ts +422 -0
  234. package/src/renderables/ScrollBox.ts +883 -0
  235. package/src/renderables/Select.test.ts +1033 -0
  236. package/src/renderables/Select.ts +524 -0
  237. package/src/renderables/Slider.test.ts +456 -0
  238. package/src/renderables/Slider.ts +342 -0
  239. package/src/renderables/TabSelect.test.ts +197 -0
  240. package/src/renderables/TabSelect.ts +455 -0
  241. package/src/renderables/Text.selection-buffer.test.ts +123 -0
  242. package/src/renderables/Text.test.ts +2660 -0
  243. package/src/renderables/Text.ts +147 -0
  244. package/src/renderables/TextBufferRenderable.ts +518 -0
  245. package/src/renderables/TextNode.test.ts +1058 -0
  246. package/src/renderables/TextNode.ts +325 -0
  247. package/src/renderables/TextTable.test.ts +1421 -0
  248. package/src/renderables/TextTable.ts +1344 -0
  249. package/src/renderables/Textarea.ts +430 -0
  250. package/src/renderables/TimeToFirstDraw.ts +89 -0
  251. package/src/renderables/__snapshots__/Code.test.ts.snap +13 -0
  252. package/src/renderables/__snapshots__/Diff.test.ts.snap +785 -0
  253. package/src/renderables/__snapshots__/Text.test.ts.snap +421 -0
  254. package/src/renderables/__snapshots__/TextTable.test.ts.snap +215 -0
  255. package/src/renderables/__tests__/LineNumberRenderable.scrollbox-simple.test.ts +144 -0
  256. package/src/renderables/__tests__/LineNumberRenderable.scrollbox.test.ts +816 -0
  257. package/src/renderables/__tests__/LineNumberRenderable.test.ts +1865 -0
  258. package/src/renderables/__tests__/LineNumberRenderable.wrapping.test.ts +85 -0
  259. package/src/renderables/__tests__/Markdown.code-colors.test.ts +242 -0
  260. package/src/renderables/__tests__/Markdown.test.ts +2518 -0
  261. package/src/renderables/__tests__/MultiRenderable.selection.test.ts +87 -0
  262. package/src/renderables/__tests__/Textarea.buffer.test.ts +682 -0
  263. package/src/renderables/__tests__/Textarea.destroyed-events.test.ts +675 -0
  264. package/src/renderables/__tests__/Textarea.editing.test.ts +2041 -0
  265. package/src/renderables/__tests__/Textarea.error-handling.test.ts +35 -0
  266. package/src/renderables/__tests__/Textarea.events.test.ts +738 -0
  267. package/src/renderables/__tests__/Textarea.highlights.test.ts +590 -0
  268. package/src/renderables/__tests__/Textarea.keybinding.test.ts +3149 -0
  269. package/src/renderables/__tests__/Textarea.paste.test.ts +357 -0
  270. package/src/renderables/__tests__/Textarea.rendering.test.ts +1866 -0
  271. package/src/renderables/__tests__/Textarea.scroll.test.ts +733 -0
  272. package/src/renderables/__tests__/Textarea.selection.test.ts +1590 -0
  273. package/src/renderables/__tests__/Textarea.stress.test.ts +670 -0
  274. package/src/renderables/__tests__/Textarea.undo-redo.test.ts +383 -0
  275. package/src/renderables/__tests__/Textarea.visual-lines.test.ts +310 -0
  276. package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.code.test.ts.snap +221 -0
  277. package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.scrollbox-simple.test.ts.snap +89 -0
  278. package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.scrollbox.test.ts.snap +457 -0
  279. package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.test.ts.snap +158 -0
  280. package/src/renderables/__tests__/__snapshots__/Textarea.rendering.test.ts.snap +387 -0
  281. package/src/renderables/__tests__/markdown-parser.test.ts +217 -0
  282. package/src/renderables/__tests__/renderable-test-utils.ts +60 -0
  283. package/src/renderables/composition/README.md +8 -0
  284. package/src/renderables/composition/VRenderable.ts +32 -0
  285. package/src/renderables/composition/constructs.ts +127 -0
  286. package/src/renderables/composition/vnode.ts +289 -0
  287. package/src/renderables/index.ts +23 -0
  288. package/src/renderables/markdown-parser.ts +66 -0
  289. package/src/renderer.ts +2681 -0
  290. package/src/runtime-plugin-support.ts +39 -0
  291. package/src/runtime-plugin.ts +615 -0
  292. package/src/syntax-style.test.ts +841 -0
  293. package/src/syntax-style.ts +257 -0
  294. package/src/testing/README.md +210 -0
  295. package/src/testing/capture-spans.test.ts +194 -0
  296. package/src/testing/integration.test.ts +276 -0
  297. package/src/testing/manual-clock.ts +117 -0
  298. package/src/testing/mock-keys.test.ts +1378 -0
  299. package/src/testing/mock-keys.ts +457 -0
  300. package/src/testing/mock-mouse.test.ts +218 -0
  301. package/src/testing/mock-mouse.ts +247 -0
  302. package/src/testing/mock-tree-sitter-client.ts +73 -0
  303. package/src/testing/spy.ts +13 -0
  304. package/src/testing/test-recorder.test.ts +415 -0
  305. package/src/testing/test-recorder.ts +145 -0
  306. package/src/testing/test-renderer.ts +132 -0
  307. package/src/testing.ts +7 -0
  308. package/src/tests/__snapshots__/absolute-positioning.snapshot.test.ts.snap +481 -0
  309. package/src/tests/__snapshots__/renderable.snapshot.test.ts.snap +19 -0
  310. package/src/tests/__snapshots__/scrollbox.test.ts.snap +29 -0
  311. package/src/tests/absolute-positioning.snapshot.test.ts +638 -0
  312. package/src/tests/allocator-stats.test.ts +38 -0
  313. package/src/tests/destroy-during-render.test.ts +200 -0
  314. package/src/tests/destroy-on-exit.fixture.ts +36 -0
  315. package/src/tests/destroy-on-exit.test.ts +41 -0
  316. package/src/tests/hover-cursor.test.ts +98 -0
  317. package/src/tests/native-span-feed-async.test.ts +173 -0
  318. package/src/tests/native-span-feed-close.test.ts +120 -0
  319. package/src/tests/native-span-feed-coverage.test.ts +227 -0
  320. package/src/tests/native-span-feed-edge-cases.test.ts +352 -0
  321. package/src/tests/native-span-feed-use-after-free.test.ts +45 -0
  322. package/src/tests/opacity.test.ts +123 -0
  323. package/src/tests/renderable.snapshot.test.ts +524 -0
  324. package/src/tests/renderable.test.ts +1281 -0
  325. package/src/tests/renderer.clock.test.ts +158 -0
  326. package/src/tests/renderer.console-startup.test.ts +185 -0
  327. package/src/tests/renderer.control.test.ts +425 -0
  328. package/src/tests/renderer.core-slot-binding.test.ts +952 -0
  329. package/src/tests/renderer.cursor.test.ts +26 -0
  330. package/src/tests/renderer.destroy-during-render.test.ts +147 -0
  331. package/src/tests/renderer.focus-restore.test.ts +257 -0
  332. package/src/tests/renderer.focus.test.ts +294 -0
  333. package/src/tests/renderer.idle.test.ts +219 -0
  334. package/src/tests/renderer.input.test.ts +2237 -0
  335. package/src/tests/renderer.kitty-flags.test.ts +195 -0
  336. package/src/tests/renderer.mouse.test.ts +1274 -0
  337. package/src/tests/renderer.palette.test.ts +629 -0
  338. package/src/tests/renderer.selection.test.ts +49 -0
  339. package/src/tests/renderer.slot-registry.test.ts +684 -0
  340. package/src/tests/renderer.useMouse.test.ts +47 -0
  341. package/src/tests/runtime-plugin-node-modules-cycle.fixture.ts +76 -0
  342. package/src/tests/runtime-plugin-node-modules-mjs.fixture.ts +43 -0
  343. package/src/tests/runtime-plugin-node-modules-no-bare-rewrite.fixture.ts +67 -0
  344. package/src/tests/runtime-plugin-node-modules-package-type-cache.fixture.ts +72 -0
  345. package/src/tests/runtime-plugin-node-modules-runtime-specifier.fixture.ts +44 -0
  346. package/src/tests/runtime-plugin-node-modules-scoped-package-bare-rewrite.fixture.ts +85 -0
  347. package/src/tests/runtime-plugin-path-alias.fixture.ts +43 -0
  348. package/src/tests/runtime-plugin-resolve-roots.fixture.ts +65 -0
  349. package/src/tests/runtime-plugin-support.fixture.ts +11 -0
  350. package/src/tests/runtime-plugin-support.test.ts +19 -0
  351. package/src/tests/runtime-plugin-windows-file-url.fixture.ts +30 -0
  352. package/src/tests/runtime-plugin.fixture.ts +40 -0
  353. package/src/tests/runtime-plugin.test.ts +354 -0
  354. package/src/tests/scrollbox-culling-bug.test.ts +114 -0
  355. package/src/tests/scrollbox-hitgrid-resize.test.ts +136 -0
  356. package/src/tests/scrollbox-hitgrid.test.ts +909 -0
  357. package/src/tests/scrollbox.test.ts +1530 -0
  358. package/src/tests/wrap-resize-perf.test.ts +276 -0
  359. package/src/tests/yoga-setters.test.ts +921 -0
  360. package/src/text-buffer-view.test.ts +705 -0
  361. package/src/text-buffer-view.ts +189 -0
  362. package/src/text-buffer.test.ts +347 -0
  363. package/src/text-buffer.ts +250 -0
  364. package/src/types.ts +161 -0
  365. package/src/utils.ts +88 -0
  366. package/src/zig/ansi.zig +268 -0
  367. package/src/zig/bench/README.md +50 -0
  368. package/src/zig/bench/buffer-draw-text-buffer_bench.zig +887 -0
  369. package/src/zig/bench/edit-buffer_bench.zig +476 -0
  370. package/src/zig/bench/native-span-feed_bench.zig +100 -0
  371. package/src/zig/bench/rope-markers_bench.zig +713 -0
  372. package/src/zig/bench/rope_bench.zig +514 -0
  373. package/src/zig/bench/styled-text_bench.zig +470 -0
  374. package/src/zig/bench/text-buffer-coords_bench.zig +362 -0
  375. package/src/zig/bench/text-buffer-view_bench.zig +459 -0
  376. package/src/zig/bench/text-chunk-graphemes_bench.zig +273 -0
  377. package/src/zig/bench/utf8_bench.zig +799 -0
  378. package/src/zig/bench-utils.zig +431 -0
  379. package/src/zig/bench.zig +217 -0
  380. package/src/zig/buffer-methods.zig +211 -0
  381. package/src/zig/buffer.zig +2281 -0
  382. package/src/zig/build.zig +289 -0
  383. package/src/zig/build.zig.zon +16 -0
  384. package/src/zig/edit-buffer.zig +825 -0
  385. package/src/zig/editor-view.zig +802 -0
  386. package/src/zig/event-bus.zig +13 -0
  387. package/src/zig/event-emitter.zig +65 -0
  388. package/src/zig/file-logger.zig +92 -0
  389. package/src/zig/grapheme.zig +599 -0
  390. package/src/zig/lib.zig +1854 -0
  391. package/src/zig/link.zig +333 -0
  392. package/src/zig/logger.zig +43 -0
  393. package/src/zig/mem-registry.zig +125 -0
  394. package/src/zig/native-span-feed-bench-lib.zig +7 -0
  395. package/src/zig/native-span-feed.zig +708 -0
  396. package/src/zig/renderer.zig +1393 -0
  397. package/src/zig/rope.zig +1220 -0
  398. package/src/zig/syntax-style.zig +161 -0
  399. package/src/zig/terminal.zig +987 -0
  400. package/src/zig/test.zig +72 -0
  401. package/src/zig/tests/README.md +18 -0
  402. package/src/zig/tests/buffer-methods_test.zig +1109 -0
  403. package/src/zig/tests/buffer_test.zig +2557 -0
  404. package/src/zig/tests/edit-buffer-history_test.zig +271 -0
  405. package/src/zig/tests/edit-buffer_test.zig +1689 -0
  406. package/src/zig/tests/editor-view_test.zig +3299 -0
  407. package/src/zig/tests/event-emitter_test.zig +249 -0
  408. package/src/zig/tests/grapheme_test.zig +1304 -0
  409. package/src/zig/tests/link_test.zig +190 -0
  410. package/src/zig/tests/mem-registry_test.zig +473 -0
  411. package/src/zig/tests/memory_leak_regression_test.zig +159 -0
  412. package/src/zig/tests/native-span-feed_test.zig +1264 -0
  413. package/src/zig/tests/renderer_test.zig +1017 -0
  414. package/src/zig/tests/rope-nested_test.zig +712 -0
  415. package/src/zig/tests/rope_fuzz_test.zig +238 -0
  416. package/src/zig/tests/rope_test.zig +2362 -0
  417. package/src/zig/tests/segment-merge.test.zig +148 -0
  418. package/src/zig/tests/syntax-style_test.zig +557 -0
  419. package/src/zig/tests/terminal_test.zig +754 -0
  420. package/src/zig/tests/text-buffer-drawing_test.zig +3237 -0
  421. package/src/zig/tests/text-buffer-highlights_test.zig +666 -0
  422. package/src/zig/tests/text-buffer-iterators_test.zig +776 -0
  423. package/src/zig/tests/text-buffer-segment_test.zig +320 -0
  424. package/src/zig/tests/text-buffer-selection_test.zig +1035 -0
  425. package/src/zig/tests/text-buffer-selection_viewport_test.zig +358 -0
  426. package/src/zig/tests/text-buffer-view_test.zig +3649 -0
  427. package/src/zig/tests/text-buffer_test.zig +2191 -0
  428. package/src/zig/tests/unicode-width-map.zon +3909 -0
  429. package/src/zig/tests/utf8_no_zwj_test.zig +260 -0
  430. package/src/zig/tests/utf8_test.zig +4057 -0
  431. package/src/zig/tests/utf8_wcwidth_cursor_test.zig +267 -0
  432. package/src/zig/tests/utf8_wcwidth_test.zig +357 -0
  433. package/src/zig/tests/word-wrap-editing_test.zig +498 -0
  434. package/src/zig/tests/wrap-cache-perf_test.zig +113 -0
  435. package/src/zig/text-buffer-iterators.zig +499 -0
  436. package/src/zig/text-buffer-segment.zig +404 -0
  437. package/src/zig/text-buffer-view.zig +1371 -0
  438. package/src/zig/text-buffer.zig +1180 -0
  439. package/src/zig/utf8.zig +1948 -0
  440. package/src/zig/utils.zig +9 -0
  441. package/src/zig-structs.ts +261 -0
  442. package/src/zig.ts +3884 -0
  443. package/tsconfig.build.json +24 -0
  444. package/tsconfig.json +27 -0
  445. package/3d/SpriteResourceManager.d.ts +0 -74
  446. package/3d/SpriteUtils.d.ts +0 -13
  447. package/3d/TextureUtils.d.ts +0 -24
  448. package/3d/ThreeRenderable.d.ts +0 -40
  449. package/3d/WGPURenderer.d.ts +0 -61
  450. package/3d/animation/ExplodingSpriteEffect.d.ts +0 -71
  451. package/3d/animation/PhysicsExplodingSpriteEffect.d.ts +0 -76
  452. package/3d/animation/SpriteAnimator.d.ts +0 -124
  453. package/3d/animation/SpriteParticleGenerator.d.ts +0 -62
  454. package/3d/canvas.d.ts +0 -44
  455. package/3d/index.d.ts +0 -12
  456. package/3d/physics/PlanckPhysicsAdapter.d.ts +0 -19
  457. package/3d/physics/RapierPhysicsAdapter.d.ts +0 -19
  458. package/3d/physics/physics-interface.d.ts +0 -27
  459. package/3d.d.ts +0 -2
  460. package/3d.js +0 -34041
  461. package/3d.js.map +0 -155
  462. package/LICENSE +0 -21
  463. package/NativeSpanFeed.d.ts +0 -41
  464. package/Renderable.d.ts +0 -334
  465. package/animation/Timeline.d.ts +0 -126
  466. package/ansi.d.ts +0 -13
  467. package/buffer.d.ts +0 -111
  468. package/console.d.ts +0 -144
  469. package/edit-buffer.d.ts +0 -98
  470. package/editor-view.d.ts +0 -73
  471. package/index-8fks7yv1.js +0 -411
  472. package/index-8fks7yv1.js.map +0 -10
  473. package/index-egy5e2rs.js +0 -12267
  474. package/index-egy5e2rs.js.map +0 -42
  475. package/index-tse8gzh0.js +0 -20614
  476. package/index-tse8gzh0.js.map +0 -67
  477. package/index.d.ts +0 -23
  478. package/index.js +0 -478
  479. package/index.js.map +0 -9
  480. package/lib/KeyHandler.d.ts +0 -61
  481. package/lib/RGBA.d.ts +0 -25
  482. package/lib/ascii.font.d.ts +0 -508
  483. package/lib/border.d.ts +0 -51
  484. package/lib/bunfs.d.ts +0 -7
  485. package/lib/clipboard.d.ts +0 -17
  486. package/lib/clock.d.ts +0 -15
  487. package/lib/data-paths.d.ts +0 -26
  488. package/lib/debounce.d.ts +0 -42
  489. package/lib/detect-links.d.ts +0 -6
  490. package/lib/env.d.ts +0 -42
  491. package/lib/extmarks-history.d.ts +0 -17
  492. package/lib/extmarks.d.ts +0 -89
  493. package/lib/hast-styled-text.d.ts +0 -17
  494. package/lib/index.d.ts +0 -21
  495. package/lib/keymapping.d.ts +0 -25
  496. package/lib/objects-in-viewport.d.ts +0 -24
  497. package/lib/output.capture.d.ts +0 -24
  498. package/lib/parse.keypress-kitty.d.ts +0 -2
  499. package/lib/parse.keypress.d.ts +0 -26
  500. package/lib/parse.mouse.d.ts +0 -30
  501. package/lib/paste.d.ts +0 -7
  502. package/lib/queue.d.ts +0 -15
  503. package/lib/renderable.validations.d.ts +0 -12
  504. package/lib/scroll-acceleration.d.ts +0 -43
  505. package/lib/selection.d.ts +0 -63
  506. package/lib/singleton.d.ts +0 -7
  507. package/lib/stdin-parser.d.ts +0 -87
  508. package/lib/styled-text.d.ts +0 -63
  509. package/lib/terminal-capability-detection.d.ts +0 -30
  510. package/lib/terminal-palette.d.ts +0 -50
  511. package/lib/tree-sitter/assets/update.d.ts +0 -11
  512. package/lib/tree-sitter/client.d.ts +0 -47
  513. package/lib/tree-sitter/default-parsers.d.ts +0 -2
  514. package/lib/tree-sitter/download-utils.d.ts +0 -21
  515. package/lib/tree-sitter/index.d.ts +0 -8
  516. package/lib/tree-sitter/parser.worker.d.ts +0 -1
  517. package/lib/tree-sitter/parsers-config.d.ts +0 -53
  518. package/lib/tree-sitter/resolve-ft.d.ts +0 -5
  519. package/lib/tree-sitter/types.d.ts +0 -82
  520. package/lib/tree-sitter-styled-text.d.ts +0 -14
  521. package/lib/validate-dir-name.d.ts +0 -1
  522. package/lib/yoga.options.d.ts +0 -32
  523. package/parser.worker.js +0 -899
  524. package/parser.worker.js.map +0 -12
  525. package/plugins/core-slot.d.ts +0 -72
  526. package/plugins/registry.d.ts +0 -42
  527. package/plugins/types.d.ts +0 -34
  528. package/post/effects.d.ts +0 -147
  529. package/post/filters.d.ts +0 -65
  530. package/post/matrices.d.ts +0 -20
  531. package/renderables/ASCIIFont.d.ts +0 -52
  532. package/renderables/Box.d.ts +0 -81
  533. package/renderables/Code.d.ts +0 -78
  534. package/renderables/Diff.d.ts +0 -142
  535. package/renderables/EditBufferRenderable.d.ts +0 -237
  536. package/renderables/FrameBuffer.d.ts +0 -16
  537. package/renderables/Input.d.ts +0 -67
  538. package/renderables/LineNumberRenderable.d.ts +0 -78
  539. package/renderables/Markdown.d.ts +0 -185
  540. package/renderables/ScrollBar.d.ts +0 -77
  541. package/renderables/ScrollBox.d.ts +0 -124
  542. package/renderables/Select.d.ts +0 -115
  543. package/renderables/Slider.d.ts +0 -47
  544. package/renderables/TabSelect.d.ts +0 -96
  545. package/renderables/Text.d.ts +0 -36
  546. package/renderables/TextBufferRenderable.d.ts +0 -105
  547. package/renderables/TextNode.d.ts +0 -91
  548. package/renderables/TextTable.d.ts +0 -140
  549. package/renderables/Textarea.d.ts +0 -63
  550. package/renderables/TimeToFirstDraw.d.ts +0 -24
  551. package/renderables/__tests__/renderable-test-utils.d.ts +0 -12
  552. package/renderables/composition/VRenderable.d.ts +0 -16
  553. package/renderables/composition/constructs.d.ts +0 -35
  554. package/renderables/composition/vnode.d.ts +0 -46
  555. package/renderables/index.d.ts +0 -23
  556. package/renderables/markdown-parser.d.ts +0 -10
  557. package/renderer.d.ts +0 -419
  558. package/runtime-plugin-support.d.ts +0 -3
  559. package/runtime-plugin-support.js +0 -29
  560. package/runtime-plugin-support.js.map +0 -10
  561. package/runtime-plugin.d.ts +0 -16
  562. package/runtime-plugin.js +0 -16
  563. package/runtime-plugin.js.map +0 -9
  564. package/syntax-style.d.ts +0 -54
  565. package/testing/manual-clock.d.ts +0 -17
  566. package/testing/mock-keys.d.ts +0 -81
  567. package/testing/mock-mouse.d.ts +0 -38
  568. package/testing/mock-tree-sitter-client.d.ts +0 -23
  569. package/testing/spy.d.ts +0 -7
  570. package/testing/test-recorder.d.ts +0 -61
  571. package/testing/test-renderer.d.ts +0 -23
  572. package/testing.d.ts +0 -6
  573. package/testing.js +0 -697
  574. package/testing.js.map +0 -15
  575. package/text-buffer-view.d.ts +0 -42
  576. package/text-buffer.d.ts +0 -67
  577. package/types.d.ts +0 -139
  578. package/utils.d.ts +0 -14
  579. package/zig-structs.d.ts +0 -155
  580. package/zig.d.ts +0 -353
  581. /package/{assets → src/lib/tree-sitter/assets}/javascript/highlights.scm +0 -0
  582. /package/{assets → src/lib/tree-sitter/assets}/javascript/tree-sitter-javascript.wasm +0 -0
  583. /package/{assets → src/lib/tree-sitter/assets}/markdown/highlights.scm +0 -0
  584. /package/{assets → src/lib/tree-sitter/assets}/markdown/injections.scm +0 -0
  585. /package/{assets → src/lib/tree-sitter/assets}/markdown/tree-sitter-markdown.wasm +0 -0
  586. /package/{assets → src/lib/tree-sitter/assets}/markdown_inline/highlights.scm +0 -0
  587. /package/{assets → src/lib/tree-sitter/assets}/markdown_inline/tree-sitter-markdown_inline.wasm +0 -0
  588. /package/{assets → src/lib/tree-sitter/assets}/typescript/highlights.scm +0 -0
  589. /package/{assets → src/lib/tree-sitter/assets}/typescript/tree-sitter-typescript.wasm +0 -0
  590. /package/{assets → src/lib/tree-sitter/assets}/zig/highlights.scm +0 -0
  591. /package/{assets → src/lib/tree-sitter/assets}/zig/tree-sitter-zig.wasm +0 -0
@@ -0,0 +1,148 @@
1
+ #!/usr/bin/env bun
2
+ import { BoxRenderable, type CliRenderer, createCliRenderer, CodeRenderable, addDefaultParsers } from "../src/index.js"
3
+ import { ScrollBoxRenderable } from "../src/renderables/ScrollBox.js"
4
+ import { SyntaxStyle } from "../src/syntax-style.js"
5
+ import { parseColor } from "../src/lib/RGBA.js"
6
+
7
+ const parsers = [
8
+ {
9
+ filetype: "json",
10
+ wasm: "https://github.com/tree-sitter/tree-sitter-json/releases/download/v0.24.8/tree-sitter-json.wasm",
11
+ queries: {
12
+ highlights: [
13
+ "https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/json/highlights.scm",
14
+ ],
15
+ },
16
+ },
17
+ ]
18
+ addDefaultParsers(parsers)
19
+ let scrollBox: ScrollBoxRenderable | null = null
20
+ let renderer: CliRenderer | null = null
21
+ let syntaxStyle: SyntaxStyle | null = null
22
+ let eventCount = 0
23
+
24
+ function addEvent(eventType: string, event: object) {
25
+ if (!renderer || !scrollBox || !syntaxStyle) return
26
+
27
+ eventCount++
28
+
29
+ const eventData = {
30
+ type: eventType,
31
+ timestamp: new Date().toISOString(),
32
+ ...event,
33
+ }
34
+
35
+ const eventBox = new BoxRenderable(renderer, {
36
+ id: `event-${eventCount}`,
37
+ width: "auto",
38
+ marginBottom: 1,
39
+ padding: 1,
40
+ backgroundColor: "#1f2937",
41
+ })
42
+
43
+ const codeDisplay = new CodeRenderable(renderer, {
44
+ id: `event-code-${eventCount}`,
45
+ content: JSON.stringify(eventData, null, 2),
46
+ filetype: "json",
47
+ conceal: false,
48
+ syntaxStyle,
49
+ bg: "#1f2937",
50
+ })
51
+
52
+ eventBox.add(codeDisplay)
53
+ scrollBox.add(eventBox)
54
+
55
+ const children = scrollBox.getChildren()
56
+ if (children.length > 50) {
57
+ const oldest = children[0]
58
+ if (oldest) {
59
+ scrollBox.remove(oldest.id)
60
+ oldest.destroyRecursively()
61
+ }
62
+ }
63
+ }
64
+
65
+ async function main() {
66
+ const usePrepend = process.argv.includes("--prepend")
67
+ const prependInputHandlers = usePrepend
68
+ ? [
69
+ (sequence: string) => {
70
+ addEvent("raw-input-before", { sequence })
71
+ return false
72
+ },
73
+ ]
74
+ : []
75
+ renderer = await createCliRenderer({
76
+ exitOnCtrlC: true,
77
+ targetFps: 60,
78
+ useKittyKeyboard: { events: true },
79
+ prependInputHandlers,
80
+ })
81
+
82
+ renderer.setBackgroundColor("#0D1117")
83
+
84
+ const mainContainer = new BoxRenderable(renderer, {
85
+ id: "main-container",
86
+ flexGrow: 1,
87
+ flexDirection: "column",
88
+ })
89
+
90
+ renderer.root.add(mainContainer)
91
+
92
+ scrollBox = new ScrollBoxRenderable(renderer, {
93
+ id: "event-scroll-box",
94
+ stickyScroll: true,
95
+ stickyStart: "bottom",
96
+ border: true,
97
+ borderColor: "#6BCF7F",
98
+ title: `Keypress Debug${usePrepend ? " (prepend mode)" : ""} (Ctrl+C to exit)`,
99
+ titleAlignment: "center",
100
+ contentOptions: {
101
+ paddingLeft: 1,
102
+ paddingRight: 1,
103
+ paddingTop: 1,
104
+ },
105
+ })
106
+
107
+ mainContainer.add(scrollBox)
108
+
109
+ syntaxStyle = SyntaxStyle.fromStyles({
110
+ string: { fg: parseColor("#A5D6FF") },
111
+ number: { fg: parseColor("#79C0FF") },
112
+ boolean: { fg: parseColor("#79C0FF") },
113
+ keyword: { fg: parseColor("#FF7B72") },
114
+ default: { fg: parseColor("#E6EDF3") },
115
+ })
116
+
117
+ addEvent("capabilities", renderer.capabilities)
118
+
119
+ renderer.addInputHandler((sequence) => {
120
+ addEvent("raw-input-after", { sequence })
121
+ return true
122
+ })
123
+
124
+ renderer.keyInput.on("keypress", (event) => {
125
+ addEvent("keypress", event)
126
+
127
+ if (event.name === "c" && event.shift) {
128
+ if (renderer) {
129
+ addEvent("capabilities", renderer.capabilities)
130
+ }
131
+ }
132
+ })
133
+
134
+ renderer.keyInput.on("keyrelease", (event) => {
135
+ addEvent("keyrelease", event)
136
+ })
137
+
138
+ renderer.keyInput.on("paste", (event) => {
139
+ addEvent("paste", event)
140
+ })
141
+
142
+ renderer.requestRender()
143
+ }
144
+
145
+ main().catch((err) => {
146
+ console.error("Error:", err)
147
+ process.exit(1)
148
+ })
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env bun
2
+ import { parseKeypress } from "../src/lib/parse.keypress.ts"
3
+
4
+ console.log("Keypress Debug Tool")
5
+ console.log("Press keys to see their parsed output. Press Ctrl+C to exit.\n")
6
+
7
+ // Set stdin to raw mode to capture individual keypresses
8
+ process.stdin.setRawMode(true)
9
+ process.stdin.resume()
10
+
11
+ // Listen for keypress data
12
+ process.stdin.on("data", (data: Buffer) => {
13
+ // Check for Ctrl+C to exit
14
+ if (data.toString() === "\x03") {
15
+ console.log("\nExiting keypress debug tool...")
16
+ process.stdin.setRawMode(false)
17
+ process.exit(0)
18
+ }
19
+
20
+ const parsed = parseKeypress(data)
21
+
22
+ console.log("Input data:", JSON.stringify(data.toString()))
23
+ console.log("Raw:", JSON.stringify(parsed?.raw))
24
+ console.log("Parsed:", {
25
+ name: parsed?.name,
26
+ ctrl: parsed?.ctrl,
27
+ meta: parsed?.meta,
28
+ shift: parsed?.shift,
29
+ option: parsed?.option,
30
+ number: parsed?.number,
31
+ sequence: parsed?.sequence,
32
+ code: parsed?.code,
33
+ buffer: data,
34
+ })
35
+ console.log("---")
36
+ })
37
+
38
+ // Handle Ctrl+C gracefully
39
+ process.on("SIGINT", () => {
40
+ console.log("\nExiting keypress debug tool...")
41
+ process.stdin.setRawMode(false)
42
+ process.exit(0)
43
+ })
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env bun
2
+
3
+ /**
4
+ * Development script to print all registered environment variables
5
+ *
6
+ * Usage:
7
+ * bun dev/print-env-vars.ts # Colored output (default)
8
+ * bun dev/print-env-vars.ts --markdown # Markdown output
9
+ * bun dev/print-env-vars.ts --update # Update docs/env-vars.md
10
+ */
11
+
12
+ import { generateEnvColored, generateEnvMarkdown } from "../src/index.js"
13
+ import { join } from "path"
14
+
15
+ const args = process.argv.slice(2)
16
+ const useMarkdown = args.includes("--markdown")
17
+ const updateDocs = args.includes("--update")
18
+
19
+ const generateMarkdownContent = () => {
20
+ return `# Environment Variables\n\n${generateEnvMarkdown()}---\n\n_generated via packages/core/dev/print-env-vars.ts_\n`
21
+ }
22
+
23
+ if (updateDocs) {
24
+ const docsPath = join(import.meta.dir, "../docs/env-vars.md")
25
+ const content = generateMarkdownContent()
26
+ await Bun.write(docsPath, content)
27
+ console.log(`✓ Updated ${docsPath}`)
28
+ } else if (useMarkdown) {
29
+ console.log(`${generateEnvMarkdown()}\n---\n_generated via packages/core/dev/print-env-vars.ts_`)
30
+ } else {
31
+ console.log(generateEnvColored())
32
+ }
@@ -0,0 +1,68 @@
1
+ #!/bin/bash
2
+ # Test script for issue #334: Kitty Graphics Protocol query leaks into tmux pane title
3
+ #
4
+ # This script verifies that the kitty graphics query doesn't corrupt tmux pane titles.
5
+ # Run this inside tmux to test.
6
+ #
7
+ # Usage: ./test-tmux-graphics-334.sh
8
+ #
9
+ # Expected results:
10
+ # - Test 1 (Direct query): FAIL - demonstrates the bug
11
+ # - Test 2 (DCS passthrough): PASS - demonstrates the fix
12
+ # - Test 3 (No query): PASS - control test
13
+
14
+ set -e
15
+
16
+ SESSION_NAME="opentui-test-334-$$"
17
+ EXPECTED_TITLE="test-title"
18
+
19
+ cleanup() {
20
+ tmux kill-session -t "$SESSION_NAME" 2>/dev/null || true
21
+ }
22
+ trap cleanup EXIT
23
+
24
+ run_test() {
25
+ local test_name="$1"
26
+ local query_cmd="$2"
27
+
28
+ cleanup
29
+ tmux new-session -d -s "$SESSION_NAME" -x 80 -y 24
30
+ tmux select-pane -t "$SESSION_NAME" -T "$EXPECTED_TITLE"
31
+
32
+ if [ -n "$query_cmd" ]; then
33
+ tmux send-keys -t "$SESSION_NAME" "$query_cmd" Enter
34
+ sleep 0.5
35
+ fi
36
+
37
+ local after_title
38
+ after_title=$(tmux display-message -t "$SESSION_NAME" -p '#{pane_title}')
39
+
40
+ if [[ "$after_title" == *"Gi=31337"* ]] || [[ "$after_title" == *"i=31337"* ]]; then
41
+ echo "FAIL: $test_name - pane title corrupted: '$after_title'"
42
+ return 1
43
+ elif [[ "$after_title" != "$EXPECTED_TITLE" ]]; then
44
+ echo "WARN: $test_name - pane title changed: '$after_title'"
45
+ return 1
46
+ else
47
+ echo "PASS: $test_name"
48
+ return 0
49
+ fi
50
+ }
51
+
52
+ echo "=== Issue #334 Test: Kitty Graphics Query in tmux ==="
53
+ echo "tmux version: $(tmux -V)"
54
+ echo ""
55
+
56
+ echo "Test 1: Direct query (demonstrates bug)"
57
+ run_test "Direct kitty graphics query" \
58
+ "printf '\\x1b_Gi=31337,s=1,v=1,a=q,t=d,f=24;AAAA\\x1b\\\\\\x1b[c'" || true
59
+
60
+ echo "Test 2: DCS passthrough wrapped query (demonstrates fix)"
61
+ run_test "DCS passthrough wrapped" \
62
+ "printf '\\x1bPtmux;\\x1b\\x1b_Gi=31337,s=1,v=1,a=q,t=d,f=24;AAAA\\x1b\\x1b\\\\\\x1b\\x1b[c\\x1b\\\\'"
63
+
64
+ echo "Test 3: No query (control)"
65
+ run_test "No query" ""
66
+
67
+ echo ""
68
+ echo "If Test 1 fails and Test 2 passes, the fix is working correctly."
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env bun
2
+ import { TextRenderable, createCliRenderer } from "../src/index.js"
3
+ import { ScrollBoxRenderable } from "../src/renderables/ScrollBox.js"
4
+ async function main() {
5
+ const renderer = await createCliRenderer({ exitOnCtrlC: true })
6
+ console.log("capabilities:", renderer.capabilities)
7
+ const scrollBox = new ScrollBoxRenderable(renderer, {
8
+ id: "scroll-box",
9
+ border: true,
10
+ height: 20,
11
+ title: "Thai Render Debug (Up/Down to scroll, Ctrl+C to exit)",
12
+ titleAlignment: "center",
13
+ })
14
+ const thaiLorem = `ภาษาไทยเป็นภาษาที่มีความสวยงามและซับซ้อนมาก มีพยัญชนะ 44 ตัว สระ 32 รูป และวรรณยุกต์ 4 รูป
15
+ มอญเป็นชนชาติที่มีอิทธิพลต่อภาษาไทยมาก คำว่า "มอ" เป็นพยัญชนะที่ใช้บ่อยในภาษาไทย
16
+ ตัวอย่างคำที่มี มอ: มา มี มือ มอง มัว มอบ มวย มอม มอด มอก
17
+ การเขียนภาษาไทยต้องใส่ใจเรื่องวรรณยุกต์ เช่น ม่า ม้า หม่า หม้า
18
+ สระลอยและสระเปลี่ยนรูปทำให้ภาษาไทยมีความพิเศษ เช่น เมือง แมว ไม้ ใหม่
19
+ คำผสมที่น่าสนใจ: มอมแมม มอดมอด มอมเมา มืดมอม มอมดำ
20
+ ภาษาไทยมีระบบการเขียนที่ไม่เว้นวรรคระหว่างคำ ทำให้การอ่านต้องอาศัยความเข้าใจ
21
+ ตัวอักษรไทยมีสามระดับ: บน กลาง ล่าง เช่น ก็ ปี่ ฎุ ฏู ญ ฐ ฑ
22
+ วรรณยุกต์ไทยมี 5 เสียง: สามัญ เอก โท ตรี จัตวา
23
+ ตัวอย่างเสียงวรรณยุกต์: มา ม่า ม้า หมา หม่า หม้า
24
+ การสะกดคำในภาษาไทยมีกฎเกณฑ์ที่ซับซ้อน มีทั้งตัวสะกดมาตราแม่ ก กา และตัวสะกดไม่ตรงมาตรา
25
+ คำยืมจากภาษาบาลีสันสกฤต: กรรม ธรรม สงฆ์ ศาสนา พระ มหา
26
+ คำยืมจากภาษาเขมร: ถนน เสวย ขนม ตำรวจ ทหาร
27
+ คำยืมจากภาษาจีน: ก๋วยเตี๋ยว เต้าหู้ บะหมี่ เกี๊ยว ซาลาเปา
28
+ ภาษาไทยถิ่นมีหลายภาษา: ภาษาเหนือ ภาษาอีสาน ภาษาใต้ ภาษากลาง
29
+ มอญกับไทยมีความสัมพันธ์ทางวัฒนธรรมมายาวนาน
30
+ ตัวเลขไทย: ๐ ๑ ๒ ๓ ๔ ๕ ๖ ๗ ๘ ๙
31
+ เครื่องหมายวรรคตอน: ฯ ๆ ฯลฯ « » ๏
32
+ อักษรไทยมีต้นกำเนิดจากอักษรเขมร ซึ่งมาจากอักษรปัลลวะของอินเดียใต้
33
+ พ่อขุนรามคำแหงมหาราชทรงประดิษฐ์อักษรไทยเมื่อ พ.ศ. 1826
34
+ ภาษาไทยเป็นภาษาที่มีวรรณยุกต์ การออกเสียงผิดวรรณยุกต์ทำให้ความหมายเปลี่ยน
35
+ ตัวอย่าง: ขาว (สีขาว) ข่าว (news) ข้าว (rice) เข้า (enter)
36
+ มอเตอร์ไซค์ มอนิเตอร์ มอลต์ มอร์ฟีน เป็นคำทับศัพท์ที่มี มอ
37
+ สำนวนไทยที่มี มอ: มอมเมา หมอมหมาม มืดมอม มอดไหม้
38
+ คำกริยาที่มี มอ: มอง มอบ มอม มอด มอก
39
+ คำนามที่มี มอ: มอญ มอด หมอ มอเตอร์
40
+ การผันวรรณยุกต์ของ มอ: มอ ม่อ ม้อ หมอ หม่อ หม้อ
41
+ ภาษาไทยมีคำควบกล้ำ: กร กล กว ขร ขล ขว คร คล คว
42
+ ตัวอย่างคำควบกล้ำ: กราบ กลาง กวาง ครู คลอง ความ
43
+ อักษรสูง กลาง ต่ำ มีผลต่อการผันวรรณยุกต์
44
+ อักษรสูง: ข ฃ ฉ ฐ ถ ผ ฝ ศ ษ ส ห
45
+ อักษรกลาง: ก จ ฎ ฏ ด ต บ ป อ
46
+ อักษรต่ำ: ค ฅ ฆ ง ช ซ ฌ ญ ฑ ฒ ณ ท ธ น พ ฟ ภ ม ย ร ล ว ฬ ฮ`
47
+ const text = new TextRenderable(renderer, {
48
+ id: "thai-text",
49
+ content: thaiLorem,
50
+ })
51
+ scrollBox.add(text)
52
+ renderer.root.add(scrollBox)
53
+ renderer.keyInput.on("keypress", (event) => {
54
+ if (event.name === "down") scrollBox.scrollDown()
55
+ if (event.name === "up") scrollBox.scrollUp()
56
+ })
57
+ renderer.requestRender()
58
+
59
+ renderer.keyInput.on("keypress", (event) => {
60
+ if (event.name === "`") {
61
+ renderer.console.toggle()
62
+ }
63
+ })
64
+ }
65
+ main().catch((err) => {
66
+ console.error("Error:", err)
67
+ process.exit(1)
68
+ })
@@ -0,0 +1,144 @@
1
+ # Development Guide
2
+
3
+ ## Prerequisites
4
+
5
+ - [Bun](https://bun.sh) - JavaScript runtime and package manager
6
+ - [Zig](https://ziglang.org/learn/getting-started/) - Required for building native modules
7
+
8
+ ## Setup
9
+
10
+ ```bash
11
+ git clone https://github.com/anomalyco/opentui.git
12
+ cd opentui
13
+ bun install
14
+ ```
15
+
16
+ ## Building
17
+
18
+ ```bash
19
+ bun run build
20
+ ```
21
+
22
+ **Note:** Only needed when changing native Zig code. TypeScript changes don't require rebuilding.
23
+
24
+ ## Running Examples
25
+
26
+ ```bash
27
+ cd packages/core
28
+ bun run src/examples/index.ts
29
+ ```
30
+
31
+ ## Testing
32
+
33
+ ```bash
34
+ # Build native dependencies first
35
+ bun run build
36
+
37
+ # TypeScript tests
38
+ cd packages/core
39
+ bun test
40
+
41
+ # Native tests
42
+ bun run test:native
43
+
44
+ # Filter native tests
45
+ bun run test:native -Dtest-filter="test name"
46
+
47
+ # Benchmarks
48
+ bun run bench:native
49
+ ```
50
+
51
+ ## Local Development Linking
52
+
53
+ Link your local OpenTUI to another project:
54
+
55
+ ```bash
56
+ ./scripts/link-opentui-dev.sh /path/to/your/project
57
+ ```
58
+
59
+ **Options:**
60
+
61
+ - `--react` - Also link `@fairyhunter13/opentui-react` and React dependencies
62
+ - `--solid` - Also link `@fairyhunter13/opentui-solid` and SolidJS dependencies
63
+ - `--dist` - Link built `dist` directories instead of source
64
+ - `--copy` - Copy instead of symlink (requires `--dist`)
65
+ - `--subdeps` - Find and link packages that depend on opentui (e.g., `opentui-spinner`)
66
+
67
+ **Examples:**
68
+
69
+ ```bash
70
+ # Link core only
71
+ ./scripts/link-opentui-dev.sh /path/to/your/project
72
+
73
+ # Link core and solid with subdependency discovery
74
+ ./scripts/link-opentui-dev.sh /path/to/your/project --solid --subdeps
75
+
76
+ # Link built artifacts
77
+ ./scripts/link-opentui-dev.sh /path/to/your/project --react --dist
78
+
79
+ # Copy for Docker/Windows
80
+ ./scripts/link-opentui-dev.sh /path/to/your/project --dist --copy
81
+ ```
82
+
83
+ The script automatically links:
84
+
85
+ - Main packages: `@fairyhunter13/opentui-core`, `@fairyhunter13/opentui-solid`, `@fairyhunter13/opentui-react`
86
+ - Peer dependencies: `yoga-layout`, `solid-js`, `react`, `react-dom`, `react-reconciler`
87
+ - Subdependencies (with `--subdeps`): Packages like `opentui-spinner` that depend on opentui
88
+
89
+ **Requirements:** Target project must have `node_modules` (run `bun install` first).
90
+
91
+ ## Debugging
92
+
93
+ OpenTUI captures `console.log` output. Toggle the built-in console with backtick or use [Environment Variables](./env-vars.md) for debugging.
94
+
95
+ ## Terminal Compatibility
96
+
97
+ ### OSC 66 Artifacts on Older Terminals
98
+
99
+ **Problem:** If you see weird artifacts containing "66" in your terminal when running OpenTUI applications, your terminal emulator doesn't support OSC 66 escape sequences (used for explicit character width detection).
100
+
101
+ **Affected Terminals:**
102
+
103
+ - GNOME Terminal
104
+ - Konsole (older versions)
105
+ - xterm (older versions)
106
+ - Many VT100/VT220 emulators
107
+
108
+ **Solution:** Disable OSC 66 queries by setting an environment variable:
109
+
110
+ ```bash
111
+ export OPENTUI_FORCE_EXPLICIT_WIDTH=false
112
+ ```
113
+
114
+ Or run your application with:
115
+
116
+ ```bash
117
+ OPENTUI_FORCE_EXPLICIT_WIDTH=false your-app
118
+ ```
119
+
120
+ **For Application Developers:**
121
+
122
+ Set it in your code before creating the renderer:
123
+
124
+ ```typescript
125
+ process.env.OPENTUI_FORCE_EXPLICIT_WIDTH = "false"
126
+
127
+ const renderer = new CliRenderer()
128
+ // ... rest of your app
129
+ ```
130
+
131
+ Or add to your `.env` file:
132
+
133
+ ```bash
134
+ OPENTUI_FORCE_EXPLICIT_WIDTH=false
135
+ ```
136
+
137
+ **What This Does:**
138
+
139
+ - Prevents OSC 66 detection queries from being sent
140
+ - Disables the explicit width feature
141
+ - Falls back to standard width calculation
142
+ - No visual artifacts on unsupported terminals
143
+
144
+ **Modern Terminals:** If your terminal supports OSC 66 (Kitty, Ghostty, WezTerm, Alacritty, iTerm2), you don't need this setting - they work correctly by default.
package/package.json CHANGED
@@ -1,56 +1,32 @@
1
1
  {
2
2
  "name": "@fairyhunter13/opentui-core",
3
- "module": "index.js",
4
- "main": "index.js",
5
- "types": "index.d.ts",
6
- "type": "module",
7
- "version": "0.1.112",
8
3
  "description": "OpenTUI is a TypeScript library on a native Zig core for building terminal user interfaces (TUIs)",
9
- "license": "MIT",
10
4
  "repository": {
11
5
  "type": "git",
12
6
  "url": "https://github.com/anomalyco/opentui",
13
7
  "directory": "packages/core"
14
8
  },
15
- "exports": {
16
- ".": {
17
- "import": "./index.js",
18
- "require": "./index.js",
19
- "types": "./index.d.ts"
20
- },
21
- "./3d": {
22
- "import": "./3d.js",
23
- "require": "./3d.js",
24
- "types": "./3d.d.ts"
25
- },
26
- "./testing": {
27
- "import": "./testing.js",
28
- "require": "./testing.js",
29
- "types": "./testing.d.ts"
30
- },
31
- "./runtime-plugin": {
32
- "import": "./runtime-plugin.js",
33
- "require": "./runtime-plugin.js",
34
- "types": "./runtime-plugin.d.ts"
35
- },
36
- "./runtime-plugin-support": {
37
- "import": "./runtime-plugin-support.js",
38
- "require": "./runtime-plugin-support.js",
39
- "types": "./runtime-plugin-support.d.ts"
40
- },
41
- "./parser.worker": {
42
- "import": "./lib/tree-sitter/parser.worker.js",
43
- "require": "./lib/tree-sitter/parser.worker.js",
44
- "types": "./lib/tree-sitter/parser.worker.d.ts"
45
- }
46
- },
47
- "dependencies": {
48
- "bun-ffi-structs": "0.1.2",
49
- "diff": "8.0.2",
50
- "jimp": "1.6.0",
51
- "marked": "17.0.1",
52
- "yoga-layout": "3.2.1"
9
+ "types": "src/index.ts",
10
+ "module": "src/index.ts",
11
+ "main": "src/index.ts",
12
+ "version": "0.1.114",
13
+ "type": "module",
14
+ "scripts": {
15
+ "build": "bun run build:native && bun run build:lib",
16
+ "build:dev": "bun run build:native:dev && bun run build:lib",
17
+ "build:lib": "bun scripts/build.ts --lib",
18
+ "build:native": "bun scripts/build.ts --native",
19
+ "build:native:dev": "bun scripts/build.ts --native --dev",
20
+ "build:examples": "bun src/examples/build.ts",
21
+ "test:native": "cd src/zig && zig build test --summary all",
22
+ "bench:native": "cd src/zig && zig build bench -Dbench-optimize=ReleaseFast --",
23
+ "bench:text-table": "bun src/benchmark/text-table-benchmark.ts",
24
+ "bench:ts": "bun src/benchmark/native-span-feed-benchmark.ts --suite=quick --json=src/benchmark/latest-quick-bench-run.json && bun src/benchmark/native-span-feed-benchmark.ts --suite=default --json=src/benchmark/latest-default-bench-run.json && bun src/benchmark/native-span-feed-benchmark.ts --suite=large --json=src/benchmark/latest-large-bench-run.json && bun src/benchmark/native-span-feed-benchmark.ts --suite=all --json=src/benchmark/latest-all-bench-run.json && bun src/benchmark/native-span-feed-async-benchmark.ts --json=src/benchmark/latest-async-bench-run.json",
25
+ "publish": "bun scripts/publish.ts",
26
+ "test:js": "bun test",
27
+ "test": "bun run test:native && bun run test:js"
53
28
  },
29
+ "license": "MIT",
54
30
  "devDependencies": {
55
31
  "@types/bun": "latest",
56
32
  "@types/node": "^24.0.0",
@@ -59,6 +35,13 @@
59
35
  "typescript": "^5",
60
36
  "web-tree-sitter": "0.25.10"
61
37
  },
38
+ "dependencies": {
39
+ "bun-ffi-structs": "0.1.2",
40
+ "diff": "8.0.2",
41
+ "jimp": "1.6.0",
42
+ "marked": "17.0.1",
43
+ "yoga-layout": "3.2.1"
44
+ },
62
45
  "peerDependencies": {
63
46
  "web-tree-sitter": "0.25.10"
64
47
  },
@@ -67,11 +50,40 @@
67
50
  "bun-webgpu": "0.1.5",
68
51
  "planck": "^1.4.2",
69
52
  "three": "0.177.0",
70
- "@fairyhunter13/opentui-core-darwin-x64": "0.1.112",
71
- "@fairyhunter13/opentui-core-darwin-arm64": "0.1.112",
72
- "@fairyhunter13/opentui-core-linux-x64": "0.1.112",
73
- "@fairyhunter13/opentui-core-linux-arm64": "0.1.112",
74
- "@fairyhunter13/opentui-core-win32-x64": "0.1.112",
75
- "@fairyhunter13/opentui-core-win32-arm64": "0.1.112"
53
+ "@fairyhunter13/opentui-core-darwin-x64": "0.1.97",
54
+ "@fairyhunter13/opentui-core-darwin-arm64": "0.1.97",
55
+ "@fairyhunter13/opentui-core-linux-x64": "0.1.97",
56
+ "@fairyhunter13/opentui-core-linux-arm64": "0.1.97",
57
+ "@fairyhunter13/opentui-core-win32-x64": "0.1.97",
58
+ "@fairyhunter13/opentui-core-win32-arm64": "0.1.97"
59
+ },
60
+ "exports": {
61
+ ".": {
62
+ "types": "./src/index.ts",
63
+ "import": "./src/index.ts"
64
+ },
65
+ "./3d": {
66
+ "types": "./src/3d.ts",
67
+ "import": "./src/3d.ts"
68
+ },
69
+ "./testing": {
70
+ "types": "./src/testing.ts",
71
+ "import": "./src/testing.ts"
72
+ },
73
+ "./runtime-plugin": {
74
+ "types": "./src/runtime-plugin.ts",
75
+ "import": "./src/runtime-plugin.ts"
76
+ },
77
+ "./runtime-plugin-support": {
78
+ "types": "./src/runtime-plugin-support.ts",
79
+ "import": "./src/runtime-plugin-support.ts"
80
+ },
81
+ "./parser.worker": {
82
+ "types": "./src/lib/tree-sitter/parser.worker.ts",
83
+ "import": "./src/lib/tree-sitter/parser.worker.ts"
84
+ }
85
+ },
86
+ "engines": {
87
+ "bun": ">=1.3.0"
76
88
  }
77
- }
89
+ }