@fairyhunter13/opentui-core 0.1.90 → 0.1.92
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/3d/SpriteResourceManager.d.ts +74 -0
- package/3d/SpriteUtils.d.ts +13 -0
- package/3d/TextureUtils.d.ts +24 -0
- package/3d/ThreeRenderable.d.ts +40 -0
- package/3d/WGPURenderer.d.ts +61 -0
- package/3d/animation/ExplodingSpriteEffect.d.ts +71 -0
- package/3d/animation/PhysicsExplodingSpriteEffect.d.ts +76 -0
- package/3d/animation/SpriteAnimator.d.ts +124 -0
- package/3d/animation/SpriteParticleGenerator.d.ts +62 -0
- package/3d/canvas.d.ts +44 -0
- package/3d/index.d.ts +12 -0
- package/3d/physics/PlanckPhysicsAdapter.d.ts +19 -0
- package/3d/physics/RapierPhysicsAdapter.d.ts +19 -0
- package/3d/physics/physics-interface.d.ts +27 -0
- package/3d.d.ts +2 -0
- package/3d.js +34042 -0
- package/3d.js.map +155 -0
- package/LICENSE +21 -0
- package/NativeSpanFeed.d.ts +41 -0
- package/README.md +2 -2
- package/Renderable.d.ts +334 -0
- package/animation/Timeline.d.ts +126 -0
- package/ansi.d.ts +13 -0
- package/buffer.d.ts +107 -0
- package/console.d.ts +143 -0
- package/edit-buffer.d.ts +98 -0
- package/editor-view.d.ts +73 -0
- package/index-e6ec7apq.js +18415 -0
- package/index-e6ec7apq.js.map +64 -0
- package/index-h066zmrb.js +12619 -0
- package/index-h066zmrb.js.map +43 -0
- package/index-ynzawt3n.js +113 -0
- package/index-ynzawt3n.js.map +10 -0
- package/index.d.ts +21 -0
- package/index.js +430 -0
- package/index.js.map +9 -0
- package/lib/KeyHandler.d.ts +61 -0
- package/lib/RGBA.d.ts +25 -0
- package/lib/ascii.font.d.ts +508 -0
- package/lib/border.d.ts +49 -0
- package/lib/bunfs.d.ts +7 -0
- package/lib/clipboard.d.ts +17 -0
- package/lib/clock.d.ts +15 -0
- package/lib/data-paths.d.ts +26 -0
- package/lib/debounce.d.ts +42 -0
- package/lib/detect-links.d.ts +6 -0
- package/lib/env.d.ts +42 -0
- package/lib/extmarks-history.d.ts +17 -0
- package/lib/extmarks.d.ts +89 -0
- package/lib/hast-styled-text.d.ts +17 -0
- package/lib/index.d.ts +21 -0
- package/lib/keymapping.d.ts +25 -0
- package/lib/objects-in-viewport.d.ts +24 -0
- package/lib/output.capture.d.ts +24 -0
- package/lib/parse.keypress-kitty.d.ts +2 -0
- package/lib/parse.keypress.d.ts +26 -0
- package/lib/parse.mouse.d.ts +30 -0
- package/lib/paste.d.ts +7 -0
- package/lib/queue.d.ts +15 -0
- package/lib/renderable.validations.d.ts +12 -0
- package/lib/scroll-acceleration.d.ts +43 -0
- package/lib/selection.d.ts +63 -0
- package/lib/singleton.d.ts +7 -0
- package/lib/stdin-parser.d.ts +76 -0
- package/lib/styled-text.d.ts +63 -0
- package/lib/terminal-capability-detection.d.ts +30 -0
- package/lib/terminal-palette.d.ts +50 -0
- package/lib/tree-sitter/assets/update.d.ts +11 -0
- package/lib/tree-sitter/client.d.ts +47 -0
- package/lib/tree-sitter/default-parsers.d.ts +2 -0
- package/lib/tree-sitter/download-utils.d.ts +21 -0
- package/lib/tree-sitter/index.d.ts +8 -0
- package/lib/tree-sitter/parser.worker.d.ts +1 -0
- package/lib/tree-sitter/parsers-config.d.ts +38 -0
- package/lib/tree-sitter/resolve-ft.d.ts +2 -0
- package/lib/tree-sitter/types.d.ts +81 -0
- package/lib/tree-sitter-styled-text.d.ts +14 -0
- package/lib/validate-dir-name.d.ts +1 -0
- package/lib/yoga.options.d.ts +32 -0
- package/package.json +51 -63
- package/parser.worker.js +869 -0
- package/parser.worker.js.map +12 -0
- package/plugins/core-slot.d.ts +72 -0
- package/plugins/registry.d.ts +38 -0
- package/plugins/types.d.ts +34 -0
- package/post/filters.d.ts +105 -0
- package/renderables/ASCIIFont.d.ts +52 -0
- package/renderables/Box.d.ts +72 -0
- package/renderables/Code.d.ts +78 -0
- package/renderables/Diff.d.ts +142 -0
- package/renderables/EditBufferRenderable.d.ts +162 -0
- package/renderables/FrameBuffer.d.ts +16 -0
- package/renderables/Input.d.ts +67 -0
- package/renderables/LineNumberRenderable.d.ts +74 -0
- package/renderables/Markdown.d.ts +173 -0
- package/renderables/ScrollBar.d.ts +77 -0
- package/renderables/ScrollBox.d.ts +124 -0
- package/renderables/Select.d.ts +115 -0
- package/renderables/Slider.d.ts +44 -0
- package/renderables/TabSelect.d.ts +96 -0
- package/renderables/Text.d.ts +36 -0
- package/renderables/TextBufferRenderable.d.ts +105 -0
- package/renderables/TextNode.d.ts +91 -0
- package/renderables/TextTable.d.ts +140 -0
- package/renderables/Textarea.d.ts +114 -0
- package/renderables/TimeToFirstDraw.d.ts +24 -0
- package/renderables/__tests__/renderable-test-utils.d.ts +12 -0
- package/renderables/composition/VRenderable.d.ts +16 -0
- package/renderables/composition/constructs.d.ts +35 -0
- package/renderables/composition/vnode.d.ts +46 -0
- package/renderables/index.d.ts +22 -0
- package/renderables/markdown-parser.d.ts +10 -0
- package/renderer.d.ts +388 -0
- package/runtime-plugin-support.d.ts +3 -0
- package/runtime-plugin-support.js +29 -0
- package/runtime-plugin-support.js.map +10 -0
- package/runtime-plugin.d.ts +11 -0
- package/runtime-plugin.js +16 -0
- package/runtime-plugin.js.map +9 -0
- package/syntax-style.d.ts +54 -0
- package/testing/manual-clock.d.ts +16 -0
- package/testing/mock-keys.d.ts +81 -0
- package/testing/mock-mouse.d.ts +38 -0
- package/testing/mock-tree-sitter-client.d.ts +23 -0
- package/testing/spy.d.ts +7 -0
- package/testing/test-recorder.d.ts +61 -0
- package/testing/test-renderer.d.ts +23 -0
- package/testing.d.ts +6 -0
- package/testing.js +675 -0
- package/testing.js.map +15 -0
- package/text-buffer-view.d.ts +42 -0
- package/text-buffer.d.ts +67 -0
- package/types.d.ts +131 -0
- package/utils.d.ts +14 -0
- package/zig-structs.d.ts +155 -0
- package/zig.d.ts +351 -0
- package/dev/keypress-debug-renderer.ts +0 -148
- package/dev/keypress-debug.ts +0 -43
- package/dev/print-env-vars.ts +0 -32
- package/dev/test-tmux-graphics-334.sh +0 -68
- package/dev/thai-debug-test.ts +0 -68
- package/docs/development.md +0 -141
- package/docs/env-vars.md +0 -140
- package/docs/getting-started.md +0 -353
- package/docs/renderables-vs-constructs.md +0 -159
- package/docs/tree-sitter.md +0 -311
- package/scripts/build.ts +0 -400
- package/scripts/publish.ts +0 -60
- package/src/3d/SpriteResourceManager.ts +0 -286
- package/src/3d/SpriteUtils.ts +0 -71
- package/src/3d/TextureUtils.ts +0 -196
- package/src/3d/ThreeRenderable.ts +0 -197
- package/src/3d/WGPURenderer.ts +0 -294
- package/src/3d/animation/ExplodingSpriteEffect.ts +0 -513
- package/src/3d/animation/PhysicsExplodingSpriteEffect.ts +0 -429
- package/src/3d/animation/SpriteAnimator.ts +0 -633
- package/src/3d/animation/SpriteParticleGenerator.ts +0 -435
- package/src/3d/canvas.ts +0 -464
- package/src/3d/index.ts +0 -12
- package/src/3d/physics/PlanckPhysicsAdapter.ts +0 -72
- package/src/3d/physics/RapierPhysicsAdapter.ts +0 -66
- package/src/3d/physics/physics-interface.ts +0 -31
- package/src/3d/shaders/supersampling.wgsl +0 -201
- package/src/3d.ts +0 -3
- package/src/NativeSpanFeed.ts +0 -300
- package/src/Renderable.ts +0 -1698
- package/src/__snapshots__/buffer.test.ts.snap +0 -28
- package/src/animation/Timeline.test.ts +0 -2709
- package/src/animation/Timeline.ts +0 -598
- package/src/ansi.ts +0 -18
- package/src/benchmark/latest-all-bench-run.json +0 -707
- package/src/benchmark/latest-async-bench-run.json +0 -336
- package/src/benchmark/latest-default-bench-run.json +0 -657
- package/src/benchmark/latest-large-bench-run.json +0 -707
- package/src/benchmark/latest-quick-bench-run.json +0 -207
- package/src/benchmark/markdown-benchmark.ts +0 -1804
- package/src/benchmark/native-span-feed-async-benchmark.ts +0 -355
- package/src/benchmark/native-span-feed-benchmark.md +0 -56
- package/src/benchmark/native-span-feed-benchmark.ts +0 -596
- package/src/benchmark/native-span-feed-compare.ts +0 -280
- package/src/benchmark/renderer-benchmark.ts +0 -754
- package/src/benchmark/text-table-benchmark.ts +0 -947
- package/src/buffer.test.ts +0 -291
- package/src/buffer.ts +0 -519
- package/src/console.test.ts +0 -612
- package/src/console.ts +0 -1255
- package/src/edit-buffer.test.ts +0 -1769
- package/src/edit-buffer.ts +0 -411
- package/src/editor-view.test.ts +0 -1032
- package/src/editor-view.ts +0 -284
- package/src/examples/ascii-font-selection-demo.ts +0 -245
- package/src/examples/assets/Water_2_M_Normal.jpg +0 -0
- package/src/examples/assets/concrete.png +0 -0
- package/src/examples/assets/crate.png +0 -0
- package/src/examples/assets/crate_emissive.png +0 -0
- package/src/examples/assets/forrest_background.png +0 -0
- package/src/examples/assets/hast-example.json +0 -1018
- package/src/examples/assets/heart.png +0 -0
- package/src/examples/assets/main_char_heavy_attack.png +0 -0
- package/src/examples/assets/main_char_idle.png +0 -0
- package/src/examples/assets/main_char_jump_end.png +0 -0
- package/src/examples/assets/main_char_jump_landing.png +0 -0
- package/src/examples/assets/main_char_jump_start.png +0 -0
- package/src/examples/assets/main_char_run_loop.png +0 -0
- package/src/examples/assets/roughness_map.jpg +0 -0
- package/src/examples/build.ts +0 -115
- package/src/examples/code-demo.ts +0 -584
- package/src/examples/console-demo.ts +0 -358
- package/src/examples/core-plugin-slots-demo.ts +0 -759
- package/src/examples/diff-demo.ts +0 -699
- package/src/examples/draggable-three-demo.ts +0 -259
- package/src/examples/editor-demo.ts +0 -322
- package/src/examples/extmarks-demo.ts +0 -204
- package/src/examples/focus-restore-demo.ts +0 -310
- package/src/examples/fonts.ts +0 -245
- package/src/examples/fractal-shader-demo.ts +0 -268
- package/src/examples/framebuffer-demo.ts +0 -674
- package/src/examples/full-unicode-demo.ts +0 -181
- package/src/examples/golden-star-demo.ts +0 -933
- package/src/examples/grayscale-buffer-demo.ts +0 -249
- package/src/examples/hast-syntax-highlighting-demo.ts +0 -129
- package/src/examples/index.ts +0 -925
- package/src/examples/input-demo.ts +0 -377
- package/src/examples/input-select-layout-demo.ts +0 -425
- package/src/examples/install.sh +0 -143
- package/src/examples/keypress-debug-demo.ts +0 -452
- package/src/examples/lib/HexList.ts +0 -122
- package/src/examples/lib/PaletteGrid.ts +0 -125
- package/src/examples/lib/standalone-keys.ts +0 -25
- package/src/examples/lib/tab-controller.ts +0 -243
- package/src/examples/lights-phong-demo.ts +0 -290
- package/src/examples/link-demo.ts +0 -220
- package/src/examples/live-state-demo.ts +0 -480
- package/src/examples/markdown-demo.ts +0 -620
- package/src/examples/mouse-interaction-demo.ts +0 -428
- package/src/examples/nested-zindex-demo.ts +0 -357
- package/src/examples/opacity-example.ts +0 -235
- package/src/examples/opentui-demo.ts +0 -1057
- package/src/examples/physx-planck-2d-demo.ts +0 -507
- package/src/examples/physx-rapier-2d-demo.ts +0 -526
- package/src/examples/relative-positioning-demo.ts +0 -323
- package/src/examples/scroll-example.ts +0 -214
- package/src/examples/scrollbox-mouse-test.ts +0 -112
- package/src/examples/scrollbox-overlay-hit-test.ts +0 -206
- package/src/examples/select-demo.ts +0 -237
- package/src/examples/shader-cube-demo.ts +0 -772
- package/src/examples/simple-layout-example.ts +0 -591
- package/src/examples/slider-demo.ts +0 -617
- package/src/examples/split-mode-demo.ts +0 -445
- package/src/examples/sprite-animation-demo.ts +0 -443
- package/src/examples/sprite-particle-generator-demo.ts +0 -486
- package/src/examples/static-sprite-demo.ts +0 -193
- package/src/examples/sticky-scroll-example.ts +0 -308
- package/src/examples/styled-text-demo.ts +0 -282
- package/src/examples/tab-select-demo.ts +0 -219
- package/src/examples/terminal-title.ts +0 -29
- package/src/examples/terminal.ts +0 -305
- package/src/examples/text-node-demo.ts +0 -416
- package/src/examples/text-selection-demo.ts +0 -377
- package/src/examples/text-table-demo.ts +0 -503
- package/src/examples/text-truncation-demo.ts +0 -481
- package/src/examples/text-wrap.ts +0 -757
- package/src/examples/texture-loading-demo.ts +0 -259
- package/src/examples/timeline-example.ts +0 -670
- package/src/examples/transparency-demo.ts +0 -241
- package/src/examples/vnode-composition-demo.ts +0 -404
- package/src/index.ts +0 -22
- package/src/lib/KeyHandler.integration.test.ts +0 -292
- package/src/lib/KeyHandler.stopPropagation.test.ts +0 -289
- package/src/lib/KeyHandler.test.ts +0 -662
- package/src/lib/KeyHandler.ts +0 -222
- package/src/lib/RGBA.test.ts +0 -984
- package/src/lib/RGBA.ts +0 -204
- package/src/lib/ascii.font.ts +0 -330
- package/src/lib/border.test.ts +0 -83
- package/src/lib/border.ts +0 -168
- package/src/lib/bunfs.test.ts +0 -27
- package/src/lib/bunfs.ts +0 -18
- package/src/lib/clipboard.test.ts +0 -41
- package/src/lib/clipboard.ts +0 -47
- package/src/lib/clock.ts +0 -31
- package/src/lib/data-paths.test.ts +0 -133
- package/src/lib/data-paths.ts +0 -109
- package/src/lib/debounce.ts +0 -106
- package/src/lib/detect-links.test.ts +0 -98
- package/src/lib/detect-links.ts +0 -56
- package/src/lib/env.test.ts +0 -228
- package/src/lib/env.ts +0 -209
- package/src/lib/extmarks-history.ts +0 -51
- package/src/lib/extmarks-multiwidth.test.ts +0 -322
- package/src/lib/extmarks.test.ts +0 -3457
- package/src/lib/extmarks.ts +0 -843
- package/src/lib/fonts/block.json +0 -405
- package/src/lib/fonts/grid.json +0 -265
- package/src/lib/fonts/huge.json +0 -741
- package/src/lib/fonts/pallet.json +0 -314
- package/src/lib/fonts/shade.json +0 -591
- package/src/lib/fonts/slick.json +0 -321
- package/src/lib/fonts/tiny.json +0 -69
- package/src/lib/hast-styled-text.ts +0 -59
- package/src/lib/index.ts +0 -21
- package/src/lib/keymapping.test.ts +0 -280
- package/src/lib/keymapping.ts +0 -87
- package/src/lib/objects-in-viewport.test.ts +0 -787
- package/src/lib/objects-in-viewport.ts +0 -153
- package/src/lib/output.capture.ts +0 -58
- package/src/lib/parse.keypress-kitty.protocol.test.ts +0 -340
- package/src/lib/parse.keypress-kitty.test.ts +0 -663
- package/src/lib/parse.keypress-kitty.ts +0 -439
- package/src/lib/parse.keypress.test.ts +0 -1849
- package/src/lib/parse.keypress.ts +0 -397
- package/src/lib/parse.mouse.test.ts +0 -552
- package/src/lib/parse.mouse.ts +0 -232
- package/src/lib/paste.ts +0 -16
- package/src/lib/queue.ts +0 -65
- package/src/lib/renderable.validations.test.ts +0 -87
- package/src/lib/renderable.validations.ts +0 -83
- package/src/lib/scroll-acceleration.ts +0 -98
- package/src/lib/selection.ts +0 -240
- package/src/lib/singleton.ts +0 -28
- package/src/lib/stdin-parser.test.ts +0 -1676
- package/src/lib/stdin-parser.ts +0 -1248
- package/src/lib/styled-text.ts +0 -178
- package/src/lib/terminal-capability-detection.test.ts +0 -202
- package/src/lib/terminal-capability-detection.ts +0 -79
- package/src/lib/terminal-palette.test.ts +0 -878
- package/src/lib/terminal-palette.ts +0 -383
- package/src/lib/tree-sitter/assets/README.md +0 -118
- package/src/lib/tree-sitter/assets/update.ts +0 -331
- package/src/lib/tree-sitter/assets.d.ts +0 -9
- package/src/lib/tree-sitter/cache.test.ts +0 -270
- package/src/lib/tree-sitter/client.test.ts +0 -1061
- package/src/lib/tree-sitter/client.ts +0 -615
- package/src/lib/tree-sitter/default-parsers.ts +0 -80
- package/src/lib/tree-sitter/download-utils.ts +0 -148
- package/src/lib/tree-sitter/index.ts +0 -28
- package/src/lib/tree-sitter/parser.worker.ts +0 -1001
- package/src/lib/tree-sitter/parsers-config.ts +0 -75
- package/src/lib/tree-sitter/resolve-ft.ts +0 -62
- package/src/lib/tree-sitter/types.ts +0 -81
- package/src/lib/tree-sitter-styled-text.test.ts +0 -1253
- package/src/lib/tree-sitter-styled-text.ts +0 -306
- package/src/lib/validate-dir-name.ts +0 -55
- package/src/lib/yoga.options.test.ts +0 -628
- package/src/lib/yoga.options.ts +0 -346
- package/src/plugins/core-slot.ts +0 -579
- package/src/plugins/registry.ts +0 -377
- package/src/plugins/types.ts +0 -46
- package/src/post/filters.ts +0 -888
- package/src/renderables/ASCIIFont.ts +0 -219
- package/src/renderables/Box.test.ts +0 -160
- package/src/renderables/Box.ts +0 -295
- package/src/renderables/Code.test.ts +0 -2062
- package/src/renderables/Code.ts +0 -357
- package/src/renderables/Diff.regression.test.ts +0 -226
- package/src/renderables/Diff.test.ts +0 -3027
- package/src/renderables/Diff.ts +0 -1209
- package/src/renderables/EditBufferRenderable.ts +0 -764
- package/src/renderables/FrameBuffer.ts +0 -47
- package/src/renderables/Input.test.ts +0 -1228
- package/src/renderables/Input.ts +0 -245
- package/src/renderables/LineNumberRenderable.ts +0 -675
- package/src/renderables/Markdown.ts +0 -1106
- package/src/renderables/ScrollBar.ts +0 -422
- package/src/renderables/ScrollBox.ts +0 -883
- package/src/renderables/Select.test.ts +0 -1010
- package/src/renderables/Select.ts +0 -523
- package/src/renderables/Slider.test.ts +0 -456
- package/src/renderables/Slider.ts +0 -347
- package/src/renderables/TabSelect.test.ts +0 -197
- package/src/renderables/TabSelect.ts +0 -455
- package/src/renderables/Text.selection-buffer.test.ts +0 -123
- package/src/renderables/Text.test.ts +0 -2660
- package/src/renderables/Text.ts +0 -147
- package/src/renderables/TextBufferRenderable.ts +0 -518
- package/src/renderables/TextNode.test.ts +0 -1058
- package/src/renderables/TextNode.ts +0 -325
- package/src/renderables/TextTable.test.ts +0 -1421
- package/src/renderables/TextTable.ts +0 -1344
- package/src/renderables/Textarea.ts +0 -732
- package/src/renderables/TimeToFirstDraw.ts +0 -89
- package/src/renderables/__snapshots__/Code.test.ts.snap +0 -13
- package/src/renderables/__snapshots__/Diff.test.ts.snap +0 -785
- package/src/renderables/__snapshots__/Text.test.ts.snap +0 -421
- package/src/renderables/__snapshots__/TextTable.test.ts.snap +0 -215
- package/src/renderables/__tests__/LineNumberRenderable.scrollbox-simple.test.ts +0 -144
- package/src/renderables/__tests__/LineNumberRenderable.scrollbox.test.ts +0 -816
- package/src/renderables/__tests__/LineNumberRenderable.test.ts +0 -1787
- package/src/renderables/__tests__/LineNumberRenderable.wrapping.test.ts +0 -85
- package/src/renderables/__tests__/Markdown.test.ts +0 -2287
- package/src/renderables/__tests__/MultiRenderable.selection.test.ts +0 -87
- package/src/renderables/__tests__/Textarea.buffer.test.ts +0 -682
- package/src/renderables/__tests__/Textarea.destroyed-events.test.ts +0 -675
- package/src/renderables/__tests__/Textarea.editing.test.ts +0 -2041
- package/src/renderables/__tests__/Textarea.error-handling.test.ts +0 -35
- package/src/renderables/__tests__/Textarea.events.test.ts +0 -738
- package/src/renderables/__tests__/Textarea.highlights.test.ts +0 -590
- package/src/renderables/__tests__/Textarea.keybinding.test.ts +0 -3149
- package/src/renderables/__tests__/Textarea.paste.test.ts +0 -357
- package/src/renderables/__tests__/Textarea.rendering.test.ts +0 -1864
- package/src/renderables/__tests__/Textarea.scroll.test.ts +0 -733
- package/src/renderables/__tests__/Textarea.selection.test.ts +0 -1590
- package/src/renderables/__tests__/Textarea.stress.test.ts +0 -670
- package/src/renderables/__tests__/Textarea.undo-redo.test.ts +0 -383
- package/src/renderables/__tests__/Textarea.visual-lines.test.ts +0 -310
- package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.code.test.ts.snap +0 -221
- package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.scrollbox-simple.test.ts.snap +0 -89
- package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.scrollbox.test.ts.snap +0 -457
- package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.test.ts.snap +0 -158
- package/src/renderables/__tests__/__snapshots__/Textarea.rendering.test.ts.snap +0 -387
- package/src/renderables/__tests__/markdown-parser.test.ts +0 -217
- package/src/renderables/__tests__/renderable-test-utils.ts +0 -60
- package/src/renderables/composition/README.md +0 -8
- package/src/renderables/composition/VRenderable.ts +0 -32
- package/src/renderables/composition/constructs.ts +0 -127
- package/src/renderables/composition/vnode.ts +0 -289
- package/src/renderables/index.ts +0 -22
- package/src/renderables/markdown-parser.ts +0 -66
- package/src/renderer.ts +0 -2363
- package/src/runtime-plugin-support.ts +0 -39
- package/src/runtime-plugin.ts +0 -144
- package/src/syntax-style.test.ts +0 -841
- package/src/syntax-style.ts +0 -264
- package/src/testing/README.md +0 -210
- package/src/testing/capture-spans.test.ts +0 -194
- package/src/testing/integration.test.ts +0 -276
- package/src/testing/manual-clock.ts +0 -106
- package/src/testing/mock-keys.test.ts +0 -1356
- package/src/testing/mock-keys.ts +0 -449
- package/src/testing/mock-mouse.test.ts +0 -218
- package/src/testing/mock-mouse.ts +0 -247
- package/src/testing/mock-tree-sitter-client.ts +0 -73
- package/src/testing/spy.ts +0 -13
- package/src/testing/test-recorder.test.ts +0 -415
- package/src/testing/test-recorder.ts +0 -145
- package/src/testing/test-renderer.ts +0 -116
- package/src/testing.ts +0 -7
- package/src/tests/__snapshots__/absolute-positioning.snapshot.test.ts.snap +0 -481
- package/src/tests/__snapshots__/renderable.snapshot.test.ts.snap +0 -19
- package/src/tests/__snapshots__/scrollbox.test.ts.snap +0 -29
- package/src/tests/absolute-positioning.snapshot.test.ts +0 -638
- package/src/tests/allocator-stats.test.ts +0 -38
- package/src/tests/destroy-during-render.test.ts +0 -200
- package/src/tests/hover-cursor.test.ts +0 -98
- package/src/tests/native-span-feed-async.test.ts +0 -173
- package/src/tests/native-span-feed-close.test.ts +0 -120
- package/src/tests/native-span-feed-coverage.test.ts +0 -227
- package/src/tests/native-span-feed-edge-cases.test.ts +0 -352
- package/src/tests/native-span-feed-use-after-free.test.ts +0 -45
- package/src/tests/opacity.test.ts +0 -123
- package/src/tests/renderable.snapshot.test.ts +0 -524
- package/src/tests/renderable.test.ts +0 -1281
- package/src/tests/renderer.console-startup.test.ts +0 -65
- package/src/tests/renderer.control.test.ts +0 -364
- package/src/tests/renderer.core-slot-binding.test.ts +0 -952
- package/src/tests/renderer.cursor.test.ts +0 -26
- package/src/tests/renderer.destroy-during-render.test.ts +0 -110
- package/src/tests/renderer.focus-restore.test.ts +0 -228
- package/src/tests/renderer.focus.test.ts +0 -251
- package/src/tests/renderer.idle.test.ts +0 -219
- package/src/tests/renderer.input.test.ts +0 -2145
- package/src/tests/renderer.kitty-flags.test.ts +0 -195
- package/src/tests/renderer.mouse.test.ts +0 -1269
- package/src/tests/renderer.palette.test.ts +0 -629
- package/src/tests/renderer.selection.test.ts +0 -49
- package/src/tests/renderer.slot-registry.test.ts +0 -649
- package/src/tests/renderer.useMouse.test.ts +0 -50
- package/src/tests/runtime-plugin-support.fixture.ts +0 -11
- package/src/tests/runtime-plugin-support.test.ts +0 -28
- package/src/tests/runtime-plugin.fixture.ts +0 -40
- package/src/tests/runtime-plugin.test.ts +0 -190
- package/src/tests/scrollbox-culling-bug.test.ts +0 -114
- package/src/tests/scrollbox-hitgrid-resize.test.ts +0 -136
- package/src/tests/scrollbox-hitgrid.test.ts +0 -909
- package/src/tests/scrollbox.test.ts +0 -1530
- package/src/tests/wrap-resize-perf.test.ts +0 -229
- package/src/tests/yoga-setters.test.ts +0 -921
- package/src/text-buffer-view.test.ts +0 -705
- package/src/text-buffer-view.ts +0 -189
- package/src/text-buffer.test.ts +0 -347
- package/src/text-buffer.ts +0 -250
- package/src/types.ts +0 -152
- package/src/utils.ts +0 -88
- package/src/zig/ansi.zig +0 -268
- package/src/zig/bench/README.md +0 -50
- package/src/zig/bench/buffer-draw-text-buffer_bench.zig +0 -887
- package/src/zig/bench/edit-buffer_bench.zig +0 -476
- package/src/zig/bench/native-span-feed_bench.zig +0 -100
- package/src/zig/bench/rope-markers_bench.zig +0 -713
- package/src/zig/bench/rope_bench.zig +0 -514
- package/src/zig/bench/styled-text_bench.zig +0 -470
- package/src/zig/bench/text-buffer-coords_bench.zig +0 -362
- package/src/zig/bench/text-buffer-view_bench.zig +0 -459
- package/src/zig/bench/text-chunk-graphemes_bench.zig +0 -273
- package/src/zig/bench/utf8_bench.zig +0 -799
- package/src/zig/bench-utils.zig +0 -431
- package/src/zig/bench.zig +0 -217
- package/src/zig/buffer.zig +0 -2223
- package/src/zig/build.zig +0 -289
- package/src/zig/build.zig.zon +0 -16
- package/src/zig/edit-buffer.zig +0 -825
- package/src/zig/editor-view.zig +0 -802
- package/src/zig/event-bus.zig +0 -13
- package/src/zig/event-emitter.zig +0 -65
- package/src/zig/file-logger.zig +0 -92
- package/src/zig/grapheme.zig +0 -599
- package/src/zig/lib.zig +0 -1834
- package/src/zig/link.zig +0 -333
- package/src/zig/logger.zig +0 -43
- package/src/zig/mem-registry.zig +0 -125
- package/src/zig/native-span-feed-bench-lib.zig +0 -7
- package/src/zig/native-span-feed.zig +0 -708
- package/src/zig/renderer.zig +0 -1386
- package/src/zig/rope.zig +0 -1220
- package/src/zig/syntax-style.zig +0 -161
- package/src/zig/terminal.zig +0 -975
- package/src/zig/test.zig +0 -70
- package/src/zig/tests/README.md +0 -18
- package/src/zig/tests/buffer_test.zig +0 -2526
- package/src/zig/tests/edit-buffer-history_test.zig +0 -271
- package/src/zig/tests/edit-buffer_test.zig +0 -1689
- package/src/zig/tests/editor-view_test.zig +0 -3299
- package/src/zig/tests/event-emitter_test.zig +0 -249
- package/src/zig/tests/grapheme_test.zig +0 -1304
- package/src/zig/tests/link_test.zig +0 -190
- package/src/zig/tests/mem-registry_test.zig +0 -473
- package/src/zig/tests/memory_leak_regression_test.zig +0 -159
- package/src/zig/tests/native-span-feed_test.zig +0 -1264
- package/src/zig/tests/renderer_test.zig +0 -1010
- package/src/zig/tests/rope-nested_test.zig +0 -712
- package/src/zig/tests/rope_fuzz_test.zig +0 -238
- package/src/zig/tests/rope_test.zig +0 -2362
- package/src/zig/tests/segment-merge.test.zig +0 -148
- package/src/zig/tests/syntax-style_test.zig +0 -557
- package/src/zig/tests/terminal_test.zig +0 -719
- package/src/zig/tests/text-buffer-drawing_test.zig +0 -3237
- package/src/zig/tests/text-buffer-highlights_test.zig +0 -666
- package/src/zig/tests/text-buffer-iterators_test.zig +0 -776
- package/src/zig/tests/text-buffer-segment_test.zig +0 -320
- package/src/zig/tests/text-buffer-selection_test.zig +0 -1035
- package/src/zig/tests/text-buffer-selection_viewport_test.zig +0 -358
- package/src/zig/tests/text-buffer-view_test.zig +0 -3649
- package/src/zig/tests/text-buffer_test.zig +0 -2191
- package/src/zig/tests/unicode-width-map.zon +0 -3909
- package/src/zig/tests/utf8_no_zwj_test.zig +0 -260
- package/src/zig/tests/utf8_test.zig +0 -4057
- package/src/zig/tests/utf8_wcwidth_cursor_test.zig +0 -267
- package/src/zig/tests/utf8_wcwidth_test.zig +0 -357
- package/src/zig/tests/word-wrap-editing_test.zig +0 -498
- package/src/zig/tests/wrap-cache-perf_test.zig +0 -113
- package/src/zig/text-buffer-iterators.zig +0 -499
- package/src/zig/text-buffer-segment.zig +0 -404
- package/src/zig/text-buffer-view.zig +0 -1371
- package/src/zig/text-buffer.zig +0 -1180
- package/src/zig/utf8.zig +0 -1948
- package/src/zig/utils.zig +0 -9
- package/src/zig-structs.ts +0 -261
- package/src/zig.ts +0 -3843
- package/tsconfig.build.json +0 -22
- package/tsconfig.json +0 -28
- /package/{src/lib/tree-sitter/assets → assets}/javascript/highlights.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/javascript/tree-sitter-javascript.wasm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/markdown/highlights.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/markdown/injections.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/markdown/tree-sitter-markdown.wasm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/markdown_inline/highlights.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/markdown_inline/tree-sitter-markdown_inline.wasm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/typescript/highlights.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/typescript/tree-sitter-typescript.wasm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/zig/highlights.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/zig/tree-sitter-zig.wasm +0 -0
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
# Renderables vs Constructs
|
|
2
|
-
|
|
3
|
-
Lets look at two ways of composing Renderables, imperative and declarative.
|
|
4
|
-
Assume we want to create a simple "login" form with a username and password input.
|
|
5
|
-
|
|
6
|
-
## Imperative
|
|
7
|
-
|
|
8
|
-
Creates concrete `Renderable` instances with a `RenderContext` and composes via `add()`. State/behavior are mutated directly on instances (setters/methods), with mouse/key events bubbling upward through `processMouseEvent` for example.
|
|
9
|
-
|
|
10
|
-
```typescript
|
|
11
|
-
import { BoxRenderable, TextRenderable, InputRenderable, createCliRenderer, type RenderContext } from "@opentui/core"
|
|
12
|
-
|
|
13
|
-
const renderer = await createCliRenderer()
|
|
14
|
-
|
|
15
|
-
const loginForm = new BoxRenderable(renderer, {
|
|
16
|
-
id: "login-form",
|
|
17
|
-
width: 20,
|
|
18
|
-
height: 10,
|
|
19
|
-
padding: 1,
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
// Compose renderables to a single renderable.
|
|
23
|
-
// Needs a RendererContext at creation time.
|
|
24
|
-
function createLabeledInput(renderer: RenderContext, props: { label: string; placeholder: string; id: string }) {
|
|
25
|
-
const labeledInput = new BoxRenderable(renderer, {
|
|
26
|
-
id: `${props.id}-labeled-input`,
|
|
27
|
-
flexDirection: "row",
|
|
28
|
-
backgroundColor: "gray",
|
|
29
|
-
})
|
|
30
|
-
|
|
31
|
-
labeledInput.add(
|
|
32
|
-
new TextRenderable(renderer, {
|
|
33
|
-
id: `${props.id}-label`,
|
|
34
|
-
content: props.label + " ",
|
|
35
|
-
}),
|
|
36
|
-
)
|
|
37
|
-
labeledInput.add(
|
|
38
|
-
new InputRenderable(renderer, {
|
|
39
|
-
id: `${props.id}-input`,
|
|
40
|
-
placeholder: props.placeholder,
|
|
41
|
-
backgroundColor: "white",
|
|
42
|
-
textColor: "black",
|
|
43
|
-
cursorColor: "blue",
|
|
44
|
-
focusedBackgroundColor: "orange",
|
|
45
|
-
width: 20,
|
|
46
|
-
}),
|
|
47
|
-
)
|
|
48
|
-
|
|
49
|
-
return labeledInput
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const labeledUsername = createLabeledInput(renderer, {
|
|
53
|
-
id: "username",
|
|
54
|
-
label: "Username:",
|
|
55
|
-
placeholder: "Enter your username...",
|
|
56
|
-
})
|
|
57
|
-
loginForm.add(labeledUsername)
|
|
58
|
-
|
|
59
|
-
// Now it becomse difficult to focus. because it is in a container.
|
|
60
|
-
// This does not work:
|
|
61
|
-
labeledUsername.focus()
|
|
62
|
-
|
|
63
|
-
// Needs to be:
|
|
64
|
-
labeledUsername.getRenderable("username-input")?.focus()
|
|
65
|
-
|
|
66
|
-
const labeledPassword = createLabeledInput(renderer, {
|
|
67
|
-
id: "password",
|
|
68
|
-
label: "Password:",
|
|
69
|
-
placeholder: "Enter your password...",
|
|
70
|
-
})
|
|
71
|
-
loginForm.add(labeledPassword)
|
|
72
|
-
|
|
73
|
-
// Compose a button component
|
|
74
|
-
function createButton(props: { content: string; onClick: () => void; id: string }) {
|
|
75
|
-
const box = new BoxRenderable(renderer, {
|
|
76
|
-
id: `${props.id}-button`,
|
|
77
|
-
border: true,
|
|
78
|
-
backgroundColor: "gray",
|
|
79
|
-
onMouseDown: props.onClick,
|
|
80
|
-
})
|
|
81
|
-
const text = new TextRenderable(renderer, {
|
|
82
|
-
id: `${props.id}-button-text`,
|
|
83
|
-
content: props.content,
|
|
84
|
-
selectable: false,
|
|
85
|
-
})
|
|
86
|
-
box.add(text)
|
|
87
|
-
return box
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
const buttons = new BoxRenderable(renderer, {
|
|
91
|
-
id: "buttons",
|
|
92
|
-
flexDirection: "row",
|
|
93
|
-
padding: 1,
|
|
94
|
-
width: 20,
|
|
95
|
-
})
|
|
96
|
-
buttons.add(createButton({ id: "register", content: "Register", onClick: () => {} }))
|
|
97
|
-
buttons.add(createButton({ id: "login", content: "Login", onClick: () => {} }))
|
|
98
|
-
loginForm.add(buttons)
|
|
99
|
-
|
|
100
|
-
renderer.root.add(loginForm)
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
## Declarative
|
|
104
|
-
|
|
105
|
-
Builds an allegedly lightweight VNode graph using functional constructs that return VNodes; no instances exist until `instantiate(ctx, vnode)` is called. During instantiation, children are flattened, renderables are created and added, and any chained method/property calls made on VNodes are replayed on the created instance. `delegate(mapping, vnode)` can annotate the VNode so selected APIs (e.g., `focus`, `add`) are later routed to a specific descendant when the instance is created.
|
|
106
|
-
|
|
107
|
-
```typescript
|
|
108
|
-
import { Text, Input, Box, createCliRenderer, delegate, instantiate } from "@opentui/core"
|
|
109
|
-
|
|
110
|
-
const renderer = await createCliRenderer()
|
|
111
|
-
|
|
112
|
-
function LabeledInput(props: { id: string; label: string; placeholder: string }) {
|
|
113
|
-
return delegate(
|
|
114
|
-
{
|
|
115
|
-
focus: `${props.id}-input`,
|
|
116
|
-
},
|
|
117
|
-
Box(
|
|
118
|
-
{ flexDirection: "row" },
|
|
119
|
-
Text({ content: props.label + " " }),
|
|
120
|
-
Input({
|
|
121
|
-
id: `${props.id}-input`,
|
|
122
|
-
placeholder: props.placeholder,
|
|
123
|
-
width: 20,
|
|
124
|
-
backgroundColor: "white",
|
|
125
|
-
textColor: "black",
|
|
126
|
-
cursorColor: "blue",
|
|
127
|
-
focusedBackgroundColor: "orange",
|
|
128
|
-
}),
|
|
129
|
-
),
|
|
130
|
-
)
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
function Button(props: { id: string; content: string; onClick: () => void }) {
|
|
134
|
-
return Box(
|
|
135
|
-
{
|
|
136
|
-
border: true,
|
|
137
|
-
backgroundColor: "gray",
|
|
138
|
-
onMouseDown: props.onClick,
|
|
139
|
-
},
|
|
140
|
-
Text({ content: props.content, selectable: false }),
|
|
141
|
-
)
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
const usernameInput = LabeledInput({ id: "username", label: "Username:", placeholder: "Enter your username..." })
|
|
145
|
-
usernameInput.focus()
|
|
146
|
-
|
|
147
|
-
const loginForm = Box(
|
|
148
|
-
{ width: 20, height: 10, padding: 1 },
|
|
149
|
-
usernameInput,
|
|
150
|
-
LabeledInput({ id: "password", label: "Password:", placeholder: "Enter your password..." }),
|
|
151
|
-
Box(
|
|
152
|
-
{ flexDirection: "row", padding: 1, width: 20 },
|
|
153
|
-
Button({ id: "login", content: "Login", onClick: () => {} }),
|
|
154
|
-
Button({ id: "register", content: "Register", onClick: () => {} }),
|
|
155
|
-
),
|
|
156
|
-
)
|
|
157
|
-
|
|
158
|
-
renderer.root.add(loginForm)
|
|
159
|
-
```
|
package/docs/tree-sitter.md
DELETED
|
@@ -1,311 +0,0 @@
|
|
|
1
|
-
# Tree-Sitter
|
|
2
|
-
|
|
3
|
-
## Adding Custom Parsers
|
|
4
|
-
|
|
5
|
-
There are two ways to add custom parsers to your application:
|
|
6
|
-
|
|
7
|
-
### 1. Global Default Parsers (Recommended)
|
|
8
|
-
|
|
9
|
-
Use `addDefaultParsers()` to add parsers globally before initializing any clients. This is useful when you want all Tree-Sitter clients in your application to support the same languages.
|
|
10
|
-
|
|
11
|
-
```typescript
|
|
12
|
-
import { addDefaultParsers, getTreeSitterClient } from "@opentui/core"
|
|
13
|
-
|
|
14
|
-
// Add Python parser globally
|
|
15
|
-
addDefaultParsers([
|
|
16
|
-
{
|
|
17
|
-
filetype: "python",
|
|
18
|
-
wasm: "https://github.com/tree-sitter/tree-sitter-python/releases/download/v0.23.6/tree-sitter-python.wasm",
|
|
19
|
-
queries: {
|
|
20
|
-
highlights: ["https://raw.githubusercontent.com/tree-sitter/tree-sitter-python/master/queries/highlights.scm"],
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
])
|
|
24
|
-
|
|
25
|
-
// Now all clients will have Python support
|
|
26
|
-
const client = getTreeSitterClient()
|
|
27
|
-
await client.initialize()
|
|
28
|
-
|
|
29
|
-
// Highlight Python code
|
|
30
|
-
const pythonCode = 'def hello():\n print("world")'
|
|
31
|
-
const result = await client.highlightOnce(pythonCode, "python")
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
### 2. Per-Client Parsers
|
|
35
|
-
|
|
36
|
-
Use `client.addFiletypeParser()` to add parsers to a specific client instance. This is useful when different parts of your application need different language support.
|
|
37
|
-
|
|
38
|
-
```typescript
|
|
39
|
-
import { TreeSitterClient } from "@opentui/core"
|
|
40
|
-
|
|
41
|
-
const client = new TreeSitterClient({ dataPath: "./cache" })
|
|
42
|
-
await client.initialize()
|
|
43
|
-
|
|
44
|
-
// Add Rust parser to this specific client
|
|
45
|
-
client.addFiletypeParser({
|
|
46
|
-
filetype: "rust",
|
|
47
|
-
wasm: "https://github.com/tree-sitter/tree-sitter-rust/releases/download/v0.23.2/tree-sitter-rust.wasm",
|
|
48
|
-
queries: {
|
|
49
|
-
highlights: ["https://raw.githubusercontent.com/tree-sitter/tree-sitter-rust/master/queries/highlights.scm"],
|
|
50
|
-
},
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
// Highlight Rust code
|
|
54
|
-
const rustCode = 'fn main() {\n println!("Hello, world!");\n}'
|
|
55
|
-
const result = await client.highlightOnce(rustCode, "rust")
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
## Parser Configuration Structure
|
|
59
|
-
|
|
60
|
-
The `FiletypeParserOptions` interface defines how to configure a parser:
|
|
61
|
-
|
|
62
|
-
```typescript
|
|
63
|
-
interface FiletypeParserOptions {
|
|
64
|
-
filetype: string // The filetype identifier (e.g., "python", "rust")
|
|
65
|
-
wasm: string // URL or local file path to the .wasm parser file
|
|
66
|
-
queries: {
|
|
67
|
-
highlights: string[] // Array of URLs or local file paths to .scm query files
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
## Finding Parsers and Queries
|
|
73
|
-
|
|
74
|
-
### Official Tree-Sitter Parsers
|
|
75
|
-
|
|
76
|
-
Most popular languages have official parsers:
|
|
77
|
-
|
|
78
|
-
```typescript
|
|
79
|
-
// Official parsers follow this pattern:
|
|
80
|
-
const parserUrl =
|
|
81
|
-
"https://github.com/tree-sitter/tree-sitter-{language}/releases/download/v{version}/tree-sitter-{language}.wasm"
|
|
82
|
-
|
|
83
|
-
// Examples:
|
|
84
|
-
// Python: https://github.com/tree-sitter/tree-sitter-python/releases/download/v0.23.6/tree-sitter-python.wasm
|
|
85
|
-
// Rust: https://github.com/tree-sitter/tree-sitter-rust/releases/download/v0.23.2/tree-sitter-rust.wasm
|
|
86
|
-
// Go: https://github.com/tree-sitter/tree-sitter-go/releases/download/v0.23.4/tree-sitter-go.wasm
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### Finding Highlight Queries
|
|
90
|
-
|
|
91
|
-
Highlight queries are usually found in the parser repository's `queries/` directory:
|
|
92
|
-
|
|
93
|
-
```typescript
|
|
94
|
-
// Official queries:
|
|
95
|
-
const queryUrl = "https://raw.githubusercontent.com/tree-sitter/tree-sitter-{language}/master/queries/highlights.scm"
|
|
96
|
-
|
|
97
|
-
// Or from nvim-treesitter (often more comprehensive):
|
|
98
|
-
const nvimQueryUrl =
|
|
99
|
-
"https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/master/queries/{language}/highlights.scm"
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
### Combining Multiple Queries
|
|
103
|
-
|
|
104
|
-
Some languages require multiple query files. For example, TypeScript uses JavaScript queries plus TypeScript-specific queries:
|
|
105
|
-
|
|
106
|
-
```typescript
|
|
107
|
-
addDefaultParsers([
|
|
108
|
-
{
|
|
109
|
-
filetype: "typescript",
|
|
110
|
-
wasm: "https://github.com/tree-sitter/tree-sitter-typescript/releases/download/v0.23.2/tree-sitter-typescript.wasm",
|
|
111
|
-
queries: {
|
|
112
|
-
highlights: [
|
|
113
|
-
// Base ECMAScript/JavaScript queries
|
|
114
|
-
"https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/master/queries/ecma/highlights.scm",
|
|
115
|
-
// TypeScript-specific queries
|
|
116
|
-
"https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/master/queries/typescript/highlights.scm",
|
|
117
|
-
],
|
|
118
|
-
},
|
|
119
|
-
},
|
|
120
|
-
])
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
## Using Local Files
|
|
124
|
-
|
|
125
|
-
For better performance and offline support, you can bundle parsers and queries with your application:
|
|
126
|
-
|
|
127
|
-
```typescript
|
|
128
|
-
// Using Bun's file import
|
|
129
|
-
import pythonWasm from "./parsers/tree-sitter-python.wasm" with { type: "file" }
|
|
130
|
-
import pythonHighlights from "./queries/python/highlights.scm" with { type: "file" }
|
|
131
|
-
|
|
132
|
-
addDefaultParsers([
|
|
133
|
-
{
|
|
134
|
-
filetype: "python",
|
|
135
|
-
wasm: pythonWasm,
|
|
136
|
-
queries: {
|
|
137
|
-
highlights: [pythonHighlights],
|
|
138
|
-
},
|
|
139
|
-
},
|
|
140
|
-
])
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
## Automated Parser Management
|
|
144
|
-
|
|
145
|
-
You can automate parser downloads and import generation using the `updateAssets` utility. This is especially useful when supporting multiple languages or integrating parser management into your build pipeline.
|
|
146
|
-
|
|
147
|
-
### Creating a Parser Configuration
|
|
148
|
-
|
|
149
|
-
Create a `parsers-config.json` file in your project:
|
|
150
|
-
|
|
151
|
-
```json
|
|
152
|
-
{
|
|
153
|
-
"parsers": [
|
|
154
|
-
{
|
|
155
|
-
"filetype": "python",
|
|
156
|
-
"wasm": "https://github.com/tree-sitter/tree-sitter-python/releases/download/v0.23.6/tree-sitter-python.wasm",
|
|
157
|
-
"queries": {
|
|
158
|
-
"highlights": ["https://raw.githubusercontent.com/tree-sitter/tree-sitter-python/master/queries/highlights.scm"]
|
|
159
|
-
}
|
|
160
|
-
},
|
|
161
|
-
{
|
|
162
|
-
"filetype": "rust",
|
|
163
|
-
"wasm": "https://github.com/tree-sitter/tree-sitter-rust/releases/download/v0.23.2/tree-sitter-rust.wasm",
|
|
164
|
-
"queries": {
|
|
165
|
-
"highlights": ["https://raw.githubusercontent.com/tree-sitter/tree-sitter-rust/master/queries/highlights.scm"]
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
]
|
|
169
|
-
}
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
### Integrating into Build Pipeline
|
|
173
|
-
|
|
174
|
-
#### CLI Usage
|
|
175
|
-
|
|
176
|
-
Add the update script to your `package.json`:
|
|
177
|
-
|
|
178
|
-
```json
|
|
179
|
-
{
|
|
180
|
-
"scripts": {
|
|
181
|
-
"prebuild": "bun node_modules/@opentui/core/lib/tree-sitter/assets/update.ts --config ./parsers-config.json --assets ./src/parsers --output ./src/parsers.ts",
|
|
182
|
-
"build": "bun build ./src/index.ts"
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
#### Programmatic Usage
|
|
188
|
-
|
|
189
|
-
Or call it programmatically in your build script:
|
|
190
|
-
|
|
191
|
-
```typescript
|
|
192
|
-
import { updateAssets } from "@opentui/core"
|
|
193
|
-
|
|
194
|
-
await updateAssets({
|
|
195
|
-
configPath: "./parsers-config.json",
|
|
196
|
-
assetsDir: "./src/parsers",
|
|
197
|
-
outputPath: "./src/parsers.ts",
|
|
198
|
-
})
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
### Using Generated Parsers
|
|
202
|
-
|
|
203
|
-
The script generates a TypeScript file with all parsers pre-configured:
|
|
204
|
-
|
|
205
|
-
```typescript
|
|
206
|
-
import { addDefaultParsers, getTreeSitterClient } from "@opentui/core"
|
|
207
|
-
import { getParsers } from "./parsers" // Generated file
|
|
208
|
-
|
|
209
|
-
addDefaultParsers(getParsers())
|
|
210
|
-
|
|
211
|
-
const client = getTreeSitterClient()
|
|
212
|
-
await client.initialize()
|
|
213
|
-
|
|
214
|
-
const result = await client.highlightOnce('def hello():\n print("world")', "python")
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
## Complete Example: Adding Multiple Languages
|
|
218
|
-
|
|
219
|
-
```typescript
|
|
220
|
-
import { addDefaultParsers, getTreeSitterClient, SyntaxStyle } from "@opentui/core"
|
|
221
|
-
|
|
222
|
-
// Add support for multiple languages before initializing
|
|
223
|
-
addDefaultParsers([
|
|
224
|
-
{
|
|
225
|
-
filetype: "python",
|
|
226
|
-
wasm: "https://github.com/tree-sitter/tree-sitter-python/releases/download/v0.23.6/tree-sitter-python.wasm",
|
|
227
|
-
queries: {
|
|
228
|
-
highlights: ["https://raw.githubusercontent.com/tree-sitter/tree-sitter-python/master/queries/highlights.scm"],
|
|
229
|
-
},
|
|
230
|
-
},
|
|
231
|
-
{
|
|
232
|
-
filetype: "rust",
|
|
233
|
-
wasm: "https://github.com/tree-sitter/tree-sitter-rust/releases/download/v0.23.2/tree-sitter-rust.wasm",
|
|
234
|
-
queries: {
|
|
235
|
-
highlights: ["https://raw.githubusercontent.com/tree-sitter/tree-sitter-rust/master/queries/highlights.scm"],
|
|
236
|
-
},
|
|
237
|
-
},
|
|
238
|
-
{
|
|
239
|
-
filetype: "go",
|
|
240
|
-
wasm: "https://github.com/tree-sitter/tree-sitter-go/releases/download/v0.23.4/tree-sitter-go.wasm",
|
|
241
|
-
queries: {
|
|
242
|
-
highlights: ["https://raw.githubusercontent.com/tree-sitter/tree-sitter-go/master/queries/highlights.scm"],
|
|
243
|
-
},
|
|
244
|
-
},
|
|
245
|
-
])
|
|
246
|
-
|
|
247
|
-
// Initialize the client
|
|
248
|
-
const client = getTreeSitterClient()
|
|
249
|
-
await client.initialize()
|
|
250
|
-
|
|
251
|
-
// Use with different languages
|
|
252
|
-
const syntaxStyle = new SyntaxStyle()
|
|
253
|
-
|
|
254
|
-
const pythonResult = await client.highlightOnce('def hello():\n print("world")', "python")
|
|
255
|
-
|
|
256
|
-
const rustResult = await client.highlightOnce('fn main() {\n println!("Hello");\n}', "rust")
|
|
257
|
-
|
|
258
|
-
const goResult = await client.highlightOnce('func main() {\n fmt.Println("Hello")\n}', "go")
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
## Using with CodeRenderable
|
|
262
|
-
|
|
263
|
-
The `CodeRenderable` component automatically uses the Tree-Sitter client for syntax highlighting:
|
|
264
|
-
|
|
265
|
-
```typescript
|
|
266
|
-
import { CodeRenderable, getTreeSitterClient } from "@opentui/core"
|
|
267
|
-
|
|
268
|
-
// Initialize the client with custom parsers
|
|
269
|
-
const client = getTreeSitterClient()
|
|
270
|
-
await client.initialize()
|
|
271
|
-
|
|
272
|
-
// Create a code renderable
|
|
273
|
-
const codeBlock = new CodeRenderable("code-1", {
|
|
274
|
-
content: 'def hello():\n print("world")',
|
|
275
|
-
filetype: "python",
|
|
276
|
-
width: 40,
|
|
277
|
-
height: 10,
|
|
278
|
-
})
|
|
279
|
-
|
|
280
|
-
// The CodeRenderable will automatically use the Tree-Sitter client
|
|
281
|
-
// to highlight the code
|
|
282
|
-
```
|
|
283
|
-
|
|
284
|
-
## Caching
|
|
285
|
-
|
|
286
|
-
Parser and query files are automatically cached in the `dataPath` directory to avoid re-downloading them.
|
|
287
|
-
You can customize the cache location when creating a client:
|
|
288
|
-
|
|
289
|
-
```typescript
|
|
290
|
-
const client = new TreeSitterClient({
|
|
291
|
-
dataPath: "./my-custom-cache",
|
|
292
|
-
})
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
## File Type Resolution
|
|
296
|
-
|
|
297
|
-
OpenTUI provides utilities to automatically determine filetypes from file paths:
|
|
298
|
-
|
|
299
|
-
```typescript
|
|
300
|
-
import { pathToFiletype, extToFiletype } from "@opentui/core"
|
|
301
|
-
|
|
302
|
-
// Get filetype from file path
|
|
303
|
-
const ft1 = pathToFiletype("src/main.rs") // "rust"
|
|
304
|
-
const ft2 = pathToFiletype("app.py") // "python"
|
|
305
|
-
|
|
306
|
-
// Get filetype from extension
|
|
307
|
-
const ft3 = extToFiletype("ts") // "typescript"
|
|
308
|
-
const ft4 = extToFiletype("js") // "javascript"
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
Built-in mappings include: `js`, `jsx`, `ts`, `tsx`, `py`, `rb`, `go`, `rs`, `c`, `cpp`, `html`, `css`, and more.
|