@fairyhunter13/opentui-core 0.1.91 → 0.1.94

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 (570) hide show
  1. package/3d/SpriteResourceManager.d.ts +74 -0
  2. package/3d/SpriteUtils.d.ts +13 -0
  3. package/3d/TextureUtils.d.ts +24 -0
  4. package/3d/ThreeRenderable.d.ts +40 -0
  5. package/3d/WGPURenderer.d.ts +61 -0
  6. package/3d/animation/ExplodingSpriteEffect.d.ts +71 -0
  7. package/3d/animation/PhysicsExplodingSpriteEffect.d.ts +76 -0
  8. package/3d/animation/SpriteAnimator.d.ts +124 -0
  9. package/3d/animation/SpriteParticleGenerator.d.ts +62 -0
  10. package/3d/canvas.d.ts +44 -0
  11. package/3d/index.d.ts +12 -0
  12. package/3d/physics/PlanckPhysicsAdapter.d.ts +19 -0
  13. package/3d/physics/RapierPhysicsAdapter.d.ts +19 -0
  14. package/3d/physics/physics-interface.d.ts +27 -0
  15. package/3d.d.ts +2 -0
  16. package/3d.js +34042 -0
  17. package/3d.js.map +155 -0
  18. package/LICENSE +21 -0
  19. package/NativeSpanFeed.d.ts +41 -0
  20. package/Renderable.d.ts +334 -0
  21. package/animation/Timeline.d.ts +126 -0
  22. package/ansi.d.ts +13 -0
  23. package/buffer.d.ts +107 -0
  24. package/console.d.ts +143 -0
  25. package/edit-buffer.d.ts +98 -0
  26. package/editor-view.d.ts +73 -0
  27. package/index-e6ec7apq.js +18415 -0
  28. package/index-e6ec7apq.js.map +64 -0
  29. package/index-h066zmrb.js +12619 -0
  30. package/index-h066zmrb.js.map +43 -0
  31. package/index-ynzawt3n.js +113 -0
  32. package/index-ynzawt3n.js.map +10 -0
  33. package/index.d.ts +21 -0
  34. package/index.js +430 -0
  35. package/index.js.map +9 -0
  36. package/lib/KeyHandler.d.ts +61 -0
  37. package/lib/RGBA.d.ts +25 -0
  38. package/lib/ascii.font.d.ts +508 -0
  39. package/lib/border.d.ts +49 -0
  40. package/lib/bunfs.d.ts +7 -0
  41. package/lib/clipboard.d.ts +17 -0
  42. package/lib/clock.d.ts +15 -0
  43. package/lib/data-paths.d.ts +26 -0
  44. package/lib/debounce.d.ts +42 -0
  45. package/lib/detect-links.d.ts +6 -0
  46. package/lib/env.d.ts +42 -0
  47. package/lib/extmarks-history.d.ts +17 -0
  48. package/lib/extmarks.d.ts +89 -0
  49. package/lib/hast-styled-text.d.ts +17 -0
  50. package/lib/index.d.ts +21 -0
  51. package/lib/keymapping.d.ts +25 -0
  52. package/lib/objects-in-viewport.d.ts +24 -0
  53. package/lib/output.capture.d.ts +24 -0
  54. package/lib/parse.keypress-kitty.d.ts +2 -0
  55. package/lib/parse.keypress.d.ts +26 -0
  56. package/lib/parse.mouse.d.ts +30 -0
  57. package/lib/paste.d.ts +7 -0
  58. package/lib/queue.d.ts +15 -0
  59. package/lib/renderable.validations.d.ts +12 -0
  60. package/lib/scroll-acceleration.d.ts +43 -0
  61. package/lib/selection.d.ts +63 -0
  62. package/lib/singleton.d.ts +7 -0
  63. package/lib/stdin-parser.d.ts +76 -0
  64. package/lib/styled-text.d.ts +63 -0
  65. package/lib/terminal-capability-detection.d.ts +30 -0
  66. package/lib/terminal-palette.d.ts +50 -0
  67. package/lib/tree-sitter/assets/update.d.ts +11 -0
  68. package/lib/tree-sitter/client.d.ts +47 -0
  69. package/lib/tree-sitter/default-parsers.d.ts +2 -0
  70. package/lib/tree-sitter/download-utils.d.ts +21 -0
  71. package/lib/tree-sitter/index.d.ts +8 -0
  72. package/lib/tree-sitter/parser.worker.d.ts +1 -0
  73. package/lib/tree-sitter/parsers-config.d.ts +38 -0
  74. package/lib/tree-sitter/resolve-ft.d.ts +2 -0
  75. package/lib/tree-sitter/types.d.ts +81 -0
  76. package/lib/tree-sitter-styled-text.d.ts +14 -0
  77. package/lib/validate-dir-name.d.ts +1 -0
  78. package/lib/yoga.options.d.ts +32 -0
  79. package/package.json +51 -63
  80. package/parser.worker.js +869 -0
  81. package/parser.worker.js.map +12 -0
  82. package/plugins/core-slot.d.ts +72 -0
  83. package/plugins/registry.d.ts +38 -0
  84. package/plugins/types.d.ts +34 -0
  85. package/post/filters.d.ts +105 -0
  86. package/renderables/ASCIIFont.d.ts +52 -0
  87. package/renderables/Box.d.ts +72 -0
  88. package/renderables/Code.d.ts +78 -0
  89. package/renderables/Diff.d.ts +142 -0
  90. package/renderables/EditBufferRenderable.d.ts +162 -0
  91. package/renderables/FrameBuffer.d.ts +16 -0
  92. package/renderables/Input.d.ts +67 -0
  93. package/renderables/LineNumberRenderable.d.ts +74 -0
  94. package/renderables/Markdown.d.ts +173 -0
  95. package/renderables/ScrollBar.d.ts +77 -0
  96. package/renderables/ScrollBox.d.ts +124 -0
  97. package/renderables/Select.d.ts +115 -0
  98. package/renderables/Slider.d.ts +44 -0
  99. package/renderables/TabSelect.d.ts +96 -0
  100. package/renderables/Text.d.ts +36 -0
  101. package/renderables/TextBufferRenderable.d.ts +105 -0
  102. package/renderables/TextNode.d.ts +91 -0
  103. package/renderables/TextTable.d.ts +140 -0
  104. package/renderables/Textarea.d.ts +114 -0
  105. package/renderables/TimeToFirstDraw.d.ts +24 -0
  106. package/renderables/__tests__/renderable-test-utils.d.ts +12 -0
  107. package/renderables/composition/VRenderable.d.ts +16 -0
  108. package/renderables/composition/constructs.d.ts +35 -0
  109. package/renderables/composition/vnode.d.ts +46 -0
  110. package/renderables/index.d.ts +22 -0
  111. package/renderables/markdown-parser.d.ts +10 -0
  112. package/renderer.d.ts +388 -0
  113. package/runtime-plugin-support.d.ts +3 -0
  114. package/runtime-plugin-support.js +29 -0
  115. package/runtime-plugin-support.js.map +10 -0
  116. package/runtime-plugin.d.ts +11 -0
  117. package/runtime-plugin.js +16 -0
  118. package/runtime-plugin.js.map +9 -0
  119. package/syntax-style.d.ts +54 -0
  120. package/testing/manual-clock.d.ts +16 -0
  121. package/testing/mock-keys.d.ts +81 -0
  122. package/testing/mock-mouse.d.ts +38 -0
  123. package/testing/mock-tree-sitter-client.d.ts +23 -0
  124. package/testing/spy.d.ts +7 -0
  125. package/testing/test-recorder.d.ts +61 -0
  126. package/testing/test-renderer.d.ts +23 -0
  127. package/testing.d.ts +6 -0
  128. package/testing.js +675 -0
  129. package/testing.js.map +15 -0
  130. package/text-buffer-view.d.ts +42 -0
  131. package/text-buffer.d.ts +67 -0
  132. package/types.d.ts +131 -0
  133. package/utils.d.ts +14 -0
  134. package/zig-structs.d.ts +155 -0
  135. package/zig.d.ts +351 -0
  136. package/dev/keypress-debug-renderer.ts +0 -148
  137. package/dev/keypress-debug.ts +0 -43
  138. package/dev/print-env-vars.ts +0 -32
  139. package/dev/test-tmux-graphics-334.sh +0 -68
  140. package/dev/thai-debug-test.ts +0 -68
  141. package/docs/development.md +0 -141
  142. package/docs/env-vars.md +0 -140
  143. package/docs/getting-started.md +0 -353
  144. package/docs/renderables-vs-constructs.md +0 -159
  145. package/docs/tree-sitter.md +0 -311
  146. package/scripts/build.ts +0 -400
  147. package/scripts/publish.ts +0 -60
  148. package/src/3d/SpriteResourceManager.ts +0 -286
  149. package/src/3d/SpriteUtils.ts +0 -71
  150. package/src/3d/TextureUtils.ts +0 -196
  151. package/src/3d/ThreeRenderable.ts +0 -197
  152. package/src/3d/WGPURenderer.ts +0 -294
  153. package/src/3d/animation/ExplodingSpriteEffect.ts +0 -513
  154. package/src/3d/animation/PhysicsExplodingSpriteEffect.ts +0 -429
  155. package/src/3d/animation/SpriteAnimator.ts +0 -633
  156. package/src/3d/animation/SpriteParticleGenerator.ts +0 -435
  157. package/src/3d/canvas.ts +0 -464
  158. package/src/3d/index.ts +0 -12
  159. package/src/3d/physics/PlanckPhysicsAdapter.ts +0 -72
  160. package/src/3d/physics/RapierPhysicsAdapter.ts +0 -66
  161. package/src/3d/physics/physics-interface.ts +0 -31
  162. package/src/3d/shaders/supersampling.wgsl +0 -201
  163. package/src/3d.ts +0 -3
  164. package/src/NativeSpanFeed.ts +0 -300
  165. package/src/Renderable.ts +0 -1698
  166. package/src/__snapshots__/buffer.test.ts.snap +0 -28
  167. package/src/animation/Timeline.test.ts +0 -2709
  168. package/src/animation/Timeline.ts +0 -598
  169. package/src/ansi.ts +0 -18
  170. package/src/benchmark/latest-all-bench-run.json +0 -707
  171. package/src/benchmark/latest-async-bench-run.json +0 -336
  172. package/src/benchmark/latest-default-bench-run.json +0 -657
  173. package/src/benchmark/latest-large-bench-run.json +0 -707
  174. package/src/benchmark/latest-quick-bench-run.json +0 -207
  175. package/src/benchmark/markdown-benchmark.ts +0 -1804
  176. package/src/benchmark/native-span-feed-async-benchmark.ts +0 -355
  177. package/src/benchmark/native-span-feed-benchmark.md +0 -56
  178. package/src/benchmark/native-span-feed-benchmark.ts +0 -596
  179. package/src/benchmark/native-span-feed-compare.ts +0 -280
  180. package/src/benchmark/renderer-benchmark.ts +0 -754
  181. package/src/benchmark/text-table-benchmark.ts +0 -947
  182. package/src/buffer.test.ts +0 -291
  183. package/src/buffer.ts +0 -519
  184. package/src/console.test.ts +0 -612
  185. package/src/console.ts +0 -1255
  186. package/src/edit-buffer.test.ts +0 -1769
  187. package/src/edit-buffer.ts +0 -411
  188. package/src/editor-view.test.ts +0 -1032
  189. package/src/editor-view.ts +0 -284
  190. package/src/examples/ascii-font-selection-demo.ts +0 -245
  191. package/src/examples/assets/Water_2_M_Normal.jpg +0 -0
  192. package/src/examples/assets/concrete.png +0 -0
  193. package/src/examples/assets/crate.png +0 -0
  194. package/src/examples/assets/crate_emissive.png +0 -0
  195. package/src/examples/assets/forrest_background.png +0 -0
  196. package/src/examples/assets/hast-example.json +0 -1018
  197. package/src/examples/assets/heart.png +0 -0
  198. package/src/examples/assets/main_char_heavy_attack.png +0 -0
  199. package/src/examples/assets/main_char_idle.png +0 -0
  200. package/src/examples/assets/main_char_jump_end.png +0 -0
  201. package/src/examples/assets/main_char_jump_landing.png +0 -0
  202. package/src/examples/assets/main_char_jump_start.png +0 -0
  203. package/src/examples/assets/main_char_run_loop.png +0 -0
  204. package/src/examples/assets/roughness_map.jpg +0 -0
  205. package/src/examples/build.ts +0 -115
  206. package/src/examples/code-demo.ts +0 -584
  207. package/src/examples/console-demo.ts +0 -358
  208. package/src/examples/core-plugin-slots-demo.ts +0 -759
  209. package/src/examples/diff-demo.ts +0 -699
  210. package/src/examples/draggable-three-demo.ts +0 -259
  211. package/src/examples/editor-demo.ts +0 -322
  212. package/src/examples/extmarks-demo.ts +0 -204
  213. package/src/examples/focus-restore-demo.ts +0 -310
  214. package/src/examples/fonts.ts +0 -245
  215. package/src/examples/fractal-shader-demo.ts +0 -268
  216. package/src/examples/framebuffer-demo.ts +0 -674
  217. package/src/examples/full-unicode-demo.ts +0 -181
  218. package/src/examples/golden-star-demo.ts +0 -933
  219. package/src/examples/grayscale-buffer-demo.ts +0 -249
  220. package/src/examples/hast-syntax-highlighting-demo.ts +0 -129
  221. package/src/examples/index.ts +0 -925
  222. package/src/examples/input-demo.ts +0 -377
  223. package/src/examples/input-select-layout-demo.ts +0 -425
  224. package/src/examples/install.sh +0 -143
  225. package/src/examples/keypress-debug-demo.ts +0 -452
  226. package/src/examples/lib/HexList.ts +0 -122
  227. package/src/examples/lib/PaletteGrid.ts +0 -125
  228. package/src/examples/lib/standalone-keys.ts +0 -25
  229. package/src/examples/lib/tab-controller.ts +0 -243
  230. package/src/examples/lights-phong-demo.ts +0 -290
  231. package/src/examples/link-demo.ts +0 -220
  232. package/src/examples/live-state-demo.ts +0 -480
  233. package/src/examples/markdown-demo.ts +0 -620
  234. package/src/examples/mouse-interaction-demo.ts +0 -428
  235. package/src/examples/nested-zindex-demo.ts +0 -357
  236. package/src/examples/opacity-example.ts +0 -235
  237. package/src/examples/opentui-demo.ts +0 -1057
  238. package/src/examples/physx-planck-2d-demo.ts +0 -507
  239. package/src/examples/physx-rapier-2d-demo.ts +0 -526
  240. package/src/examples/relative-positioning-demo.ts +0 -323
  241. package/src/examples/scroll-example.ts +0 -214
  242. package/src/examples/scrollbox-mouse-test.ts +0 -112
  243. package/src/examples/scrollbox-overlay-hit-test.ts +0 -206
  244. package/src/examples/select-demo.ts +0 -237
  245. package/src/examples/shader-cube-demo.ts +0 -772
  246. package/src/examples/simple-layout-example.ts +0 -591
  247. package/src/examples/slider-demo.ts +0 -617
  248. package/src/examples/split-mode-demo.ts +0 -445
  249. package/src/examples/sprite-animation-demo.ts +0 -443
  250. package/src/examples/sprite-particle-generator-demo.ts +0 -486
  251. package/src/examples/static-sprite-demo.ts +0 -193
  252. package/src/examples/sticky-scroll-example.ts +0 -308
  253. package/src/examples/styled-text-demo.ts +0 -282
  254. package/src/examples/tab-select-demo.ts +0 -219
  255. package/src/examples/terminal-title.ts +0 -29
  256. package/src/examples/terminal.ts +0 -305
  257. package/src/examples/text-node-demo.ts +0 -416
  258. package/src/examples/text-selection-demo.ts +0 -377
  259. package/src/examples/text-table-demo.ts +0 -503
  260. package/src/examples/text-truncation-demo.ts +0 -481
  261. package/src/examples/text-wrap.ts +0 -757
  262. package/src/examples/texture-loading-demo.ts +0 -259
  263. package/src/examples/timeline-example.ts +0 -670
  264. package/src/examples/transparency-demo.ts +0 -241
  265. package/src/examples/vnode-composition-demo.ts +0 -404
  266. package/src/index.ts +0 -22
  267. package/src/lib/KeyHandler.integration.test.ts +0 -292
  268. package/src/lib/KeyHandler.stopPropagation.test.ts +0 -289
  269. package/src/lib/KeyHandler.test.ts +0 -662
  270. package/src/lib/KeyHandler.ts +0 -222
  271. package/src/lib/RGBA.test.ts +0 -984
  272. package/src/lib/RGBA.ts +0 -204
  273. package/src/lib/ascii.font.ts +0 -330
  274. package/src/lib/border.test.ts +0 -83
  275. package/src/lib/border.ts +0 -168
  276. package/src/lib/bunfs.test.ts +0 -27
  277. package/src/lib/bunfs.ts +0 -18
  278. package/src/lib/clipboard.test.ts +0 -41
  279. package/src/lib/clipboard.ts +0 -47
  280. package/src/lib/clock.ts +0 -31
  281. package/src/lib/data-paths.test.ts +0 -133
  282. package/src/lib/data-paths.ts +0 -109
  283. package/src/lib/debounce.ts +0 -106
  284. package/src/lib/detect-links.test.ts +0 -98
  285. package/src/lib/detect-links.ts +0 -56
  286. package/src/lib/env.test.ts +0 -228
  287. package/src/lib/env.ts +0 -209
  288. package/src/lib/extmarks-history.ts +0 -51
  289. package/src/lib/extmarks-multiwidth.test.ts +0 -322
  290. package/src/lib/extmarks.test.ts +0 -3457
  291. package/src/lib/extmarks.ts +0 -843
  292. package/src/lib/fonts/block.json +0 -405
  293. package/src/lib/fonts/grid.json +0 -265
  294. package/src/lib/fonts/huge.json +0 -741
  295. package/src/lib/fonts/pallet.json +0 -314
  296. package/src/lib/fonts/shade.json +0 -591
  297. package/src/lib/fonts/slick.json +0 -321
  298. package/src/lib/fonts/tiny.json +0 -69
  299. package/src/lib/hast-styled-text.ts +0 -59
  300. package/src/lib/index.ts +0 -21
  301. package/src/lib/keymapping.test.ts +0 -280
  302. package/src/lib/keymapping.ts +0 -87
  303. package/src/lib/objects-in-viewport.test.ts +0 -787
  304. package/src/lib/objects-in-viewport.ts +0 -153
  305. package/src/lib/output.capture.ts +0 -58
  306. package/src/lib/parse.keypress-kitty.protocol.test.ts +0 -340
  307. package/src/lib/parse.keypress-kitty.test.ts +0 -663
  308. package/src/lib/parse.keypress-kitty.ts +0 -439
  309. package/src/lib/parse.keypress.test.ts +0 -1849
  310. package/src/lib/parse.keypress.ts +0 -397
  311. package/src/lib/parse.mouse.test.ts +0 -552
  312. package/src/lib/parse.mouse.ts +0 -232
  313. package/src/lib/paste.ts +0 -16
  314. package/src/lib/queue.ts +0 -65
  315. package/src/lib/renderable.validations.test.ts +0 -87
  316. package/src/lib/renderable.validations.ts +0 -83
  317. package/src/lib/scroll-acceleration.ts +0 -98
  318. package/src/lib/selection.ts +0 -240
  319. package/src/lib/singleton.ts +0 -28
  320. package/src/lib/stdin-parser.test.ts +0 -1676
  321. package/src/lib/stdin-parser.ts +0 -1248
  322. package/src/lib/styled-text.ts +0 -178
  323. package/src/lib/terminal-capability-detection.test.ts +0 -202
  324. package/src/lib/terminal-capability-detection.ts +0 -79
  325. package/src/lib/terminal-palette.test.ts +0 -878
  326. package/src/lib/terminal-palette.ts +0 -383
  327. package/src/lib/tree-sitter/assets/README.md +0 -118
  328. package/src/lib/tree-sitter/assets/update.ts +0 -331
  329. package/src/lib/tree-sitter/assets.d.ts +0 -9
  330. package/src/lib/tree-sitter/cache.test.ts +0 -270
  331. package/src/lib/tree-sitter/client.test.ts +0 -1061
  332. package/src/lib/tree-sitter/client.ts +0 -615
  333. package/src/lib/tree-sitter/default-parsers.ts +0 -80
  334. package/src/lib/tree-sitter/download-utils.ts +0 -148
  335. package/src/lib/tree-sitter/index.ts +0 -28
  336. package/src/lib/tree-sitter/parser.worker.ts +0 -1001
  337. package/src/lib/tree-sitter/parsers-config.ts +0 -75
  338. package/src/lib/tree-sitter/resolve-ft.ts +0 -62
  339. package/src/lib/tree-sitter/types.ts +0 -81
  340. package/src/lib/tree-sitter-styled-text.test.ts +0 -1253
  341. package/src/lib/tree-sitter-styled-text.ts +0 -306
  342. package/src/lib/validate-dir-name.ts +0 -55
  343. package/src/lib/yoga.options.test.ts +0 -628
  344. package/src/lib/yoga.options.ts +0 -346
  345. package/src/plugins/core-slot.ts +0 -579
  346. package/src/plugins/registry.ts +0 -377
  347. package/src/plugins/types.ts +0 -46
  348. package/src/post/filters.ts +0 -888
  349. package/src/renderables/ASCIIFont.ts +0 -219
  350. package/src/renderables/Box.test.ts +0 -160
  351. package/src/renderables/Box.ts +0 -295
  352. package/src/renderables/Code.test.ts +0 -2062
  353. package/src/renderables/Code.ts +0 -357
  354. package/src/renderables/Diff.regression.test.ts +0 -226
  355. package/src/renderables/Diff.test.ts +0 -3027
  356. package/src/renderables/Diff.ts +0 -1209
  357. package/src/renderables/EditBufferRenderable.ts +0 -764
  358. package/src/renderables/FrameBuffer.ts +0 -47
  359. package/src/renderables/Input.test.ts +0 -1228
  360. package/src/renderables/Input.ts +0 -245
  361. package/src/renderables/LineNumberRenderable.ts +0 -675
  362. package/src/renderables/Markdown.ts +0 -1106
  363. package/src/renderables/ScrollBar.ts +0 -422
  364. package/src/renderables/ScrollBox.ts +0 -883
  365. package/src/renderables/Select.test.ts +0 -1010
  366. package/src/renderables/Select.ts +0 -523
  367. package/src/renderables/Slider.test.ts +0 -456
  368. package/src/renderables/Slider.ts +0 -347
  369. package/src/renderables/TabSelect.test.ts +0 -197
  370. package/src/renderables/TabSelect.ts +0 -455
  371. package/src/renderables/Text.selection-buffer.test.ts +0 -123
  372. package/src/renderables/Text.test.ts +0 -2660
  373. package/src/renderables/Text.ts +0 -147
  374. package/src/renderables/TextBufferRenderable.ts +0 -518
  375. package/src/renderables/TextNode.test.ts +0 -1058
  376. package/src/renderables/TextNode.ts +0 -325
  377. package/src/renderables/TextTable.test.ts +0 -1421
  378. package/src/renderables/TextTable.ts +0 -1344
  379. package/src/renderables/Textarea.ts +0 -732
  380. package/src/renderables/TimeToFirstDraw.ts +0 -89
  381. package/src/renderables/__snapshots__/Code.test.ts.snap +0 -13
  382. package/src/renderables/__snapshots__/Diff.test.ts.snap +0 -785
  383. package/src/renderables/__snapshots__/Text.test.ts.snap +0 -421
  384. package/src/renderables/__snapshots__/TextTable.test.ts.snap +0 -215
  385. package/src/renderables/__tests__/LineNumberRenderable.scrollbox-simple.test.ts +0 -144
  386. package/src/renderables/__tests__/LineNumberRenderable.scrollbox.test.ts +0 -816
  387. package/src/renderables/__tests__/LineNumberRenderable.test.ts +0 -1787
  388. package/src/renderables/__tests__/LineNumberRenderable.wrapping.test.ts +0 -85
  389. package/src/renderables/__tests__/Markdown.test.ts +0 -2287
  390. package/src/renderables/__tests__/MultiRenderable.selection.test.ts +0 -87
  391. package/src/renderables/__tests__/Textarea.buffer.test.ts +0 -682
  392. package/src/renderables/__tests__/Textarea.destroyed-events.test.ts +0 -675
  393. package/src/renderables/__tests__/Textarea.editing.test.ts +0 -2041
  394. package/src/renderables/__tests__/Textarea.error-handling.test.ts +0 -35
  395. package/src/renderables/__tests__/Textarea.events.test.ts +0 -738
  396. package/src/renderables/__tests__/Textarea.highlights.test.ts +0 -590
  397. package/src/renderables/__tests__/Textarea.keybinding.test.ts +0 -3149
  398. package/src/renderables/__tests__/Textarea.paste.test.ts +0 -357
  399. package/src/renderables/__tests__/Textarea.rendering.test.ts +0 -1864
  400. package/src/renderables/__tests__/Textarea.scroll.test.ts +0 -733
  401. package/src/renderables/__tests__/Textarea.selection.test.ts +0 -1590
  402. package/src/renderables/__tests__/Textarea.stress.test.ts +0 -670
  403. package/src/renderables/__tests__/Textarea.undo-redo.test.ts +0 -383
  404. package/src/renderables/__tests__/Textarea.visual-lines.test.ts +0 -310
  405. package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.code.test.ts.snap +0 -221
  406. package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.scrollbox-simple.test.ts.snap +0 -89
  407. package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.scrollbox.test.ts.snap +0 -457
  408. package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.test.ts.snap +0 -158
  409. package/src/renderables/__tests__/__snapshots__/Textarea.rendering.test.ts.snap +0 -387
  410. package/src/renderables/__tests__/markdown-parser.test.ts +0 -217
  411. package/src/renderables/__tests__/renderable-test-utils.ts +0 -60
  412. package/src/renderables/composition/README.md +0 -8
  413. package/src/renderables/composition/VRenderable.ts +0 -32
  414. package/src/renderables/composition/constructs.ts +0 -127
  415. package/src/renderables/composition/vnode.ts +0 -289
  416. package/src/renderables/index.ts +0 -22
  417. package/src/renderables/markdown-parser.ts +0 -66
  418. package/src/renderer.ts +0 -2363
  419. package/src/runtime-plugin-support.ts +0 -39
  420. package/src/runtime-plugin.ts +0 -144
  421. package/src/syntax-style.test.ts +0 -841
  422. package/src/syntax-style.ts +0 -264
  423. package/src/testing/README.md +0 -210
  424. package/src/testing/capture-spans.test.ts +0 -194
  425. package/src/testing/integration.test.ts +0 -276
  426. package/src/testing/manual-clock.ts +0 -106
  427. package/src/testing/mock-keys.test.ts +0 -1356
  428. package/src/testing/mock-keys.ts +0 -449
  429. package/src/testing/mock-mouse.test.ts +0 -218
  430. package/src/testing/mock-mouse.ts +0 -247
  431. package/src/testing/mock-tree-sitter-client.ts +0 -73
  432. package/src/testing/spy.ts +0 -13
  433. package/src/testing/test-recorder.test.ts +0 -415
  434. package/src/testing/test-recorder.ts +0 -145
  435. package/src/testing/test-renderer.ts +0 -116
  436. package/src/testing.ts +0 -7
  437. package/src/tests/__snapshots__/absolute-positioning.snapshot.test.ts.snap +0 -481
  438. package/src/tests/__snapshots__/renderable.snapshot.test.ts.snap +0 -19
  439. package/src/tests/__snapshots__/scrollbox.test.ts.snap +0 -29
  440. package/src/tests/absolute-positioning.snapshot.test.ts +0 -638
  441. package/src/tests/allocator-stats.test.ts +0 -38
  442. package/src/tests/destroy-during-render.test.ts +0 -200
  443. package/src/tests/hover-cursor.test.ts +0 -98
  444. package/src/tests/native-span-feed-async.test.ts +0 -173
  445. package/src/tests/native-span-feed-close.test.ts +0 -120
  446. package/src/tests/native-span-feed-coverage.test.ts +0 -227
  447. package/src/tests/native-span-feed-edge-cases.test.ts +0 -352
  448. package/src/tests/native-span-feed-use-after-free.test.ts +0 -45
  449. package/src/tests/opacity.test.ts +0 -123
  450. package/src/tests/renderable.snapshot.test.ts +0 -524
  451. package/src/tests/renderable.test.ts +0 -1281
  452. package/src/tests/renderer.console-startup.test.ts +0 -65
  453. package/src/tests/renderer.control.test.ts +0 -364
  454. package/src/tests/renderer.core-slot-binding.test.ts +0 -952
  455. package/src/tests/renderer.cursor.test.ts +0 -26
  456. package/src/tests/renderer.destroy-during-render.test.ts +0 -110
  457. package/src/tests/renderer.focus-restore.test.ts +0 -228
  458. package/src/tests/renderer.focus.test.ts +0 -251
  459. package/src/tests/renderer.idle.test.ts +0 -219
  460. package/src/tests/renderer.input.test.ts +0 -2145
  461. package/src/tests/renderer.kitty-flags.test.ts +0 -195
  462. package/src/tests/renderer.mouse.test.ts +0 -1269
  463. package/src/tests/renderer.palette.test.ts +0 -629
  464. package/src/tests/renderer.selection.test.ts +0 -49
  465. package/src/tests/renderer.slot-registry.test.ts +0 -649
  466. package/src/tests/renderer.useMouse.test.ts +0 -50
  467. package/src/tests/runtime-plugin-support.fixture.ts +0 -11
  468. package/src/tests/runtime-plugin-support.test.ts +0 -28
  469. package/src/tests/runtime-plugin.fixture.ts +0 -40
  470. package/src/tests/runtime-plugin.test.ts +0 -190
  471. package/src/tests/scrollbox-culling-bug.test.ts +0 -114
  472. package/src/tests/scrollbox-hitgrid-resize.test.ts +0 -136
  473. package/src/tests/scrollbox-hitgrid.test.ts +0 -909
  474. package/src/tests/scrollbox.test.ts +0 -1530
  475. package/src/tests/wrap-resize-perf.test.ts +0 -229
  476. package/src/tests/yoga-setters.test.ts +0 -921
  477. package/src/text-buffer-view.test.ts +0 -705
  478. package/src/text-buffer-view.ts +0 -189
  479. package/src/text-buffer.test.ts +0 -347
  480. package/src/text-buffer.ts +0 -250
  481. package/src/types.ts +0 -152
  482. package/src/utils.ts +0 -88
  483. package/src/zig/ansi.zig +0 -268
  484. package/src/zig/bench/README.md +0 -50
  485. package/src/zig/bench/buffer-draw-text-buffer_bench.zig +0 -887
  486. package/src/zig/bench/edit-buffer_bench.zig +0 -476
  487. package/src/zig/bench/native-span-feed_bench.zig +0 -100
  488. package/src/zig/bench/rope-markers_bench.zig +0 -713
  489. package/src/zig/bench/rope_bench.zig +0 -514
  490. package/src/zig/bench/styled-text_bench.zig +0 -470
  491. package/src/zig/bench/text-buffer-coords_bench.zig +0 -362
  492. package/src/zig/bench/text-buffer-view_bench.zig +0 -459
  493. package/src/zig/bench/text-chunk-graphemes_bench.zig +0 -273
  494. package/src/zig/bench/utf8_bench.zig +0 -799
  495. package/src/zig/bench-utils.zig +0 -431
  496. package/src/zig/bench.zig +0 -217
  497. package/src/zig/buffer.zig +0 -2223
  498. package/src/zig/build.zig +0 -289
  499. package/src/zig/build.zig.zon +0 -16
  500. package/src/zig/edit-buffer.zig +0 -825
  501. package/src/zig/editor-view.zig +0 -802
  502. package/src/zig/event-bus.zig +0 -13
  503. package/src/zig/event-emitter.zig +0 -65
  504. package/src/zig/file-logger.zig +0 -92
  505. package/src/zig/grapheme.zig +0 -599
  506. package/src/zig/lib.zig +0 -1834
  507. package/src/zig/link.zig +0 -333
  508. package/src/zig/logger.zig +0 -43
  509. package/src/zig/mem-registry.zig +0 -125
  510. package/src/zig/native-span-feed-bench-lib.zig +0 -7
  511. package/src/zig/native-span-feed.zig +0 -708
  512. package/src/zig/renderer.zig +0 -1386
  513. package/src/zig/rope.zig +0 -1220
  514. package/src/zig/syntax-style.zig +0 -161
  515. package/src/zig/terminal.zig +0 -975
  516. package/src/zig/test.zig +0 -70
  517. package/src/zig/tests/README.md +0 -18
  518. package/src/zig/tests/buffer_test.zig +0 -2526
  519. package/src/zig/tests/edit-buffer-history_test.zig +0 -271
  520. package/src/zig/tests/edit-buffer_test.zig +0 -1689
  521. package/src/zig/tests/editor-view_test.zig +0 -3299
  522. package/src/zig/tests/event-emitter_test.zig +0 -249
  523. package/src/zig/tests/grapheme_test.zig +0 -1304
  524. package/src/zig/tests/link_test.zig +0 -190
  525. package/src/zig/tests/mem-registry_test.zig +0 -473
  526. package/src/zig/tests/memory_leak_regression_test.zig +0 -159
  527. package/src/zig/tests/native-span-feed_test.zig +0 -1264
  528. package/src/zig/tests/renderer_test.zig +0 -1010
  529. package/src/zig/tests/rope-nested_test.zig +0 -712
  530. package/src/zig/tests/rope_fuzz_test.zig +0 -238
  531. package/src/zig/tests/rope_test.zig +0 -2362
  532. package/src/zig/tests/segment-merge.test.zig +0 -148
  533. package/src/zig/tests/syntax-style_test.zig +0 -557
  534. package/src/zig/tests/terminal_test.zig +0 -719
  535. package/src/zig/tests/text-buffer-drawing_test.zig +0 -3237
  536. package/src/zig/tests/text-buffer-highlights_test.zig +0 -666
  537. package/src/zig/tests/text-buffer-iterators_test.zig +0 -776
  538. package/src/zig/tests/text-buffer-segment_test.zig +0 -320
  539. package/src/zig/tests/text-buffer-selection_test.zig +0 -1035
  540. package/src/zig/tests/text-buffer-selection_viewport_test.zig +0 -358
  541. package/src/zig/tests/text-buffer-view_test.zig +0 -3649
  542. package/src/zig/tests/text-buffer_test.zig +0 -2191
  543. package/src/zig/tests/unicode-width-map.zon +0 -3909
  544. package/src/zig/tests/utf8_no_zwj_test.zig +0 -260
  545. package/src/zig/tests/utf8_test.zig +0 -4057
  546. package/src/zig/tests/utf8_wcwidth_cursor_test.zig +0 -267
  547. package/src/zig/tests/utf8_wcwidth_test.zig +0 -357
  548. package/src/zig/tests/word-wrap-editing_test.zig +0 -498
  549. package/src/zig/tests/wrap-cache-perf_test.zig +0 -113
  550. package/src/zig/text-buffer-iterators.zig +0 -499
  551. package/src/zig/text-buffer-segment.zig +0 -404
  552. package/src/zig/text-buffer-view.zig +0 -1371
  553. package/src/zig/text-buffer.zig +0 -1180
  554. package/src/zig/utf8.zig +0 -1948
  555. package/src/zig/utils.zig +0 -9
  556. package/src/zig-structs.ts +0 -261
  557. package/src/zig.ts +0 -3843
  558. package/tsconfig.build.json +0 -22
  559. package/tsconfig.json +0 -28
  560. /package/{src/lib/tree-sitter/assets → assets}/javascript/highlights.scm +0 -0
  561. /package/{src/lib/tree-sitter/assets → assets}/javascript/tree-sitter-javascript.wasm +0 -0
  562. /package/{src/lib/tree-sitter/assets → assets}/markdown/highlights.scm +0 -0
  563. /package/{src/lib/tree-sitter/assets → assets}/markdown/injections.scm +0 -0
  564. /package/{src/lib/tree-sitter/assets → assets}/markdown/tree-sitter-markdown.wasm +0 -0
  565. /package/{src/lib/tree-sitter/assets → assets}/markdown_inline/highlights.scm +0 -0
  566. /package/{src/lib/tree-sitter/assets → assets}/markdown_inline/tree-sitter-markdown_inline.wasm +0 -0
  567. /package/{src/lib/tree-sitter/assets → assets}/typescript/highlights.scm +0 -0
  568. /package/{src/lib/tree-sitter/assets → assets}/typescript/tree-sitter-typescript.wasm +0 -0
  569. /package/{src/lib/tree-sitter/assets → assets}/zig/highlights.scm +0 -0
  570. /package/{src/lib/tree-sitter/assets → assets}/zig/tree-sitter-zig.wasm +0 -0
@@ -1,68 +0,0 @@
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
- })
@@ -1,141 +0,0 @@
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
- # TypeScript tests
35
- cd packages/core
36
- bun test
37
-
38
- # Native tests
39
- bun run test:native
40
-
41
- # Filter native tests
42
- bun run test:native -Dtest-filter="test name"
43
-
44
- # Benchmarks
45
- bun run bench:native
46
- ```
47
-
48
- ## Local Development Linking
49
-
50
- Link your local OpenTUI to another project:
51
-
52
- ```bash
53
- ./scripts/link-opentui-dev.sh /path/to/your/project
54
- ```
55
-
56
- **Options:**
57
-
58
- - `--react` - Also link `@fairyhunter13/opentui-react` and React dependencies
59
- - `--solid` - Also link `@fairyhunter13/opentui-solid` and SolidJS dependencies
60
- - `--dist` - Link built `dist` directories instead of source
61
- - `--copy` - Copy instead of symlink (requires `--dist`)
62
- - `--subdeps` - Find and link packages that depend on opentui (e.g., `opentui-spinner`)
63
-
64
- **Examples:**
65
-
66
- ```bash
67
- # Link core only
68
- ./scripts/link-opentui-dev.sh /path/to/your/project
69
-
70
- # Link core and solid with subdependency discovery
71
- ./scripts/link-opentui-dev.sh /path/to/your/project --solid --subdeps
72
-
73
- # Link built artifacts
74
- ./scripts/link-opentui-dev.sh /path/to/your/project --react --dist
75
-
76
- # Copy for Docker/Windows
77
- ./scripts/link-opentui-dev.sh /path/to/your/project --dist --copy
78
- ```
79
-
80
- The script automatically links:
81
-
82
- - Main packages: `@fairyhunter13/opentui-core`, `@fairyhunter13/opentui-solid`, `@fairyhunter13/opentui-react`
83
- - Peer dependencies: `yoga-layout`, `solid-js`, `react`, `react-dom`, `react-reconciler`
84
- - Subdependencies (with `--subdeps`): Packages like `opentui-spinner` that depend on opentui
85
-
86
- **Requirements:** Target project must have `node_modules` (run `bun install` first).
87
-
88
- ## Debugging
89
-
90
- OpenTUI captures `console.log` output. Toggle the built-in console with backtick or use [Environment Variables](./env-vars.md) for debugging.
91
-
92
- ## Terminal Compatibility
93
-
94
- ### OSC 66 Artifacts on Older Terminals
95
-
96
- **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).
97
-
98
- **Affected Terminals:**
99
-
100
- - GNOME Terminal
101
- - Konsole (older versions)
102
- - xterm (older versions)
103
- - Many VT100/VT220 emulators
104
-
105
- **Solution:** Disable OSC 66 queries by setting an environment variable:
106
-
107
- ```bash
108
- export OPENTUI_FORCE_EXPLICIT_WIDTH=false
109
- ```
110
-
111
- Or run your application with:
112
-
113
- ```bash
114
- OPENTUI_FORCE_EXPLICIT_WIDTH=false your-app
115
- ```
116
-
117
- **For Application Developers:**
118
-
119
- Set it in your code before creating the renderer:
120
-
121
- ```typescript
122
- process.env.OPENTUI_FORCE_EXPLICIT_WIDTH = "false"
123
-
124
- const renderer = new CliRenderer()
125
- // ... rest of your app
126
- ```
127
-
128
- Or add to your `.env` file:
129
-
130
- ```bash
131
- OPENTUI_FORCE_EXPLICIT_WIDTH=false
132
- ```
133
-
134
- **What This Does:**
135
-
136
- - Prevents OSC 66 detection queries from being sent
137
- - Disables the explicit width feature
138
- - Falls back to standard width calculation
139
- - No visual artifacts on unsupported terminals
140
-
141
- **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/docs/env-vars.md DELETED
@@ -1,140 +0,0 @@
1
- # Environment Variables
2
-
3
- # Environment Variables
4
-
5
- ## OTUI_TS_STYLE_WARN
6
-
7
- Enable warnings for missing syntax styles
8
-
9
- **Type:** `string`
10
- **Default:** `false`
11
-
12
- ## OTUI_TREE_SITTER_WORKER_PATH
13
-
14
- Path to the TreeSitter worker
15
-
16
- **Type:** `string`
17
- **Default:** `""`
18
-
19
- ## XDG_CONFIG_HOME
20
-
21
- Base directory for user-specific configuration files
22
-
23
- **Type:** `string`
24
- **Default:** `""`
25
-
26
- ## XDG_DATA_HOME
27
-
28
- Base directory for user-specific data files
29
-
30
- **Type:** `string`
31
- **Default:** `""`
32
-
33
- ## OTUI_DEBUG_FFI
34
-
35
- Enable debug logging for the FFI bindings.
36
-
37
- **Type:** `boolean`
38
- **Default:** `false`
39
-
40
- ## OTUI_SHOW_STATS
41
-
42
- Show the debug overlay at startup.
43
-
44
- **Type:** `boolean`
45
- **Default:** `false`
46
-
47
- ## OTUI_TRACE_FFI
48
-
49
- Enable tracing for the FFI bindings.
50
-
51
- **Type:** `boolean`
52
- **Default:** `false`
53
-
54
- ## OPENTUI_FORCE_WCWIDTH
55
-
56
- Use wcwidth for character width calculations
57
-
58
- **Type:** `boolean`
59
- **Default:** `false`
60
-
61
- ## OPENTUI_FORCE_UNICODE
62
-
63
- Force Mode 2026 Unicode support in terminal capabilities
64
-
65
- **Type:** `boolean`
66
- **Default:** `false`
67
-
68
- ## OPENTUI_GRAPHICS
69
-
70
- Enable Kitty graphics protocol detection
71
-
72
- **Type:** `boolean`
73
- **Default:** `true`
74
-
75
- ## OPENTUI_FORCE_NOZWJ
76
-
77
- Use no_zwj width method (Unicode without ZWJ joining)
78
-
79
- **Type:** `boolean`
80
- **Default:** `false`
81
-
82
- ## OPENTUI_FORCE_EXPLICIT_WIDTH
83
-
84
- Force explicit width capability in terminal to true or false. Set to "true" or "1" to enable, "false" or "0" to disable. When set to "false" or "0", also skips sending OSC 66 detection queries to prevent artifacts on older terminals (e.g., GNOME Terminal).
85
-
86
- **Type:** `string`
87
- **Values:** `"true"`, `"1"`, `"false"`, `"0"`
88
-
89
- ## OTUI_USE_CONSOLE
90
-
91
- Whether to use the console. Will not capture console output if set to false.
92
-
93
- **Type:** `boolean`
94
- **Default:** `true`
95
-
96
- ## SHOW_CONSOLE
97
-
98
- Show the console at startup if set to true.
99
-
100
- **Type:** `boolean`
101
- **Default:** `false`
102
-
103
- ## OTUI_DUMP_CAPTURES
104
-
105
- Dump captured output when the renderer exits.
106
-
107
- **Type:** `boolean`
108
- **Default:** `false`
109
-
110
- ## OTUI_NO_NATIVE_RENDER
111
-
112
- Disable native rendering. This will not actually output ansi and is useful for debugging.
113
-
114
- **Type:** `boolean`
115
- **Default:** `false`
116
-
117
- ## OTUI_USE_ALTERNATE_SCREEN
118
-
119
- Whether to use the console. Will not capture console output if set to false.
120
-
121
- **Type:** `boolean`
122
- **Default:** `true`
123
-
124
- ## OTUI_OVERRIDE_STDOUT
125
-
126
- Override the stdout stream. This is useful for debugging.
127
-
128
- **Type:** `boolean`
129
- **Default:** `true`
130
-
131
- ## OTUI_DEBUG
132
-
133
- Enable debug mode to capture all raw input for debugging purposes.
134
-
135
- **Type:** `boolean`
136
- **Default:** `false`
137
-
138
- ---
139
-
140
- _generated via packages/core/dev/print-env-vars.ts_
@@ -1,353 +0,0 @@
1
- # Getting Started with OpenTUI
2
-
3
- OpenTUI is a native terminal UI core written in Zig with TypeScript bindings. The native core exposes a C ABI and can be used from any language. OpenTUI powers OpenCode in production today and will also power terminal.shop. It is an extensible core with a focus on correctness, stability, and high performance. It provides a component-based architecture with flexible layout capabilities, allowing you to create complex terminal applications.
4
-
5
- ## Core Concepts
6
-
7
- ### Renderer
8
-
9
- The `CliRenderer` is the heart of OpenTUI. It manages the terminal output, handles input events, and orchestrates the rendering loop. Think of it as the canvas that draws your interface to the terminal. It can run in a "live" mode, when calling `renderer.start()`, which runs a loop capped at the specified target FPS. It also just works without calling `renderer.start()`, which will only re-render when the renderable tree or layout changes.
10
-
11
- By default, left-clicking auto-focuses the closest focusable renderable. Disable this with `createCliRenderer({ autoFocus: false })` if you need manual focus control.
12
-
13
- ### Theme Mode
14
-
15
- OpenTUI can detect the terminal's preferred color scheme (dark or light) when the terminal supports DEC mode 2031 color scheme updates. Read the current mode via `renderer.themeMode` and subscribe to `theme_mode` to react to changes. Possible values are `"dark"`, `"light"`, or `null` when unsupported, and no events fire in the unsupported case.
16
-
17
- ```typescript
18
- import { type ThemeMode } from "@fairyhunter13/opentui-core"
19
-
20
- const mode = renderer.themeMode
21
-
22
- renderer.on("theme_mode", (nextMode: ThemeMode) => {
23
- console.log("Theme mode changed:", nextMode)
24
- })
25
- ```
26
-
27
- ### FrameBuffer (OptimizedBuffer)
28
-
29
- The `FrameBuffer` is a low-level rendering surface for custom graphics and complex visual effects. It is a 2D array of cells that can be drawn to using the `setCell`, `setCellWithAlphaBlending`, `drawText`, `fillRect`, and `drawFrameBuffer` methods. It is optimized for performance and memory usage. It allows for transparent cells and alpha blending, down to the viewport framebuffer.
30
-
31
- ### Renderables
32
-
33
- Renderables are the building blocks of your UI - hierarchical objects that can be positioned, styled, and nested within each other. Each Renderable represents a visual element (like text, boxes, or input fields) and uses the Yoga layout engine for flexible positioning and sizing.
34
-
35
- ### Constructs (Components)
36
-
37
- Constructs look just like React or Solid components, but are not render functions. You can think of them as constructors, a way to create new renderables by composing existing ones. They provide a more declarative way to build your UI. See a comparison on [this page](./renderables-vs-constructs.md).
38
-
39
- ### Console
40
-
41
- OpenTUI includes a built-in console overlay that captures all `console.log`, `console.info`, `console.warn`, `console.error`, and `console.debug` calls. The console appears as a visual overlay that can be positioned at any edge of the terminal, with scrolling and focus management. It's particularly useful for debugging TUI applications without disrupting the main interface.
42
-
43
- ## Basic Setup
44
-
45
- ```typescript
46
- import { createCliRenderer, TextRenderable, Text } from "@fairyhunter13/opentui-core"
47
-
48
- const renderer = await createCliRenderer()
49
-
50
- // Raw Renderable
51
- const greeting = new TextRenderable(renderer, {
52
- id: "greeting",
53
- content: "Hello, OpenTUI!",
54
- fg: "#00FF00",
55
- position: "absolute",
56
- left: 10,
57
- top: 5,
58
- })
59
-
60
- renderer.root.add(greeting)
61
-
62
- // Construct/Component (VNode)
63
- const greeting2 = Text({
64
- content: "Hello, OpenTUI!",
65
- fg: "#00FF00",
66
- position: "absolute",
67
- left: 10,
68
- top: 5,
69
- })
70
-
71
- renderer.root.add(greeting)
72
- ```
73
-
74
- ## Console
75
-
76
- When focused, you can use your arrow keys to scroll through the console. `renderer.console.toggle()` will toggle the console overlay, when open but not focused, it will focus the console. `+` and `-` will increase and decrease the size of the console.
77
-
78
- ```typescript
79
- import { createCliRenderer, ConsolePosition } from "@fairyhunter13/opentui-core"
80
-
81
- const renderer = await createCliRenderer({
82
- consoleOptions: {
83
- position: ConsolePosition.BOTTOM,
84
- sizePercent: 30,
85
- colorInfo: "#00FFFF",
86
- colorWarn: "#FFFF00",
87
- colorError: "#FF0000",
88
- startInDebugMode: false,
89
- },
90
- })
91
-
92
- console.log("This appears in the overlay")
93
- console.error("Errors are color-coded red")
94
- console.warn("Warnings appear in yellow")
95
-
96
- renderer.console.toggle()
97
- ```
98
-
99
- ## Colors: RGBA
100
-
101
- OpenTUI uses the `RGBA` class for consistent color representation throughout the library. Colors are internally stored as normalized float values (0.0-1.0) for efficient processing, but the class provides convenient methods for working with different color formats.
102
-
103
- ```typescript
104
- import { RGBA } from "@fairyhunter13/opentui-core"
105
-
106
- const redFromInts = RGBA.fromInts(255, 0, 0, 255) // RGB integers (0-255)
107
- const blueFromValues = RGBA.fromValues(0.0, 0.0, 1.0, 1.0) // Float values (0.0-1.0)
108
- const greenFromHex = RGBA.fromHex("#00FF00") // Hex strings
109
- const transparent = RGBA.fromValues(1.0, 1.0, 1.0, 0.5) // Semi-transparent white
110
- ```
111
-
112
- The `parseColor()` utility function accepts both RGBA objects and color strings (hex, CSS color names, "transparent") for flexible color input throughout the API.
113
-
114
- ## Keyboard
115
-
116
- OpenTUI provides a keyboard handler that parses terminal input and provides structured key events. Get the handler via `renderer.keyInput`, an EventEmitter that emits `keypress` and `paste` events with detailed key information.
117
-
118
- ```typescript
119
- import { type KeyEvent } from "@fairyhunter13/opentui-core"
120
-
121
- const keyHandler = renderer.keyInput
122
-
123
- keyHandler.on("keypress", (key: KeyEvent) => {
124
- console.log("Key name:", key.name)
125
- console.log("Sequence:", key.sequence)
126
- console.log("Ctrl pressed:", key.ctrl)
127
- console.log("Shift pressed:", key.shift)
128
- console.log("Alt pressed:", key.meta)
129
- console.log("Option pressed:", key.option)
130
-
131
- if (key.name === "escape") {
132
- console.log("Escape pressed!")
133
- } else if (key.ctrl && key.name === "c") {
134
- console.log("Ctrl+C pressed!")
135
- } else if (key.shift && key.name === "f1") {
136
- console.log("Shift+F1 pressed!")
137
- }
138
- })
139
- ```
140
-
141
- ## Available Renderables
142
-
143
- OpenTUI provides several primitive components that you can use to build your interfaces:
144
-
145
- ### Text
146
-
147
- Display styled text content with support for colors, attributes, and text selection.
148
-
149
- ```typescript
150
- import { TextRenderable, TextAttributes, t, bold, underline, fg } from "@fairyhunter13/opentui-core"
151
-
152
- const plainText = new TextRenderable(renderer, {
153
- id: "plain-text",
154
- content: "Important Message",
155
- fg: "#FFFF00",
156
- attributes: TextAttributes.BOLD | TextAttributes.UNDERLINE, // bitwise OR to combine attributes
157
- position: "absolute",
158
- left: 5,
159
- top: 2,
160
- })
161
-
162
- // You can also use the `t` template literal to create more complex styled text:
163
- const styledTextRenderable = new TextRenderable(renderer, {
164
- id: "styled-text",
165
- content: t`${bold("Important Message")} ${fg("#FF0000")(underline("Important Message"))}`,
166
- position: "absolute",
167
- left: 5,
168
- top: 3,
169
- })
170
- ```
171
-
172
- ### Box
173
-
174
- A container component with borders, background colors, and layout capabilities. Perfect for creating panels, frames, and organized sections.
175
-
176
- ```typescript
177
- import { BoxRenderable } from "@fairyhunter13/opentui-core"
178
-
179
- const panel = new BoxRenderable(renderer, {
180
- id: "panel",
181
- width: 30,
182
- height: 10,
183
- backgroundColor: "#333366",
184
- borderStyle: "double",
185
- borderColor: "#FFFFFF",
186
- title: "Settings Panel",
187
- titleAlignment: "center",
188
- position: "absolute",
189
- left: 10,
190
- top: 5,
191
- })
192
- ```
193
-
194
- ### Input
195
-
196
- Text input field with cursor support, placeholder text, and focus states for user interaction.
197
- Has to be focused to receive input.
198
-
199
- ```typescript
200
- import { InputRenderable, InputRenderableEvents } from "@fairyhunter13/opentui-core"
201
-
202
- const nameInput = new InputRenderable(renderer, {
203
- id: "name-input",
204
- width: 25,
205
- placeholder: "Enter your name...",
206
- focusedBackgroundColor: "#1a1a1a",
207
- position: "absolute",
208
- left: 10,
209
- top: 8,
210
- })
211
-
212
- // The change event is currently emitted when pressing return or enter. (this will be fixed in the future)
213
- nameInput.on(InputRenderableEvents.CHANGE, (value) => {
214
- console.log("Input changed:", value)
215
- })
216
- nameInput.focus()
217
- ```
218
-
219
- ### Select
220
-
221
- A list selection component for choosing from multiple options.
222
- Has to be focused to receive input. Default keybindings are `up/k` and `down/j` to navigate the list, `enter` to select.
223
-
224
- ```typescript
225
- import { SelectRenderable, SelectRenderableEvents } from "@fairyhunter13/opentui-core"
226
-
227
- const menu = new SelectRenderable(renderer, {
228
- id: "menu",
229
- width: 30,
230
- height: 8,
231
- options: [
232
- { name: "New File", description: "Create a new file" },
233
- { name: "Open File", description: "Open an existing file" },
234
- { name: "Save", description: "Save current file" },
235
- { name: "Exit", description: "Exit the application" },
236
- ],
237
- position: "absolute",
238
- left: 5,
239
- top: 3,
240
- })
241
-
242
- menu.on(SelectRenderableEvents.ITEM_SELECTED, (index, option) => {
243
- console.log("Selected:", option.name)
244
- })
245
- menu.focus()
246
- ```
247
-
248
- ### TabSelect
249
-
250
- Horizontal tab-based selection component with descriptions and scroll support.
251
- Has to be focused to receive input. Default keybindings are `left/[` and `right/]` to navigate the tabs, `enter` to select.
252
-
253
- ```typescript
254
- import { TabSelectRenderable, TabSelectRenderableEvents } from "@fairyhunter13/opentui-core"
255
-
256
- const tabs = new TabSelectRenderable(renderer, {
257
- id: "tabs",
258
- width: 60,
259
- options: [
260
- { name: "Home", description: "Dashboard and overview" },
261
- { name: "Files", description: "File management" },
262
- { name: "Settings", description: "Application settings" },
263
- ],
264
- tabWidth: 20,
265
- position: "absolute",
266
- left: 2,
267
- top: 1,
268
- })
269
-
270
- tabs.on(TabSelectRenderableEvents.ITEM_SELECTED, (index, option) => {
271
- console.log("Selected:", option.name)
272
- })
273
-
274
- tabs.focus()
275
- ```
276
-
277
- ### ASCIIFont
278
-
279
- Display text using ASCII art fonts with multiple font styles available.
280
-
281
- ```typescript
282
- import { ASCIIFontRenderable, RGBA } from "@fairyhunter13/opentui-core"
283
-
284
- const title = new ASCIIFontRenderable(renderer, {
285
- id: "title",
286
- text: "OPENTUI",
287
- font: "tiny",
288
- color: RGBA.fromInts(255, 255, 255, 255),
289
- position: "absolute",
290
- left: 10,
291
- top: 2,
292
- })
293
- ```
294
-
295
- ### FrameBuffer
296
-
297
- A low-level rendering surface for custom graphics and complex visual effects.
298
-
299
- ```typescript
300
- import { FrameBufferRenderable, RGBA } from "@fairyhunter13/opentui-core"
301
-
302
- const canvas = new FrameBufferRenderable(renderer, {
303
- id: "canvas",
304
- width: 50,
305
- height: 20,
306
- position: "absolute",
307
- left: 5,
308
- top: 5,
309
- })
310
-
311
- // Custom rendering in the frame buffer
312
- canvas.frameBuffer.fillRect(10, 5, 20, 8, RGBA.fromHex("#FF0000"))
313
- canvas.frameBuffer.drawText("Custom Graphics", 12, 7, RGBA.fromHex("#FFFFFF"))
314
- ```
315
-
316
- ## Layout System
317
-
318
- OpenTUI uses the Yoga layout engine, providing CSS Flexbox-like capabilities for responsive layouts:
319
-
320
- ```typescript
321
- import { BoxRenderable } from "@fairyhunter13/opentui-core"
322
-
323
- const container = new BoxRenderable(renderer, {
324
- id: "container",
325
- flexDirection: "row",
326
- justifyContent: "space-between",
327
- alignItems: "center",
328
- width: "100%",
329
- height: 10,
330
- })
331
-
332
- const leftPanel = new BoxRenderable(renderer, {
333
- id: "left",
334
- flexGrow: 1,
335
- height: 10,
336
- backgroundColor: "#444",
337
- })
338
-
339
- const rightPanel = new BoxRenderable(renderer, {
340
- id: "right",
341
- width: 20,
342
- height: 10,
343
- backgroundColor: "#666",
344
- })
345
-
346
- container.add(leftPanel)
347
- container.add(rightPanel)
348
- ```
349
-
350
- ## Next Steps
351
-
352
- - Explore the [examples](../src/examples) directory for more complex use cases
353
- - Check out the React and Solid integrations for declarative UI development