@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
@@ -1,5 +1,8 @@
1
- // Markdown → AST, written for this component rather than adapted from a
2
- // DOM-shaped pipeline. GFM-flavoured CommonMark: headings (ATX and setext),
1
+ // Markdown → AST, written for this package rather than adapted from a
2
+ // DOM-shaped pipeline — shared, from `src/internal/`, because two components
3
+ // read it: `<Markdown>` renders what it produces and `<RichTextEditor>` edits
4
+ // it, writing it back out through `./stringify.ts`. GFM-flavoured
5
+ // CommonMark: headings (ATX and setext),
3
6
  // paragraphs, fenced and indented code, blockquotes with lazy continuation,
4
7
  // nested ordered/bullet/task lists with the tight/loose distinction, tables,
5
8
  // thematic breaks; inline emphasis with the real flanking and rule-of-three
@@ -178,31 +181,168 @@ function indentOf(line: string): number {
178
181
 
179
182
  export function parse(source: string, options: ParseOptions = {}): Document {
180
183
  const partial = options.partial !== false;
184
+ const isComponent = options.isComponent ?? NO_COMPONENTS;
185
+ const expressions = options.expressions === true;
181
186
  const normalized = source.replace(/\r\n?/g, '\n');
182
187
  const lines = normalized.split('\n').map(expandLeadingTabs);
188
+ const previous = options.previous;
189
+ const was = previous ? resumable.get(previous) : undefined;
190
+ // Not with components: an open tag looks for its close to the end of the
191
+ // document (`componentCloseLine`), so a close added anywhere below can
192
+ // change what it is, and the block before an edit is no longer settled.
193
+ if (
194
+ previous &&
195
+ was &&
196
+ was.partial === partial &&
197
+ was.expressions === expressions &&
198
+ isComponent === NO_COMPONENTS &&
199
+ was.isComponent === NO_COMPONENTS
200
+ ) {
201
+ return resume(previous, was, lines);
202
+ }
183
203
  const blocks: BlockNode[] = [];
184
204
  const ranges: Array<[number, number]> = [];
185
- parseBlocks(
205
+ const blanks = new Uint8Array(lines.length);
206
+ parseBlocks(lines, partial, blocks, ranges, isComponent, expressions, {
207
+ from: 0,
208
+ blanks,
209
+ });
210
+ return remember(
211
+ { blocks, raws: ranges.map(([a, b]) => lines.slice(a, b).join('\n')) },
212
+ { lines, ranges, blanks, partial, isComponent, expressions },
213
+ );
214
+ }
215
+
216
+ // --- resuming --------------------------------------------------------------
217
+
218
+ /**
219
+ * What a parse leaves for the next parse of the same document to start from
220
+ * (`ParseOptions.previous`).
221
+ *
222
+ * The block loop carries one thing from a block to the next, the paragraph
223
+ * it is gathering, and it looks only forwards: a block's extent is decided
224
+ * by the lines up to the first line of the block after it. So `blanks`
225
+ * marks the lines where the loop stood on a blank line at the top level with
226
+ * no paragraph open. Two parses standing on such a line, with the same lines
227
+ * from there to the end, produce the same blocks from there on. That is the
228
+ * point where an edit's re-parse can stop and take the rest from before.
229
+ */
230
+ interface Resumable {
231
+ lines: string[];
232
+ /** each top-level block's [start, endExcl) line range */
233
+ ranges: Array<[number, number]>;
234
+ /** 1 on each line where the top-level loop stood blank with no paragraph */
235
+ blanks: Uint8Array;
236
+ partial: boolean;
237
+ isComponent: (name: string) => boolean;
238
+ expressions: boolean;
239
+ }
240
+
241
+ /** Kept beside the documents rather than in them, so a Document stays the
242
+ * plain data every caller and test compares. */
243
+ const resumable = new WeakMap<Document, Resumable>();
244
+
245
+ function remember(doc: Document, state: Resumable): Document {
246
+ resumable.set(doc, state);
247
+ return doc;
248
+ }
249
+
250
+ /**
251
+ * Parse `lines` as an edit of `previous`: from one block before the first
252
+ * line that changed, until the loop stands where the previous parse stood
253
+ * in the lines the edit left alone — or to the end, when it never does (an
254
+ * unclosed fence swallows the rest of a document either way).
255
+ */
256
+ function resume(previous: Document, was: Resumable, lines: string[]): Document {
257
+ const old = was.lines;
258
+ const oldN = old.length;
259
+ const n = lines.length;
260
+ const shortest = Math.min(oldN, n);
261
+ let first = 0;
262
+ while (first < shortest && old[first] === lines[first]) first += 1;
263
+ if (first === oldN && first === n) return previous;
264
+ // lines at the end the edit did not touch, never counting the prefix twice
265
+ let same = 0;
266
+ while (
267
+ same < shortest - first &&
268
+ old[oldN - 1 - same] === lines[n - 1 - same]
269
+ ) {
270
+ same += 1;
271
+ }
272
+ const shift = n - oldN;
273
+ const suffix = n - same;
274
+
275
+ // The first block that reaches the change, and the one before it: a
276
+ // block's extent is decided by the lines up to the next block's first —
277
+ // a list looks past blank lines to see whether it goes on — so the block
278
+ // before the first one touched cannot have depended on the change.
279
+ const { ranges } = was;
280
+ let lo = 0;
281
+ let hi = ranges.length;
282
+ while (lo < hi) {
283
+ const mid = (lo + hi) >> 1;
284
+ if (ranges[mid][1] <= first) lo = mid + 1;
285
+ else hi = mid;
286
+ }
287
+ const kept = Math.max(0, lo - 1);
288
+ const from = kept === 0 ? 0 : ranges[kept][0];
289
+
290
+ const blanks = new Uint8Array(n);
291
+ blanks.set(was.blanks.subarray(0, from));
292
+ const blocks: BlockNode[] = previous.blocks.slice(0, kept);
293
+ const raws = previous.raws.slice(0, kept);
294
+ const next: Array<[number, number]> = ranges.slice(0, kept);
295
+ const fresh: Array<[number, number]> = [];
296
+ const stop = parseBlocks(
186
297
  lines,
187
- partial,
298
+ was.partial,
188
299
  blocks,
189
- ranges,
190
- options.isComponent ?? NO_COMPONENTS,
191
- options.expressions === true,
300
+ fresh,
301
+ was.isComponent,
302
+ was.expressions,
303
+ {
304
+ from,
305
+ blanks,
306
+ resync: (i) => i >= suffix && was.blanks[i - shift] === 1,
307
+ },
192
308
  );
193
- return {
194
- blocks,
195
- raws: ranges.map(([a, b]) => lines.slice(a, b).join('\n')),
196
- };
309
+ for (const [a, b] of fresh) {
310
+ raws.push(lines.slice(a, b).join('\n'));
311
+ next.push([a, b]);
312
+ }
313
+ if (stop < n) {
314
+ // the previous parse from the same place over the same lines: its
315
+ // blocks, where they now are
316
+ const at = stop - shift;
317
+ blanks.set(was.blanks.subarray(at), stop);
318
+ let j = ranges.length;
319
+ while (j > 0 && ranges[j - 1][0] >= at) j -= 1;
320
+ for (; j < ranges.length; j += 1) {
321
+ blocks.push(previous.blocks[j]);
322
+ raws.push(previous.raws[j]);
323
+ next.push([ranges[j][0] + shift, ranges[j][1] + shift]);
324
+ }
325
+ }
326
+ return remember({ blocks, raws }, { ...was, lines, ranges: next, blanks });
197
327
  }
198
328
 
199
329
  // --- block layer -----------------------------------------------------------
200
330
 
331
+ /** The top-level call's extra: where to start, where to record the blank
332
+ * lines it stands on, and when to stop (`resume`). */
333
+ interface TopLevel {
334
+ from: number;
335
+ blanks: Uint8Array;
336
+ resync?: (line: number) => boolean;
337
+ }
338
+
201
339
  /**
202
340
  * Parse a run of lines into blocks. `tailOpen` says the end of `lines` is
203
341
  * the live end of a streaming document — the license for every "complete it
204
342
  * anyway" rule. `ranges`, when given, receives each block's [start, endExcl)
205
343
  * line range (only the top-level call wants them, for the streaming cache).
344
+ * Returns the line it stopped at: the end, or where `top.resync` said the
345
+ * rest would come out as it did before.
206
346
  */
207
347
  function parseBlocks(
208
348
  lines: string[],
@@ -211,8 +351,9 @@ function parseBlocks(
211
351
  ranges?: Array<[number, number]>,
212
352
  isComponent: (name: string) => boolean = NO_COMPONENTS,
213
353
  expressions = false,
214
- ): void {
215
- let i = 0;
354
+ top?: TopLevel,
355
+ ): number {
356
+ let i = top?.from ?? 0;
216
357
  const n = lines.length;
217
358
 
218
359
  let paraStart = -1;
@@ -242,6 +383,10 @@ function parseBlocks(
242
383
 
243
384
  if (RE_BLANK.test(line)) {
244
385
  flushPara(i);
386
+ if (top) {
387
+ if (top.resync?.(i)) return i;
388
+ top.blanks[i] = 1;
389
+ }
245
390
  i += 1;
246
391
  continue;
247
392
  }
@@ -317,7 +462,8 @@ function parseBlocks(
317
462
  const start = i;
318
463
  const fenceIndent = fence[1].length;
319
464
  const marker = fence[2];
320
- const lang = (fence[3].trim().split(/[ \t]/, 1)[0] ?? '').toLowerCase();
465
+ const info = fence[3].trim();
466
+ const lang = (info.split(/[ \t]/, 1)[0] ?? '').toLowerCase();
321
467
  const body: string[] = [];
322
468
  let closed = false;
323
469
  i += 1;
@@ -342,7 +488,19 @@ function parseBlocks(
342
488
  );
343
489
  i += 1;
344
490
  }
345
- commit({ type: 'code', lang, text: body.join('\n'), closed }, start, i);
491
+ commit(
492
+ {
493
+ type: 'code',
494
+ lang,
495
+ // only when it says more than the language does, so a plain
496
+ // ```js fence parses to the AST it always did
497
+ ...(info !== lang ? { info } : null),
498
+ text: body.join('\n'),
499
+ closed,
500
+ },
501
+ start,
502
+ i,
503
+ );
346
504
  continue;
347
505
  }
348
506
 
@@ -555,6 +713,7 @@ function parseBlocks(
555
713
  }
556
714
 
557
715
  flushPara(n);
716
+ return n;
558
717
  }
559
718
 
560
719
  // --- lists -----------------------------------------------------------------
@@ -607,11 +766,27 @@ function parseList(
607
766
  const contentIndent = indent + m[2].length + pad;
608
767
 
609
768
  const inner: string[] = [rest];
769
+ // The fence open in the item's own content, if one is. A blank line
770
+ // inside a fence is the code's rather than the list's: it neither ends
771
+ // the item nor makes the list loose — and a snippet with an empty line
772
+ // in it, under a numbered step, is the ordinary case.
773
+ // (a task item's box comes off first: `- [ ] ```js` opens a fence too)
774
+ let fence = fenceAfter(null, rest.replace(RE_TASK, ''));
610
775
  i += 1;
611
776
  let pendingBlanks = 0;
612
777
  while (i < n) {
613
778
  const l = lines[i];
614
779
  if (RE_BLANK.test(l)) {
780
+ if (fence !== null && pendingBlanks === 0) {
781
+ // …as long as the item goes on after it: an unclosed fence must
782
+ // not swallow the paragraph the list is followed by
783
+ let k = i + 1;
784
+ while (k < n && RE_BLANK.test(lines[k])) k += 1;
785
+ if (k < n && indentOf(lines[k]) >= contentIndent) {
786
+ for (; i < k; i += 1) inner.push('');
787
+ continue;
788
+ }
789
+ }
615
790
  pendingBlanks += 1;
616
791
  if (pendingBlanks > 1) break;
617
792
  i += 1;
@@ -623,7 +798,9 @@ function parseList(
623
798
  loose = true;
624
799
  pendingBlanks = 0;
625
800
  }
626
- inner.push(l.slice(contentIndent));
801
+ const content = l.slice(contentIndent);
802
+ inner.push(content);
803
+ fence = fenceAfter(fence, content);
627
804
  i += 1;
628
805
  continue;
629
806
  }
@@ -666,6 +843,23 @@ function parseList(
666
843
  };
667
844
  }
668
845
 
846
+ /**
847
+ * The fence still open after `line`, given the one open before it — the
848
+ * opening run (```` ``` ````, `~~~~`) or null. Indentation is ignored, so a
849
+ * fence in a list nested inside this item is seen too.
850
+ */
851
+ function fenceAfter(open: string | null, line: string): string | null {
852
+ const m = RE_FENCE_OPEN.exec(line.trimStart());
853
+ if (open === null) {
854
+ if (!m || (m[2][0] === '`' && m[3].includes('`'))) return null;
855
+ return m[2];
856
+ }
857
+ if (m && m[2][0] === open[0] && m[2].length >= open.length && m[3] === '') {
858
+ return null;
859
+ }
860
+ return open;
861
+ }
862
+
669
863
  // --- tables ----------------------------------------------------------------
670
864
 
671
865
  /** Split a row on unescaped pipes; `\|` stays literal in the cell. */
@@ -763,19 +957,45 @@ const NAMED_ENTITIES: Record<string, string> = {
763
957
  middot: '·',
764
958
  };
765
959
 
960
+ /** The same pattern, anchored — for reading one reference at a position. */
961
+ const RE_ENTITY_AT = new RegExp(RE_ENTITY.source, 'y');
962
+
963
+ function entityText(
964
+ whole: string,
965
+ dec?: string,
966
+ hex?: string,
967
+ named?: string,
968
+ ): string {
969
+ if (dec) {
970
+ const cp = parseInt(dec, 10);
971
+ return cp > 0 && cp <= 0x10ffff ? String.fromCodePoint(cp) : '�';
972
+ }
973
+ if (hex) {
974
+ const cp = parseInt(hex, 16);
975
+ return cp > 0 && cp <= 0x10ffff ? String.fromCodePoint(cp) : '�';
976
+ }
977
+ return (named && NAMED_ENTITIES[named]) ?? whole;
978
+ }
979
+
766
980
  function decodeEntities(text: string): string {
767
981
  if (!text.includes('&')) return text;
768
- return text.replace(RE_ENTITY, (whole, dec, hex, named) => {
769
- if (dec) {
770
- const cp = parseInt(dec, 10);
771
- return cp > 0 && cp <= 0x10ffff ? String.fromCodePoint(cp) : '�';
772
- }
773
- if (hex) {
774
- const cp = parseInt(hex, 16);
775
- return cp > 0 && cp <= 0x10ffff ? String.fromCodePoint(cp) : '�';
776
- }
777
- return NAMED_ENTITIES[named] ?? whole;
778
- });
982
+ return text.replace(RE_ENTITY, entityText);
983
+ }
984
+
985
+ /** The whole character ending at `i`, surrogate pair and all — an emoji is
986
+ * a symbol, and half of one is not. */
987
+ function charBefore(text: string, i: number): string | undefined {
988
+ if (i <= 0) return undefined;
989
+ const unit = text.charCodeAt(i - 1);
990
+ return unit >= 0xdc00 && unit <= 0xdfff && i >= 2
991
+ ? text.slice(i - 2, i)
992
+ : text[i - 1];
993
+ }
994
+
995
+ /** The whole character starting at `i`. */
996
+ function charAt(text: string, i: number): string | undefined {
997
+ const cp = text.codePointAt(i);
998
+ return cp === undefined ? undefined : String.fromCodePoint(cp);
779
999
  }
780
1000
 
781
1001
  function classify(ch: string | undefined): 'ws' | 'punct' | 'other' {
@@ -797,11 +1017,14 @@ export function parseInline(
797
1017
  const items: Item[] = [];
798
1018
  let buf = '';
799
1019
 
1020
+ // References are decoded where they are read (below), not on the flushed
1021
+ // buffer: `\&amp;` is an escaped ampersand followed by `amp;`, and
1022
+ // decoding afterwards turned it back into `&`.
800
1023
  const flushText = (): void => {
801
1024
  if (buf.length === 0) return;
802
1025
  items.push({
803
1026
  kind: 'node',
804
- node: { type: 'text', text: decodeEntities(buf) },
1027
+ node: { type: 'text', text: buf },
805
1028
  });
806
1029
  buf = '';
807
1030
  };
@@ -957,7 +1180,7 @@ export function parseInline(
957
1180
  const suffix = parseLinkSuffix(text, i + 1);
958
1181
  if (suffix) {
959
1182
  flushText();
960
- closeLink(items, openIdx, suffix.href);
1183
+ closeLink(items, openIdx, suffix.href, suffix.title);
961
1184
  i = suffix.end;
962
1185
  continue;
963
1186
  }
@@ -988,8 +1211,8 @@ export function parseInline(
988
1211
  if (ch === '*' || ch === '_' || ch === '~') {
989
1212
  let run = 1;
990
1213
  while (text[i + run] === ch) run += 1;
991
- const before = classify(text[i - 1]);
992
- const after = classify(text[i + run]);
1214
+ const before = classify(charBefore(text, i));
1215
+ const after = classify(charAt(text, i + run));
993
1216
  const leftFlank =
994
1217
  after !== 'ws' && (after !== 'punct' || before !== 'other');
995
1218
  const rightFlank =
@@ -1023,6 +1246,16 @@ export function parseInline(
1023
1246
  continue;
1024
1247
  }
1025
1248
 
1249
+ if (ch === '&') {
1250
+ RE_ENTITY_AT.lastIndex = i;
1251
+ const ref = RE_ENTITY_AT.exec(text);
1252
+ if (ref) {
1253
+ buf += entityText(ref[0], ref[1], ref[2], ref[3]);
1254
+ i += ref[0].length;
1255
+ continue;
1256
+ }
1257
+ }
1258
+
1026
1259
  buf += ch;
1027
1260
  i += 1;
1028
1261
  }
@@ -1072,10 +1305,12 @@ function lastBracket(items: Item[]): number {
1072
1305
  interface LinkSuffix {
1073
1306
  href: string;
1074
1307
  end: number;
1308
+ title?: string;
1075
1309
  }
1076
1310
 
1077
1311
  /** `](dest "title")` — destination in `<>` or bare with balanced parens.
1078
- * The title is tolerated and dropped: nothing here renders one. */
1312
+ * The title is kept on the node — nothing renders one, but the editor
1313
+ * writes it back out. */
1079
1314
  function parseLinkSuffix(text: string, from: number): LinkSuffix | null {
1080
1315
  if (text[from] !== '(') return null;
1081
1316
  let i = from + 1;
@@ -1110,22 +1345,33 @@ function parseLinkSuffix(text: string, from: number): LinkSuffix | null {
1110
1345
  while (i < len && (text[i] === ' ' || text[i] === '\n' || text[i] === '\t'))
1111
1346
  i += 1;
1112
1347
  // an optional title in any of the three quote styles
1348
+ let title: string | undefined;
1113
1349
  const q = text[i];
1114
1350
  if (q === '"' || q === "'" || q === '(') {
1115
1351
  const closer = q === '(' ? ')' : q;
1116
1352
  let j = i + 1;
1117
1353
  while (j < len && text[j] !== closer) j += 1;
1118
1354
  if (j >= len) return null;
1355
+ title = decodeEntities(text.slice(i + 1, j));
1119
1356
  i = j + 1;
1120
1357
  while (i < len && (text[i] === ' ' || text[i] === '\n' || text[i] === '\t'))
1121
1358
  i += 1;
1122
1359
  }
1123
1360
  if (text[i] !== ')') return null;
1124
- return { href: decodeEntities(href), end: i + 1 };
1361
+ return {
1362
+ href: decodeEntities(href),
1363
+ end: i + 1,
1364
+ ...(title !== undefined ? { title } : null),
1365
+ };
1125
1366
  }
1126
1367
 
1127
1368
  /** Fold everything after the bracket opener at `openIdx` into a link node. */
1128
- function closeLink(items: Item[], openIdx: number, href: string | null): void {
1369
+ function closeLink(
1370
+ items: Item[],
1371
+ openIdx: number,
1372
+ href: string | null,
1373
+ title?: string,
1374
+ ): void {
1129
1375
  const bracket = items[openIdx] as { kind: 'bracket'; image: boolean };
1130
1376
  const inner = items.splice(openIdx);
1131
1377
  inner.shift();
@@ -1133,7 +1379,14 @@ function closeLink(items: Item[], openIdx: number, href: string | null): void {
1133
1379
  processEmphasis(inner, href === null);
1134
1380
  items.push({
1135
1381
  kind: 'node',
1136
- node: { type: 'link', href, image: bracket.image, children: finish(inner) },
1382
+ node: {
1383
+ type: 'link',
1384
+ href,
1385
+ image: bracket.image,
1386
+ children: finish(inner),
1387
+ // only when written, so a link without one keeps its old shape
1388
+ ...(title !== undefined ? { title } : null),
1389
+ },
1137
1390
  });
1138
1391
  }
1139
1392