@fairyhunter13/opentui-core 0.1.113 → 0.1.114
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dev/keypress-debug-renderer.ts +148 -0
- package/dev/keypress-debug.ts +43 -0
- package/dev/print-env-vars.ts +32 -0
- package/dev/test-tmux-graphics-334.sh +68 -0
- package/dev/thai-debug-test.ts +68 -0
- package/docs/development.md +144 -0
- package/package.json +62 -53
- package/scripts/build.ts +400 -0
- package/scripts/publish.ts +60 -0
- package/src/3d/SpriteResourceManager.ts +286 -0
- package/src/3d/SpriteUtils.ts +70 -0
- package/src/3d/TextureUtils.ts +196 -0
- package/src/3d/ThreeRenderable.ts +197 -0
- package/src/3d/WGPURenderer.ts +294 -0
- package/src/3d/animation/ExplodingSpriteEffect.ts +513 -0
- package/src/3d/animation/PhysicsExplodingSpriteEffect.ts +429 -0
- package/src/3d/animation/SpriteAnimator.ts +633 -0
- package/src/3d/animation/SpriteParticleGenerator.ts +435 -0
- package/src/3d/canvas.ts +464 -0
- package/src/3d/index.ts +12 -0
- package/src/3d/physics/PlanckPhysicsAdapter.ts +72 -0
- package/src/3d/physics/RapierPhysicsAdapter.ts +66 -0
- package/src/3d/physics/physics-interface.ts +31 -0
- package/src/3d/shaders/supersampling.wgsl +201 -0
- package/src/3d.ts +3 -0
- package/src/NativeSpanFeed.ts +300 -0
- package/src/Renderable.ts +1704 -0
- package/src/__snapshots__/buffer.test.ts.snap +28 -0
- package/src/animation/Timeline.test.ts +2709 -0
- package/src/animation/Timeline.ts +598 -0
- package/src/ansi.ts +18 -0
- package/src/benchmark/attenuation-benchmark.ts +81 -0
- package/src/benchmark/colormatrix-benchmark.ts +128 -0
- package/src/benchmark/gain-benchmark.ts +80 -0
- package/src/benchmark/latest-all-bench-run.json +707 -0
- package/src/benchmark/latest-async-bench-run.json +336 -0
- package/src/benchmark/latest-default-bench-run.json +657 -0
- package/src/benchmark/latest-large-bench-run.json +707 -0
- package/src/benchmark/latest-quick-bench-run.json +207 -0
- package/src/benchmark/markdown-benchmark.ts +1796 -0
- package/src/benchmark/native-span-feed-async-benchmark.ts +355 -0
- package/src/benchmark/native-span-feed-benchmark.md +56 -0
- package/src/benchmark/native-span-feed-benchmark.ts +596 -0
- package/src/benchmark/native-span-feed-compare.ts +280 -0
- package/src/benchmark/renderer-benchmark.ts +754 -0
- package/src/benchmark/text-table-benchmark.ts +948 -0
- package/src/buffer.test.ts +291 -0
- package/src/buffer.ts +554 -0
- package/src/console.test.ts +612 -0
- package/src/console.ts +1254 -0
- package/src/edit-buffer.test.ts +1769 -0
- package/src/edit-buffer.ts +411 -0
- package/src/editor-view.test.ts +1032 -0
- package/src/editor-view.ts +284 -0
- package/src/examples/ascii-font-selection-demo.ts +245 -0
- 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 +1018 -0
- 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 +115 -0
- package/src/examples/code-demo.ts +924 -0
- package/src/examples/console-demo.ts +358 -0
- package/src/examples/core-plugin-slots-demo.ts +759 -0
- package/src/examples/diff-demo.ts +701 -0
- package/src/examples/draggable-three-demo.ts +259 -0
- package/src/examples/editor-demo.ts +322 -0
- package/src/examples/extmarks-demo.ts +196 -0
- package/src/examples/focus-restore-demo.ts +310 -0
- package/src/examples/fonts.ts +245 -0
- package/src/examples/fractal-shader-demo.ts +268 -0
- package/src/examples/framebuffer-demo.ts +674 -0
- package/src/examples/full-unicode-demo.ts +241 -0
- package/src/examples/golden-star-demo.ts +933 -0
- package/src/examples/grayscale-buffer-demo.ts +249 -0
- package/src/examples/hast-syntax-highlighting-demo.ts +129 -0
- package/src/examples/index.ts +926 -0
- package/src/examples/input-demo.ts +377 -0
- package/src/examples/input-select-layout-demo.ts +425 -0
- package/src/examples/install.sh +143 -0
- package/src/examples/keypress-debug-demo.ts +452 -0
- package/src/examples/lib/HexList.ts +122 -0
- package/src/examples/lib/PaletteGrid.ts +125 -0
- package/src/examples/lib/standalone-keys.ts +25 -0
- package/src/examples/lib/tab-controller.ts +243 -0
- package/src/examples/lights-phong-demo.ts +290 -0
- package/src/examples/link-demo.ts +220 -0
- package/src/examples/live-state-demo.ts +480 -0
- package/src/examples/markdown-demo.ts +725 -0
- package/src/examples/mouse-interaction-demo.ts +428 -0
- package/src/examples/nested-zindex-demo.ts +357 -0
- package/src/examples/opacity-example.ts +235 -0
- package/src/examples/opentui-demo.ts +1057 -0
- package/src/examples/physx-planck-2d-demo.ts +623 -0
- package/src/examples/physx-rapier-2d-demo.ts +655 -0
- package/src/examples/relative-positioning-demo.ts +323 -0
- package/src/examples/scroll-example.ts +214 -0
- package/src/examples/scrollbox-mouse-test.ts +112 -0
- package/src/examples/scrollbox-overlay-hit-test.ts +206 -0
- package/src/examples/select-demo.ts +237 -0
- package/src/examples/shader-cube-demo.ts +1015 -0
- package/src/examples/simple-layout-example.ts +591 -0
- package/src/examples/slider-demo.ts +617 -0
- package/src/examples/split-mode-demo.ts +453 -0
- package/src/examples/sprite-animation-demo.ts +443 -0
- package/src/examples/sprite-particle-generator-demo.ts +486 -0
- package/src/examples/static-sprite-demo.ts +193 -0
- package/src/examples/sticky-scroll-example.ts +308 -0
- package/src/examples/styled-text-demo.ts +282 -0
- package/src/examples/tab-select-demo.ts +219 -0
- package/src/examples/terminal-title.ts +29 -0
- package/src/examples/terminal.ts +305 -0
- package/src/examples/text-node-demo.ts +416 -0
- package/src/examples/text-selection-demo.ts +377 -0
- package/src/examples/text-table-demo.ts +503 -0
- package/src/examples/text-truncation-demo.ts +481 -0
- package/src/examples/text-wrap.ts +757 -0
- package/src/examples/texture-loading-demo.ts +259 -0
- package/src/examples/timeline-example.ts +670 -0
- package/src/examples/transparency-demo.ts +400 -0
- package/src/examples/vnode-composition-demo.ts +404 -0
- package/src/examples/wide-grapheme-overlay-demo.ts +280 -0
- package/src/index.ts +24 -0
- package/src/lib/KeyHandler.integration.test.ts +292 -0
- package/src/lib/KeyHandler.stopPropagation.test.ts +289 -0
- package/src/lib/KeyHandler.test.ts +662 -0
- package/src/lib/KeyHandler.ts +222 -0
- package/src/lib/RGBA.test.ts +984 -0
- package/src/lib/RGBA.ts +204 -0
- package/src/lib/ascii.font.ts +330 -0
- package/src/lib/border.test.ts +83 -0
- package/src/lib/border.ts +170 -0
- package/src/lib/bunfs.test.ts +27 -0
- package/src/lib/bunfs.ts +18 -0
- package/src/lib/clipboard.test.ts +41 -0
- package/src/lib/clipboard.ts +47 -0
- package/src/lib/clock.ts +35 -0
- package/src/lib/data-paths.test.ts +133 -0
- package/src/lib/data-paths.ts +109 -0
- package/src/lib/debounce.ts +106 -0
- package/src/lib/detect-links.test.ts +98 -0
- package/src/lib/detect-links.ts +56 -0
- package/src/lib/env.test.ts +228 -0
- package/src/lib/env.ts +209 -0
- package/src/lib/extmarks-history.ts +51 -0
- package/src/lib/extmarks-multiwidth.test.ts +322 -0
- package/src/lib/extmarks.test.ts +3457 -0
- package/src/lib/extmarks.ts +843 -0
- package/src/lib/fonts/block.json +405 -0
- package/src/lib/fonts/grid.json +265 -0
- package/src/lib/fonts/huge.json +741 -0
- package/src/lib/fonts/pallet.json +314 -0
- package/src/lib/fonts/shade.json +591 -0
- package/src/lib/fonts/slick.json +321 -0
- package/src/lib/fonts/tiny.json +69 -0
- package/src/lib/hast-styled-text.ts +59 -0
- package/src/lib/index.ts +21 -0
- package/src/lib/keymapping.test.ts +317 -0
- package/src/lib/keymapping.ts +115 -0
- package/src/lib/objects-in-viewport.test.ts +787 -0
- package/src/lib/objects-in-viewport.ts +153 -0
- package/src/lib/output.capture.ts +58 -0
- package/src/lib/parse.keypress-kitty.protocol.test.ts +340 -0
- package/src/lib/parse.keypress-kitty.test.ts +663 -0
- package/src/lib/parse.keypress-kitty.ts +439 -0
- package/src/lib/parse.keypress.test.ts +1849 -0
- package/src/lib/parse.keypress.ts +397 -0
- package/src/lib/parse.mouse.test.ts +552 -0
- package/src/lib/parse.mouse.ts +232 -0
- package/src/lib/paste.ts +16 -0
- package/src/lib/queue.ts +65 -0
- package/src/lib/renderable.validations.test.ts +87 -0
- package/src/lib/renderable.validations.ts +83 -0
- package/src/lib/scroll-acceleration.ts +98 -0
- package/src/lib/selection.ts +240 -0
- package/src/lib/singleton.ts +28 -0
- package/src/lib/stdin-parser.test.ts +2290 -0
- package/src/lib/stdin-parser.ts +1810 -0
- package/src/lib/styled-text.ts +178 -0
- package/src/lib/terminal-capability-detection.test.ts +202 -0
- package/src/lib/terminal-capability-detection.ts +79 -0
- package/src/lib/terminal-palette.test.ts +878 -0
- package/src/lib/terminal-palette.ts +383 -0
- package/src/lib/tree-sitter/assets/README.md +118 -0
- package/src/lib/tree-sitter/assets/update.ts +334 -0
- package/src/lib/tree-sitter/assets.d.ts +9 -0
- package/src/lib/tree-sitter/cache.test.ts +273 -0
- package/src/lib/tree-sitter/client.test.ts +1165 -0
- package/src/lib/tree-sitter/client.ts +607 -0
- package/src/lib/tree-sitter/default-parsers.ts +86 -0
- package/src/lib/tree-sitter/download-utils.ts +148 -0
- package/src/lib/tree-sitter/index.ts +28 -0
- package/src/lib/tree-sitter/parser.worker.ts +1042 -0
- package/src/lib/tree-sitter/parsers-config.ts +81 -0
- package/src/lib/tree-sitter/resolve-ft.test.ts +55 -0
- package/src/lib/tree-sitter/resolve-ft.ts +189 -0
- package/src/lib/tree-sitter/types.ts +82 -0
- package/src/lib/tree-sitter-styled-text.test.ts +1253 -0
- package/src/lib/tree-sitter-styled-text.ts +306 -0
- package/src/lib/validate-dir-name.ts +55 -0
- package/src/lib/yoga.options.test.ts +628 -0
- package/src/lib/yoga.options.ts +346 -0
- package/src/plugins/core-slot.ts +579 -0
- package/src/plugins/registry.ts +402 -0
- package/src/plugins/types.ts +46 -0
- package/src/post/effects.ts +930 -0
- package/src/post/filters.ts +489 -0
- package/src/post/matrices.ts +288 -0
- package/src/renderables/ASCIIFont.ts +219 -0
- package/src/renderables/Box.test.ts +205 -0
- package/src/renderables/Box.ts +326 -0
- package/src/renderables/Code.test.ts +2062 -0
- package/src/renderables/Code.ts +357 -0
- package/src/renderables/Diff.regression.test.ts +226 -0
- package/src/renderables/Diff.test.ts +3101 -0
- package/src/renderables/Diff.ts +1211 -0
- package/src/renderables/EditBufferRenderable.test.ts +288 -0
- package/src/renderables/EditBufferRenderable.ts +1166 -0
- package/src/renderables/FrameBuffer.ts +47 -0
- package/src/renderables/Input.test.ts +1228 -0
- package/src/renderables/Input.ts +247 -0
- package/src/renderables/LineNumberRenderable.ts +724 -0
- package/src/renderables/Markdown.ts +1393 -0
- package/src/renderables/ScrollBar.ts +422 -0
- package/src/renderables/ScrollBox.ts +883 -0
- package/src/renderables/Select.test.ts +1033 -0
- package/src/renderables/Select.ts +524 -0
- package/src/renderables/Slider.test.ts +456 -0
- package/src/renderables/Slider.ts +342 -0
- package/src/renderables/TabSelect.test.ts +197 -0
- package/src/renderables/TabSelect.ts +455 -0
- package/src/renderables/Text.selection-buffer.test.ts +123 -0
- package/src/renderables/Text.test.ts +2660 -0
- package/src/renderables/Text.ts +147 -0
- package/src/renderables/TextBufferRenderable.ts +518 -0
- package/src/renderables/TextNode.test.ts +1058 -0
- package/src/renderables/TextNode.ts +325 -0
- package/src/renderables/TextTable.test.ts +1421 -0
- package/src/renderables/TextTable.ts +1344 -0
- package/src/renderables/Textarea.ts +430 -0
- package/src/renderables/TimeToFirstDraw.ts +89 -0
- package/src/renderables/__snapshots__/Code.test.ts.snap +13 -0
- package/src/renderables/__snapshots__/Diff.test.ts.snap +785 -0
- package/src/renderables/__snapshots__/Text.test.ts.snap +421 -0
- package/src/renderables/__snapshots__/TextTable.test.ts.snap +215 -0
- package/src/renderables/__tests__/LineNumberRenderable.scrollbox-simple.test.ts +144 -0
- package/src/renderables/__tests__/LineNumberRenderable.scrollbox.test.ts +816 -0
- package/src/renderables/__tests__/LineNumberRenderable.test.ts +1865 -0
- package/src/renderables/__tests__/LineNumberRenderable.wrapping.test.ts +85 -0
- package/src/renderables/__tests__/Markdown.code-colors.test.ts +242 -0
- package/src/renderables/__tests__/Markdown.test.ts +2518 -0
- package/src/renderables/__tests__/MultiRenderable.selection.test.ts +87 -0
- package/src/renderables/__tests__/Textarea.buffer.test.ts +682 -0
- package/src/renderables/__tests__/Textarea.destroyed-events.test.ts +675 -0
- package/src/renderables/__tests__/Textarea.editing.test.ts +2041 -0
- package/src/renderables/__tests__/Textarea.error-handling.test.ts +35 -0
- package/src/renderables/__tests__/Textarea.events.test.ts +738 -0
- package/src/renderables/__tests__/Textarea.highlights.test.ts +590 -0
- package/src/renderables/__tests__/Textarea.keybinding.test.ts +3149 -0
- package/src/renderables/__tests__/Textarea.paste.test.ts +357 -0
- package/src/renderables/__tests__/Textarea.rendering.test.ts +1866 -0
- package/src/renderables/__tests__/Textarea.scroll.test.ts +733 -0
- package/src/renderables/__tests__/Textarea.selection.test.ts +1590 -0
- package/src/renderables/__tests__/Textarea.stress.test.ts +670 -0
- package/src/renderables/__tests__/Textarea.undo-redo.test.ts +383 -0
- package/src/renderables/__tests__/Textarea.visual-lines.test.ts +310 -0
- package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.code.test.ts.snap +221 -0
- package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.scrollbox-simple.test.ts.snap +89 -0
- package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.scrollbox.test.ts.snap +457 -0
- package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.test.ts.snap +158 -0
- package/src/renderables/__tests__/__snapshots__/Textarea.rendering.test.ts.snap +387 -0
- package/src/renderables/__tests__/markdown-parser.test.ts +217 -0
- package/src/renderables/__tests__/renderable-test-utils.ts +60 -0
- package/src/renderables/composition/README.md +8 -0
- package/src/renderables/composition/VRenderable.ts +32 -0
- package/src/renderables/composition/constructs.ts +127 -0
- package/src/renderables/composition/vnode.ts +289 -0
- package/src/renderables/index.ts +23 -0
- package/src/renderables/markdown-parser.ts +66 -0
- package/src/renderer.ts +2681 -0
- package/src/runtime-plugin-support.ts +39 -0
- package/src/runtime-plugin.ts +615 -0
- package/src/syntax-style.test.ts +841 -0
- package/src/syntax-style.ts +257 -0
- package/src/testing/README.md +210 -0
- package/src/testing/capture-spans.test.ts +194 -0
- package/src/testing/integration.test.ts +276 -0
- package/src/testing/manual-clock.ts +117 -0
- package/src/testing/mock-keys.test.ts +1378 -0
- package/src/testing/mock-keys.ts +457 -0
- package/src/testing/mock-mouse.test.ts +218 -0
- package/src/testing/mock-mouse.ts +247 -0
- package/src/testing/mock-tree-sitter-client.ts +73 -0
- package/src/testing/spy.ts +13 -0
- package/src/testing/test-recorder.test.ts +415 -0
- package/src/testing/test-recorder.ts +145 -0
- package/src/testing/test-renderer.ts +132 -0
- package/src/testing.ts +7 -0
- package/src/tests/__snapshots__/absolute-positioning.snapshot.test.ts.snap +481 -0
- package/src/tests/__snapshots__/renderable.snapshot.test.ts.snap +19 -0
- package/src/tests/__snapshots__/scrollbox.test.ts.snap +29 -0
- package/src/tests/absolute-positioning.snapshot.test.ts +638 -0
- package/src/tests/allocator-stats.test.ts +38 -0
- package/src/tests/destroy-during-render.test.ts +200 -0
- package/src/tests/destroy-on-exit.fixture.ts +36 -0
- package/src/tests/destroy-on-exit.test.ts +41 -0
- package/src/tests/hover-cursor.test.ts +98 -0
- package/src/tests/native-span-feed-async.test.ts +173 -0
- package/src/tests/native-span-feed-close.test.ts +120 -0
- package/src/tests/native-span-feed-coverage.test.ts +227 -0
- package/src/tests/native-span-feed-edge-cases.test.ts +352 -0
- package/src/tests/native-span-feed-use-after-free.test.ts +45 -0
- package/src/tests/opacity.test.ts +123 -0
- package/src/tests/renderable.snapshot.test.ts +524 -0
- package/src/tests/renderable.test.ts +1281 -0
- package/src/tests/renderer.clock.test.ts +158 -0
- package/src/tests/renderer.console-startup.test.ts +185 -0
- package/src/tests/renderer.control.test.ts +425 -0
- package/src/tests/renderer.core-slot-binding.test.ts +952 -0
- package/src/tests/renderer.cursor.test.ts +26 -0
- package/src/tests/renderer.destroy-during-render.test.ts +147 -0
- package/src/tests/renderer.focus-restore.test.ts +257 -0
- package/src/tests/renderer.focus.test.ts +294 -0
- package/src/tests/renderer.idle.test.ts +219 -0
- package/src/tests/renderer.input.test.ts +2237 -0
- package/src/tests/renderer.kitty-flags.test.ts +195 -0
- package/src/tests/renderer.mouse.test.ts +1274 -0
- package/src/tests/renderer.palette.test.ts +629 -0
- package/src/tests/renderer.selection.test.ts +49 -0
- package/src/tests/renderer.slot-registry.test.ts +684 -0
- package/src/tests/renderer.useMouse.test.ts +47 -0
- package/src/tests/runtime-plugin-node-modules-cycle.fixture.ts +76 -0
- package/src/tests/runtime-plugin-node-modules-mjs.fixture.ts +43 -0
- package/src/tests/runtime-plugin-node-modules-no-bare-rewrite.fixture.ts +67 -0
- package/src/tests/runtime-plugin-node-modules-package-type-cache.fixture.ts +72 -0
- package/src/tests/runtime-plugin-node-modules-runtime-specifier.fixture.ts +44 -0
- package/src/tests/runtime-plugin-node-modules-scoped-package-bare-rewrite.fixture.ts +85 -0
- package/src/tests/runtime-plugin-path-alias.fixture.ts +43 -0
- package/src/tests/runtime-plugin-resolve-roots.fixture.ts +65 -0
- package/src/tests/runtime-plugin-support.fixture.ts +11 -0
- package/src/tests/runtime-plugin-support.test.ts +19 -0
- package/src/tests/runtime-plugin-windows-file-url.fixture.ts +30 -0
- package/src/tests/runtime-plugin.fixture.ts +40 -0
- package/src/tests/runtime-plugin.test.ts +354 -0
- package/src/tests/scrollbox-culling-bug.test.ts +114 -0
- package/src/tests/scrollbox-hitgrid-resize.test.ts +136 -0
- package/src/tests/scrollbox-hitgrid.test.ts +909 -0
- package/src/tests/scrollbox.test.ts +1530 -0
- package/src/tests/wrap-resize-perf.test.ts +276 -0
- package/src/tests/yoga-setters.test.ts +921 -0
- package/src/text-buffer-view.test.ts +705 -0
- package/src/text-buffer-view.ts +189 -0
- package/src/text-buffer.test.ts +347 -0
- package/src/text-buffer.ts +250 -0
- package/src/types.ts +161 -0
- package/src/utils.ts +88 -0
- package/src/zig/ansi.zig +268 -0
- package/src/zig/bench/README.md +50 -0
- package/src/zig/bench/buffer-draw-text-buffer_bench.zig +887 -0
- package/src/zig/bench/edit-buffer_bench.zig +476 -0
- package/src/zig/bench/native-span-feed_bench.zig +100 -0
- package/src/zig/bench/rope-markers_bench.zig +713 -0
- package/src/zig/bench/rope_bench.zig +514 -0
- package/src/zig/bench/styled-text_bench.zig +470 -0
- package/src/zig/bench/text-buffer-coords_bench.zig +362 -0
- package/src/zig/bench/text-buffer-view_bench.zig +459 -0
- package/src/zig/bench/text-chunk-graphemes_bench.zig +273 -0
- package/src/zig/bench/utf8_bench.zig +799 -0
- package/src/zig/bench-utils.zig +431 -0
- package/src/zig/bench.zig +217 -0
- package/src/zig/buffer-methods.zig +211 -0
- package/src/zig/buffer.zig +2281 -0
- package/src/zig/build.zig +289 -0
- package/src/zig/build.zig.zon +16 -0
- package/src/zig/edit-buffer.zig +825 -0
- package/src/zig/editor-view.zig +802 -0
- package/src/zig/event-bus.zig +13 -0
- package/src/zig/event-emitter.zig +65 -0
- package/src/zig/file-logger.zig +92 -0
- package/src/zig/grapheme.zig +599 -0
- package/src/zig/lib.zig +1854 -0
- package/src/zig/link.zig +333 -0
- package/src/zig/logger.zig +43 -0
- package/src/zig/mem-registry.zig +125 -0
- package/src/zig/native-span-feed-bench-lib.zig +7 -0
- package/src/zig/native-span-feed.zig +708 -0
- package/src/zig/renderer.zig +1393 -0
- package/src/zig/rope.zig +1220 -0
- package/src/zig/syntax-style.zig +161 -0
- package/src/zig/terminal.zig +987 -0
- package/src/zig/test.zig +72 -0
- package/src/zig/tests/README.md +18 -0
- package/src/zig/tests/buffer-methods_test.zig +1109 -0
- package/src/zig/tests/buffer_test.zig +2557 -0
- package/src/zig/tests/edit-buffer-history_test.zig +271 -0
- package/src/zig/tests/edit-buffer_test.zig +1689 -0
- package/src/zig/tests/editor-view_test.zig +3299 -0
- package/src/zig/tests/event-emitter_test.zig +249 -0
- package/src/zig/tests/grapheme_test.zig +1304 -0
- package/src/zig/tests/link_test.zig +190 -0
- package/src/zig/tests/mem-registry_test.zig +473 -0
- package/src/zig/tests/memory_leak_regression_test.zig +159 -0
- package/src/zig/tests/native-span-feed_test.zig +1264 -0
- package/src/zig/tests/renderer_test.zig +1017 -0
- package/src/zig/tests/rope-nested_test.zig +712 -0
- package/src/zig/tests/rope_fuzz_test.zig +238 -0
- package/src/zig/tests/rope_test.zig +2362 -0
- package/src/zig/tests/segment-merge.test.zig +148 -0
- package/src/zig/tests/syntax-style_test.zig +557 -0
- package/src/zig/tests/terminal_test.zig +754 -0
- package/src/zig/tests/text-buffer-drawing_test.zig +3237 -0
- package/src/zig/tests/text-buffer-highlights_test.zig +666 -0
- package/src/zig/tests/text-buffer-iterators_test.zig +776 -0
- package/src/zig/tests/text-buffer-segment_test.zig +320 -0
- package/src/zig/tests/text-buffer-selection_test.zig +1035 -0
- package/src/zig/tests/text-buffer-selection_viewport_test.zig +358 -0
- package/src/zig/tests/text-buffer-view_test.zig +3649 -0
- package/src/zig/tests/text-buffer_test.zig +2191 -0
- package/src/zig/tests/unicode-width-map.zon +3909 -0
- package/src/zig/tests/utf8_no_zwj_test.zig +260 -0
- package/src/zig/tests/utf8_test.zig +4057 -0
- package/src/zig/tests/utf8_wcwidth_cursor_test.zig +267 -0
- package/src/zig/tests/utf8_wcwidth_test.zig +357 -0
- package/src/zig/tests/word-wrap-editing_test.zig +498 -0
- package/src/zig/tests/wrap-cache-perf_test.zig +113 -0
- package/src/zig/text-buffer-iterators.zig +499 -0
- package/src/zig/text-buffer-segment.zig +404 -0
- package/src/zig/text-buffer-view.zig +1371 -0
- package/src/zig/text-buffer.zig +1180 -0
- package/src/zig/utf8.zig +1948 -0
- package/src/zig/utils.zig +9 -0
- package/src/zig-structs.ts +261 -0
- package/src/zig.ts +3884 -0
- package/tsconfig.build.json +24 -0
- package/tsconfig.json +27 -0
- package/3d/SpriteResourceManager.d.ts +0 -74
- package/3d/SpriteUtils.d.ts +0 -13
- package/3d/TextureUtils.d.ts +0 -24
- package/3d/ThreeRenderable.d.ts +0 -40
- package/3d/WGPURenderer.d.ts +0 -61
- package/3d/animation/ExplodingSpriteEffect.d.ts +0 -71
- package/3d/animation/PhysicsExplodingSpriteEffect.d.ts +0 -76
- package/3d/animation/SpriteAnimator.d.ts +0 -124
- package/3d/animation/SpriteParticleGenerator.d.ts +0 -62
- package/3d/canvas.d.ts +0 -44
- package/3d/index.d.ts +0 -12
- package/3d/physics/PlanckPhysicsAdapter.d.ts +0 -19
- package/3d/physics/RapierPhysicsAdapter.d.ts +0 -19
- package/3d/physics/physics-interface.d.ts +0 -27
- package/3d.d.ts +0 -2
- package/3d.js +0 -34041
- package/3d.js.map +0 -155
- package/LICENSE +0 -21
- package/NativeSpanFeed.d.ts +0 -41
- package/Renderable.d.ts +0 -334
- package/animation/Timeline.d.ts +0 -126
- package/ansi.d.ts +0 -13
- package/buffer.d.ts +0 -111
- package/console.d.ts +0 -144
- package/edit-buffer.d.ts +0 -98
- package/editor-view.d.ts +0 -73
- package/index-9vwc3fg6.js +0 -12260
- package/index-9vwc3fg6.js.map +0 -42
- package/index-dcj62y8t.js +0 -20614
- package/index-dcj62y8t.js.map +0 -67
- package/index-f7n39gpy.js +0 -411
- package/index-f7n39gpy.js.map +0 -10
- package/index.d.ts +0 -23
- package/index.js +0 -478
- package/index.js.map +0 -9
- package/lib/KeyHandler.d.ts +0 -61
- package/lib/RGBA.d.ts +0 -25
- package/lib/ascii.font.d.ts +0 -508
- package/lib/border.d.ts +0 -51
- package/lib/bunfs.d.ts +0 -7
- package/lib/clipboard.d.ts +0 -17
- package/lib/clock.d.ts +0 -15
- package/lib/data-paths.d.ts +0 -26
- package/lib/debounce.d.ts +0 -42
- package/lib/detect-links.d.ts +0 -6
- package/lib/env.d.ts +0 -42
- package/lib/extmarks-history.d.ts +0 -17
- package/lib/extmarks.d.ts +0 -89
- package/lib/hast-styled-text.d.ts +0 -17
- package/lib/index.d.ts +0 -21
- package/lib/keymapping.d.ts +0 -25
- package/lib/objects-in-viewport.d.ts +0 -24
- package/lib/output.capture.d.ts +0 -24
- package/lib/parse.keypress-kitty.d.ts +0 -2
- package/lib/parse.keypress.d.ts +0 -26
- package/lib/parse.mouse.d.ts +0 -30
- package/lib/paste.d.ts +0 -7
- package/lib/queue.d.ts +0 -15
- package/lib/renderable.validations.d.ts +0 -12
- package/lib/scroll-acceleration.d.ts +0 -43
- package/lib/selection.d.ts +0 -63
- package/lib/singleton.d.ts +0 -7
- package/lib/stdin-parser.d.ts +0 -87
- package/lib/styled-text.d.ts +0 -63
- package/lib/terminal-capability-detection.d.ts +0 -30
- package/lib/terminal-palette.d.ts +0 -50
- package/lib/tree-sitter/assets/update.d.ts +0 -11
- package/lib/tree-sitter/client.d.ts +0 -47
- package/lib/tree-sitter/default-parsers.d.ts +0 -2
- package/lib/tree-sitter/download-utils.d.ts +0 -21
- package/lib/tree-sitter/index.d.ts +0 -8
- package/lib/tree-sitter/parser.worker.d.ts +0 -1
- package/lib/tree-sitter/parsers-config.d.ts +0 -53
- package/lib/tree-sitter/resolve-ft.d.ts +0 -5
- package/lib/tree-sitter/types.d.ts +0 -82
- package/lib/tree-sitter-styled-text.d.ts +0 -14
- package/lib/validate-dir-name.d.ts +0 -1
- package/lib/yoga.options.d.ts +0 -32
- package/parser.worker.js +0 -899
- package/parser.worker.js.map +0 -12
- package/plugins/core-slot.d.ts +0 -72
- package/plugins/registry.d.ts +0 -42
- package/plugins/types.d.ts +0 -34
- package/post/effects.d.ts +0 -147
- package/post/filters.d.ts +0 -65
- package/post/matrices.d.ts +0 -20
- package/renderables/ASCIIFont.d.ts +0 -52
- package/renderables/Box.d.ts +0 -81
- package/renderables/Code.d.ts +0 -78
- package/renderables/Diff.d.ts +0 -142
- package/renderables/EditBufferRenderable.d.ts +0 -237
- package/renderables/FrameBuffer.d.ts +0 -16
- package/renderables/Input.d.ts +0 -67
- package/renderables/LineNumberRenderable.d.ts +0 -78
- package/renderables/Markdown.d.ts +0 -185
- package/renderables/ScrollBar.d.ts +0 -77
- package/renderables/ScrollBox.d.ts +0 -124
- package/renderables/Select.d.ts +0 -115
- package/renderables/Slider.d.ts +0 -47
- package/renderables/TabSelect.d.ts +0 -96
- package/renderables/Text.d.ts +0 -36
- package/renderables/TextBufferRenderable.d.ts +0 -105
- package/renderables/TextNode.d.ts +0 -91
- package/renderables/TextTable.d.ts +0 -140
- package/renderables/Textarea.d.ts +0 -63
- package/renderables/TimeToFirstDraw.d.ts +0 -24
- package/renderables/__tests__/renderable-test-utils.d.ts +0 -12
- package/renderables/composition/VRenderable.d.ts +0 -16
- package/renderables/composition/constructs.d.ts +0 -35
- package/renderables/composition/vnode.d.ts +0 -46
- package/renderables/index.d.ts +0 -23
- package/renderables/markdown-parser.d.ts +0 -10
- package/renderer.d.ts +0 -419
- package/runtime-plugin-support.d.ts +0 -3
- package/runtime-plugin-support.js +0 -29
- package/runtime-plugin-support.js.map +0 -10
- package/runtime-plugin.d.ts +0 -16
- package/runtime-plugin.js +0 -16
- package/runtime-plugin.js.map +0 -9
- package/syntax-style.d.ts +0 -54
- package/testing/manual-clock.d.ts +0 -17
- package/testing/mock-keys.d.ts +0 -81
- package/testing/mock-mouse.d.ts +0 -38
- package/testing/mock-tree-sitter-client.d.ts +0 -23
- package/testing/spy.d.ts +0 -7
- package/testing/test-recorder.d.ts +0 -61
- package/testing/test-renderer.d.ts +0 -23
- package/testing.d.ts +0 -6
- package/testing.js +0 -697
- package/testing.js.map +0 -15
- package/text-buffer-view.d.ts +0 -42
- package/text-buffer.d.ts +0 -67
- package/types.d.ts +0 -139
- package/utils.d.ts +0 -14
- package/zig-structs.d.ts +0 -155
- package/zig.d.ts +0 -353
- /package/{assets → src/lib/tree-sitter/assets}/javascript/highlights.scm +0 -0
- /package/{assets → src/lib/tree-sitter/assets}/javascript/tree-sitter-javascript.wasm +0 -0
- /package/{assets → src/lib/tree-sitter/assets}/markdown/highlights.scm +0 -0
- /package/{assets → src/lib/tree-sitter/assets}/markdown/injections.scm +0 -0
- /package/{assets → src/lib/tree-sitter/assets}/markdown/tree-sitter-markdown.wasm +0 -0
- /package/{assets → src/lib/tree-sitter/assets}/markdown_inline/highlights.scm +0 -0
- /package/{assets → src/lib/tree-sitter/assets}/markdown_inline/tree-sitter-markdown_inline.wasm +0 -0
- /package/{assets → src/lib/tree-sitter/assets}/typescript/highlights.scm +0 -0
- /package/{assets → src/lib/tree-sitter/assets}/typescript/tree-sitter-typescript.wasm +0 -0
- /package/{assets → src/lib/tree-sitter/assets}/zig/highlights.scm +0 -0
- /package/{assets → src/lib/tree-sitter/assets}/zig/tree-sitter-zig.wasm +0 -0
package/src/zig/ansi.zig
ADDED
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
const std = @import("std");
|
|
2
|
+
const Allocator = std.mem.Allocator;
|
|
3
|
+
|
|
4
|
+
pub const RGBA = [4]f32;
|
|
5
|
+
|
|
6
|
+
pub const AnsiError = error{
|
|
7
|
+
InvalidFormat,
|
|
8
|
+
WriteFailed,
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
pub const ANSI = struct {
|
|
12
|
+
pub const reset = "\x1b[0m";
|
|
13
|
+
pub const clear = "\x1b[2J";
|
|
14
|
+
pub const home = "\x1b[H";
|
|
15
|
+
pub const clearAndHome = "\x1b[H\x1b[2J";
|
|
16
|
+
pub const hideCursor = "\x1b[?25l";
|
|
17
|
+
pub const showCursor = "\x1b[?25h";
|
|
18
|
+
pub const defaultCursorStyle = "\x1b[0 q";
|
|
19
|
+
pub const queryPixelSize = "\x1b[14t";
|
|
20
|
+
pub const nextLine = "\x1b[E";
|
|
21
|
+
|
|
22
|
+
// Direct writing to any writer - the most efficient option
|
|
23
|
+
pub fn moveToOutput(writer: anytype, x: u32, y: u32) AnsiError!void {
|
|
24
|
+
writer.print("\x1b[{d};{d}H", .{ y, x }) catch return AnsiError.WriteFailed;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
pub fn fgColorOutput(writer: anytype, r: u8, g: u8, b: u8) AnsiError!void {
|
|
28
|
+
writer.print("\x1b[38;2;{d};{d};{d}m", .{ r, g, b }) catch return AnsiError.WriteFailed;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
pub fn bgColorOutput(writer: anytype, r: u8, g: u8, b: u8) AnsiError!void {
|
|
32
|
+
writer.print("\x1b[48;2;{d};{d};{d}m", .{ r, g, b }) catch return AnsiError.WriteFailed;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Text attribute constants
|
|
36
|
+
pub const bold = "\x1b[1m";
|
|
37
|
+
pub const dim = "\x1b[2m";
|
|
38
|
+
pub const italic = "\x1b[3m";
|
|
39
|
+
pub const underline = "\x1b[4m";
|
|
40
|
+
pub const blink = "\x1b[5m";
|
|
41
|
+
pub const inverse = "\x1b[7m";
|
|
42
|
+
pub const hidden = "\x1b[8m";
|
|
43
|
+
pub const strikethrough = "\x1b[9m";
|
|
44
|
+
|
|
45
|
+
// Cursor styles
|
|
46
|
+
pub const cursorBlock = "\x1b[2 q";
|
|
47
|
+
pub const cursorBlockBlink = "\x1b[1 q";
|
|
48
|
+
pub const cursorLine = "\x1b[6 q";
|
|
49
|
+
pub const cursorLineBlink = "\x1b[5 q";
|
|
50
|
+
pub const cursorUnderline = "\x1b[4 q";
|
|
51
|
+
pub const cursorUnderlineBlink = "\x1b[3 q";
|
|
52
|
+
|
|
53
|
+
pub fn cursorColorOutputWriter(writer: anytype, r: u8, g: u8, b: u8) AnsiError!void {
|
|
54
|
+
writer.print("\x1b]12;#{x:0>2}{x:0>2}{x:0>2}\x07", .{ r, g, b }) catch return AnsiError.WriteFailed;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
pub fn explicitWidthOutput(writer: anytype, width: u32, text: []const u8) AnsiError!void {
|
|
58
|
+
writer.print("\x1b]66;w={d};{s}\x1b\\", .{ width, text }) catch return AnsiError.WriteFailed;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
pub const resetCursorColor = "\x1b]112\x07";
|
|
62
|
+
pub const resetCursorColorFallback = "\x1b]12;default\x07";
|
|
63
|
+
pub const resetMousePointer = "\x1b]22;\x07";
|
|
64
|
+
pub const saveCursorState = "\x1b[s";
|
|
65
|
+
pub const restoreCursorState = "\x1b[u";
|
|
66
|
+
|
|
67
|
+
pub fn setMousePointerOutput(writer: anytype, shape: []const u8) AnsiError!void {
|
|
68
|
+
writer.print("\x1b]22;{s}\x07", .{ shape }) catch return AnsiError.WriteFailed;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
pub const switchToAlternateScreen = "\x1b[?1049h";
|
|
72
|
+
pub const switchToMainScreen = "\x1b[?1049l";
|
|
73
|
+
|
|
74
|
+
pub const enableMouseTracking = "\x1b[?1000h";
|
|
75
|
+
pub const disableMouseTracking = "\x1b[?1000l";
|
|
76
|
+
pub const enableButtonEventTracking = "\x1b[?1002h";
|
|
77
|
+
pub const disableButtonEventTracking = "\x1b[?1002l";
|
|
78
|
+
pub const enableAnyEventTracking = "\x1b[?1003h";
|
|
79
|
+
pub const disableAnyEventTracking = "\x1b[?1003l";
|
|
80
|
+
pub const enableSGRMouseMode = "\x1b[?1006h";
|
|
81
|
+
pub const disableSGRMouseMode = "\x1b[?1006l";
|
|
82
|
+
pub const mouseSetPixels = "\x1b[?1002;1003;1004;1016h";
|
|
83
|
+
|
|
84
|
+
// Terminal capability queries
|
|
85
|
+
pub const primaryDeviceAttrs = "\x1b[c";
|
|
86
|
+
pub const tertiaryDeviceAttrs = "\x1b[=c";
|
|
87
|
+
pub const deviceStatusReport = "\x1b[5n";
|
|
88
|
+
pub const xtversion = "\x1b[>0q";
|
|
89
|
+
pub const decrqmFocus = "\x1b[?1004$p";
|
|
90
|
+
pub const decrqmSgrPixels = "\x1b[?1016$p";
|
|
91
|
+
pub const decrqmBracketedPaste = "\x1b[?2004$p";
|
|
92
|
+
pub const decrqmSync = "\x1b[?2026$p";
|
|
93
|
+
pub const decrqmUnicode = "\x1b[?2027$p";
|
|
94
|
+
pub const decrqmColorScheme = "\x1b[?2031$p";
|
|
95
|
+
pub const csiUQuery = "\x1b[?u";
|
|
96
|
+
pub const kittyGraphicsQuery = "\x1b_Gi=31337,s=1,v=1,a=q,t=d,f=24;AAAA\x1b\\\x1b[c";
|
|
97
|
+
|
|
98
|
+
pub const capabilityQueriesBase = decrqmSgrPixels ++
|
|
99
|
+
decrqmUnicode ++
|
|
100
|
+
decrqmColorScheme ++
|
|
101
|
+
decrqmFocus ++
|
|
102
|
+
decrqmBracketedPaste ++
|
|
103
|
+
decrqmSync;
|
|
104
|
+
|
|
105
|
+
pub const capabilityQueries = capabilityQueriesBase ++ csiUQuery;
|
|
106
|
+
|
|
107
|
+
// tmux DCS passthrough wrapper (ESC chars doubled)
|
|
108
|
+
pub const tmuxDcsStart = "\x1bPtmux;";
|
|
109
|
+
pub const tmuxDcsEnd = "\x1b\\";
|
|
110
|
+
|
|
111
|
+
// GNU Screen DCS passthrough wrapper (no tmux prefix)
|
|
112
|
+
pub const screenDcsStart = "\x1bP";
|
|
113
|
+
pub const screenDcsEnd = "\x1b\\";
|
|
114
|
+
|
|
115
|
+
pub fn wrapForTmux(comptime seq: []const u8) []const u8 {
|
|
116
|
+
comptime {
|
|
117
|
+
var result: []const u8 = tmuxDcsStart;
|
|
118
|
+
for (seq) |c| {
|
|
119
|
+
if (c == '\x1b') {
|
|
120
|
+
result = result ++ "\x1b\x1b";
|
|
121
|
+
} else {
|
|
122
|
+
result = result ++ &[_]u8{c};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return result ++ tmuxDcsEnd;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
pub const kittyGraphicsQueryTmux = wrapForTmux(kittyGraphicsQuery);
|
|
130
|
+
pub const capabilityQueriesTmux = wrapForTmux(capabilityQueriesBase) ++ csiUQuery;
|
|
131
|
+
pub const sixelGeometryQuery = "\x1b[?2;1;0S";
|
|
132
|
+
pub const cursorPositionRequest = "\x1b[6n";
|
|
133
|
+
pub const explicitWidthQuery = "\x1b]66;w=1; \x1b\\";
|
|
134
|
+
pub const scaledTextQuery = "\x1b]66;s=2; \x1b\\";
|
|
135
|
+
|
|
136
|
+
// Focus tracking
|
|
137
|
+
pub const focusSet = "\x1b[?1004h";
|
|
138
|
+
pub const focusReset = "\x1b[?1004l";
|
|
139
|
+
|
|
140
|
+
// Sync
|
|
141
|
+
pub const syncSet = "\x1b[?2026h";
|
|
142
|
+
pub const syncReset = "\x1b[?2026l";
|
|
143
|
+
|
|
144
|
+
// Unicode
|
|
145
|
+
pub const unicodeSet = "\x1b[?2027h";
|
|
146
|
+
pub const unicodeReset = "\x1b[?2027l";
|
|
147
|
+
|
|
148
|
+
// Bracketed paste
|
|
149
|
+
pub const bracketedPasteSet = "\x1b[?2004h";
|
|
150
|
+
pub const bracketedPasteReset = "\x1b[?2004l";
|
|
151
|
+
|
|
152
|
+
// Color scheme
|
|
153
|
+
pub const colorSchemeRequest = "\x1b[?996n";
|
|
154
|
+
pub const colorSchemeSet = "\x1b[?2031h";
|
|
155
|
+
pub const colorSchemeReset = "\x1b[?2031l";
|
|
156
|
+
|
|
157
|
+
// Key encoding
|
|
158
|
+
pub const csiUPush = "\x1b[>{d}u";
|
|
159
|
+
pub const csiUPop = "\x1b[<u";
|
|
160
|
+
|
|
161
|
+
// modifyOtherKeys mode
|
|
162
|
+
pub const modifyOtherKeysSet = "\x1b[>4;1m";
|
|
163
|
+
pub const modifyOtherKeysReset = "\x1b[>4;0m";
|
|
164
|
+
|
|
165
|
+
// Movement and erase
|
|
166
|
+
pub const reverseIndex = "\x1bM";
|
|
167
|
+
pub const eraseBelowCursor = "\x1b[J";
|
|
168
|
+
|
|
169
|
+
// OSC 0 - Set window title
|
|
170
|
+
pub const setTerminalTitle = "\x1b]0;{s}\x07";
|
|
171
|
+
|
|
172
|
+
pub fn setTerminalTitleOutput(writer: anytype, title: []const u8) AnsiError!void {
|
|
173
|
+
writer.print(setTerminalTitle, .{title}) catch return AnsiError.WriteFailed;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
pub fn makeRoomForRendererOutput(writer: anytype, height: u32) AnsiError!void {
|
|
177
|
+
if (height > 1) {
|
|
178
|
+
var i: u32 = 0;
|
|
179
|
+
while (i < height - 1) : (i += 1) {
|
|
180
|
+
writer.writeByte('\n') catch return AnsiError.WriteFailed;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
pub const TextAttributes = struct {
|
|
187
|
+
pub const NONE: u8 = 0;
|
|
188
|
+
pub const BOLD: u8 = 1 << 0;
|
|
189
|
+
pub const DIM: u8 = 1 << 1;
|
|
190
|
+
pub const ITALIC: u8 = 1 << 2;
|
|
191
|
+
pub const UNDERLINE: u8 = 1 << 3;
|
|
192
|
+
pub const BLINK: u8 = 1 << 4;
|
|
193
|
+
pub const INVERSE: u8 = 1 << 5;
|
|
194
|
+
pub const HIDDEN: u8 = 1 << 6;
|
|
195
|
+
pub const STRIKETHROUGH: u8 = 1 << 7;
|
|
196
|
+
|
|
197
|
+
// Constants for attribute bit packing
|
|
198
|
+
pub const ATTRIBUTE_BASE_BITS: u5 = 8;
|
|
199
|
+
pub const ATTRIBUTE_BASE_MASK: u32 = 0xFF;
|
|
200
|
+
|
|
201
|
+
// Constants for link_id packing (bits 8-31)
|
|
202
|
+
pub const LINK_ID_BITS: u8 = 24;
|
|
203
|
+
pub const LINK_ID_SHIFT: u5 = ATTRIBUTE_BASE_BITS;
|
|
204
|
+
pub const LINK_ID_PAYLOAD_MASK: u32 = ((@as(u32, 1) << LINK_ID_BITS) - 1);
|
|
205
|
+
pub const LINK_ID_MASK: u32 = LINK_ID_PAYLOAD_MASK << LINK_ID_SHIFT;
|
|
206
|
+
|
|
207
|
+
/// Extract the base 8 bits of attributes from a u32 attribute value
|
|
208
|
+
pub fn getBaseAttributes(attr: u32) u8 {
|
|
209
|
+
return @intCast(attr & ATTRIBUTE_BASE_MASK);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/// Extract the link_id from bits 8-31 of attributes
|
|
213
|
+
pub fn getLinkId(attr: u32) u32 {
|
|
214
|
+
return (attr & LINK_ID_MASK) >> LINK_ID_SHIFT;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/// Set the link_id in an attribute value, preserving base attributes
|
|
218
|
+
pub fn setLinkId(attr: u32, link_id: u32) u32 {
|
|
219
|
+
const base = attr & ATTRIBUTE_BASE_MASK;
|
|
220
|
+
const link_bits = (link_id & LINK_ID_PAYLOAD_MASK) << LINK_ID_SHIFT;
|
|
221
|
+
return base | link_bits;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/// Check if an attribute value has a link
|
|
225
|
+
pub fn hasLink(attr: u32) bool {
|
|
226
|
+
return getLinkId(attr) != 0;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
pub fn applyAttributesOutputWriter(writer: anytype, attributes: u32) AnsiError!void {
|
|
230
|
+
const base_attr = getBaseAttributes(attributes);
|
|
231
|
+
if (base_attr & BOLD != 0) writer.writeAll(ANSI.bold) catch return AnsiError.WriteFailed;
|
|
232
|
+
if (base_attr & DIM != 0) writer.writeAll(ANSI.dim) catch return AnsiError.WriteFailed;
|
|
233
|
+
if (base_attr & ITALIC != 0) writer.writeAll(ANSI.italic) catch return AnsiError.WriteFailed;
|
|
234
|
+
if (base_attr & UNDERLINE != 0) writer.writeAll(ANSI.underline) catch return AnsiError.WriteFailed;
|
|
235
|
+
if (base_attr & BLINK != 0) writer.writeAll(ANSI.blink) catch return AnsiError.WriteFailed;
|
|
236
|
+
if (base_attr & INVERSE != 0) writer.writeAll(ANSI.inverse) catch return AnsiError.WriteFailed;
|
|
237
|
+
if (base_attr & HIDDEN != 0) writer.writeAll(ANSI.hidden) catch return AnsiError.WriteFailed;
|
|
238
|
+
if (base_attr & STRIKETHROUGH != 0) writer.writeAll(ANSI.strikethrough) catch return AnsiError.WriteFailed;
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
|
|
242
|
+
const HSV_SECTOR_COUNT = 6;
|
|
243
|
+
const HUE_SECTOR_DEGREES = 60.0;
|
|
244
|
+
|
|
245
|
+
pub fn hsvToRgb(h: f32, s: f32, v: f32) RGBA {
|
|
246
|
+
const clamped_h = @mod(h, 360.0);
|
|
247
|
+
const clamped_s = std.math.clamp(s, 0.0, 1.0);
|
|
248
|
+
const clamped_v = std.math.clamp(v, 0.0, 1.0);
|
|
249
|
+
|
|
250
|
+
const sector = @as(u8, @intFromFloat(@floor(clamped_h / HUE_SECTOR_DEGREES))) % HSV_SECTOR_COUNT;
|
|
251
|
+
const fractional = clamped_h / HUE_SECTOR_DEGREES - @floor(clamped_h / HUE_SECTOR_DEGREES);
|
|
252
|
+
|
|
253
|
+
const p = clamped_v * (1.0 - clamped_s);
|
|
254
|
+
const q = clamped_v * (1.0 - fractional * clamped_s);
|
|
255
|
+
const t = clamped_v * (1.0 - (1.0 - fractional) * clamped_s);
|
|
256
|
+
|
|
257
|
+
const rgb = switch (sector) {
|
|
258
|
+
0 => .{ clamped_v, t, p },
|
|
259
|
+
1 => .{ q, clamped_v, p },
|
|
260
|
+
2 => .{ p, clamped_v, t },
|
|
261
|
+
3 => .{ p, q, clamped_v },
|
|
262
|
+
4 => .{ t, p, clamped_v },
|
|
263
|
+
5 => .{ clamped_v, p, q },
|
|
264
|
+
else => unreachable,
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
return .{ rgb[0], rgb[1], rgb[2], 1.0 };
|
|
268
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# OpenTUI Benchmarks
|
|
2
|
+
|
|
3
|
+
This directory contains benchmarks for the OpenTUI core library.
|
|
4
|
+
|
|
5
|
+
## Running Benchmarks
|
|
6
|
+
|
|
7
|
+
From the `packages/core` directory:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Using the npm script (recommended)
|
|
11
|
+
bun bench:native
|
|
12
|
+
|
|
13
|
+
# Include memory statistics
|
|
14
|
+
bun bench:native --mem
|
|
15
|
+
|
|
16
|
+
# Or from packages/core/src/zig directory:
|
|
17
|
+
zig build bench -Doptimize=ReleaseFast
|
|
18
|
+
zig build bench -Doptimize=ReleaseFast -- --mem
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Adding New Benchmarks
|
|
22
|
+
|
|
23
|
+
To add a new benchmark:
|
|
24
|
+
|
|
25
|
+
1. Create a new `*_bench.zig` file in the `bench/` directory
|
|
26
|
+
2. Import shared types from `bench-utils.zig`:
|
|
27
|
+
```zig
|
|
28
|
+
const bench_utils = @import("../bench-utils.zig");
|
|
29
|
+
const BenchResult = bench_utils.BenchResult;
|
|
30
|
+
const MemStats = bench_utils.MemStats;
|
|
31
|
+
```
|
|
32
|
+
3. Implement a `pub fn run(allocator: std.mem.Allocator, show_mem: bool) ![]BenchResult` function:
|
|
33
|
+
- Set up any benchmark-specific dependencies (grapheme pool, Unicode data, etc.)
|
|
34
|
+
- Run your benchmarks and collect results
|
|
35
|
+
- Return a slice of `BenchResult` (caller will free it)
|
|
36
|
+
- The `show_mem` flag indicates whether to include memory statistics
|
|
37
|
+
4. Import it in `bench.zig`:
|
|
38
|
+
```zig
|
|
39
|
+
const my_new_bench = @import("bench/my_new_bench.zig");
|
|
40
|
+
```
|
|
41
|
+
5. Call it and print results in `main()`:
|
|
42
|
+
```zig
|
|
43
|
+
const my_results = try my_new_bench.run(allocator, show_mem);
|
|
44
|
+
defer allocator.free(my_results);
|
|
45
|
+
try bench_utils.printResults(stdout, my_results);
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Each benchmark manages its own dependencies, so you only set up what you need.
|
|
49
|
+
|
|
50
|
+
See `bench/text-buffer-view_bench.zig` for a complete example.
|