@react-x11/components 0.8.0 → 0.10.0

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 (721) hide show
  1. package/README.md +105 -38
  2. package/dist/charts/node.d.ts +12 -2
  3. package/dist/charts/node.d.ts.map +1 -1
  4. package/dist/charts/node.js +50 -16
  5. package/dist/charts/node.js.map +1 -1
  6. package/dist/charts/render.d.ts +12 -3
  7. package/dist/charts/render.d.ts.map +1 -1
  8. package/dist/charts/render.js +94 -25
  9. package/dist/charts/render.js.map +1 -1
  10. package/dist/code/index.d.ts.map +1 -1
  11. package/dist/code/index.js +3 -1
  12. package/dist/code/index.js.map +1 -1
  13. package/dist/code-editor/completion.d.ts.map +1 -1
  14. package/dist/code-editor/completion.js +3 -2
  15. package/dist/code-editor/completion.js.map +1 -1
  16. package/dist/code-editor/index.d.ts.map +1 -1
  17. package/dist/code-editor/index.js +19 -0
  18. package/dist/code-editor/index.js.map +1 -1
  19. package/dist/code-editor/node.d.ts +177 -7
  20. package/dist/code-editor/node.d.ts.map +1 -1
  21. package/dist/code-editor/node.js +1329 -164
  22. package/dist/code-editor/node.js.map +1 -1
  23. package/dist/code-language/languages/glsl.d.ts.map +1 -1
  24. package/dist/code-language/languages/glsl.js +10 -2
  25. package/dist/code-language/languages/glsl.js.map +1 -1
  26. package/dist/code-language/languages/javascript.d.ts.map +1 -1
  27. package/dist/code-language/languages/javascript.js +18 -3
  28. package/dist/code-language/languages/javascript.js.map +1 -1
  29. package/dist/code-language/languages/json.d.ts.map +1 -1
  30. package/dist/code-language/languages/json.js +10 -2
  31. package/dist/code-language/languages/json.js.map +1 -1
  32. package/dist/code-language/languages/shell.d.ts.map +1 -1
  33. package/dist/code-language/languages/shell.js +10 -2
  34. package/dist/code-language/languages/shell.js.map +1 -1
  35. package/dist/code-language/languages/sql.d.ts.map +1 -1
  36. package/dist/code-language/languages/sql.js +20 -2
  37. package/dist/code-language/languages/sql.js.map +1 -1
  38. package/dist/code-language/stream.d.ts +22 -0
  39. package/dist/code-language/stream.d.ts.map +1 -1
  40. package/dist/code-language/stream.js +259 -9
  41. package/dist/code-language/stream.js.map +1 -1
  42. package/dist/code-language/types.d.ts +5 -4
  43. package/dist/code-language/types.d.ts.map +1 -1
  44. package/dist/codeblock/index.d.ts +13 -2
  45. package/dist/codeblock/index.d.ts.map +1 -1
  46. package/dist/codeblock/index.js +20 -3
  47. package/dist/codeblock/index.js.map +1 -1
  48. package/dist/embed/client.d.ts +48 -3
  49. package/dist/embed/client.d.ts.map +1 -1
  50. package/dist/embed/client.js +79 -5
  51. package/dist/embed/client.js.map +1 -1
  52. package/dist/embed/index.d.ts +1 -1
  53. package/dist/embed/index.d.ts.map +1 -1
  54. package/dist/embed/index.js +1 -1
  55. package/dist/embed/index.js.map +1 -1
  56. package/dist/flow/draw.d.ts +50 -0
  57. package/dist/flow/draw.d.ts.map +1 -1
  58. package/dist/flow/draw.js +132 -33
  59. package/dist/flow/draw.js.map +1 -1
  60. package/dist/flow/gl/color.d.ts +13 -0
  61. package/dist/flow/gl/color.d.ts.map +1 -0
  62. package/dist/flow/gl/color.js +82 -0
  63. package/dist/flow/gl/color.js.map +1 -0
  64. package/dist/flow/gl/index.d.ts +60 -0
  65. package/dist/flow/gl/index.d.ts.map +1 -0
  66. package/dist/flow/gl/index.js +283 -0
  67. package/dist/flow/gl/index.js.map +1 -0
  68. package/dist/flow/gl/pack.d.ts +133 -0
  69. package/dist/flow/gl/pack.d.ts.map +1 -0
  70. package/dist/flow/gl/pack.js +408 -0
  71. package/dist/flow/gl/pack.js.map +1 -0
  72. package/dist/flow/gl/renderer.d.ts +95 -0
  73. package/dist/flow/gl/renderer.d.ts.map +1 -0
  74. package/dist/flow/gl/renderer.js +459 -0
  75. package/dist/flow/gl/renderer.js.map +1 -0
  76. package/dist/flow/gl/shaders.d.ts +79 -0
  77. package/dist/flow/gl/shaders.d.ts.map +1 -0
  78. package/dist/flow/gl/shaders.js +346 -0
  79. package/dist/flow/gl/shaders.js.map +1 -0
  80. package/dist/flow/gl/text.d.ts +318 -0
  81. package/dist/flow/gl/text.d.ts.map +1 -0
  82. package/dist/flow/gl/text.js +1103 -0
  83. package/dist/flow/gl/text.js.map +1 -0
  84. package/dist/flow/index.d.ts +1 -1
  85. package/dist/flow/index.d.ts.map +1 -1
  86. package/dist/flow/index.js +619 -64
  87. package/dist/flow/index.js.map +1 -1
  88. package/dist/flow/node.d.ts +621 -72
  89. package/dist/flow/node.d.ts.map +1 -1
  90. package/dist/flow/node.js +2253 -1018
  91. package/dist/flow/node.js.map +1 -1
  92. package/dist/flow/paint.d.ts +35 -0
  93. package/dist/flow/paint.d.ts.map +1 -0
  94. package/dist/flow/paint.js +393 -0
  95. package/dist/flow/paint.js.map +1 -0
  96. package/dist/flow/paths.d.ts +14 -0
  97. package/dist/flow/paths.d.ts.map +1 -1
  98. package/dist/flow/paths.js +45 -19
  99. package/dist/flow/paths.js.map +1 -1
  100. package/dist/flow/scene.d.ts +584 -0
  101. package/dist/flow/scene.d.ts.map +1 -0
  102. package/dist/flow/scene.js +1453 -0
  103. package/dist/flow/scene.js.map +1 -0
  104. package/dist/flow/types.d.ts +111 -1
  105. package/dist/flow/types.d.ts.map +1 -1
  106. package/dist/html/controls.d.ts +28 -0
  107. package/dist/html/controls.d.ts.map +1 -1
  108. package/dist/html/controls.js +52 -2
  109. package/dist/html/controls.js.map +1 -1
  110. package/dist/html/css/calc.d.ts +14 -0
  111. package/dist/html/css/calc.d.ts.map +1 -0
  112. package/dist/html/css/calc.js +344 -0
  113. package/dist/html/css/calc.js.map +1 -0
  114. package/dist/html/css/cascade.d.ts +240 -6
  115. package/dist/html/css/cascade.d.ts.map +1 -1
  116. package/dist/html/css/cascade.js +1327 -66
  117. package/dist/html/css/cascade.js.map +1 -1
  118. package/dist/html/css/color.d.ts +23 -0
  119. package/dist/html/css/color.d.ts.map +1 -0
  120. package/dist/html/css/color.js +740 -0
  121. package/dist/html/css/color.js.map +1 -0
  122. package/dist/html/css/content.d.ts +92 -0
  123. package/dist/html/css/content.d.ts.map +1 -0
  124. package/dist/html/css/content.js +388 -0
  125. package/dist/html/css/content.js.map +1 -0
  126. package/dist/html/css/counter-styles.d.ts +76 -0
  127. package/dist/html/css/counter-styles.d.ts.map +1 -0
  128. package/dist/html/css/counter-styles.js +893 -0
  129. package/dist/html/css/counter-styles.js.map +1 -0
  130. package/dist/html/css/decode.d.ts +12 -0
  131. package/dist/html/css/decode.d.ts.map +1 -0
  132. package/dist/html/css/decode.js +116 -0
  133. package/dist/html/css/decode.js.map +1 -0
  134. package/dist/html/css/parse.d.ts +110 -10
  135. package/dist/html/css/parse.d.ts.map +1 -1
  136. package/dist/html/css/parse.js +1473 -180
  137. package/dist/html/css/parse.js.map +1 -1
  138. package/dist/html/css/style.d.ts +498 -15
  139. package/dist/html/css/style.d.ts.map +1 -1
  140. package/dist/html/css/style.js +3698 -206
  141. package/dist/html/css/style.js.map +1 -1
  142. package/dist/html/css/ua.d.ts.map +1 -1
  143. package/dist/html/css/ua.js +57 -11
  144. package/dist/html/css/ua.js.map +1 -1
  145. package/dist/html/css/values.d.ts +37 -3
  146. package/dist/html/css/values.d.ts.map +1 -1
  147. package/dist/html/css/values.js +122 -48
  148. package/dist/html/css/values.js.map +1 -1
  149. package/dist/html/css/vars.d.ts +52 -0
  150. package/dist/html/css/vars.d.ts.map +1 -0
  151. package/dist/html/css/vars.js +358 -0
  152. package/dist/html/css/vars.js.map +1 -0
  153. package/dist/html/dom.d.ts +30 -4
  154. package/dist/html/dom.d.ts.map +1 -1
  155. package/dist/html/dom.js +278 -17
  156. package/dist/html/dom.js.map +1 -1
  157. package/dist/html/fonts.d.ts +106 -0
  158. package/dist/html/fonts.d.ts.map +1 -0
  159. package/dist/html/fonts.js +565 -0
  160. package/dist/html/fonts.js.map +1 -0
  161. package/dist/html/gif.d.ts +15 -0
  162. package/dist/html/gif.d.ts.map +1 -0
  163. package/dist/html/gif.js +229 -0
  164. package/dist/html/gif.js.map +1 -0
  165. package/dist/html/index.d.ts +50 -11
  166. package/dist/html/index.d.ts.map +1 -1
  167. package/dist/html/index.js +115 -9
  168. package/dist/html/index.js.map +1 -1
  169. package/dist/html/layout/block.d.ts +226 -3
  170. package/dist/html/layout/block.d.ts.map +1 -1
  171. package/dist/html/layout/block.js +2937 -197
  172. package/dist/html/layout/block.js.map +1 -1
  173. package/dist/html/layout/boxes.d.ts +340 -17
  174. package/dist/html/layout/boxes.d.ts.map +1 -1
  175. package/dist/html/layout/boxes.js +1714 -182
  176. package/dist/html/layout/boxes.js.map +1 -1
  177. package/dist/html/layout/cache.d.ts +58 -0
  178. package/dist/html/layout/cache.d.ts.map +1 -0
  179. package/dist/html/layout/cache.js +224 -0
  180. package/dist/html/layout/cache.js.map +1 -0
  181. package/dist/html/layout/collapse.d.ts +45 -0
  182. package/dist/html/layout/collapse.d.ts.map +1 -0
  183. package/dist/html/layout/collapse.js +246 -0
  184. package/dist/html/layout/collapse.js.map +1 -0
  185. package/dist/html/layout/css-grid.d.ts +7 -0
  186. package/dist/html/layout/css-grid.d.ts.map +1 -0
  187. package/dist/html/layout/css-grid.js +900 -0
  188. package/dist/html/layout/css-grid.js.map +1 -0
  189. package/dist/html/layout/flex.d.ts.map +1 -1
  190. package/dist/html/layout/flex.js +1025 -89
  191. package/dist/html/layout/flex.js.map +1 -1
  192. package/dist/html/layout/floats.d.ts +45 -6
  193. package/dist/html/layout/floats.d.ts.map +1 -1
  194. package/dist/html/layout/floats.js +113 -14
  195. package/dist/html/layout/floats.js.map +1 -1
  196. package/dist/html/layout/grid-lines.d.ts +39 -0
  197. package/dist/html/layout/grid-lines.d.ts.map +1 -0
  198. package/dist/html/layout/grid-lines.js +119 -0
  199. package/dist/html/layout/grid-lines.js.map +1 -0
  200. package/dist/html/layout/grid.d.ts +53 -0
  201. package/dist/html/layout/grid.d.ts.map +1 -0
  202. package/dist/html/layout/grid.js +153 -0
  203. package/dist/html/layout/grid.js.map +1 -0
  204. package/dist/html/layout/inline.d.ts +151 -1
  205. package/dist/html/layout/inline.d.ts.map +1 -1
  206. package/dist/html/layout/inline.js +3375 -174
  207. package/dist/html/layout/inline.js.map +1 -1
  208. package/dist/html/layout/shaping.d.ts +6 -0
  209. package/dist/html/layout/shaping.d.ts.map +1 -0
  210. package/dist/html/layout/shaping.js +100 -0
  211. package/dist/html/layout/shaping.js.map +1 -0
  212. package/dist/html/layout/table.d.ts +3 -0
  213. package/dist/html/layout/table.d.ts.map +1 -1
  214. package/dist/html/layout/table.js +681 -175
  215. package/dist/html/layout/table.js.map +1 -1
  216. package/dist/html/layout/tracks.d.ts +44 -0
  217. package/dist/html/layout/tracks.d.ts.map +1 -0
  218. package/dist/html/layout/tracks.js +349 -0
  219. package/dist/html/layout/tracks.js.map +1 -0
  220. package/dist/html/node.d.ts +172 -5
  221. package/dist/html/node.d.ts.map +1 -1
  222. package/dist/html/node.js +1336 -103
  223. package/dist/html/node.js.map +1 -1
  224. package/dist/html/paint.d.ts +92 -3
  225. package/dist/html/paint.d.ts.map +1 -1
  226. package/dist/html/paint.js +3503 -141
  227. package/dist/html/paint.js.map +1 -1
  228. package/dist/html/resources.d.ts +60 -14
  229. package/dist/html/resources.d.ts.map +1 -1
  230. package/dist/html/resources.js +122 -36
  231. package/dist/html/resources.js.map +1 -1
  232. package/dist/html/surfaces.d.ts +23 -0
  233. package/dist/html/surfaces.d.ts.map +1 -0
  234. package/dist/html/surfaces.js +68 -0
  235. package/dist/html/surfaces.js.map +1 -0
  236. package/dist/html/svg.d.ts +80 -0
  237. package/dist/html/svg.d.ts.map +1 -0
  238. package/dist/html/svg.js +435 -0
  239. package/dist/html/svg.js.map +1 -0
  240. package/dist/html/url.d.ts +23 -0
  241. package/dist/html/url.d.ts.map +1 -0
  242. package/dist/html/url.js +80 -0
  243. package/dist/html/url.js.map +1 -0
  244. package/dist/index.d.ts +2 -2
  245. package/dist/index.d.ts.map +1 -1
  246. package/dist/index.js +1 -1
  247. package/dist/index.js.map +1 -1
  248. package/dist/internal/collate.d.ts +3 -0
  249. package/dist/internal/collate.d.ts.map +1 -0
  250. package/dist/internal/collate.js +11 -0
  251. package/dist/internal/collate.js.map +1 -0
  252. package/dist/{markdown → internal/markdown}/ast.d.ts +23 -0
  253. package/dist/internal/markdown/ast.d.ts.map +1 -0
  254. package/dist/internal/markdown/ast.js +22 -0
  255. package/dist/internal/markdown/ast.js.map +1 -0
  256. package/dist/internal/markdown/parse.d.ts.map +1 -0
  257. package/dist/{markdown → internal/markdown}/parse.js +221 -30
  258. package/dist/internal/markdown/parse.js.map +1 -0
  259. package/dist/internal/markdown/stringify.d.ts +4 -0
  260. package/dist/internal/markdown/stringify.d.ts.map +1 -0
  261. package/dist/internal/markdown/stringify.js +684 -0
  262. package/dist/internal/markdown/stringify.js.map +1 -0
  263. package/dist/internal/markdown/tags.d.ts.map +1 -0
  264. package/dist/internal/markdown/tags.js.map +1 -0
  265. package/dist/internal/prewarm.d.ts +18 -0
  266. package/dist/internal/prewarm.d.ts.map +1 -0
  267. package/dist/internal/prewarm.js +42 -0
  268. package/dist/internal/prewarm.js.map +1 -0
  269. package/dist/internal/scroll.d.ts +3 -2
  270. package/dist/internal/scroll.d.ts.map +1 -1
  271. package/dist/internal/scroll.js +1 -0
  272. package/dist/internal/scroll.js.map +1 -1
  273. package/dist/internal/sdf.d.ts +20 -0
  274. package/dist/internal/sdf.d.ts.map +1 -0
  275. package/dist/internal/sdf.js +216 -0
  276. package/dist/internal/sdf.js.map +1 -0
  277. package/dist/internal/splice.d.ts +12 -0
  278. package/dist/internal/splice.d.ts.map +1 -0
  279. package/dist/internal/splice.js +23 -0
  280. package/dist/internal/splice.js.map +1 -0
  281. package/dist/internal/window.d.ts +12 -0
  282. package/dist/internal/window.d.ts.map +1 -1
  283. package/dist/internal/window.js +23 -6
  284. package/dist/internal/window.js.map +1 -1
  285. package/dist/maps/anchors.d.ts +103 -0
  286. package/dist/maps/anchors.d.ts.map +1 -0
  287. package/dist/maps/anchors.js +790 -0
  288. package/dist/maps/anchors.js.map +1 -0
  289. package/dist/maps/controller.d.ts +340 -0
  290. package/dist/maps/controller.d.ts.map +1 -0
  291. package/dist/maps/controller.js +822 -0
  292. package/dist/maps/controller.js.map +1 -0
  293. package/dist/maps/gl/buckets.d.ts +99 -0
  294. package/dist/maps/gl/buckets.d.ts.map +1 -0
  295. package/dist/maps/gl/buckets.js +365 -0
  296. package/dist/maps/gl/buckets.js.map +1 -0
  297. package/dist/maps/gl/build-worker.d.ts +15 -0
  298. package/dist/maps/gl/build-worker.d.ts.map +1 -0
  299. package/dist/maps/gl/build-worker.js +44 -0
  300. package/dist/maps/gl/build-worker.js.map +1 -0
  301. package/dist/maps/gl/color.d.ts +8 -0
  302. package/dist/maps/gl/color.d.ts.map +1 -0
  303. package/dist/maps/gl/color.js +57 -0
  304. package/dist/maps/gl/color.js.map +1 -0
  305. package/dist/maps/gl/cover.d.ts +70 -0
  306. package/dist/maps/gl/cover.d.ts.map +1 -0
  307. package/dist/maps/gl/cover.js +137 -0
  308. package/dist/maps/gl/cover.js.map +1 -0
  309. package/dist/maps/gl/index.d.ts +3 -0
  310. package/dist/maps/gl/index.d.ts.map +1 -0
  311. package/dist/maps/gl/index.js +20 -0
  312. package/dist/maps/gl/index.js.map +1 -0
  313. package/dist/maps/gl/markers.d.ts +28 -0
  314. package/dist/maps/gl/markers.d.ts.map +1 -0
  315. package/dist/maps/gl/markers.js +60 -0
  316. package/dist/maps/gl/markers.js.map +1 -0
  317. package/dist/maps/gl/overlays.d.ts +68 -0
  318. package/dist/maps/gl/overlays.d.ts.map +1 -0
  319. package/dist/maps/gl/overlays.js +300 -0
  320. package/dist/maps/gl/overlays.js.map +1 -0
  321. package/dist/maps/gl/pane.d.ts +12 -0
  322. package/dist/maps/gl/pane.d.ts.map +1 -0
  323. package/dist/maps/gl/pane.js +37 -0
  324. package/dist/maps/gl/pane.js.map +1 -0
  325. package/dist/maps/gl/placement.d.ts +124 -0
  326. package/dist/maps/gl/placement.d.ts.map +1 -0
  327. package/dist/maps/gl/placement.js +642 -0
  328. package/dist/maps/gl/placement.js.map +1 -0
  329. package/dist/maps/gl/renderer.d.ts +384 -0
  330. package/dist/maps/gl/renderer.d.ts.map +1 -0
  331. package/dist/maps/gl/renderer.js +1184 -0
  332. package/dist/maps/gl/renderer.js.map +1 -0
  333. package/dist/maps/gl/shaders.d.ts +121 -0
  334. package/dist/maps/gl/shaders.d.ts.map +1 -0
  335. package/dist/maps/gl/shaders.js +453 -0
  336. package/dist/maps/gl/shaders.js.map +1 -0
  337. package/dist/maps/gl/store.d.ts +125 -0
  338. package/dist/maps/gl/store.d.ts.map +1 -0
  339. package/dist/maps/gl/store.js +512 -0
  340. package/dist/maps/gl/store.js.map +1 -0
  341. package/dist/maps/gl/text.d.ts +283 -0
  342. package/dist/maps/gl/text.d.ts.map +1 -0
  343. package/dist/maps/gl/text.js +698 -0
  344. package/dist/maps/gl/text.js.map +1 -0
  345. package/dist/maps/gl/view.d.ts +345 -0
  346. package/dist/maps/gl/view.d.ts.map +1 -0
  347. package/dist/maps/gl/view.js +1209 -0
  348. package/dist/maps/gl/view.js.map +1 -0
  349. package/dist/maps/icons.d.ts +32 -0
  350. package/dist/maps/icons.d.ts.map +1 -0
  351. package/dist/maps/icons.js +151 -0
  352. package/dist/maps/icons.js.map +1 -0
  353. package/dist/maps/index.d.ts +3 -1
  354. package/dist/maps/index.d.ts.map +1 -1
  355. package/dist/maps/index.js +218 -52
  356. package/dist/maps/index.js.map +1 -1
  357. package/dist/maps/labels.d.ts +91 -18
  358. package/dist/maps/labels.d.ts.map +1 -1
  359. package/dist/maps/labels.js +376 -140
  360. package/dist/maps/labels.js.map +1 -1
  361. package/dist/maps/node.d.ts +179 -56
  362. package/dist/maps/node.d.ts.map +1 -1
  363. package/dist/maps/node.js +663 -537
  364. package/dist/maps/node.js.map +1 -1
  365. package/dist/maps/overlay.d.ts +72 -9
  366. package/dist/maps/overlay.d.ts.map +1 -1
  367. package/dist/maps/overlay.js +108 -28
  368. package/dist/maps/overlay.js.map +1 -1
  369. package/dist/maps/paint.d.ts +3 -0
  370. package/dist/maps/paint.d.ts.map +1 -1
  371. package/dist/maps/paint.js.map +1 -1
  372. package/dist/maps/proj.d.ts +62 -0
  373. package/dist/maps/proj.d.ts.map +1 -1
  374. package/dist/maps/proj.js +101 -0
  375. package/dist/maps/proj.js.map +1 -1
  376. package/dist/maps/renderer.d.ts +69 -0
  377. package/dist/maps/renderer.d.ts.map +1 -0
  378. package/dist/maps/renderer.js +66 -0
  379. package/dist/maps/renderer.js.map +1 -0
  380. package/dist/maps/sources.d.ts +30 -6
  381. package/dist/maps/sources.d.ts.map +1 -1
  382. package/dist/maps/sources.js +22 -3
  383. package/dist/maps/sources.js.map +1 -1
  384. package/dist/maps/style.d.ts +35 -0
  385. package/dist/maps/style.d.ts.map +1 -1
  386. package/dist/maps/style.js.map +1 -1
  387. package/dist/maps/styles.d.ts +12 -0
  388. package/dist/maps/styles.d.ts.map +1 -1
  389. package/dist/maps/styles.js +120 -6
  390. package/dist/maps/styles.js.map +1 -1
  391. package/dist/maps/theme.d.ts +19 -0
  392. package/dist/maps/theme.d.ts.map +1 -0
  393. package/dist/maps/theme.js +44 -0
  394. package/dist/maps/theme.js.map +1 -0
  395. package/dist/maps/tiles.d.ts +147 -27
  396. package/dist/maps/tiles.d.ts.map +1 -1
  397. package/dist/maps/tiles.js +221 -54
  398. package/dist/maps/tiles.js.map +1 -1
  399. package/dist/maps/types.d.ts +213 -21
  400. package/dist/maps/types.d.ts.map +1 -1
  401. package/dist/markdown/expressions.d.ts +1 -1
  402. package/dist/markdown/expressions.d.ts.map +1 -1
  403. package/dist/markdown/expressions.js.map +1 -1
  404. package/dist/markdown/index.d.ts +7 -6
  405. package/dist/markdown/index.d.ts.map +1 -1
  406. package/dist/markdown/index.js +121 -50
  407. package/dist/markdown/index.js.map +1 -1
  408. package/dist/markdown/spans.d.ts +1 -1
  409. package/dist/markdown/spans.d.ts.map +1 -1
  410. package/dist/markdown/spans.js +6 -0
  411. package/dist/markdown/spans.js.map +1 -1
  412. package/dist/media-player/index.d.ts +11 -3
  413. package/dist/media-player/index.d.ts.map +1 -1
  414. package/dist/media-player/index.js +13 -2
  415. package/dist/media-player/index.js.map +1 -1
  416. package/dist/qml/containers.d.ts.map +1 -1
  417. package/dist/qml/containers.js +6 -1
  418. package/dist/qml/containers.js.map +1 -1
  419. package/dist/qml/interaction.d.ts.map +1 -1
  420. package/dist/qml/interaction.js +38 -5
  421. package/dist/qml/interaction.js.map +1 -1
  422. package/dist/qml/layouts.d.ts.map +1 -1
  423. package/dist/qml/layouts.js +21 -6
  424. package/dist/qml/layouts.js.map +1 -1
  425. package/dist/qml/qtquick.d.ts.map +1 -1
  426. package/dist/qml/qtquick.js +9 -2
  427. package/dist/qml/qtquick.js.map +1 -1
  428. package/dist/qml/react.d.ts.map +1 -1
  429. package/dist/qml/react.js +9 -7
  430. package/dist/qml/react.js.map +1 -1
  431. package/dist/reorder/clock.d.ts +7 -0
  432. package/dist/reorder/clock.d.ts.map +1 -0
  433. package/dist/reorder/clock.js +26 -0
  434. package/dist/reorder/clock.js.map +1 -0
  435. package/dist/reorder/index.d.ts +25 -3
  436. package/dist/reorder/index.d.ts.map +1 -1
  437. package/dist/reorder/index.js +64 -19
  438. package/dist/reorder/index.js.map +1 -1
  439. package/dist/rich-text-editor/clipboard.d.ts +23 -0
  440. package/dist/rich-text-editor/clipboard.d.ts.map +1 -0
  441. package/dist/rich-text-editor/clipboard.js +307 -0
  442. package/dist/rich-text-editor/clipboard.js.map +1 -0
  443. package/dist/rich-text-editor/collab.d.ts +32 -0
  444. package/dist/rich-text-editor/collab.d.ts.map +1 -0
  445. package/dist/rich-text-editor/collab.js +55 -0
  446. package/dist/rich-text-editor/collab.js.map +1 -0
  447. package/dist/rich-text-editor/commands.d.ts +50 -0
  448. package/dist/rich-text-editor/commands.d.ts.map +1 -0
  449. package/dist/rich-text-editor/commands.js +376 -0
  450. package/dist/rich-text-editor/commands.js.map +1 -0
  451. package/dist/rich-text-editor/drag.d.ts +68 -0
  452. package/dist/rich-text-editor/drag.d.ts.map +1 -0
  453. package/dist/rich-text-editor/drag.js +148 -0
  454. package/dist/rich-text-editor/drag.js.map +1 -0
  455. package/dist/rich-text-editor/html.d.ts +145 -0
  456. package/dist/rich-text-editor/html.d.ts.map +1 -0
  457. package/dist/rich-text-editor/html.js +516 -0
  458. package/dist/rich-text-editor/html.js.map +1 -0
  459. package/dist/rich-text-editor/index.d.ts +252 -0
  460. package/dist/rich-text-editor/index.d.ts.map +1 -0
  461. package/dist/rich-text-editor/index.js +856 -0
  462. package/dist/rich-text-editor/index.js.map +1 -0
  463. package/dist/rich-text-editor/inline.d.ts +94 -0
  464. package/dist/rich-text-editor/inline.d.ts.map +1 -0
  465. package/dist/rich-text-editor/inline.js +252 -0
  466. package/dist/rich-text-editor/inline.js.map +1 -0
  467. package/dist/rich-text-editor/keymap.d.ts +71 -0
  468. package/dist/rich-text-editor/keymap.d.ts.map +1 -0
  469. package/dist/rich-text-editor/keymap.js +394 -0
  470. package/dist/rich-text-editor/keymap.js.map +1 -0
  471. package/dist/rich-text-editor/keys.d.ts +40 -0
  472. package/dist/rich-text-editor/keys.d.ts.map +1 -0
  473. package/dist/rich-text-editor/keys.js +202 -0
  474. package/dist/rich-text-editor/keys.js.map +1 -0
  475. package/dist/rich-text-editor/look.d.ts +71 -0
  476. package/dist/rich-text-editor/look.d.ts.map +1 -0
  477. package/dist/rich-text-editor/look.js +342 -0
  478. package/dist/rich-text-editor/look.js.map +1 -0
  479. package/dist/rich-text-editor/markdown.d.ts +18 -0
  480. package/dist/rich-text-editor/markdown.d.ts.map +1 -0
  481. package/dist/rich-text-editor/markdown.js +496 -0
  482. package/dist/rich-text-editor/markdown.js.map +1 -0
  483. package/dist/rich-text-editor/marks.d.ts +9 -0
  484. package/dist/rich-text-editor/marks.d.ts.map +1 -0
  485. package/dist/rich-text-editor/marks.js +83 -0
  486. package/dist/rich-text-editor/marks.js.map +1 -0
  487. package/dist/rich-text-editor/nodes.d.ts +135 -0
  488. package/dist/rich-text-editor/nodes.d.ts.map +1 -0
  489. package/dist/rich-text-editor/nodes.js +397 -0
  490. package/dist/rich-text-editor/nodes.js.map +1 -0
  491. package/dist/rich-text-editor/render.d.ts +68 -0
  492. package/dist/rich-text-editor/render.d.ts.map +1 -0
  493. package/dist/rich-text-editor/render.js +518 -0
  494. package/dist/rich-text-editor/render.js.map +1 -0
  495. package/dist/rich-text-editor/schema.d.ts +16 -0
  496. package/dist/rich-text-editor/schema.d.ts.map +1 -0
  497. package/dist/rich-text-editor/schema.js +386 -0
  498. package/dist/rich-text-editor/schema.js.map +1 -0
  499. package/dist/rich-text-editor/store.d.ts +11 -0
  500. package/dist/rich-text-editor/store.d.ts.map +1 -0
  501. package/dist/rich-text-editor/store.js +43 -0
  502. package/dist/rich-text-editor/store.js.map +1 -0
  503. package/dist/rich-text-editor/suggest.d.ts +127 -0
  504. package/dist/rich-text-editor/suggest.d.ts.map +1 -0
  505. package/dist/rich-text-editor/suggest.js +0 -0
  506. package/dist/rich-text-editor/suggest.js.map +1 -0
  507. package/dist/rich-text-editor/tables.d.ts +41 -0
  508. package/dist/rich-text-editor/tables.d.ts.map +1 -0
  509. package/dist/rich-text-editor/tables.js +204 -0
  510. package/dist/rich-text-editor/tables.js.map +1 -0
  511. package/dist/rich-text-editor/toolbar.d.ts +58 -0
  512. package/dist/rich-text-editor/toolbar.d.ts.map +1 -0
  513. package/dist/rich-text-editor/toolbar.js +548 -0
  514. package/dist/rich-text-editor/toolbar.js.map +1 -0
  515. package/dist/rich-text-editor/view.d.ts +368 -0
  516. package/dist/rich-text-editor/view.d.ts.map +1 -0
  517. package/dist/rich-text-editor/view.js +1968 -0
  518. package/dist/rich-text-editor/view.js.map +1 -0
  519. package/dist/rich-text-editor/virtual.d.ts +54 -0
  520. package/dist/rich-text-editor/virtual.d.ts.map +1 -0
  521. package/dist/rich-text-editor/virtual.js +279 -0
  522. package/dist/rich-text-editor/virtual.js.map +1 -0
  523. package/dist/richtext/node.d.ts +71 -4
  524. package/dist/richtext/node.d.ts.map +1 -1
  525. package/dist/richtext/node.js +233 -28
  526. package/dist/richtext/node.js.map +1 -1
  527. package/dist/richtext/runs.d.ts +13 -8
  528. package/dist/richtext/runs.d.ts.map +1 -1
  529. package/dist/richtext/runs.js +18 -8
  530. package/dist/richtext/runs.js.map +1 -1
  531. package/dist/table/index.d.ts.map +1 -1
  532. package/dist/table/index.js +23 -0
  533. package/dist/table/index.js.map +1 -1
  534. package/dist/table/rows.d.ts +3 -2
  535. package/dist/table/rows.d.ts.map +1 -1
  536. package/dist/table/rows.js +20 -6
  537. package/dist/table/rows.js.map +1 -1
  538. package/dist/terminal/backends.d.ts +4 -1
  539. package/dist/terminal/backends.d.ts.map +1 -1
  540. package/dist/terminal/backends.js.map +1 -1
  541. package/dist/terminal/index.d.ts +18 -7
  542. package/dist/terminal/index.d.ts.map +1 -1
  543. package/dist/terminal/index.js +32 -11
  544. package/dist/terminal/index.js.map +1 -1
  545. package/dist/terminal/vt/pty.d.ts +13 -2
  546. package/dist/terminal/vt/pty.d.ts.map +1 -1
  547. package/dist/terminal/vt/pty.js +18 -3
  548. package/dist/terminal/vt/pty.js.map +1 -1
  549. package/dist/terminal-output/index.d.ts.map +1 -1
  550. package/dist/terminal-output/index.js +6 -1
  551. package/dist/terminal-output/index.js.map +1 -1
  552. package/dist/three/canvas.d.ts.map +1 -1
  553. package/dist/three/canvas.js +85 -7
  554. package/dist/three/canvas.js.map +1 -1
  555. package/dist/three/events.d.ts +22 -4
  556. package/dist/three/events.d.ts.map +1 -1
  557. package/dist/three/events.js +34 -4
  558. package/dist/three/events.js.map +1 -1
  559. package/dist/tree/index.d.ts.map +1 -1
  560. package/dist/tree/index.js +17 -0
  561. package/dist/tree/index.js.map +1 -1
  562. package/package.json +59 -31
  563. package/src/charts/node.ts +68 -28
  564. package/src/charts/render.ts +120 -30
  565. package/src/code/index.ts +3 -1
  566. package/src/code-editor/completion.ts +3 -2
  567. package/src/code-editor/index.ts +19 -0
  568. package/src/code-editor/node.ts +1574 -184
  569. package/src/code-language/languages/glsl.ts +12 -2
  570. package/src/code-language/languages/javascript.ts +21 -4
  571. package/src/code-language/languages/json.ts +12 -2
  572. package/src/code-language/languages/shell.ts +12 -2
  573. package/src/code-language/languages/sql.ts +22 -2
  574. package/src/code-language/stream.ts +257 -17
  575. package/src/code-language/types.ts +5 -4
  576. package/src/codeblock/index.ts +20 -3
  577. package/src/embed/client.ts +102 -8
  578. package/src/embed/index.ts +2 -0
  579. package/src/flow/draw.ts +167 -41
  580. package/src/flow/gl/color.ts +85 -0
  581. package/src/flow/gl/index.ts +342 -0
  582. package/src/flow/gl/pack.ts +585 -0
  583. package/src/flow/gl/renderer.ts +679 -0
  584. package/src/flow/gl/shaders.ts +371 -0
  585. package/src/flow/gl/text.ts +1295 -0
  586. package/src/flow/index.ts +794 -67
  587. package/src/flow/node.ts +2496 -1256
  588. package/src/flow/paint.ts +511 -0
  589. package/src/flow/paths.ts +80 -15
  590. package/src/flow/scene.ts +2199 -0
  591. package/src/flow/types.ts +113 -1
  592. package/src/html/controls.ts +73 -2
  593. package/src/html/css/calc.ts +385 -0
  594. package/src/html/css/cascade.ts +1403 -62
  595. package/src/html/css/color.ts +755 -0
  596. package/src/html/css/content.ts +417 -0
  597. package/src/html/css/counter-styles.ts +973 -0
  598. package/src/html/css/decode.ts +130 -0
  599. package/src/html/css/parse.ts +1514 -160
  600. package/src/html/css/style.ts +4102 -222
  601. package/src/html/css/ua.ts +58 -12
  602. package/src/html/css/values.ts +150 -50
  603. package/src/html/css/vars.ts +348 -0
  604. package/src/html/dom.ts +284 -17
  605. package/src/html/fonts.ts +641 -0
  606. package/src/html/gif.ts +233 -0
  607. package/src/html/index.ts +180 -20
  608. package/src/html/layout/block.ts +3456 -230
  609. package/src/html/layout/boxes.ts +2100 -190
  610. package/src/html/layout/cache.ts +289 -0
  611. package/src/html/layout/collapse.ts +317 -0
  612. package/src/html/layout/css-grid.ts +1063 -0
  613. package/src/html/layout/flex.ts +1115 -106
  614. package/src/html/layout/floats.ts +128 -14
  615. package/src/html/layout/grid-lines.ts +141 -0
  616. package/src/html/layout/grid.ts +181 -0
  617. package/src/html/layout/inline.ts +3943 -192
  618. package/src/html/layout/shaping.ts +140 -0
  619. package/src/html/layout/table.ts +696 -186
  620. package/src/html/layout/tracks.ts +437 -0
  621. package/src/html/node.ts +1486 -121
  622. package/src/html/paint.ts +4293 -169
  623. package/src/html/resources.ts +161 -50
  624. package/src/html/surfaces.ts +81 -0
  625. package/src/html/svg.ts +493 -0
  626. package/src/html/url.ts +86 -0
  627. package/src/index.ts +4 -0
  628. package/src/internal/collate.ts +12 -0
  629. package/src/{markdown → internal/markdown}/ast.ts +35 -7
  630. package/src/{markdown → internal/markdown}/parse.ts +288 -35
  631. package/src/internal/markdown/stringify.ts +772 -0
  632. package/src/internal/prewarm.ts +45 -0
  633. package/src/internal/scroll.ts +5 -3
  634. package/src/internal/sdf.ts +227 -0
  635. package/src/internal/splice.ts +25 -0
  636. package/src/internal/window.ts +36 -5
  637. package/src/maps/anchors.ts +913 -0
  638. package/src/maps/controller.ts +1084 -0
  639. package/src/maps/gl/buckets.ts +461 -0
  640. package/src/maps/gl/build-worker.ts +66 -0
  641. package/src/maps/gl/color.ts +62 -0
  642. package/src/maps/gl/cover.ts +205 -0
  643. package/src/maps/gl/index.ts +23 -0
  644. package/src/maps/gl/markers.ts +83 -0
  645. package/src/maps/gl/overlays.ts +379 -0
  646. package/src/maps/gl/pane.ts +42 -0
  647. package/src/maps/gl/placement.ts +968 -0
  648. package/src/maps/gl/renderer.ts +1660 -0
  649. package/src/maps/gl/shaders.ts +489 -0
  650. package/src/maps/gl/store.ts +615 -0
  651. package/src/maps/gl/text.ts +868 -0
  652. package/src/maps/gl/view.ts +1489 -0
  653. package/src/maps/icons.ts +183 -0
  654. package/src/maps/index.ts +274 -81
  655. package/src/maps/labels.ts +457 -144
  656. package/src/maps/node.ts +832 -665
  657. package/src/maps/overlay.ts +148 -43
  658. package/src/maps/paint.ts +3 -0
  659. package/src/maps/proj.ts +118 -0
  660. package/src/maps/renderer.ts +155 -0
  661. package/src/maps/sources.ts +43 -6
  662. package/src/maps/style.ts +32 -0
  663. package/src/maps/styles.ts +215 -4
  664. package/src/maps/theme.ts +51 -0
  665. package/src/maps/tiles.ts +253 -62
  666. package/src/maps/types.ts +213 -21
  667. package/src/markdown/expressions.ts +5 -1
  668. package/src/markdown/index.ts +163 -78
  669. package/src/markdown/spans.ts +6 -1
  670. package/src/media-player/index.ts +18 -4
  671. package/src/qml/containers.tsx +6 -1
  672. package/src/qml/interaction.tsx +42 -5
  673. package/src/qml/layouts.tsx +21 -6
  674. package/src/qml/qtquick.tsx +9 -2
  675. package/src/qml/react.tsx +7 -5
  676. package/src/reorder/clock.ts +27 -0
  677. package/src/reorder/index.ts +100 -27
  678. package/src/rich-text-editor/clipboard.ts +439 -0
  679. package/src/rich-text-editor/collab.ts +91 -0
  680. package/src/rich-text-editor/commands.ts +448 -0
  681. package/src/rich-text-editor/dom-globals.d.ts +23 -0
  682. package/src/rich-text-editor/drag.ts +211 -0
  683. package/src/rich-text-editor/html.ts +619 -0
  684. package/src/rich-text-editor/index.ts +1364 -0
  685. package/src/rich-text-editor/inline.ts +345 -0
  686. package/src/rich-text-editor/keymap.ts +510 -0
  687. package/src/rich-text-editor/keys.ts +228 -0
  688. package/src/rich-text-editor/look.ts +427 -0
  689. package/src/rich-text-editor/markdown.ts +653 -0
  690. package/src/rich-text-editor/marks.ts +101 -0
  691. package/src/rich-text-editor/nodes.ts +497 -0
  692. package/src/rich-text-editor/render.ts +837 -0
  693. package/src/rich-text-editor/schema.ts +431 -0
  694. package/src/rich-text-editor/store.ts +39 -0
  695. package/src/rich-text-editor/suggest.ts +597 -0
  696. package/src/rich-text-editor/tables.ts +272 -0
  697. package/src/rich-text-editor/toolbar.ts +724 -0
  698. package/src/rich-text-editor/view.ts +2287 -0
  699. package/src/rich-text-editor/virtual.ts +372 -0
  700. package/src/richtext/node.ts +294 -44
  701. package/src/richtext/runs.ts +23 -12
  702. package/src/table/index.ts +29 -0
  703. package/src/table/rows.ts +18 -8
  704. package/src/terminal/backends.ts +4 -1
  705. package/src/terminal/index.ts +47 -15
  706. package/src/terminal/vt/pty.ts +16 -2
  707. package/src/terminal-output/index.ts +6 -1
  708. package/src/three/canvas.ts +102 -8
  709. package/src/three/events.ts +49 -9
  710. package/src/tree/index.ts +19 -0
  711. package/dist/markdown/ast.d.ts.map +0 -1
  712. package/dist/markdown/ast.js +0 -17
  713. package/dist/markdown/ast.js.map +0 -1
  714. package/dist/markdown/parse.d.ts.map +0 -1
  715. package/dist/markdown/parse.js.map +0 -1
  716. package/dist/markdown/tags.d.ts.map +0 -1
  717. package/dist/markdown/tags.js.map +0 -1
  718. /package/dist/{markdown → internal/markdown}/parse.d.ts +0 -0
  719. /package/dist/{markdown → internal/markdown}/tags.d.ts +0 -0
  720. /package/dist/{markdown → internal/markdown}/tags.js +0 -0
  721. /package/src/{markdown → internal/markdown}/tags.ts +0 -0
@@ -0,0 +1,493 @@
1
+ // SVG, drawn.
2
+ //
3
+ // An inline `<svg>` and an SVG image are drawn by ntk's `SvgView`, over the
4
+ // same 2d context as the rest of the document — the drawing core's own
5
+ // `<svg>` element uses. It is reached through `react-x11/ntk`, which
6
+ // re-exports ntk whole: `SvgView` is a runtime export the subpath's
7
+ // declarations do not name, so it is read off the namespace and probed, the
8
+ // way `resources.ts` reaches `decodeImage`. Without it an SVG is a box of its
9
+ // size with nothing drawn in it, which is what it was before.
10
+ //
11
+ // What is here is the part CSS and SVG own between them: an SVG's intrinsic
12
+ // width, height and ratio, which size its box (CSS 2.1 10.3.2, SVG 2's
13
+ // intrinsic sizing), and its viewport — the `viewBox` scaled into the box
14
+ // as `preserveAspectRatio` says, and clipped to it.
15
+ import { parseDocument } from 'htmlparser2';
16
+ import { Element, Text } from 'domhandler';
17
+ import type { ChildNode } from 'domhandler';
18
+ import * as ntk from 'react-x11/ntk';
19
+ import { isSvgRoot } from './dom.js';
20
+ import { inkColor, isTransparent, parseColor } from './css/values.js';
21
+
22
+ export { isSvgRoot };
23
+
24
+ /** What an image says about its own size, in CSS pixels: a width and a
25
+ * height — a raster image always has both, an SVG those that are absolute
26
+ * lengths — and its ratio, width over height, or 0 where it has none. */
27
+ export interface IntrinsicSize {
28
+ width: number | null;
29
+ height: number | null;
30
+ ratio: number;
31
+ }
32
+
33
+ function svgAttr(el: Element, name: string): string | undefined {
34
+ // an XML parse keeps SVG's camelCase, an HTML one lowercases it
35
+ return el.attribs[name] ?? el.attribs[name.toLowerCase()];
36
+ }
37
+
38
+ /** CSS pixels per unit, for the absolute units. */
39
+ const ABSOLUTE: Record<string, number> = {
40
+ '': 1,
41
+ px: 1,
42
+ pt: 4 / 3,
43
+ pc: 16,
44
+ in: 96,
45
+ cm: 96 / 2.54,
46
+ mm: 96 / 25.4,
47
+ q: 96 / 101.6,
48
+ };
49
+
50
+ const LENGTH = /^\s*([+-]?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?)\s*([a-z]*)\s*$/i;
51
+
52
+ /** An SVG `width` or `height` in CSS pixels, where it is an absolute length.
53
+ * A percentage, `auto` and anything unparseable are no length at all, and
54
+ * a negative one is an error, which is the same. */
55
+ function absoluteLength(
56
+ value: string | undefined,
57
+ fontSize: number,
58
+ ): number | null {
59
+ if (value === undefined) return null;
60
+ const m = LENGTH.exec(value);
61
+ if (!m) return null;
62
+ const n = parseFloat(m[1]);
63
+ const unit = m[2].toLowerCase();
64
+ let px: number;
65
+ if (unit in ABSOLUTE) px = n * ABSOLUTE[unit];
66
+ else if (unit === 'em') px = n * fontSize;
67
+ else if (unit === 'ex') px = (n * fontSize) / 2;
68
+ else return null;
69
+ return px >= 0 ? px : null;
70
+ }
71
+
72
+ /**
73
+ * The `width`/`height` of an inline `<svg>` as CSS: they are presentation
74
+ * attributes for the properties of the same names (SVG 2, 5.1.1), so
75
+ * `height="50%"` is a percentage of the containing block like a style's.
76
+ * A bare number is pixels; null for what CSS would not parse.
77
+ */
78
+ export function svgSizeHint(value: string): string | null {
79
+ const v = value.trim();
80
+ if (/^[+-]?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?%$/i.test(v)) return v;
81
+ const m = LENGTH.exec(v);
82
+ if (!m) return null;
83
+ return m[2] ? v : `${parseFloat(m[1])}px`;
84
+ }
85
+
86
+ /** A percentage length as a fraction, or 1 for anything else. */
87
+ function percentOf(value: string | undefined): number {
88
+ const v = value?.trim();
89
+ if (!v?.endsWith('%')) return 1;
90
+ const n = parseFloat(v);
91
+ return Number.isFinite(n) && n >= 0 ? n / 100 : 1;
92
+ }
93
+
94
+ function viewBoxOf(el: Element): [number, number, number, number] | null {
95
+ const parts = (svgAttr(el, 'viewBox') ?? '')
96
+ .trim()
97
+ .split(/[\s,]+/)
98
+ .map(Number);
99
+ if (parts.length !== 4 || !parts.every(Number.isFinite)) return null;
100
+ // a zero or negative extent is an error: as though there were none
101
+ return parts[2] > 0 && parts[3] > 0
102
+ ? [parts[0], parts[1], parts[2], parts[3]]
103
+ : null;
104
+ }
105
+
106
+ /**
107
+ * An SVG root's intrinsic size and ratio (SVG 2, "Intrinsic sizing
108
+ * properties of the viewport of SVG images"): its `width` and `height` where
109
+ * they are absolute, and a ratio from those two, or else from its `viewBox`.
110
+ * `fontSize` is what an `em` in them is, in CSS pixels.
111
+ */
112
+ export function svgIntrinsics(el: Element, fontSize = 16): IntrinsicSize {
113
+ const width = absoluteLength(svgAttr(el, 'width'), fontSize);
114
+ const height = absoluteLength(svgAttr(el, 'height'), fontSize);
115
+ let ratio = 0;
116
+ if (width !== null && height !== null && width > 0 && height > 0) {
117
+ ratio = width / height;
118
+ } else {
119
+ const box = viewBoxOf(el);
120
+ if (box) ratio = box[2] / box[3];
121
+ }
122
+ return { width, height, ratio };
123
+ }
124
+
125
+ /** The slice of ntk's `SvgView` this draws with. */
126
+ interface SvgViewLike {
127
+ naturalWidth: number;
128
+ naturalHeight: number;
129
+ setSvgDom(element: Element): unknown;
130
+ draw(
131
+ ctx: unknown,
132
+ x: number,
133
+ y: number,
134
+ w: number,
135
+ h: number,
136
+ opts?: { color?: string },
137
+ ): void;
138
+ }
139
+
140
+ type SvgViewConstructor = new (window: null) => SvgViewLike;
141
+
142
+ function svgViewClass(): SvgViewConstructor | null {
143
+ const ctor = (ntk as unknown as Record<string, unknown>).SvgView;
144
+ return typeof ctor === 'function' ? (ctor as SvgViewConstructor) : null;
145
+ }
146
+
147
+ /** The context slice an SVG needs besides what `SvgView` itself calls. */
148
+ interface ClipContext {
149
+ save(): void;
150
+ restore(): void;
151
+ beginPath?(): void;
152
+ rect?(x: number, y: number, w: number, h: number): void;
153
+ clip?(): void;
154
+ fill?: unknown;
155
+ fillStyle?: unknown;
156
+ fillRect?(x: number, y: number, w: number, h: number): void;
157
+ }
158
+
159
+ const ALIGN = /^x(Min|Mid|Max)Y(Min|Mid|Max)$/;
160
+ const AT: Record<string, number> = { Min: 0, Mid: 0.5, Max: 1 };
161
+
162
+ /**
163
+ * One SVG drawing: an inline `<svg>` element, or an SVG image's document.
164
+ * The `SvgView` is made at the first draw, so a document whose drawings are
165
+ * never scrolled to never pays for them.
166
+ */
167
+ export class SvgDrawing {
168
+ readonly intrinsics: IntrinsicSize;
169
+ private readonly _root: Element;
170
+ private _view: SvgViewLike | null = null;
171
+ /** What the view was last handed the tree for: the root's child count
172
+ * and last child — a streamed document grows an inline drawing after its
173
+ * first paint — and, for a drawing with percentages in it, the viewport
174
+ * they were resolved against. */
175
+ private _seen = -1;
176
+ private _seenLast: ChildNode | null = null;
177
+ private _seenViewport = '';
178
+ /** Whether a length in the tree is a percentage of the viewport; null
179
+ * until the tree is first read. */
180
+ private _percent: boolean | null = null;
181
+ private _failed = false;
182
+ /** An SVG image's own document, rather than an element of this one. */
183
+ private readonly _standalone: boolean;
184
+ /** The background an image's root gives its canvas; undefined until it
185
+ * is first read. */
186
+ private _canvas: string | null | undefined = undefined;
187
+
188
+ constructor(root: Element, intrinsics: IntrinsicSize, standalone = false) {
189
+ this._root = root;
190
+ this.intrinsics = intrinsics;
191
+ this._standalone = standalone;
192
+ }
193
+
194
+ /**
195
+ * Draw into a rectangle — the box's content box, in device pixels —
196
+ * clipped to it. The `viewBox`, where there is one, is fitted to it as
197
+ * `preserveAspectRatio` says; without one a user unit is a CSS pixel,
198
+ * which is `scale` device pixels. `color` is `currentColor`.
199
+ */
200
+ draw(
201
+ ctx: ClipContext,
202
+ x: number,
203
+ y: number,
204
+ w: number,
205
+ h: number,
206
+ scale: number,
207
+ color?: string,
208
+ ): void {
209
+ if (this._failed || !(w > 0 && h > 0)) return;
210
+ // the mock backend has no path API, and SvgView draws paths
211
+ if (!ctx.beginPath || !ctx.rect || !ctx.clip || !ctx.fill) return;
212
+ const root = this._root;
213
+ if (this._standalone) {
214
+ // the root's background is the canvas's, and an image's canvas is
215
+ // all of the rectangle, wherever its viewport and `viewBox` put the
216
+ // drawing (CSS 2.1 14.2): an inline one's is its box's, painted by
217
+ // the document
218
+ this._canvas ??= canvasBackground(root);
219
+ if (this._canvas && ctx.fillRect) {
220
+ ctx.save();
221
+ ctx.fillStyle = inkColor(this._canvas, color ?? '#000000');
222
+ ctx.fillRect(x, y, w, h);
223
+ ctx.restore();
224
+ }
225
+ // an image's root is sized in the rectangle it is drawn into, which
226
+ // is its viewport: `width="40%"` is two fifths of it. An inline one's
227
+ // percentages are its box's, already (`svgSizeHint`).
228
+ w *= percentOf(svgAttr(root, 'width'));
229
+ h *= percentOf(svgAttr(root, 'height'));
230
+ if (!(w > 0 && h > 0)) return;
231
+ }
232
+ const box = viewBoxOf(root);
233
+ // the viewport in user units, which a percentage is of
234
+ const view = box
235
+ ? this._viewFor(box[2], box[3])
236
+ : this._viewFor(w / scale, h / scale);
237
+ if (!view) return;
238
+ ctx.save();
239
+ try {
240
+ ctx.beginPath();
241
+ ctx.rect(x, y, w, h);
242
+ ctx.clip();
243
+ const opts = color ? { color } : undefined;
244
+ if (!box) {
245
+ view.draw(
246
+ ctx,
247
+ x,
248
+ y,
249
+ view.naturalWidth * scale,
250
+ view.naturalHeight * scale,
251
+ opts,
252
+ );
253
+ } else {
254
+ const fit = (svgAttr(root, 'preserveAspectRatio') ?? '')
255
+ .trim()
256
+ .split(/\s+/);
257
+ if (fit[0] === 'defer') fit.shift();
258
+ if (fit[0] === 'none') {
259
+ view.draw(ctx, x, y, w, h, opts);
260
+ } else {
261
+ const align = ALIGN.exec(fit[0] ?? '') ?? ['xMidYMid', 'Mid', 'Mid'];
262
+ const sx = w / box[2];
263
+ const sy = h / box[3];
264
+ const s = fit[1] === 'slice' ? Math.max(sx, sy) : Math.min(sx, sy);
265
+ const dw = box[2] * s;
266
+ const dh = box[3] * s;
267
+ view.draw(
268
+ ctx,
269
+ x + (w - dw) * AT[align[1]],
270
+ y + (h - dh) * AT[align[2]],
271
+ dw,
272
+ dh,
273
+ opts,
274
+ );
275
+ }
276
+ }
277
+ } catch {
278
+ // a drawing ntk cannot read is left undrawn, once, rather than thrown
279
+ // out of paint on every frame, where nothing could catch it
280
+ this._failed = true;
281
+ } finally {
282
+ ctx.restore();
283
+ }
284
+ }
285
+
286
+ private _viewFor(width: number, height: number): SvgViewLike | null {
287
+ const root = this._root;
288
+ const count = root.children.length;
289
+ const last = root.lastChild;
290
+ const grown = count !== this._seen || last !== this._seenLast;
291
+ if (grown || this._percent === null) this._percent = hasPercent(root);
292
+ const viewport = this._percent ? `${width}x${height}` : '';
293
+ if (this._view && !grown && viewport === this._seenViewport) {
294
+ return this._view;
295
+ }
296
+ const View = svgViewClass();
297
+ if (!View) {
298
+ this._failed = true;
299
+ return null;
300
+ }
301
+ try {
302
+ const view = this._view ?? new View(null);
303
+ view.setSvgDom(
304
+ this._percent || root.name.includes(':')
305
+ ? copyTree(root, this._percent ? [width, height] : null)
306
+ : root,
307
+ );
308
+ this._view = view;
309
+ this._seen = count;
310
+ this._seenLast = last;
311
+ this._seenViewport = viewport;
312
+ return view;
313
+ } catch {
314
+ this._failed = true;
315
+ return null;
316
+ }
317
+ }
318
+ }
319
+
320
+ /**
321
+ * The colour an SVG image's root element sets as its background, in its
322
+ * `style` attribute — the one place an image can say it, since
323
+ * `background-color` is no presentation attribute — or null for none.
324
+ */
325
+ function canvasBackground(root: Element): string | null {
326
+ const style = root.attribs.style;
327
+ if (!style) return null;
328
+ let found: string | null = null;
329
+ for (const declaration of style.split(';')) {
330
+ const colon = declaration.indexOf(':');
331
+ if (colon < 0) continue;
332
+ const name = declaration.slice(0, colon).trim().toLowerCase();
333
+ if (name !== 'background-color' && name !== 'background') continue;
334
+ // a `background` shorthand that is a colour alone, as an image's is
335
+ const color = parseColor(declaration.slice(colon + 1));
336
+ found = color && !isTransparent(color) ? color : null;
337
+ }
338
+ return found;
339
+ }
340
+
341
+ /** Drawings of inline `<svg>` elements, per element: the element is the
342
+ * document's, and outlives the box trees built over it. */
343
+ const INLINE = new WeakMap<Element, SvgDrawing>();
344
+
345
+ /** The drawing of an inline `<svg>`. */
346
+ export function inlineDrawing(el: Element): SvgDrawing {
347
+ let drawing = INLINE.get(el);
348
+ if (!drawing) {
349
+ drawing = new SvgDrawing(el, svgIntrinsics(el));
350
+ INLINE.set(el, drawing);
351
+ }
352
+ return drawing;
353
+ }
354
+
355
+ /** The geometry a percentage of the viewport can give, and of which of its
356
+ * dimensions: its width, its height, or its normalized diagonal (SVG 2,
357
+ * 8.9, "Units"). */
358
+ const PERCENT_OF: Record<string, 'x' | 'y' | 'd'> = {
359
+ x: 'x',
360
+ width: 'x',
361
+ cx: 'x',
362
+ rx: 'x',
363
+ x1: 'x',
364
+ x2: 'x',
365
+ y: 'y',
366
+ height: 'y',
367
+ cy: 'y',
368
+ ry: 'y',
369
+ y1: 'y',
370
+ y2: 'y',
371
+ r: 'd',
372
+ 'stroke-width': 'd',
373
+ };
374
+
375
+ /** What a percentage in it means is not the viewport's: a gradient's are
376
+ * of the box it paints, and `SvgView` reads those itself. */
377
+ const OWN_UNITS = new Set(['lineargradient', 'radialgradient', 'pattern']);
378
+
379
+ function localName(name: string): string {
380
+ const i = name.indexOf(':');
381
+ return (i < 0 ? name : name.slice(i + 1)).toLowerCase();
382
+ }
383
+
384
+ /** Whether a length under the root is a percentage `SvgView` would read as
385
+ * a number: it resolves none against the viewport, so `width="100%"` was
386
+ * a hundred user units. */
387
+ function hasPercent(root: Element): boolean {
388
+ const walk = (el: Element): boolean => {
389
+ for (const child of el.children) {
390
+ if (child.type !== 'tag') continue;
391
+ const tag = child as Element;
392
+ if (OWN_UNITS.has(localName(tag.name))) continue;
393
+ for (const name in tag.attribs) {
394
+ if (PERCENT_OF[name] && tag.attribs[name].trim().endsWith('%')) {
395
+ return true;
396
+ }
397
+ }
398
+ if (walk(tag)) return true;
399
+ }
400
+ return false;
401
+ };
402
+ return walk(root);
403
+ }
404
+
405
+ /**
406
+ * The tree `SvgView` reads, where the document's own will not do: with
407
+ * local names — `SvgView` knows `rect`, not `svg:rect`, and a prefix is
408
+ * dropped only where it is bound to SVG — and with its percentages resolved
409
+ * against a viewport of `[width, height]` user units, where one is given.
410
+ */
411
+ function copyTree(root: Element, viewport: [number, number] | null): Element {
412
+ const colon = root.name.indexOf(':');
413
+ const prefix = colon < 0 ? null : `${root.name.slice(0, colon)}:`;
414
+ const strip = (name: string): string =>
415
+ prefix && name.startsWith(prefix) ? name.slice(prefix.length) : name;
416
+ const diagonal = viewport
417
+ ? Math.sqrt((viewport[0] ** 2 + viewport[1] ** 2) / 2)
418
+ : 0;
419
+ const copy = (el: Element, resolve: boolean): Element => {
420
+ const here = resolve && !OWN_UNITS.has(localName(el.name));
421
+ const attribs = { ...el.attribs };
422
+ if (here && viewport && el !== root) {
423
+ for (const name in attribs) {
424
+ const axis = PERCENT_OF[name];
425
+ const value = attribs[name].trim();
426
+ if (!axis || !value.endsWith('%')) continue;
427
+ const pct = parseFloat(value);
428
+ if (!Number.isFinite(pct)) continue;
429
+ const of =
430
+ axis === 'x' ? viewport[0] : axis === 'y' ? viewport[1] : diagonal;
431
+ attribs[name] = String((pct / 100) * of);
432
+ }
433
+ }
434
+ const children: ChildNode[] = [];
435
+ for (const child of el.children) {
436
+ if (child.type === 'tag') children.push(copy(child as Element, here));
437
+ else if (child.type === 'text') children.push(new Text(child.data));
438
+ }
439
+ return new Element(strip(el.name), attribs, children);
440
+ };
441
+ return copy(root, true);
442
+ }
443
+
444
+ /**
445
+ * An SVG image's bytes as a drawing, or null for bytes that are not SVG —
446
+ * which is how a PNG or a JPEG goes on to the image decoder. Nothing names
447
+ * the type, so it is sniffed: markup, with an `<svg>` root.
448
+ */
449
+ export function svgFromBytes(bytes: Uint8Array): SvgDrawing | null {
450
+ let i = bytes[0] === 0xef && bytes[1] === 0xbb && bytes[2] === 0xbf ? 3 : 0;
451
+ while (
452
+ bytes[i] === 0x20 ||
453
+ bytes[i] === 0x09 ||
454
+ bytes[i] === 0x0a ||
455
+ bytes[i] === 0x0d
456
+ ) {
457
+ i += 1;
458
+ }
459
+ if (bytes[i] !== 0x3c) return null;
460
+ const text = textOf(bytes);
461
+ if (!/<(?:[a-z0-9_-]+:)?svg[\s>/]/i.test(text)) return null;
462
+ try {
463
+ const doc = parseDocument(text, { xmlMode: true });
464
+ const root = findRoot(doc.children);
465
+ return root ? new SvgDrawing(root, svgIntrinsics(root), true) : null;
466
+ } catch {
467
+ return null;
468
+ }
469
+ }
470
+
471
+ function findRoot(nodes: ChildNode[]): Element | null {
472
+ for (const node of nodes) {
473
+ if (node.type !== 'tag') continue;
474
+ const el = node as Element;
475
+ if (isSvgRoot(el)) return el;
476
+ const inner = findRoot(el.children);
477
+ if (inner) return inner;
478
+ }
479
+ return null;
480
+ }
481
+
482
+ type DecoderConstructor = new (label: string) => {
483
+ decode(input: Uint8Array): string;
484
+ };
485
+
486
+ function textOf(bytes: Uint8Array): string {
487
+ const Decoder = (globalThis as { TextDecoder?: DecoderConstructor })
488
+ .TextDecoder;
489
+ if (Decoder) return new Decoder('utf-8').decode(bytes);
490
+ let out = '';
491
+ for (const b of bytes) out += String.fromCharCode(b);
492
+ return out;
493
+ }
@@ -0,0 +1,86 @@
1
+ // URLs, resolved against a base — when there is one.
2
+ //
3
+ // A document has no base of its own: `<Html>` is handed a string, not a
4
+ // response. The host knows where the string came from, and says so with the
5
+ // `baseUrl` prop; a `<base href>` in the document moves it, as HTML's does.
6
+ // Without either every URL goes to `onResource` and `onLink` exactly as the
7
+ // document wrote it, which is what a host rendering mail or a help page wants
8
+ // and what this component did before it had a base to resolve against.
9
+ //
10
+ // A stylesheet is the other base. `url(../img/a.png)` in `/css/site.css`
11
+ // names `/img/a.png` whichever page linked the sheet, and nothing downstream
12
+ // of the parse knows which sheet a computed value came from — so a sheet
13
+ // whose own URL is known has its `url()`s made absolute as it is parsed
14
+ // (`absoluteUrls` in css/parse.ts), and everything after sees an absolute URL
15
+ // that resolving again leaves as it is.
16
+ //
17
+ // The resolving is WHATWG's, through the runtime's own `URL`: Node, Bun and
18
+ // every browser have one. `types: []` keeps node's declarations out of the
19
+ // build, so it is reached structurally, as `TextDecoder` is in svg.ts.
20
+
21
+ interface UrlLike {
22
+ readonly href: string;
23
+ }
24
+
25
+ type UrlConstructor = new (url: string, base?: string) => UrlLike;
26
+
27
+ /**
28
+ * `url` against `base`, or `url` untouched where there is no base, the
29
+ * runtime has no `URL`, or the pair makes no URL. A `data:` URL is returned
30
+ * as it is rather than put through the parser: it can be a font or an image
31
+ * hundreds of kilobytes long, and it is absolute already.
32
+ */
33
+ export function resolveUrl(
34
+ url: string,
35
+ base: string | null | undefined,
36
+ ): string {
37
+ if (!base) return url;
38
+ // read when asked rather than at import: nothing here runs on load
39
+ const URLClass = (globalThis as { URL?: UrlConstructor }).URL;
40
+ if (!URLClass) return url;
41
+ // HTML strips an attribute's URL of the ASCII white space around it
42
+ const trimmed = url.replace(/^[\t\n\f\r ]+|[\t\n\f\r ]+$/g, '');
43
+ if (/^data:/i.test(trimmed)) return trimmed;
44
+ try {
45
+ return new URLClass(trimmed, base).href;
46
+ } catch {
47
+ return url;
48
+ }
49
+ }
50
+
51
+ /**
52
+ * Resolutions against one base, remembered. The paint asks for every image
53
+ * it draws by the URL the markup wrote, on every frame, and a WHATWG parse
54
+ * per image per frame is work for nothing: the answer changes only when the
55
+ * base does, and then the whole memo goes.
56
+ */
57
+ export class UrlResolver {
58
+ private _base: string | null = null;
59
+ private _memo = new Map<string, string>();
60
+
61
+ get base(): string | null {
62
+ return this._base;
63
+ }
64
+
65
+ /** Set the base. True when it changed — everything resolved before is
66
+ * stale then, and so is anything keyed by what it resolved to. */
67
+ setBase(base: string | null): boolean {
68
+ if (base === this._base) return false;
69
+ this._base = base;
70
+ this._memo.clear();
71
+ return true;
72
+ }
73
+
74
+ resolve(url: string): string {
75
+ if (this._base === null) return url;
76
+ let out = this._memo.get(url);
77
+ if (out === undefined) {
78
+ out = resolveUrl(url, this._base);
79
+ // a document names a bounded number of URLs; a stream of generated
80
+ // ones (a cache-busting query per frame) must not grow this forever
81
+ if (this._memo.size > 4096) this._memo.clear();
82
+ this._memo.set(url, out);
83
+ }
84
+ return out;
85
+ }
86
+ }
package/src/index.ts CHANGED
@@ -231,6 +231,8 @@ export type {
231
231
  EdgeType,
232
232
  FitViewOptions,
233
233
  FlowEdge,
234
+ FlowBodyBudget,
235
+ FlowFrameStats,
234
236
  FlowInstance,
235
237
  FlowNode,
236
238
  FlowNodeData,
@@ -655,7 +657,9 @@ export type {
655
657
  // a third `-into WID` wrapper should not have to reimplement it.
656
658
  export {
657
659
  BackendUnavailableError,
660
+ EmbedUnsupportedError,
658
661
  IpcConnectError,
662
+ canHostXEmbed,
659
663
  connectWhenReady,
660
664
  nodeProcessHost,
661
665
  resolveBackend,
@@ -0,0 +1,12 @@
1
+ // Text compared the way `String#localeCompare` with no locale compares it,
2
+ // with one collator for every comparison. ECMA-402 defines that call as a
3
+ // new `Intl.Collator()`'s `compare`, and V8 made the collator on every call:
4
+ // most of a 100,000-row table sort, and all of a completion list's with
5
+ // nothing typed yet. Made on first use, so importing constructs nothing.
6
+
7
+ let collator: Intl.Collator | null = null;
8
+
9
+ /** `a.localeCompare(b)`, without a collator a call. */
10
+ export function compareText(a: string, b: string): number {
11
+ return (collator ??= new Intl.Collator()).compare(a, b);
12
+ }
@@ -1,10 +1,15 @@
1
- // The markdown AST `parse.ts` produces and `index.ts` renders. Deliberately
2
- // small: it is the GFM constructs this component draws, not a general
3
- // mdast — but it is shaped so that growing it stays additive. In particular
4
- // `component` is the MDX direction: `ComponentBlock` is parsed and rendered
5
- // (docs/prd-mdx.md, M1), and `ComponentInline` is still reserved — see the
6
- // note on it for why the inline half needs machinery `<richtext>` does not
7
- // have yet.
1
+ // The markdown AST `parse.ts` produces, `<Markdown>` renders and
2
+ // `<RichTextEditor>` edits (it converts to and from ProseMirror nodes, and
3
+ // `stringify.ts` writes the result back out). Deliberately small: it is the
4
+ // GFM constructs the two components draw, not a general mdast — but it is
5
+ // shaped so that growing it stays additive. In particular `component` is the
6
+ // MDX direction: `ComponentBlock` is parsed and rendered (docs/prd-mdx.md,
7
+ // M1), and `ComponentInline` is still reserved — see the note on it for why
8
+ // the inline half needs machinery `<richtext>` does not have yet.
9
+ //
10
+ // It lives in `src/internal/` because two components read it: shared code no
11
+ // app needs on its own yet, per AGENTS.md's "half-step below a shared
12
+ // module". `<Markdown>` still re-exports the parser and the types.
8
13
 
9
14
  /** Inline content, inside a paragraph, heading, list item or table cell. */
10
15
  export type InlineNode =
@@ -56,6 +61,11 @@ export interface LinkInline {
56
61
  /** True when this was `![alt](src)` — the href is the image source. */
57
62
  image: boolean;
58
63
  children: InlineNode[];
64
+ /**
65
+ * `[text](href "title")`'s title, when there was one. `<Markdown>` renders
66
+ * none; the editor keeps it, so a document it saves still has it.
67
+ */
68
+ title?: string;
59
69
  }
60
70
 
61
71
  /** A hard line break (two trailing spaces, or a trailing backslash). */
@@ -144,6 +154,13 @@ export interface CodeBlock {
144
154
  type: 'code';
145
155
  /** First word of the info string, lowercased — `''` when absent. */
146
156
  lang: string;
157
+ /**
158
+ * The whole info string, trimmed — present only when it says more than
159
+ * `lang` does (```` ```ts title="a.ts" ````, or a language not written in
160
+ * lowercase), so a fence that is just a language parses to the AST it
161
+ * always did. The editor keeps it through a round trip.
162
+ */
163
+ info?: string;
147
164
  text: string;
148
165
  /**
149
166
  * False when the closing fence has not arrived. During streaming that is
@@ -236,4 +253,15 @@ export interface ParseOptions {
236
253
  * evaluates nothing — an expression is kept as source.
237
254
  */
238
255
  expressions?: boolean;
256
+ /**
257
+ * What this document last parsed into, when the new source is an edit of
258
+ * that one: the parse then reads only the blocks around the change and
259
+ * takes the rest from `previous`, the same objects. The answer is the
260
+ * one a parse from scratch gives, whatever the edit; `previous` only
261
+ * decides how much of it has to be worked out again. Ignored when it came
262
+ * from different options or from somewhere other than `parse`, and with
263
+ * `isComponent`: a component's open tag looks for its close as far as the
264
+ * end of the document, so no block before an edit is settled.
265
+ */
266
+ previous?: Document;
239
267
  }