@xincli/opentui-core 0.4.6

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 (476) hide show
  1. package/README.md +63 -0
  2. package/dev/keypress-debug-renderer.ts +148 -0
  3. package/dev/keypress-debug.ts +43 -0
  4. package/dev/print-env-vars.ts +32 -0
  5. package/dev/test-tmux-graphics-334.sh +68 -0
  6. package/dev/test-tmux-theme-queries.sh +151 -0
  7. package/dev/thai-debug-test.ts +68 -0
  8. package/dev/theme-mode.ts +290 -0
  9. package/docs/development.md +144 -0
  10. package/package.json +102 -0
  11. package/prebuilt/aarch64-android/libopentui.so +0 -0
  12. package/scripts/build-android.ts +226 -0
  13. package/scripts/build-native-termux.sh +525 -0
  14. package/scripts/build.ts +530 -0
  15. package/scripts/dist-test.ts +312 -0
  16. package/scripts/package-prebuilt.ts +110 -0
  17. package/scripts/publish.ts +60 -0
  18. package/scripts/test-node-hook.mjs +16 -0
  19. package/scripts/test-node.ts +241 -0
  20. package/scripts/vendor-deps.sh +73 -0
  21. package/src/NativeSpanFeed.ts +375 -0
  22. package/src/Renderable.ts +1878 -0
  23. package/src/__snapshots__/buffer.test.ts.snap +28 -0
  24. package/src/animation/Timeline.test.ts +2709 -0
  25. package/src/animation/Timeline.ts +598 -0
  26. package/src/ansi.ts +22 -0
  27. package/src/audio.ts +479 -0
  28. package/src/benchmark/attenuation-benchmark.ts +81 -0
  29. package/src/benchmark/audio-playback-benchmark.ts +344 -0
  30. package/src/benchmark/box-draw-benchmark.ts +1042 -0
  31. package/src/benchmark/colormatrix-benchmark.ts +123 -0
  32. package/src/benchmark/gain-benchmark.ts +80 -0
  33. package/src/benchmark/latest-all-bench-run.json +707 -0
  34. package/src/benchmark/latest-async-bench-run.json +336 -0
  35. package/src/benchmark/latest-default-bench-run.json +657 -0
  36. package/src/benchmark/latest-large-bench-run.json +707 -0
  37. package/src/benchmark/latest-quick-bench-run.json +207 -0
  38. package/src/benchmark/layout-benchmark.ts +2547 -0
  39. package/src/benchmark/markdown-benchmark.ts +1796 -0
  40. package/src/benchmark/native-span-feed-async-benchmark.ts +355 -0
  41. package/src/benchmark/native-span-feed-benchmark.md +56 -0
  42. package/src/benchmark/native-span-feed-benchmark.ts +596 -0
  43. package/src/benchmark/native-span-feed-compare.ts +280 -0
  44. package/src/benchmark/render-traversal-benchmark.ts +928 -0
  45. package/src/benchmark/text-buffer-render-benchmark.ts +874 -0
  46. package/src/benchmark/text-table-benchmark.ts +948 -0
  47. package/src/buffer.test.ts +292 -0
  48. package/src/buffer.ts +564 -0
  49. package/src/console.test.ts +629 -0
  50. package/src/console.ts +1253 -0
  51. package/src/edit-buffer.test.ts +1852 -0
  52. package/src/edit-buffer.ts +417 -0
  53. package/src/editor-view.test.ts +1056 -0
  54. package/src/editor-view.ts +290 -0
  55. package/src/index.ts +25 -0
  56. package/src/lib/KeyHandler.integration.test.ts +292 -0
  57. package/src/lib/KeyHandler.stopPropagation.test.ts +289 -0
  58. package/src/lib/KeyHandler.test.ts +662 -0
  59. package/src/lib/KeyHandler.ts +222 -0
  60. package/src/lib/RGBA.test.ts +60 -0
  61. package/src/lib/RGBA.ts +343 -0
  62. package/src/lib/ascii.font.ts +330 -0
  63. package/src/lib/border.test.ts +83 -0
  64. package/src/lib/border.ts +170 -0
  65. package/src/lib/bunfs.test.ts +27 -0
  66. package/src/lib/bunfs.ts +18 -0
  67. package/src/lib/clipboard.test.ts +63 -0
  68. package/src/lib/clipboard.ts +41 -0
  69. package/src/lib/clock.ts +35 -0
  70. package/src/lib/data-paths.test.ts +133 -0
  71. package/src/lib/data-paths.ts +109 -0
  72. package/src/lib/debounce.ts +106 -0
  73. package/src/lib/detect-links.test.ts +98 -0
  74. package/src/lib/detect-links.ts +56 -0
  75. package/src/lib/env.test.ts +228 -0
  76. package/src/lib/env.ts +209 -0
  77. package/src/lib/extmarks-history.ts +51 -0
  78. package/src/lib/extmarks-multiwidth.test.ts +324 -0
  79. package/src/lib/extmarks.test.ts +3547 -0
  80. package/src/lib/extmarks.ts +861 -0
  81. package/src/lib/fonts/block.json +405 -0
  82. package/src/lib/fonts/grid.json +265 -0
  83. package/src/lib/fonts/huge.json +741 -0
  84. package/src/lib/fonts/pallet.json +314 -0
  85. package/src/lib/fonts/shade.json +591 -0
  86. package/src/lib/fonts/slick.json +321 -0
  87. package/src/lib/fonts/tiny.json +69 -0
  88. package/src/lib/hast-styled-text.ts +59 -0
  89. package/src/lib/index.ts +22 -0
  90. package/src/lib/keybinding.internal.test.ts +342 -0
  91. package/src/lib/keybinding.internal.ts +182 -0
  92. package/src/lib/objects-in-viewport.test.ts +789 -0
  93. package/src/lib/objects-in-viewport.ts +153 -0
  94. package/src/lib/output.capture.ts +58 -0
  95. package/src/lib/parse.keypress-kitty.protocol.test.ts +347 -0
  96. package/src/lib/parse.keypress-kitty.test.ts +712 -0
  97. package/src/lib/parse.keypress-kitty.ts +470 -0
  98. package/src/lib/parse.keypress.test.ts +2020 -0
  99. package/src/lib/parse.keypress.ts +480 -0
  100. package/src/lib/parse.mouse.test.ts +552 -0
  101. package/src/lib/parse.mouse.ts +232 -0
  102. package/src/lib/paste.ts +18 -0
  103. package/src/lib/queue.ts +65 -0
  104. package/src/lib/render-geometry.ts +36 -0
  105. package/src/lib/renderable.validations.test.ts +87 -0
  106. package/src/lib/renderable.validations.ts +83 -0
  107. package/src/lib/scroll-acceleration.ts +98 -0
  108. package/src/lib/selection.ts +261 -0
  109. package/src/lib/singleton.ts +34 -0
  110. package/src/lib/stdin-parser.test.ts +2439 -0
  111. package/src/lib/stdin-parser.ts +2007 -0
  112. package/src/lib/styled-text.ts +178 -0
  113. package/src/lib/terminal-capability-detection.test.ts +226 -0
  114. package/src/lib/terminal-capability-detection.ts +98 -0
  115. package/src/lib/terminal-palette.test.ts +954 -0
  116. package/src/lib/terminal-palette.ts +441 -0
  117. package/src/lib/tree-sitter/assets/README.md +119 -0
  118. package/src/lib/tree-sitter/assets/javascript/highlights.scm +205 -0
  119. package/src/lib/tree-sitter/assets/javascript/tree-sitter-javascript.wasm +0 -0
  120. package/src/lib/tree-sitter/assets/markdown/highlights.scm +150 -0
  121. package/src/lib/tree-sitter/assets/markdown/injections.scm +27 -0
  122. package/src/lib/tree-sitter/assets/markdown/tree-sitter-markdown.wasm +0 -0
  123. package/src/lib/tree-sitter/assets/markdown_inline/highlights.scm +115 -0
  124. package/src/lib/tree-sitter/assets/markdown_inline/tree-sitter-markdown_inline.wasm +0 -0
  125. package/src/lib/tree-sitter/assets/typescript/highlights.scm +604 -0
  126. package/src/lib/tree-sitter/assets/typescript/tree-sitter-typescript.wasm +0 -0
  127. package/src/lib/tree-sitter/assets/update.ts +360 -0
  128. package/src/lib/tree-sitter/assets/zig/highlights.scm +284 -0
  129. package/src/lib/tree-sitter/assets/zig/tree-sitter-zig.wasm +0 -0
  130. package/src/lib/tree-sitter/assets.d.ts +9 -0
  131. package/src/lib/tree-sitter/cache.test.ts +291 -0
  132. package/src/lib/tree-sitter/client.test.ts +1434 -0
  133. package/src/lib/tree-sitter/client.ts +847 -0
  134. package/src/lib/tree-sitter/default-parsers.ts +133 -0
  135. package/src/lib/tree-sitter/download-utils.ts +148 -0
  136. package/src/lib/tree-sitter/index.ts +75 -0
  137. package/src/lib/tree-sitter/parser.worker.ts +1098 -0
  138. package/src/lib/tree-sitter/parsers-config.ts +81 -0
  139. package/src/lib/tree-sitter/resolve-ft.test.ts +55 -0
  140. package/src/lib/tree-sitter/resolve-ft.ts +189 -0
  141. package/src/lib/tree-sitter/types.ts +132 -0
  142. package/src/lib/tree-sitter/update-assets.ts +10 -0
  143. package/src/lib/tree-sitter-styled-text.test.ts +1253 -0
  144. package/src/lib/tree-sitter-styled-text.ts +314 -0
  145. package/src/lib/validate-dir-name.ts +55 -0
  146. package/src/lib/yoga.options.test.ts +628 -0
  147. package/src/lib/yoga.options.ts +346 -0
  148. package/src/native-event-worker-repro.test.ts +48 -0
  149. package/src/native-event-worker-repro.worker.ts +9 -0
  150. package/src/native-handle.test.ts +221 -0
  151. package/src/platform/ffi.test.ts +516 -0
  152. package/src/platform/ffi.ts +653 -0
  153. package/src/platform/runtime.test.ts +52 -0
  154. package/src/platform/runtime.ts +121 -0
  155. package/src/platform/test.ts +45 -0
  156. package/src/platform/worker-handler-cleanup.fixture.ts +12 -0
  157. package/src/platform/worker-onmessage-startup.fixture.ts +10 -0
  158. package/src/platform/worker-startup.fixture.ts +9 -0
  159. package/src/platform/worker.node-test.ts +153 -0
  160. package/src/platform/worker.ts +425 -0
  161. package/src/plugins/core-slot.ts +579 -0
  162. package/src/plugins/registry.ts +402 -0
  163. package/src/plugins/types.ts +46 -0
  164. package/src/post/effects.ts +948 -0
  165. package/src/post/filters.ts +512 -0
  166. package/src/post/matrices.ts +288 -0
  167. package/src/renderables/ASCIIFont.ts +219 -0
  168. package/src/renderables/Box.test.ts +474 -0
  169. package/src/renderables/Box.ts +353 -0
  170. package/src/renderables/Code.test.ts +2388 -0
  171. package/src/renderables/Code.ts +555 -0
  172. package/src/renderables/Diff.regression.test.ts +381 -0
  173. package/src/renderables/Diff.test.ts +3212 -0
  174. package/src/renderables/Diff.ts +1278 -0
  175. package/src/renderables/EditBufferRenderable.test.ts +288 -0
  176. package/src/renderables/EditBufferRenderable.ts +1152 -0
  177. package/src/renderables/FrameBuffer.ts +47 -0
  178. package/src/renderables/Input.test.ts +1310 -0
  179. package/src/renderables/Input.ts +273 -0
  180. package/src/renderables/LineNumberRenderable.ts +725 -0
  181. package/src/renderables/Markdown.ts +2144 -0
  182. package/src/renderables/ScrollBar.ts +423 -0
  183. package/src/renderables/ScrollBox.ts +903 -0
  184. package/src/renderables/Select.test.ts +1134 -0
  185. package/src/renderables/Select.ts +535 -0
  186. package/src/renderables/Slider.test.ts +456 -0
  187. package/src/renderables/Slider.ts +342 -0
  188. package/src/renderables/TabSelect.test.ts +238 -0
  189. package/src/renderables/TabSelect.ts +447 -0
  190. package/src/renderables/Text.selection-buffer.test.ts +118 -0
  191. package/src/renderables/Text.test.ts +2662 -0
  192. package/src/renderables/Text.ts +147 -0
  193. package/src/renderables/TextBufferRenderable.ts +504 -0
  194. package/src/renderables/TextNode.test.ts +1137 -0
  195. package/src/renderables/TextNode.ts +379 -0
  196. package/src/renderables/TextTable.test.ts +1411 -0
  197. package/src/renderables/TextTable.ts +1434 -0
  198. package/src/renderables/Textarea.ts +425 -0
  199. package/src/renderables/TimeToFirstDraw.ts +89 -0
  200. package/src/renderables/__snapshots__/Code.test.ts.snap +13 -0
  201. package/src/renderables/__snapshots__/Diff.test.ts.snap +785 -0
  202. package/src/renderables/__snapshots__/Text.test.ts.snap +421 -0
  203. package/src/renderables/__snapshots__/TextTable.test.ts.snap +215 -0
  204. package/src/renderables/__tests__/Code.test.ts +55 -0
  205. package/src/renderables/__tests__/LineNumberRenderable.scrollbox-simple.test.ts +144 -0
  206. package/src/renderables/__tests__/LineNumberRenderable.scrollbox.test.ts +827 -0
  207. package/src/renderables/__tests__/LineNumberRenderable.test.ts +1906 -0
  208. package/src/renderables/__tests__/LineNumberRenderable.wrapping.test.ts +85 -0
  209. package/src/renderables/__tests__/Markdown.code-colors.test.ts +288 -0
  210. package/src/renderables/__tests__/Markdown.test.ts +4175 -0
  211. package/src/renderables/__tests__/MultiRenderable.selection.test.ts +87 -0
  212. package/src/renderables/__tests__/Textarea.buffer.test.ts +683 -0
  213. package/src/renderables/__tests__/Textarea.destroyed-events.test.ts +675 -0
  214. package/src/renderables/__tests__/Textarea.editing.test.ts +2120 -0
  215. package/src/renderables/__tests__/Textarea.error-handling.test.ts +35 -0
  216. package/src/renderables/__tests__/Textarea.events.test.ts +738 -0
  217. package/src/renderables/__tests__/Textarea.highlights.test.ts +590 -0
  218. package/src/renderables/__tests__/Textarea.keybinding.test.ts +3275 -0
  219. package/src/renderables/__tests__/Textarea.paste.test.ts +357 -0
  220. package/src/renderables/__tests__/Textarea.rendering.test.ts +1927 -0
  221. package/src/renderables/__tests__/Textarea.scroll.test.ts +733 -0
  222. package/src/renderables/__tests__/Textarea.selection.test.ts +1589 -0
  223. package/src/renderables/__tests__/Textarea.stress.test.ts +670 -0
  224. package/src/renderables/__tests__/Textarea.undo-redo.test.ts +383 -0
  225. package/src/renderables/__tests__/Textarea.visual-lines.test.ts +310 -0
  226. package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.code.test.ts.snap +221 -0
  227. package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.scrollbox-simple.test.ts.snap +89 -0
  228. package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.scrollbox.test.ts.snap +457 -0
  229. package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.test.ts.snap +158 -0
  230. package/src/renderables/__tests__/__snapshots__/Textarea.rendering.test.ts.snap +387 -0
  231. package/src/renderables/__tests__/markdown-parser.test.ts +241 -0
  232. package/src/renderables/__tests__/renderable-test-utils.ts +60 -0
  233. package/src/renderables/composition/README.md +8 -0
  234. package/src/renderables/composition/VRenderable.ts +32 -0
  235. package/src/renderables/composition/constructs.ts +127 -0
  236. package/src/renderables/composition/vnode.ts +277 -0
  237. package/src/renderables/index.ts +23 -0
  238. package/src/renderables/markdown-parser.ts +79 -0
  239. package/src/renderer-theme-mode.ts +199 -0
  240. package/src/renderer.ts +4975 -0
  241. package/src/runtime-plugin-support-configure.ts +63 -0
  242. package/src/runtime-plugin-support.ts +13 -0
  243. package/src/runtime-plugin.ts +626 -0
  244. package/src/specs/terminal-startup.md +64 -0
  245. package/src/syntax-style.test.ts +841 -0
  246. package/src/syntax-style.ts +274 -0
  247. package/src/testing/README.md +219 -0
  248. package/src/testing/bun-test-node.ts +880 -0
  249. package/src/testing/capture-spans.test.ts +216 -0
  250. package/src/testing/integration.test.ts +276 -0
  251. package/src/testing/manual-clock.ts +117 -0
  252. package/src/testing/mock-keys.test.ts +1378 -0
  253. package/src/testing/mock-keys.ts +457 -0
  254. package/src/testing/mock-mouse.test.ts +218 -0
  255. package/src/testing/mock-mouse.ts +247 -0
  256. package/src/testing/mock-tree-sitter-client.ts +81 -0
  257. package/src/testing/spy.ts +13 -0
  258. package/src/testing/terminal-capabilities.ts +47 -0
  259. package/src/testing/test-recorder.test.ts +410 -0
  260. package/src/testing/test-recorder.ts +133 -0
  261. package/src/testing/test-renderer.ts +375 -0
  262. package/src/testing/test-renderer.wait.test.ts +278 -0
  263. package/src/testing/test-streams.ts +31 -0
  264. package/src/testing.ts +9 -0
  265. package/src/tests/__snapshots__/absolute-positioning.snapshot.test.ts.snap +481 -0
  266. package/src/tests/__snapshots__/renderable.snapshot.test.ts.snap +19 -0
  267. package/src/tests/__snapshots__/scrollbox.test.ts.snap +29 -0
  268. package/src/tests/absolute-positioning.snapshot.test.ts +638 -0
  269. package/src/tests/allocator-stats.test.ts +53 -0
  270. package/src/tests/audio.test.ts +303 -0
  271. package/src/tests/destroy-during-render.test.ts +200 -0
  272. package/src/tests/destroy-on-exit.fixture.ts +36 -0
  273. package/src/tests/destroy-on-exit.test.ts +62 -0
  274. package/src/tests/ffi-borrowed-pointer-callsites.test.ts +153 -0
  275. package/src/tests/hover-cursor.test.ts +98 -0
  276. package/src/tests/native-backed-measurement-lifecycle.test.ts +133 -0
  277. package/src/tests/native-backed-measurement-parity.test.ts +322 -0
  278. package/src/tests/native-span-feed-async.test.ts +173 -0
  279. package/src/tests/native-span-feed-close.test.ts +120 -0
  280. package/src/tests/native-span-feed-coverage.test.ts +227 -0
  281. package/src/tests/native-span-feed-edge-cases.test.ts +384 -0
  282. package/src/tests/native-span-feed-use-after-free.test.ts +45 -0
  283. package/src/tests/opacity.test.ts +123 -0
  284. package/src/tests/renderable.snapshot.test.ts +524 -0
  285. package/src/tests/renderable.test.ts +1851 -0
  286. package/src/tests/renderer.clock.test.ts +270 -0
  287. package/src/tests/renderer.console-startup.test.ts +2151 -0
  288. package/src/tests/renderer.control.test.ts +458 -0
  289. package/src/tests/renderer.core-slot-binding.test.ts +962 -0
  290. package/src/tests/renderer.cursor.test.ts +26 -0
  291. package/src/tests/renderer.custom-stdout.test.ts +1112 -0
  292. package/src/tests/renderer.destroy-during-render.test.ts +147 -0
  293. package/src/tests/renderer.focus-restore.test.ts +257 -0
  294. package/src/tests/renderer.focus.test.ts +329 -0
  295. package/src/tests/renderer.idle.test.ts +219 -0
  296. package/src/tests/renderer.input.test.ts +2615 -0
  297. package/src/tests/renderer.kitty-flags.test.ts +195 -0
  298. package/src/tests/renderer.lifecycle.test.ts +34 -0
  299. package/src/tests/renderer.mouse.test.ts +1315 -0
  300. package/src/tests/renderer.notifications.test.ts +27 -0
  301. package/src/tests/renderer.palette.test.ts +1199 -0
  302. package/src/tests/renderer.remote.test.ts +247 -0
  303. package/src/tests/renderer.render-stats.test.ts +146 -0
  304. package/src/tests/renderer.scrollback-surface.test.ts +474 -0
  305. package/src/tests/renderer.selection.test.ts +138 -0
  306. package/src/tests/renderer.slot-registry.test.ts +684 -0
  307. package/src/tests/renderer.tracker.test.ts +202 -0
  308. package/src/tests/renderer.useMouse.test.ts +83 -0
  309. package/src/tests/runtime-plugin-node-modules-cycle.fixture.ts +76 -0
  310. package/src/tests/runtime-plugin-node-modules-import-like-string.fixture.ts +48 -0
  311. package/src/tests/runtime-plugin-node-modules-mjs.fixture.ts +43 -0
  312. package/src/tests/runtime-plugin-node-modules-no-bare-rewrite.fixture.ts +67 -0
  313. package/src/tests/runtime-plugin-node-modules-package-type-cache.fixture.ts +72 -0
  314. package/src/tests/runtime-plugin-node-modules-runtime-specifier.fixture.ts +44 -0
  315. package/src/tests/runtime-plugin-node-modules-scoped-package-bare-rewrite.fixture.ts +85 -0
  316. package/src/tests/runtime-plugin-path-alias.fixture.ts +43 -0
  317. package/src/tests/runtime-plugin-resolve-roots.fixture.ts +65 -0
  318. package/src/tests/runtime-plugin-support-configure.fixture.ts +31 -0
  319. package/src/tests/runtime-plugin-support-late-addition.fixture.ts +17 -0
  320. package/src/tests/runtime-plugin-support.fixture.ts +11 -0
  321. package/src/tests/runtime-plugin-support.test.ts +54 -0
  322. package/src/tests/runtime-plugin-windows-file-url.fixture.ts +30 -0
  323. package/src/tests/runtime-plugin.fixture.ts +40 -0
  324. package/src/tests/runtime-plugin.test.ts +369 -0
  325. package/src/tests/scrollbox-culling-bug.test.ts +114 -0
  326. package/src/tests/scrollbox-hitgrid-resize.test.ts +136 -0
  327. package/src/tests/scrollbox-hitgrid.test.ts +909 -0
  328. package/src/tests/scrollbox.test.ts +1895 -0
  329. package/src/tests/wrap-resize-perf.test.ts +276 -0
  330. package/src/tests/yoga-api-coverage.test.ts +409 -0
  331. package/src/tests/yoga-callback-stress.test.ts +122 -0
  332. package/src/tests/yoga-ffi.test.ts +117 -0
  333. package/src/tests/yoga-setters.test.ts +921 -0
  334. package/src/tests/yoga-upstream/YGAlignBaselineTest.test.ts +124 -0
  335. package/src/tests/yoga-upstream/YGComputedBorderTest.test.ts +27 -0
  336. package/src/tests/yoga-upstream/YGComputedMarginTest.test.ts +27 -0
  337. package/src/tests/yoga-upstream/YGComputedPaddingTest.test.ts +27 -0
  338. package/src/tests/yoga-upstream/YGDirtiedTest.test.ts +157 -0
  339. package/src/tests/yoga-upstream/YGErrataTest.test.ts +40 -0
  340. package/src/tests/yoga-upstream/YGFlexBasisAuto.test.ts +23 -0
  341. package/src/tests/yoga-upstream/YGHasNewLayout.test.ts +81 -0
  342. package/src/tests/yoga-upstream/YGMeasureCacheTest.test.ts +31 -0
  343. package/src/tests/yoga-upstream/YGMeasureTest.test.ts +70 -0
  344. package/src/tests/yoga-upstream/generated/YGAbsolutePositionTest.test.ts +1864 -0
  345. package/src/tests/yoga-upstream/generated/YGAlignContentTest.test.ts +5829 -0
  346. package/src/tests/yoga-upstream/generated/YGAlignItemsTest.test.ts +2444 -0
  347. package/src/tests/yoga-upstream/generated/YGAlignSelfTest.test.ts +293 -0
  348. package/src/tests/yoga-upstream/generated/YGAndroidNewsFeed.test.ts +315 -0
  349. package/src/tests/yoga-upstream/generated/YGAspectRatioTest.test.ts +231 -0
  350. package/src/tests/yoga-upstream/generated/YGAutoTest.test.ts +347 -0
  351. package/src/tests/yoga-upstream/generated/YGBorderTest.test.ts +256 -0
  352. package/src/tests/yoga-upstream/generated/YGBoxSizingTest.test.ts +2747 -0
  353. package/src/tests/yoga-upstream/generated/YGDimensionTest.test.ts +129 -0
  354. package/src/tests/yoga-upstream/generated/YGDisplayContentsTest.test.ts +109 -0
  355. package/src/tests/yoga-upstream/generated/YGDisplayTest.test.ts +1097 -0
  356. package/src/tests/yoga-upstream/generated/YGFlexDirectionTest.test.ts +4562 -0
  357. package/src/tests/yoga-upstream/generated/YGFlexTest.test.ts +677 -0
  358. package/src/tests/yoga-upstream/generated/YGFlexWrapTest.test.ts +2071 -0
  359. package/src/tests/yoga-upstream/generated/YGGapTest.test.ts +3303 -0
  360. package/src/tests/yoga-upstream/generated/YGIntrinsicSizeTest.test.ts +582 -0
  361. package/src/tests/yoga-upstream/generated/YGJustifyContentTest.test.ts +2150 -0
  362. package/src/tests/yoga-upstream/generated/YGMarginTest.test.ts +1963 -0
  363. package/src/tests/yoga-upstream/generated/YGMinMaxDimensionTest.test.ts +1446 -0
  364. package/src/tests/yoga-upstream/generated/YGPaddingTest.test.ts +354 -0
  365. package/src/tests/yoga-upstream/generated/YGPercentageTest.test.ts +1760 -0
  366. package/src/tests/yoga-upstream/generated/YGRoundingTest.test.ts +1161 -0
  367. package/src/tests/yoga-upstream/generated/YGSizeOverflowTest.test.ts +207 -0
  368. package/src/tests/yoga-upstream/generated/YGStaticPositionTest.test.ts +6338 -0
  369. package/src/tests/yoga-upstream/tools/MeasureCounter.ts +54 -0
  370. package/src/tests/yoga-upstream/tools/utils.ts +81 -0
  371. package/src/text-buffer-view.test.ts +722 -0
  372. package/src/text-buffer-view.ts +193 -0
  373. package/src/text-buffer.test.ts +512 -0
  374. package/src/text-buffer.ts +250 -0
  375. package/src/types.ts +199 -0
  376. package/src/utils.ts +88 -0
  377. package/src/yoga.ts +1146 -0
  378. package/src/zig/ansi.zig +502 -0
  379. package/src/zig/audio.zig +1206 -0
  380. package/src/zig/bench/README.md +50 -0
  381. package/src/zig/bench/buffer-color-blending_bench.zig +350 -0
  382. package/src/zig/bench/buffer-draw-box_bench.zig +786 -0
  383. package/src/zig/bench/buffer-draw-text-buffer_bench.zig +894 -0
  384. package/src/zig/bench/edit-buffer_bench.zig +476 -0
  385. package/src/zig/bench/editor-view_bench.zig +169 -0
  386. package/src/zig/bench/native-span-feed_bench.zig +107 -0
  387. package/src/zig/bench/rope-markers_bench.zig +713 -0
  388. package/src/zig/bench/rope_bench.zig +514 -0
  389. package/src/zig/bench/styled-text_bench.zig +476 -0
  390. package/src/zig/bench/text-buffer-coords_bench.zig +362 -0
  391. package/src/zig/bench/text-buffer-view_bench.zig +459 -0
  392. package/src/zig/bench/text-chunk-graphemes_bench.zig +272 -0
  393. package/src/zig/bench/utf8_bench.zig +799 -0
  394. package/src/zig/bench-utils.zig +431 -0
  395. package/src/zig/bench.zig +223 -0
  396. package/src/zig/buffer-methods.zig +215 -0
  397. package/src/zig/buffer.zig +2515 -0
  398. package/src/zig/build.zig +700 -0
  399. package/src/zig/build.zig.zon +19 -0
  400. package/src/zig/edit-buffer.zig +900 -0
  401. package/src/zig/editor-view.zig +812 -0
  402. package/src/zig/event-bus.zig +28 -0
  403. package/src/zig/event-emitter.zig +65 -0
  404. package/src/zig/file-logger.zig +92 -0
  405. package/src/zig/grapheme.zig +838 -0
  406. package/src/zig/handles.zig +267 -0
  407. package/src/zig/lib.zig +2813 -0
  408. package/src/zig/link.zig +349 -0
  409. package/src/zig/logger.zig +43 -0
  410. package/src/zig/mem-registry.zig +126 -0
  411. package/src/zig/miniaudio_shim.c +21 -0
  412. package/src/zig/native-renderable.zig +112 -0
  413. package/src/zig/native-span-feed-bench-lib.zig +7 -0
  414. package/src/zig/native-span-feed.zig +747 -0
  415. package/src/zig/renderer-output.zig +677 -0
  416. package/src/zig/renderer.zig +2106 -0
  417. package/src/zig/rope.zig +1220 -0
  418. package/src/zig/split-scrollback.zig +88 -0
  419. package/src/zig/syntax-style.zig +174 -0
  420. package/src/zig/terminal.zig +1652 -0
  421. package/src/zig/test.zig +82 -0
  422. package/src/zig/tests/README.md +18 -0
  423. package/src/zig/tests/ansi_test.zig +18 -0
  424. package/src/zig/tests/audio_test.zig +439 -0
  425. package/src/zig/tests/buffer-methods_test.zig +1111 -0
  426. package/src/zig/tests/buffer_test.zig +2926 -0
  427. package/src/zig/tests/edit-buffer-history_test.zig +299 -0
  428. package/src/zig/tests/edit-buffer_test.zig +1688 -0
  429. package/src/zig/tests/editor-view_test.zig +3454 -0
  430. package/src/zig/tests/event-emitter_test.zig +249 -0
  431. package/src/zig/tests/grapheme_test.zig +1329 -0
  432. package/src/zig/tests/handles_test.zig +123 -0
  433. package/src/zig/tests/link_test.zig +220 -0
  434. package/src/zig/tests/mem-registry_test.zig +473 -0
  435. package/src/zig/tests/memory_leak_regression_test.zig +234 -0
  436. package/src/zig/tests/native-renderable_test.zig +16 -0
  437. package/src/zig/tests/native-span-feed_test.zig +1266 -0
  438. package/src/zig/tests/renderer_test.zig +2604 -0
  439. package/src/zig/tests/rope-nested_test.zig +712 -0
  440. package/src/zig/tests/rope_fuzz_test.zig +238 -0
  441. package/src/zig/tests/rope_test.zig +2362 -0
  442. package/src/zig/tests/segment-merge.test.zig +148 -0
  443. package/src/zig/tests/split-scrollback_test.zig +70 -0
  444. package/src/zig/tests/syntax-style_test.zig +558 -0
  445. package/src/zig/tests/terminal_test.zig +1489 -0
  446. package/src/zig/tests/test-renderer.zig +126 -0
  447. package/src/zig/tests/text-buffer-drawing_test.zig +3291 -0
  448. package/src/zig/tests/text-buffer-highlights_test.zig +706 -0
  449. package/src/zig/tests/text-buffer-iterators_test.zig +776 -0
  450. package/src/zig/tests/text-buffer-segment_test.zig +320 -0
  451. package/src/zig/tests/text-buffer-selection_test.zig +1056 -0
  452. package/src/zig/tests/text-buffer-selection_viewport_test.zig +358 -0
  453. package/src/zig/tests/text-buffer-view_test.zig +3672 -0
  454. package/src/zig/tests/text-buffer_test.zig +2191 -0
  455. package/src/zig/tests/unicode-width-map.zon +3909 -0
  456. package/src/zig/tests/utf8_no_zwj_test.zig +260 -0
  457. package/src/zig/tests/utf8_test.zig +4060 -0
  458. package/src/zig/tests/utf8_wcwidth_cursor_test.zig +267 -0
  459. package/src/zig/tests/utf8_wcwidth_test.zig +357 -0
  460. package/src/zig/tests/word-wrap-editing_test.zig +498 -0
  461. package/src/zig/tests/wrap-cache-perf_test.zig +113 -0
  462. package/src/zig/tests/yoga_test.zig +65 -0
  463. package/src/zig/text-buffer-iterators.zig +496 -0
  464. package/src/zig/text-buffer-segment.zig +403 -0
  465. package/src/zig/text-buffer-view.zig +1428 -0
  466. package/src/zig/text-buffer.zig +1272 -0
  467. package/src/zig/utf8.zig +1954 -0
  468. package/src/zig/utils.zig +12 -0
  469. package/src/zig/uucode-stub.zig +76 -0
  470. package/src/zig/vendor/miniaudio/miniaudio.h +93468 -0
  471. package/src/zig/yoga.zig +658 -0
  472. package/src/zig-structs.ts +381 -0
  473. package/src/zig.ts +5260 -0
  474. package/tsconfig.build.json +17 -0
  475. package/tsconfig.json +27 -0
  476. package/tsconfig.node-test.json +138 -0
package/src/yoga.ts ADDED
@@ -0,0 +1,1146 @@
1
+ import {
2
+ resolveRenderLib,
3
+ type NativeYogaDirtiedCallback,
4
+ type NativeYogaMeasureCallback,
5
+ type RenderLib,
6
+ } from "./zig.js"
7
+ import type { FFICallbackInstance, Pointer } from "./platform/ffi.js"
8
+
9
+ export enum Align {
10
+ Auto = 0,
11
+ FlexStart = 1,
12
+ Center = 2,
13
+ FlexEnd = 3,
14
+ Stretch = 4,
15
+ Baseline = 5,
16
+ SpaceBetween = 6,
17
+ SpaceAround = 7,
18
+ SpaceEvenly = 8,
19
+ }
20
+
21
+ export enum BoxSizing {
22
+ BorderBox = 0,
23
+ ContentBox = 1,
24
+ }
25
+
26
+ export enum Dimension {
27
+ Width = 0,
28
+ Height = 1,
29
+ }
30
+
31
+ export enum Direction {
32
+ Inherit = 0,
33
+ LTR = 1,
34
+ RTL = 2,
35
+ }
36
+
37
+ export enum Display {
38
+ Flex = 0,
39
+ None = 1,
40
+ Contents = 2,
41
+ }
42
+
43
+ export enum Edge {
44
+ Left = 0,
45
+ Top = 1,
46
+ Right = 2,
47
+ Bottom = 3,
48
+ Start = 4,
49
+ End = 5,
50
+ Horizontal = 6,
51
+ Vertical = 7,
52
+ All = 8,
53
+ }
54
+
55
+ export enum Errata {
56
+ None = 0,
57
+ StretchFlexBasis = 1,
58
+ AbsolutePositionWithoutInsetsExcludesPadding = 2,
59
+ AbsolutePercentAgainstInnerSize = 4,
60
+ All = 2147483647,
61
+ Classic = 2147483646,
62
+ }
63
+
64
+ export enum ExperimentalFeature {
65
+ WebFlexBasis = 0,
66
+ }
67
+
68
+ export enum FlexDirection {
69
+ Column = 0,
70
+ ColumnReverse = 1,
71
+ Row = 2,
72
+ RowReverse = 3,
73
+ }
74
+
75
+ export enum Gutter {
76
+ Column = 0,
77
+ Row = 1,
78
+ All = 2,
79
+ }
80
+
81
+ export enum Justify {
82
+ FlexStart = 0,
83
+ Center = 1,
84
+ FlexEnd = 2,
85
+ SpaceBetween = 3,
86
+ SpaceAround = 4,
87
+ SpaceEvenly = 5,
88
+ }
89
+
90
+ export enum LogLevel {
91
+ Error = 0,
92
+ Warn = 1,
93
+ Info = 2,
94
+ Debug = 3,
95
+ Verbose = 4,
96
+ Fatal = 5,
97
+ }
98
+
99
+ export enum MeasureMode {
100
+ Undefined = 0,
101
+ Exactly = 1,
102
+ AtMost = 2,
103
+ }
104
+
105
+ export enum NodeType {
106
+ Default = 0,
107
+ Text = 1,
108
+ }
109
+
110
+ export enum Overflow {
111
+ Visible = 0,
112
+ Hidden = 1,
113
+ Scroll = 2,
114
+ }
115
+
116
+ export enum PositionType {
117
+ Static = 0,
118
+ Relative = 1,
119
+ Absolute = 2,
120
+ }
121
+
122
+ export enum Unit {
123
+ Undefined = 0,
124
+ Point = 1,
125
+ Percent = 2,
126
+ Auto = 3,
127
+ }
128
+
129
+ export enum Wrap {
130
+ NoWrap = 0,
131
+ Wrap = 1,
132
+ WrapReverse = 2,
133
+ }
134
+
135
+ export const ALIGN_AUTO = Align.Auto
136
+ export const ALIGN_FLEX_START = Align.FlexStart
137
+ export const ALIGN_CENTER = Align.Center
138
+ export const ALIGN_FLEX_END = Align.FlexEnd
139
+ export const ALIGN_STRETCH = Align.Stretch
140
+ export const ALIGN_BASELINE = Align.Baseline
141
+ export const ALIGN_SPACE_BETWEEN = Align.SpaceBetween
142
+ export const ALIGN_SPACE_AROUND = Align.SpaceAround
143
+ export const ALIGN_SPACE_EVENLY = Align.SpaceEvenly
144
+
145
+ export const BOX_SIZING_BORDER_BOX = BoxSizing.BorderBox
146
+ export const BOX_SIZING_CONTENT_BOX = BoxSizing.ContentBox
147
+
148
+ export const DIMENSION_WIDTH = Dimension.Width
149
+ export const DIMENSION_HEIGHT = Dimension.Height
150
+
151
+ export const DIRECTION_INHERIT = Direction.Inherit
152
+ export const DIRECTION_LTR = Direction.LTR
153
+ export const DIRECTION_RTL = Direction.RTL
154
+
155
+ export const DISPLAY_FLEX = Display.Flex
156
+ export const DISPLAY_NONE = Display.None
157
+ export const DISPLAY_CONTENTS = Display.Contents
158
+
159
+ export const EDGE_LEFT = Edge.Left
160
+ export const EDGE_TOP = Edge.Top
161
+ export const EDGE_RIGHT = Edge.Right
162
+ export const EDGE_BOTTOM = Edge.Bottom
163
+ export const EDGE_START = Edge.Start
164
+ export const EDGE_END = Edge.End
165
+ export const EDGE_HORIZONTAL = Edge.Horizontal
166
+ export const EDGE_VERTICAL = Edge.Vertical
167
+ export const EDGE_ALL = Edge.All
168
+
169
+ export const ERRATA_NONE = Errata.None
170
+ export const ERRATA_STRETCH_FLEX_BASIS = Errata.StretchFlexBasis
171
+ export const ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING =
172
+ Errata.AbsolutePositionWithoutInsetsExcludesPadding
173
+ export const ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE = Errata.AbsolutePercentAgainstInnerSize
174
+ export const ERRATA_ALL = Errata.All
175
+ export const ERRATA_CLASSIC = Errata.Classic
176
+
177
+ export const EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS = ExperimentalFeature.WebFlexBasis
178
+
179
+ export const FLEX_DIRECTION_COLUMN = FlexDirection.Column
180
+ export const FLEX_DIRECTION_COLUMN_REVERSE = FlexDirection.ColumnReverse
181
+ export const FLEX_DIRECTION_ROW = FlexDirection.Row
182
+ export const FLEX_DIRECTION_ROW_REVERSE = FlexDirection.RowReverse
183
+
184
+ export const GUTTER_COLUMN = Gutter.Column
185
+ export const GUTTER_ROW = Gutter.Row
186
+ export const GUTTER_ALL = Gutter.All
187
+
188
+ export const JUSTIFY_FLEX_START = Justify.FlexStart
189
+ export const JUSTIFY_CENTER = Justify.Center
190
+ export const JUSTIFY_FLEX_END = Justify.FlexEnd
191
+ export const JUSTIFY_SPACE_BETWEEN = Justify.SpaceBetween
192
+ export const JUSTIFY_SPACE_AROUND = Justify.SpaceAround
193
+ export const JUSTIFY_SPACE_EVENLY = Justify.SpaceEvenly
194
+
195
+ export const LOG_LEVEL_ERROR = LogLevel.Error
196
+ export const LOG_LEVEL_WARN = LogLevel.Warn
197
+ export const LOG_LEVEL_INFO = LogLevel.Info
198
+ export const LOG_LEVEL_DEBUG = LogLevel.Debug
199
+ export const LOG_LEVEL_VERBOSE = LogLevel.Verbose
200
+ export const LOG_LEVEL_FATAL = LogLevel.Fatal
201
+
202
+ export const MEASURE_MODE_UNDEFINED = MeasureMode.Undefined
203
+ export const MEASURE_MODE_EXACTLY = MeasureMode.Exactly
204
+ export const MEASURE_MODE_AT_MOST = MeasureMode.AtMost
205
+
206
+ export const NODE_TYPE_DEFAULT = NodeType.Default
207
+ export const NODE_TYPE_TEXT = NodeType.Text
208
+
209
+ export const OVERFLOW_VISIBLE = Overflow.Visible
210
+ export const OVERFLOW_HIDDEN = Overflow.Hidden
211
+ export const OVERFLOW_SCROLL = Overflow.Scroll
212
+
213
+ export const POSITION_TYPE_STATIC = PositionType.Static
214
+ export const POSITION_TYPE_RELATIVE = PositionType.Relative
215
+ export const POSITION_TYPE_ABSOLUTE = PositionType.Absolute
216
+
217
+ export const UNIT_UNDEFINED = Unit.Undefined
218
+ export const UNIT_POINT = Unit.Point
219
+ export const UNIT_PERCENT = Unit.Percent
220
+ export const UNIT_AUTO = Unit.Auto
221
+
222
+ export const WRAP_NO_WRAP = Wrap.NoWrap
223
+ export const WRAP_WRAP = Wrap.Wrap
224
+ export const WRAP_WRAP_REVERSE = Wrap.WrapReverse
225
+
226
+ export interface Layout {
227
+ left: number
228
+ right: number
229
+ top: number
230
+ bottom: number
231
+ width: number
232
+ height: number
233
+ }
234
+
235
+ export interface Size {
236
+ width: number
237
+ height: number
238
+ }
239
+
240
+ export interface Value {
241
+ unit: Unit
242
+ value: number
243
+ }
244
+
245
+ export type MeasureFunction = (width: number, widthMode: MeasureMode, height: number, heightMode: MeasureMode) => Size
246
+ export type DirtiedFunction = (node: Node) => void
247
+
248
+ type ValueInput = number | "auto" | `${number}%` | Value | undefined
249
+ type ValueInputNoAuto = number | `${number}%` | Value | undefined
250
+
251
+ const YogaEnumKind = {
252
+ Direction: 0,
253
+ FlexDirection: 1,
254
+ JustifyContent: 2,
255
+ AlignContent: 3,
256
+ AlignItems: 4,
257
+ AlignSelf: 5,
258
+ PositionType: 6,
259
+ FlexWrap: 7,
260
+ Overflow: 8,
261
+ Display: 9,
262
+ BoxSizing: 10,
263
+ } as const
264
+
265
+ const YogaFloatKind = {
266
+ Flex: 0,
267
+ FlexGrow: 1,
268
+ FlexShrink: 2,
269
+ AspectRatio: 3,
270
+ } as const
271
+
272
+ const YogaValueKind = {
273
+ Width: 0,
274
+ Height: 1,
275
+ MinWidth: 2,
276
+ MinHeight: 3,
277
+ MaxWidth: 4,
278
+ MaxHeight: 5,
279
+ FlexBasis: 6,
280
+ Margin: 7,
281
+ Padding: 8,
282
+ Position: 9,
283
+ Gap: 10,
284
+ } as const
285
+
286
+ const YogaEdgeLayoutKind = {
287
+ Margin: 0,
288
+ Padding: 1,
289
+ Border: 2,
290
+ } as const
291
+
292
+ const UNDEFINED_VALUE: Value = { unit: Unit.Undefined, value: NaN }
293
+
294
+ const nodeRegistry = new Map<Pointer, Node>()
295
+ // JS-measured Yoga nodes share one native callback per loaded library. Yoga passes
296
+ // the node pointer back to JS, and these registries route to the per-node handler.
297
+ // This keeps Node.setMeasureFunc()/setDirtiedFunc() while avoiding one JSCallback
298
+ // allocation per measured node.
299
+ const measureRegistry = new Map<Pointer, MeasureFunction>()
300
+ const dirtiedRegistry = new Map<Pointer, { node: Node; callback: DirtiedFunction }>()
301
+ let measureCallback: FFICallbackInstance | null = null
302
+ let measureCallbackLib: RenderLib | null = null
303
+ let dirtiedCallback: FFICallbackInstance | null = null
304
+ let dirtiedCallbackLib: RenderLib | null = null
305
+
306
+ function lib(): RenderLib {
307
+ return resolveRenderLib()
308
+ }
309
+
310
+ function ensureMeasureCallback(): void {
311
+ const renderLib = lib()
312
+ if (measureCallback?.ptr && measureCallbackLib === renderLib) return
313
+
314
+ const callback: NativeYogaMeasureCallback = (node, width, widthMode, height, heightMode) => {
315
+ const measureFunc = node ? measureRegistry.get(node) : undefined
316
+ const result = measureFunc?.(width, widthMode as MeasureMode, height, heightMode as MeasureMode)
317
+ renderLib.yogaStoreMeasureResult(result?.width ?? NaN, result?.height ?? NaN)
318
+ }
319
+
320
+ measureCallback = renderLib.createYogaMeasureCallback(callback)
321
+ if (!measureCallback.ptr) {
322
+ measureCallback.close()
323
+ measureCallback = null
324
+ throw new Error("Failed to create Yoga measure callback")
325
+ }
326
+
327
+ renderLib.yogaSetMeasureCallback(measureCallback.ptr)
328
+ measureCallbackLib = renderLib
329
+ }
330
+
331
+ function ensureDirtiedCallback(): void {
332
+ const renderLib = lib()
333
+ if (dirtiedCallback?.ptr && dirtiedCallbackLib === renderLib) return
334
+
335
+ const callback: NativeYogaDirtiedCallback = (node) => {
336
+ if (!node) return
337
+ const registration = dirtiedRegistry.get(node)
338
+ if (registration) registration.callback(registration.node)
339
+ }
340
+
341
+ dirtiedCallback = renderLib.createYogaDirtiedCallback(callback)
342
+ if (!dirtiedCallback.ptr) {
343
+ dirtiedCallback.close()
344
+ dirtiedCallback = null
345
+ throw new Error("Failed to create Yoga dirtied callback")
346
+ }
347
+
348
+ renderLib.yogaSetDirtiedCallback(dirtiedCallback.ptr)
349
+ dirtiedCallbackLib = renderLib
350
+ }
351
+
352
+ function isValueObject(value: unknown): value is Value {
353
+ return typeof value === "object" && value !== null && "unit" in value && "value" in value
354
+ }
355
+
356
+ function parseValue(value: ValueInput): Value {
357
+ if (isValueObject(value)) {
358
+ return value
359
+ }
360
+ if (value === undefined) {
361
+ return UNDEFINED_VALUE
362
+ }
363
+ if (value === "auto") {
364
+ return { unit: Unit.Auto, value: NaN }
365
+ }
366
+ if (typeof value === "string") {
367
+ if (!value.endsWith("%")) {
368
+ throw new Error(`Invalid Yoga value: ${value}`)
369
+ }
370
+ const numberValue = Number.parseFloat(value)
371
+ if (Number.isNaN(numberValue)) {
372
+ throw new Error(`Invalid Yoga percentage value: ${value}`)
373
+ }
374
+ return { unit: Unit.Percent, value: numberValue }
375
+ }
376
+ return { unit: Unit.Point, value }
377
+ }
378
+
379
+ function unpackValue(packedValue: number | bigint): Value {
380
+ const packed = typeof packedValue === "bigint" ? packedValue : BigInt(packedValue)
381
+ const unit = Number(packed & 0xffffffffn) as Unit
382
+ const valueBits = Number((packed >> 32n) & 0xffffffffn)
383
+ const buffer = new ArrayBuffer(4)
384
+ const view = new DataView(buffer)
385
+ view.setUint32(0, valueBits, true)
386
+ return { unit, value: view.getFloat32(0, true) }
387
+ }
388
+
389
+ function normalizeLayoutInput(value: number | "auto" | undefined): number {
390
+ return value === undefined || value === "auto" ? NaN : value
391
+ }
392
+
393
+ export class Config {
394
+ readonly ptr: Pointer
395
+ private freed = false
396
+
397
+ private constructor(ptr: Pointer) {
398
+ this.ptr = ptr
399
+ }
400
+
401
+ static create(): Config {
402
+ return new Config(lib().yogaConfigCreate())
403
+ }
404
+
405
+ static destroy(config: Config): void {
406
+ config.free()
407
+ }
408
+
409
+ free(): void {
410
+ if (this.freed) return
411
+ this.freed = true
412
+ lib().yogaConfigFree(this.ptr)
413
+ }
414
+
415
+ setUseWebDefaults(useWebDefaults: boolean): void {
416
+ if (this.freed) return
417
+ lib().yogaConfigSetUseWebDefaults(this.ptr, useWebDefaults)
418
+ }
419
+
420
+ useWebDefaults(): boolean {
421
+ if (this.freed) return false
422
+ return lib().yogaConfigGetUseWebDefaults(this.ptr)
423
+ }
424
+
425
+ setPointScaleFactor(pointScaleFactor: number): void {
426
+ if (this.freed) return
427
+ lib().yogaConfigSetPointScaleFactor(this.ptr, pointScaleFactor)
428
+ }
429
+
430
+ getPointScaleFactor(): number {
431
+ if (this.freed) return 0
432
+ return lib().yogaConfigGetPointScaleFactor(this.ptr)
433
+ }
434
+
435
+ setErrata(errata: Errata): void {
436
+ if (this.freed) return
437
+ lib().yogaConfigSetErrata(this.ptr, errata)
438
+ }
439
+
440
+ getErrata(): Errata {
441
+ if (this.freed) return Errata.None
442
+ return lib().yogaConfigGetErrata(this.ptr) as Errata
443
+ }
444
+
445
+ setExperimentalFeatureEnabled(feature: ExperimentalFeature, enabled: boolean): void {
446
+ if (this.freed) return
447
+ lib().yogaConfigSetExperimentalFeatureEnabled(this.ptr, feature, enabled)
448
+ }
449
+
450
+ isExperimentalFeatureEnabled(feature: ExperimentalFeature): boolean {
451
+ if (this.freed) return false
452
+ return lib().yogaConfigIsExperimentalFeatureEnabled(this.ptr, feature)
453
+ }
454
+ }
455
+
456
+ export class Node {
457
+ readonly ptr: Pointer
458
+ private freed = false
459
+
460
+ private constructor(ptr: Pointer) {
461
+ this.ptr = ptr
462
+ nodeRegistry.set(ptr, this)
463
+ }
464
+
465
+ static create(config?: Config): Node {
466
+ return Node.fromPointer(config ? lib().yogaNodeCreateWithConfig(config.ptr) : lib().yogaNodeCreate())
467
+ }
468
+
469
+ static createForOpenTUI(): Node {
470
+ return Node.fromPointer(lib().yogaNodeCreateForOpenTUI())
471
+ }
472
+
473
+ static createDefault(): Node {
474
+ return Node.create()
475
+ }
476
+
477
+ static createWithConfig(config: Config): Node {
478
+ return Node.create(config)
479
+ }
480
+
481
+ static destroy(node: Node): void {
482
+ node.free()
483
+ }
484
+
485
+ private static fromPointer(ptr: Pointer): Node {
486
+ const existing = nodeRegistry.get(ptr)
487
+ if (existing) return existing
488
+ return new Node(ptr)
489
+ }
490
+
491
+ isFreed(): boolean {
492
+ return this.freed
493
+ }
494
+
495
+ free(): void {
496
+ if (this.freed) return
497
+ this.unsetMeasureFunc()
498
+ this.unsetDirtiedFunc()
499
+ lib().yogaNodeFree(this.ptr)
500
+ this.markFreed()
501
+ }
502
+
503
+ freeRecursive(): void {
504
+ if (this.freed) return
505
+ const nodes = this.collectSubtree([])
506
+ for (const node of nodes) {
507
+ node.unregisterCallbacks()
508
+ }
509
+ lib().yogaNodeFreeRecursive(this.ptr)
510
+ for (const node of nodes) {
511
+ node.markFreed()
512
+ }
513
+ }
514
+
515
+ reset(): void {
516
+ if (this.freed) return
517
+ this.unsetMeasureFunc()
518
+ this.unsetDirtiedFunc()
519
+ lib().yogaNodeReset(this.ptr)
520
+ }
521
+
522
+ copyStyle(node: Node): void {
523
+ if (this.freed) return
524
+ lib().yogaNodeCopyStyle(this.ptr, node.ptr)
525
+ }
526
+
527
+ insertChild(child: Node, index: number): void {
528
+ if (this.freed) return
529
+ lib().yogaNodeInsertChild(this.ptr, child.ptr, index)
530
+ }
531
+
532
+ removeChild(child: Node): void {
533
+ if (this.freed) return
534
+ lib().yogaNodeRemoveChild(this.ptr, child.ptr)
535
+ }
536
+
537
+ removeAllChildren(): void {
538
+ if (this.freed) return
539
+ lib().yogaNodeRemoveAllChildren(this.ptr)
540
+ }
541
+
542
+ getChild(index: number): Node | null {
543
+ if (this.freed) return null
544
+ const child = lib().yogaNodeGetChild(this.ptr, index)
545
+ return child ? Node.fromPointer(child) : null
546
+ }
547
+
548
+ getChildCount(): number {
549
+ if (this.freed) return 0
550
+ return lib().yogaNodeGetChildCount(this.ptr)
551
+ }
552
+
553
+ getParent(): Node | null {
554
+ if (this.freed) return null
555
+ const parent = lib().yogaNodeGetParent(this.ptr)
556
+ return parent ? Node.fromPointer(parent) : null
557
+ }
558
+
559
+ calculateLayout(width?: number | "auto", height?: number | "auto", direction: Direction = Direction.LTR): void {
560
+ if (this.freed) return
561
+ lib().yogaNodeCalculateLayout(this.ptr, normalizeLayoutInput(width), normalizeLayoutInput(height), direction)
562
+ }
563
+
564
+ hasNewLayout(): boolean {
565
+ if (this.freed) return false
566
+ return lib().yogaNodeGetHasNewLayout(this.ptr)
567
+ }
568
+
569
+ markLayoutSeen(): void {
570
+ if (this.freed) return
571
+ lib().yogaNodeSetHasNewLayout(this.ptr, false)
572
+ }
573
+
574
+ markDirty(): void {
575
+ if (this.freed) return
576
+ lib().yogaNodeMarkDirty(this.ptr)
577
+ }
578
+
579
+ isDirty(): boolean {
580
+ if (this.freed) return true
581
+ return lib().yogaNodeIsDirty(this.ptr)
582
+ }
583
+
584
+ getComputedLayout(): Layout {
585
+ if (this.freed) return { left: 0, top: 0, right: 0, bottom: 0, width: 0, height: 0 }
586
+ return lib().yogaNodeGetComputedLayout(this.ptr)
587
+ }
588
+
589
+ getComputedLeft(): number {
590
+ return this.getComputedLayout().left
591
+ }
592
+
593
+ getComputedTop(): number {
594
+ return this.getComputedLayout().top
595
+ }
596
+
597
+ getComputedRight(): number {
598
+ return this.getComputedLayout().right
599
+ }
600
+
601
+ getComputedBottom(): number {
602
+ return this.getComputedLayout().bottom
603
+ }
604
+
605
+ getComputedWidth(): number {
606
+ return this.getComputedLayout().width
607
+ }
608
+
609
+ getComputedHeight(): number {
610
+ return this.getComputedLayout().height
611
+ }
612
+
613
+ getComputedMargin(edge: Edge): number {
614
+ if (this.freed) return 0
615
+ return lib().yogaNodeLayoutGetEdge(this.ptr, YogaEdgeLayoutKind.Margin, edge)
616
+ }
617
+
618
+ getComputedPadding(edge: Edge): number {
619
+ if (this.freed) return 0
620
+ return lib().yogaNodeLayoutGetEdge(this.ptr, YogaEdgeLayoutKind.Padding, edge)
621
+ }
622
+
623
+ getComputedBorder(edge: Edge): number {
624
+ if (this.freed) return 0
625
+ return lib().yogaNodeLayoutGetEdge(this.ptr, YogaEdgeLayoutKind.Border, edge)
626
+ }
627
+
628
+ setDirection(direction: Direction): void {
629
+ this.setEnum(YogaEnumKind.Direction, direction)
630
+ }
631
+
632
+ getDirection(): Direction {
633
+ return this.getEnum(YogaEnumKind.Direction, Direction.Inherit) as Direction
634
+ }
635
+
636
+ setFlexDirection(flexDirection: FlexDirection): void {
637
+ this.setEnum(YogaEnumKind.FlexDirection, flexDirection)
638
+ }
639
+
640
+ getFlexDirection(): FlexDirection {
641
+ return this.getEnum(YogaEnumKind.FlexDirection, FlexDirection.Column) as FlexDirection
642
+ }
643
+
644
+ setJustifyContent(justifyContent: Justify): void {
645
+ this.setEnum(YogaEnumKind.JustifyContent, justifyContent)
646
+ }
647
+
648
+ getJustifyContent(): Justify {
649
+ return this.getEnum(YogaEnumKind.JustifyContent, Justify.FlexStart) as Justify
650
+ }
651
+
652
+ setAlignContent(alignContent: Align): void {
653
+ this.setEnum(YogaEnumKind.AlignContent, alignContent)
654
+ }
655
+
656
+ getAlignContent(): Align {
657
+ return this.getEnum(YogaEnumKind.AlignContent, Align.FlexStart) as Align
658
+ }
659
+
660
+ setAlignItems(alignItems: Align): void {
661
+ this.setEnum(YogaEnumKind.AlignItems, alignItems)
662
+ }
663
+
664
+ getAlignItems(): Align {
665
+ return this.getEnum(YogaEnumKind.AlignItems, Align.Stretch) as Align
666
+ }
667
+
668
+ setAlignSelf(alignSelf: Align): void {
669
+ this.setEnum(YogaEnumKind.AlignSelf, alignSelf)
670
+ }
671
+
672
+ getAlignSelf(): Align {
673
+ return this.getEnum(YogaEnumKind.AlignSelf, Align.Auto) as Align
674
+ }
675
+
676
+ setPositionType(positionType: PositionType): void {
677
+ this.setEnum(YogaEnumKind.PositionType, positionType)
678
+ }
679
+
680
+ getPositionType(): PositionType {
681
+ return this.getEnum(YogaEnumKind.PositionType, PositionType.Relative) as PositionType
682
+ }
683
+
684
+ setFlexWrap(flexWrap: Wrap): void {
685
+ this.setEnum(YogaEnumKind.FlexWrap, flexWrap)
686
+ }
687
+
688
+ getFlexWrap(): Wrap {
689
+ return this.getEnum(YogaEnumKind.FlexWrap, Wrap.NoWrap) as Wrap
690
+ }
691
+
692
+ setOverflow(overflow: Overflow): void {
693
+ this.setEnum(YogaEnumKind.Overflow, overflow)
694
+ }
695
+
696
+ getOverflow(): Overflow {
697
+ return this.getEnum(YogaEnumKind.Overflow, Overflow.Visible) as Overflow
698
+ }
699
+
700
+ setDisplay(display: Display): void {
701
+ this.setEnum(YogaEnumKind.Display, display)
702
+ }
703
+
704
+ getDisplay(): Display {
705
+ return this.getEnum(YogaEnumKind.Display, Display.Flex) as Display
706
+ }
707
+
708
+ setBoxSizing(boxSizing: BoxSizing): void {
709
+ this.setEnum(YogaEnumKind.BoxSizing, boxSizing)
710
+ }
711
+
712
+ getBoxSizing(): BoxSizing {
713
+ return this.getEnum(YogaEnumKind.BoxSizing, BoxSizing.BorderBox) as BoxSizing
714
+ }
715
+
716
+ setFlex(flex: number | undefined): void {
717
+ this.setFloat(YogaFloatKind.Flex, flex)
718
+ }
719
+
720
+ getFlex(): number {
721
+ return this.getFloat(YogaFloatKind.Flex)
722
+ }
723
+
724
+ setFlexGrow(flexGrow: number | undefined): void {
725
+ this.setFloat(YogaFloatKind.FlexGrow, flexGrow)
726
+ }
727
+
728
+ getFlexGrow(): number {
729
+ return this.getFloat(YogaFloatKind.FlexGrow)
730
+ }
731
+
732
+ setFlexShrink(flexShrink: number | undefined): void {
733
+ this.setFloat(YogaFloatKind.FlexShrink, flexShrink)
734
+ }
735
+
736
+ getFlexShrink(): number {
737
+ return this.getFloat(YogaFloatKind.FlexShrink)
738
+ }
739
+
740
+ setAspectRatio(aspectRatio: number | undefined): void {
741
+ this.setFloat(YogaFloatKind.AspectRatio, aspectRatio)
742
+ }
743
+
744
+ getAspectRatio(): number {
745
+ return this.getFloat(YogaFloatKind.AspectRatio)
746
+ }
747
+
748
+ setFlexBasis(flexBasis: ValueInput): void {
749
+ this.setValue(YogaValueKind.FlexBasis, 0, flexBasis)
750
+ }
751
+
752
+ setFlexBasisPercent(flexBasis: number | undefined): void {
753
+ this.setValue(
754
+ YogaValueKind.FlexBasis,
755
+ 0,
756
+ flexBasis === undefined ? undefined : { unit: Unit.Percent, value: flexBasis },
757
+ )
758
+ }
759
+
760
+ setFlexBasisAuto(): void {
761
+ this.setValue(YogaValueKind.FlexBasis, 0, "auto")
762
+ }
763
+
764
+ getFlexBasis(): Value {
765
+ return this.getValue(YogaValueKind.FlexBasis, 0)
766
+ }
767
+
768
+ setWidth(width: ValueInput): void {
769
+ this.setValue(YogaValueKind.Width, 0, width)
770
+ }
771
+
772
+ setWidthPercent(width: number | undefined): void {
773
+ this.setValue(YogaValueKind.Width, 0, width === undefined ? undefined : { unit: Unit.Percent, value: width })
774
+ }
775
+
776
+ setWidthAuto(): void {
777
+ this.setValue(YogaValueKind.Width, 0, "auto")
778
+ }
779
+
780
+ getWidth(): Value {
781
+ return this.getValue(YogaValueKind.Width, 0)
782
+ }
783
+
784
+ setHeight(height: ValueInput): void {
785
+ this.setValue(YogaValueKind.Height, 0, height)
786
+ }
787
+
788
+ setHeightPercent(height: number | undefined): void {
789
+ this.setValue(YogaValueKind.Height, 0, height === undefined ? undefined : { unit: Unit.Percent, value: height })
790
+ }
791
+
792
+ setHeightAuto(): void {
793
+ this.setValue(YogaValueKind.Height, 0, "auto")
794
+ }
795
+
796
+ getHeight(): Value {
797
+ return this.getValue(YogaValueKind.Height, 0)
798
+ }
799
+
800
+ setMinWidth(minWidth: ValueInputNoAuto): void {
801
+ this.setValue(YogaValueKind.MinWidth, 0, minWidth)
802
+ }
803
+
804
+ setMinWidthPercent(minWidth: number | undefined): void {
805
+ this.setValue(
806
+ YogaValueKind.MinWidth,
807
+ 0,
808
+ minWidth === undefined ? undefined : { unit: Unit.Percent, value: minWidth },
809
+ )
810
+ }
811
+
812
+ getMinWidth(): Value {
813
+ return this.getValue(YogaValueKind.MinWidth, 0)
814
+ }
815
+
816
+ setMinHeight(minHeight: ValueInputNoAuto): void {
817
+ this.setValue(YogaValueKind.MinHeight, 0, minHeight)
818
+ }
819
+
820
+ setMinHeightPercent(minHeight: number | undefined): void {
821
+ this.setValue(
822
+ YogaValueKind.MinHeight,
823
+ 0,
824
+ minHeight === undefined ? undefined : { unit: Unit.Percent, value: minHeight },
825
+ )
826
+ }
827
+
828
+ getMinHeight(): Value {
829
+ return this.getValue(YogaValueKind.MinHeight, 0)
830
+ }
831
+
832
+ setMaxWidth(maxWidth: ValueInputNoAuto): void {
833
+ this.setValue(YogaValueKind.MaxWidth, 0, maxWidth)
834
+ }
835
+
836
+ setMaxWidthPercent(maxWidth: number | undefined): void {
837
+ this.setValue(
838
+ YogaValueKind.MaxWidth,
839
+ 0,
840
+ maxWidth === undefined ? undefined : { unit: Unit.Percent, value: maxWidth },
841
+ )
842
+ }
843
+
844
+ getMaxWidth(): Value {
845
+ return this.getValue(YogaValueKind.MaxWidth, 0)
846
+ }
847
+
848
+ setMaxHeight(maxHeight: ValueInputNoAuto): void {
849
+ this.setValue(YogaValueKind.MaxHeight, 0, maxHeight)
850
+ }
851
+
852
+ setMaxHeightPercent(maxHeight: number | undefined): void {
853
+ this.setValue(
854
+ YogaValueKind.MaxHeight,
855
+ 0,
856
+ maxHeight === undefined ? undefined : { unit: Unit.Percent, value: maxHeight },
857
+ )
858
+ }
859
+
860
+ getMaxHeight(): Value {
861
+ return this.getValue(YogaValueKind.MaxHeight, 0)
862
+ }
863
+
864
+ setMargin(edge: Edge, margin: ValueInput): void {
865
+ this.setValue(YogaValueKind.Margin, edge, margin)
866
+ }
867
+
868
+ setMarginPercent(edge: Edge, margin: number | undefined): void {
869
+ this.setValue(YogaValueKind.Margin, edge, margin === undefined ? undefined : { unit: Unit.Percent, value: margin })
870
+ }
871
+
872
+ setMarginAuto(edge: Edge): void {
873
+ this.setValue(YogaValueKind.Margin, edge, "auto")
874
+ }
875
+
876
+ getMargin(edge: Edge): Value {
877
+ return this.getValue(YogaValueKind.Margin, edge)
878
+ }
879
+
880
+ setPadding(edge: Edge, padding: ValueInputNoAuto): void {
881
+ this.setValue(YogaValueKind.Padding, edge, padding)
882
+ }
883
+
884
+ setPaddingPercent(edge: Edge, padding: number | undefined): void {
885
+ this.setValue(
886
+ YogaValueKind.Padding,
887
+ edge,
888
+ padding === undefined ? undefined : { unit: Unit.Percent, value: padding },
889
+ )
890
+ }
891
+
892
+ getPadding(edge: Edge): Value {
893
+ return this.getValue(YogaValueKind.Padding, edge)
894
+ }
895
+
896
+ setPosition(edge: Edge, position: ValueInput): void {
897
+ this.setValue(YogaValueKind.Position, edge, position)
898
+ }
899
+
900
+ setPositionPercent(edge: Edge, position: number | undefined): void {
901
+ this.setValue(
902
+ YogaValueKind.Position,
903
+ edge,
904
+ position === undefined ? undefined : { unit: Unit.Percent, value: position },
905
+ )
906
+ }
907
+
908
+ setPositionAuto(edge: Edge): void {
909
+ this.setValue(YogaValueKind.Position, edge, "auto")
910
+ }
911
+
912
+ getPosition(edge: Edge): Value {
913
+ return this.getValue(YogaValueKind.Position, edge)
914
+ }
915
+
916
+ setGap(gutter: Gutter, gap: ValueInputNoAuto): void {
917
+ this.setValue(YogaValueKind.Gap, gutter, gap)
918
+ }
919
+
920
+ setGapPercent(gutter: Gutter, gap: number | undefined): void {
921
+ this.setValue(YogaValueKind.Gap, gutter, gap === undefined ? undefined : { unit: Unit.Percent, value: gap })
922
+ }
923
+
924
+ getGap(gutter: Gutter): Value {
925
+ return this.getValue(YogaValueKind.Gap, gutter)
926
+ }
927
+
928
+ setBorder(edge: Edge, border: number | undefined): void {
929
+ if (this.freed) return
930
+ lib().yogaNodeStyleSetBorder(this.ptr, edge, border ?? NaN)
931
+ }
932
+
933
+ getBorder(edge: Edge): number {
934
+ if (this.freed) return NaN
935
+ return lib().yogaNodeStyleGetBorder(this.ptr, edge)
936
+ }
937
+
938
+ setIsReferenceBaseline(isReferenceBaseline: boolean): void {
939
+ if (this.freed) return
940
+ lib().yogaNodeSetIsReferenceBaseline(this.ptr, isReferenceBaseline)
941
+ }
942
+
943
+ isReferenceBaseline(): boolean {
944
+ if (this.freed) return false
945
+ return lib().yogaNodeIsReferenceBaseline(this.ptr)
946
+ }
947
+
948
+ setAlwaysFormsContainingBlock(alwaysFormsContainingBlock: boolean): void {
949
+ if (this.freed) return
950
+ lib().yogaNodeSetAlwaysFormsContainingBlock(this.ptr, alwaysFormsContainingBlock)
951
+ }
952
+
953
+ getAlwaysFormsContainingBlock(): boolean {
954
+ if (this.freed) return false
955
+ return lib().yogaNodeGetAlwaysFormsContainingBlock(this.ptr)
956
+ }
957
+
958
+ // A Yoga node has a single measure slot, shared with native-backed measurement
959
+ // (NativeRenderable). Setting a JS measure func on a node that has a native
960
+ // measure target replaces the native one, and vice versa.
961
+ setMeasureFunc(measureFunc: MeasureFunction | null): void {
962
+ if (this.freed) return
963
+ this.unsetMeasureFunc()
964
+
965
+ if (!measureFunc) return
966
+
967
+ ensureMeasureCallback()
968
+ measureRegistry.set(this.ptr, measureFunc)
969
+ lib().yogaNodeSetMeasureFunc(this.ptr, true)
970
+ }
971
+
972
+ unsetMeasureFunc(): void {
973
+ if (this.freed) return
974
+ lib().yogaNodeUnsetMeasureFunc(this.ptr)
975
+ measureRegistry.delete(this.ptr)
976
+ }
977
+
978
+ hasMeasureFunc(): boolean {
979
+ if (this.freed) return false
980
+ return lib().yogaNodeHasMeasureFunc(this.ptr)
981
+ }
982
+
983
+ setDirtiedFunc(dirtiedFunc: DirtiedFunction | null): void {
984
+ if (this.freed) return
985
+ this.unsetDirtiedFunc()
986
+
987
+ if (!dirtiedFunc) return
988
+
989
+ ensureDirtiedCallback()
990
+ dirtiedRegistry.set(this.ptr, { node: this, callback: dirtiedFunc })
991
+ lib().yogaNodeSetDirtiedFunc(this.ptr, true)
992
+ }
993
+
994
+ unsetDirtiedFunc(): void {
995
+ if (this.freed) return
996
+ lib().yogaNodeUnsetDirtiedFunc(this.ptr)
997
+ dirtiedRegistry.delete(this.ptr)
998
+ }
999
+
1000
+ private setEnum(kind: number, value: number): void {
1001
+ if (this.freed) return
1002
+ lib().yogaNodeStyleSetEnum(this.ptr, kind, value)
1003
+ }
1004
+
1005
+ private getEnum(kind: number, fallback: number): number {
1006
+ if (this.freed) return fallback
1007
+ return lib().yogaNodeStyleGetEnum(this.ptr, kind)
1008
+ }
1009
+
1010
+ private setFloat(kind: number, value: number | undefined): void {
1011
+ if (this.freed) return
1012
+ lib().yogaNodeStyleSetFloat(this.ptr, kind, value ?? NaN)
1013
+ }
1014
+
1015
+ private getFloat(kind: number): number {
1016
+ if (this.freed) return NaN
1017
+ return lib().yogaNodeStyleGetFloat(this.ptr, kind)
1018
+ }
1019
+
1020
+ private setValue(kind: number, edgeOrGutter: number, valueInput: ValueInput): void {
1021
+ if (this.freed) return
1022
+ const value = parseValue(valueInput)
1023
+ lib().yogaNodeStyleSetValue(this.ptr, kind, edgeOrGutter, value.unit, value.value)
1024
+ }
1025
+
1026
+ private getValue(kind: number, edgeOrGutter: number): Value {
1027
+ if (this.freed) return UNDEFINED_VALUE
1028
+ return unpackValue(lib().yogaNodeStyleGetValue(this.ptr, kind, edgeOrGutter))
1029
+ }
1030
+
1031
+ private collectSubtree(nodes: Node[]): Node[] {
1032
+ for (let index = 0; index < this.getChildCount(); index++) {
1033
+ this.getChild(index)?.collectSubtree(nodes)
1034
+ }
1035
+ nodes.push(this)
1036
+ return nodes
1037
+ }
1038
+
1039
+ private unregisterCallbacks(): void {
1040
+ measureRegistry.delete(this.ptr)
1041
+ dirtiedRegistry.delete(this.ptr)
1042
+ }
1043
+
1044
+ private markFreed(): void {
1045
+ this.unregisterCallbacks()
1046
+ this.freed = true
1047
+ nodeRegistry.delete(this.ptr)
1048
+ }
1049
+ }
1050
+
1051
+ const Yoga = {
1052
+ Config,
1053
+ Node,
1054
+ Align,
1055
+ BoxSizing,
1056
+ Dimension,
1057
+ Direction,
1058
+ Display,
1059
+ Edge,
1060
+ Errata,
1061
+ ExperimentalFeature,
1062
+ FlexDirection,
1063
+ Gutter,
1064
+ Justify,
1065
+ LogLevel,
1066
+ MeasureMode,
1067
+ NodeType,
1068
+ Overflow,
1069
+ PositionType,
1070
+ Unit,
1071
+ Wrap,
1072
+ ALIGN_AUTO,
1073
+ ALIGN_FLEX_START,
1074
+ ALIGN_CENTER,
1075
+ ALIGN_FLEX_END,
1076
+ ALIGN_STRETCH,
1077
+ ALIGN_BASELINE,
1078
+ ALIGN_SPACE_BETWEEN,
1079
+ ALIGN_SPACE_AROUND,
1080
+ ALIGN_SPACE_EVENLY,
1081
+ BOX_SIZING_BORDER_BOX,
1082
+ BOX_SIZING_CONTENT_BOX,
1083
+ DIMENSION_WIDTH,
1084
+ DIMENSION_HEIGHT,
1085
+ DIRECTION_INHERIT,
1086
+ DIRECTION_LTR,
1087
+ DIRECTION_RTL,
1088
+ DISPLAY_FLEX,
1089
+ DISPLAY_NONE,
1090
+ DISPLAY_CONTENTS,
1091
+ EDGE_LEFT,
1092
+ EDGE_TOP,
1093
+ EDGE_RIGHT,
1094
+ EDGE_BOTTOM,
1095
+ EDGE_START,
1096
+ EDGE_END,
1097
+ EDGE_HORIZONTAL,
1098
+ EDGE_VERTICAL,
1099
+ EDGE_ALL,
1100
+ ERRATA_NONE,
1101
+ ERRATA_STRETCH_FLEX_BASIS,
1102
+ ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING,
1103
+ ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE,
1104
+ ERRATA_ALL,
1105
+ ERRATA_CLASSIC,
1106
+ EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS,
1107
+ FLEX_DIRECTION_COLUMN,
1108
+ FLEX_DIRECTION_COLUMN_REVERSE,
1109
+ FLEX_DIRECTION_ROW,
1110
+ FLEX_DIRECTION_ROW_REVERSE,
1111
+ GUTTER_COLUMN,
1112
+ GUTTER_ROW,
1113
+ GUTTER_ALL,
1114
+ JUSTIFY_FLEX_START,
1115
+ JUSTIFY_CENTER,
1116
+ JUSTIFY_FLEX_END,
1117
+ JUSTIFY_SPACE_BETWEEN,
1118
+ JUSTIFY_SPACE_AROUND,
1119
+ JUSTIFY_SPACE_EVENLY,
1120
+ LOG_LEVEL_ERROR,
1121
+ LOG_LEVEL_WARN,
1122
+ LOG_LEVEL_INFO,
1123
+ LOG_LEVEL_DEBUG,
1124
+ LOG_LEVEL_VERBOSE,
1125
+ LOG_LEVEL_FATAL,
1126
+ MEASURE_MODE_UNDEFINED,
1127
+ MEASURE_MODE_EXACTLY,
1128
+ MEASURE_MODE_AT_MOST,
1129
+ NODE_TYPE_DEFAULT,
1130
+ NODE_TYPE_TEXT,
1131
+ OVERFLOW_VISIBLE,
1132
+ OVERFLOW_HIDDEN,
1133
+ OVERFLOW_SCROLL,
1134
+ POSITION_TYPE_STATIC,
1135
+ POSITION_TYPE_RELATIVE,
1136
+ POSITION_TYPE_ABSOLUTE,
1137
+ UNIT_UNDEFINED,
1138
+ UNIT_POINT,
1139
+ UNIT_PERCENT,
1140
+ UNIT_AUTO,
1141
+ WRAP_NO_WRAP,
1142
+ WRAP_WRAP,
1143
+ WRAP_WRAP_REVERSE,
1144
+ }
1145
+
1146
+ export default Yoga