@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,228 @@
1
+ // Stable identities for the blocks of a document, carried across edits.
2
+ //
3
+ // React needs a key per rendered block, and the three obvious ones are all
4
+ // wrong for an editor:
5
+ //
6
+ // - **an index** shifts every block after an inserted paragraph, so Enter
7
+ // at the top of a long document re-renders — and re-lays-out — every
8
+ // paragraph below it;
9
+ // - **a position** shifts on every keystroke, for the same reason;
10
+ // - **a node's identity** changes whenever its content does, because
11
+ // ProseMirror's nodes are immutable, so typing would remount the very
12
+ // paragraph being typed in and throw its layout cache away.
13
+ //
14
+ // What survives an edit is what ProseMirror's own view keys its DOM on: a
15
+ // node's *place*, mapped through the transaction. A block whose start maps
16
+ // cleanly keeps its key; one whose opening token the transaction deleted —
17
+ // the second half of a join — loses it, and a block nobody had before (the
18
+ // second half of a split) gets a fresh one. When there is no mapping — a
19
+ // whole state handed in from outside, the controlled-state rung — the node
20
+ // objects that survived are matched by identity instead, which is the other
21
+ // thing ProseMirror's structural sharing guarantees.
22
+ //
23
+ // Pure: no React, no react-x11. The component asks it three questions — the
24
+ // key at a position, the position of a key, the node under a key — and
25
+ // `test/rich-text-editor-model.test.ts` asks it the rest.
26
+ import type { Node as PMNode } from 'prosemirror-model';
27
+ import { Mapping } from 'prosemirror-transform';
28
+ import type { Mappable } from 'prosemirror-transform';
29
+ import { spliceAll } from '../internal/splice.js';
30
+
31
+ /** A block: its key, where it starts, and the node it is. */
32
+ interface Entry {
33
+ key: string;
34
+ pos: number;
35
+ node: PMNode;
36
+ }
37
+
38
+ export class BlockKeys {
39
+ private counter = 0;
40
+ /** Every block, in document order — which is the order of their starts,
41
+ * so a position is found by bisection. */
42
+ private entries: Entry[] = [];
43
+ private byKey = new Map<string, Entry>();
44
+ /** The document the entries describe. */
45
+ private doc: PMNode | null = null;
46
+
47
+ constructor(doc: PMNode) {
48
+ this.update(doc, null);
49
+ }
50
+
51
+ /** How many blocks the document has — every non-inline node but the
52
+ * document itself. */
53
+ get size(): number {
54
+ return this.entries.length;
55
+ }
56
+
57
+ /** The key of the block that starts at `pos`, if one does. */
58
+ keyAt(pos: number): string | undefined {
59
+ const entries = this.entries;
60
+ let lo = 0;
61
+ let hi = entries.length - 1;
62
+ while (lo <= hi) {
63
+ const mid = (lo + hi) >> 1;
64
+ const at = entries[mid].pos;
65
+ if (at === pos) return entries[mid].key;
66
+ if (at < pos) lo = mid + 1;
67
+ else hi = mid - 1;
68
+ }
69
+ return undefined;
70
+ }
71
+
72
+ /** Where the block under `key` starts now. */
73
+ posOf(key: string): number | undefined {
74
+ return this.byKey.get(key)?.pos;
75
+ }
76
+
77
+ /** The node the block under `key` is now. */
78
+ nodeOf(key: string): PMNode | undefined {
79
+ return this.byKey.get(key)?.node;
80
+ }
81
+
82
+ /**
83
+ * Re-key for a new document. `mapping` is the transaction (or the run of
84
+ * transactions) that produced it from the one the keys were last built
85
+ * for; null when nothing knows how the two relate.
86
+ *
87
+ * The top-level blocks the two documents share at either end — the same
88
+ * node objects, which is what ProseMirror's structural sharing leaves
89
+ * everywhere an edit did not reach — keep their keys, and the blocks
90
+ * after the edit only move. What lies between is keyed as the whole
91
+ * document used to be, on every keystroke: a mapped start first, then a
92
+ * surviving node, then a fresh key. So a keystroke costs the block it
93
+ * lands in plus a pass that adds a number to each block after it, where
94
+ * it cost a walk of the document and three maps built from scratch —
95
+ * six milliseconds a key in a 2 MB document.
96
+ */
97
+ update(doc: PMNode, mapping: Mappable | null): void {
98
+ const was = this.doc;
99
+ this.doc = doc;
100
+ // the top-level children the two documents share at either end
101
+ let head = 0;
102
+ let tail = 0;
103
+ if (was) {
104
+ const shared = Math.min(was.childCount, doc.childCount);
105
+ while (head < shared && was.child(head) === doc.child(head)) head++;
106
+ while (
107
+ tail < shared - head &&
108
+ was.child(was.childCount - 1 - tail) ===
109
+ doc.child(doc.childCount - 1 - tail)
110
+ ) {
111
+ tail++;
112
+ }
113
+ }
114
+ let from = 0; // where the changed children start, in both documents
115
+ for (let i = 0; i < head; i++) from += doc.child(i).nodeSize;
116
+ let wasTo = from;
117
+ if (was) {
118
+ for (let i = head; i < was.childCount - tail; i++) {
119
+ wasTo += was.child(i).nodeSize;
120
+ }
121
+ }
122
+ let to = from;
123
+ for (let i = head; i < doc.childCount - tail; i++) {
124
+ to += doc.child(i).nodeSize;
125
+ }
126
+ const entries = this.entries;
127
+ const first = this._firstAtOrAfter(from);
128
+ const end = this._firstAtOrAfter(wasTo);
129
+ const old = entries.slice(first, end);
130
+
131
+ // 1. Where each old block's start went — nowhere, when nothing in the
132
+ // mapping moves a position: a mark added or taken off, an attribute set.
133
+ // Bold over a whole document is one step a paragraph, and mapping every
134
+ // block through every one of them was a third of the command.
135
+ const carried = new Map<number, string>();
136
+ if (mapping && !movesNothing(mapping)) {
137
+ for (const { pos, key } of old) {
138
+ const result = mapping.mapResult(pos, 1);
139
+ // the token after the start is the block's own opening — gone means
140
+ // the block is gone, merged into whatever preceded it
141
+ if (result.deletedAfter) continue;
142
+ if (!carried.has(result.pos)) carried.set(result.pos, key);
143
+ }
144
+ } else if (mapping) {
145
+ for (const { pos, key } of old) {
146
+ if (!carried.has(pos)) carried.set(pos, key);
147
+ }
148
+ }
149
+ // 2. Which old node objects are still here, for when nothing mapped.
150
+ const byNode = new Map<PMNode, string[]>();
151
+ const carriedKeys = new Set(carried.values());
152
+ for (const { key, node } of old) {
153
+ if (carriedKeys.has(key)) continue;
154
+ const list = byNode.get(node);
155
+ if (list) list.push(key);
156
+ else byNode.set(node, [key]);
157
+ }
158
+ for (const { key } of old) this.byKey.delete(key);
159
+
160
+ // 3. The changed children, keyed.
161
+ const fresh: Entry[] = [];
162
+ const used = new Set<string>();
163
+ const visit = (node: PMNode, pos: number): boolean => {
164
+ if (node.isInline) return false;
165
+ let key = carried.get(pos);
166
+ if (key !== undefined && used.has(key)) key = undefined;
167
+ if (key === undefined) {
168
+ const list = byNode.get(node);
169
+ while (list && list.length > 0) {
170
+ const candidate = list.shift()!;
171
+ if (!used.has(candidate)) {
172
+ key = candidate;
173
+ break;
174
+ }
175
+ }
176
+ }
177
+ if (key === undefined) key = `b${(this.counter++).toString(36)}`;
178
+ used.add(key);
179
+ const entry = { key, pos, node };
180
+ fresh.push(entry);
181
+ this.byKey.set(key, entry);
182
+ // a textblock's children are inline: nothing below it has a key
183
+ return !node.isTextblock;
184
+ };
185
+ let at = from;
186
+ for (let i = head; i < doc.childCount - tail; i++) {
187
+ const child = doc.child(i);
188
+ if (visit(child, at)) {
189
+ const base = at + 1;
190
+ child.descendants((node, pos) => visit(node, base + pos));
191
+ }
192
+ at += child.nodeSize;
193
+ }
194
+
195
+ // 4. The blocks after them moved, and are otherwise as they were.
196
+ const shift = to - wasTo;
197
+ if (shift !== 0) {
198
+ for (let i = end; i < entries.length; i++) entries[i].pos += shift;
199
+ }
200
+ spliceAll(entries, first, end - first, fresh);
201
+ }
202
+
203
+ /** The index of the first block starting at or after `pos`. */
204
+ private _firstAtOrAfter(pos: number): number {
205
+ const entries = this.entries;
206
+ let lo = 0;
207
+ let hi = entries.length;
208
+ while (lo < hi) {
209
+ const mid = (lo + hi) >> 1;
210
+ if (entries[mid].pos < pos) lo = mid + 1;
211
+ else hi = mid;
212
+ }
213
+ return lo;
214
+ }
215
+ }
216
+
217
+ /** Whether a mapping is made only of steps that move no position. */
218
+ function movesNothing(mapping: Mappable): boolean {
219
+ if (!(mapping instanceof Mapping)) return false;
220
+ for (const map of mapping.maps) {
221
+ let moved = false;
222
+ map.forEach(() => {
223
+ moved = true;
224
+ });
225
+ if (moved) return false;
226
+ }
227
+ return true;
228
+ }
@@ -0,0 +1,427 @@
1
+ // What the document looks like: the theme, read once per render, into the
2
+ // styles every block and mark is drawn with.
3
+ //
4
+ // The numbers are `<Markdown>`'s (src/markdown/index.ts, `deriveLook`) — the
5
+ // heading scales, the block gap, the chip behind inline code — and a fenced
6
+ // block's whole look comes from the same shared module both use
7
+ // (`src/codeblock/`). A component never imports another, so the two are kept
8
+ // in step by value: a note edited here and rendered there should look like
9
+ // one document, and a change to one of these numbers belongs in both.
10
+ //
11
+ // A schema this file has never heard of still gets a look. A node or mark is
12
+ // recognised by name first (the reference schema's, then TipTap's), and then
13
+ // by the tag its own `toDOM` writes: an unknown node that says `['h2', 0]` is
14
+ // a second-level heading, an unknown mark that says `['u', 0]` underlines, and
15
+ // a `style` attribute on either is read for the few properties text can
16
+ // carry. The app's `markStyles` has the last word.
17
+ import { tint } from 'react-x11/style';
18
+ import type { Mark, Node as PMNode } from 'prosemirror-model';
19
+
20
+ import { codeBlockLook, codeBlockRuns } from '../codeblock/index.js';
21
+ import type { CodeBlockLook } from '../codeblock/index.js';
22
+ import type { Language } from '../code-language/index.js';
23
+ import type { InlineLook, RunStyle } from './inline.js';
24
+
25
+ /** How a mark looks: a fixed style, or one worked out from what it covers. */
26
+ export type MarkStyle = RunStyle | ((mark: Mark, under: RunStyle) => RunStyle);
27
+
28
+ export interface LookOptions {
29
+ fontSize?: number;
30
+ fontFamily?: string;
31
+ monoFamily?: string;
32
+ markStyles?: Readonly<Record<string, MarkStyle>>;
33
+ resolveLanguage?: (tag: string) => Language | null;
34
+ highlight?: boolean;
35
+ /** A disabled editor: the document is set in the muted ink. (react-x11
36
+ * styles have no opacity to fade a subtree with.) */
37
+ dim?: boolean;
38
+ }
39
+
40
+ /** Where a textblock sits, as far as its look is concerned. */
41
+ export interface BlockContext {
42
+ /** Inside a blockquote: set in the muted ink, as `<Markdown>` sets it. */
43
+ quote: boolean;
44
+ /** A table's header row. */
45
+ header: boolean;
46
+ }
47
+
48
+ export interface EditorLook {
49
+ size: number;
50
+ family: string;
51
+ mono: string;
52
+ text: string;
53
+ muted: string;
54
+ link: string;
55
+ accent: string;
56
+ accentText: string;
57
+ border: string;
58
+ background: string;
59
+ surface: string;
60
+ selection: string;
61
+ /** The selection while focus is elsewhere — still there, but quieter. */
62
+ selectionBlurred: string;
63
+ caret: string;
64
+ codeBg: string;
65
+ headerBg: string;
66
+ highlight: string;
67
+ radius: number;
68
+ blockGap: number;
69
+ headingScales: readonly number[];
70
+ code: CodeBlockLook;
71
+ /** Two looks with the same key draw identically — the render cache's epoch. */
72
+ key: string;
73
+ /** A textblock's inline look. Cached: the same node type in the same
74
+ * context is the same object, which is what lets a block that did not
75
+ * change skip its layout. */
76
+ inline(node: PMNode, context: BlockContext): InlineLook;
77
+ }
78
+
79
+ const HEADING_SCALES = [1.75, 1.4, 1.2, 1.05, 0.95, 0.85] as const;
80
+
81
+ type Role =
82
+ | 'strong'
83
+ | 'em'
84
+ | 'code'
85
+ | 'strike'
86
+ | 'link'
87
+ | 'underline'
88
+ | 'highlight'
89
+ | 'sub'
90
+ | 'sup'
91
+ | 'textStyle';
92
+
93
+ const MARK_ROLES: Record<string, Role> = {
94
+ strong: 'strong',
95
+ bold: 'strong',
96
+ b: 'strong',
97
+ em: 'em',
98
+ italic: 'em',
99
+ i: 'em',
100
+ code: 'code',
101
+ strike: 'strike',
102
+ strikethrough: 'strike',
103
+ s: 'strike',
104
+ del: 'strike',
105
+ link: 'link',
106
+ a: 'link',
107
+ underline: 'underline',
108
+ u: 'underline',
109
+ highlight: 'highlight',
110
+ mark: 'highlight',
111
+ subscript: 'sub',
112
+ sub: 'sub',
113
+ superscript: 'sup',
114
+ sup: 'sup',
115
+ textStyle: 'textStyle',
116
+ span: 'textStyle',
117
+ };
118
+
119
+ /** The tag and attributes a node's or mark's `toDOM` writes, if it writes an
120
+ * array — the one shape readable without a DOM. */
121
+ export function domTagOf(
122
+ spec: { toDOM?: unknown } | undefined,
123
+ value: unknown,
124
+ ): { tag: string; attrs: Record<string, unknown> } | null {
125
+ const toDOM = spec?.toDOM as
126
+ ((v: unknown, inline?: boolean) => unknown) | undefined;
127
+ if (typeof toDOM !== 'function') return null;
128
+ try {
129
+ const out = toDOM(value, true);
130
+ if (!Array.isArray(out) || typeof out[0] !== 'string') return null;
131
+ const second = out[1];
132
+ const attrs =
133
+ second && typeof second === 'object' && !Array.isArray(second)
134
+ ? (second as Record<string, unknown>)
135
+ : {};
136
+ return { tag: out[0].replace(/^.*\s/, '').toLowerCase(), attrs };
137
+ } catch {
138
+ // a `toDOM` that builds real DOM nodes has no document to build them in
139
+ return null;
140
+ }
141
+ }
142
+
143
+ /**
144
+ * The part of a CSS declaration block text can carry — colour, background,
145
+ * weight, style, decoration, family, pixel size. What a decoration's
146
+ * `style` attribute and an unknown mark's `toDOM` attributes are read
147
+ * through; everything else in them is ignored.
148
+ */
149
+ export function styleFromCSS(css: string, under: RunStyle): RunStyle {
150
+ const out: RunStyle = {};
151
+ for (const decl of css.split(';')) {
152
+ const colon = decl.indexOf(':');
153
+ if (colon <= 0) continue;
154
+ const name = decl.slice(0, colon).trim().toLowerCase();
155
+ const value = decl.slice(colon + 1).trim();
156
+ if (!value) continue;
157
+ switch (name) {
158
+ case 'color':
159
+ out.color = value;
160
+ break;
161
+ case 'background':
162
+ case 'background-color':
163
+ out.bg = value;
164
+ break;
165
+ case 'font-weight': {
166
+ const n = Number(value);
167
+ if (value === 'bold' || value === 'bolder' || n >= 600)
168
+ out.weight = 700;
169
+ else if (value === 'normal' || (Number.isFinite(n) && n < 600))
170
+ out.weight = 'normal';
171
+ break;
172
+ }
173
+ case 'font-style':
174
+ out.style =
175
+ value === 'italic' || value === 'oblique' ? 'italic' : 'normal';
176
+ break;
177
+ case 'text-decoration':
178
+ case 'text-decoration-line':
179
+ if (/line-through/.test(value))
180
+ out.strike = out.color ?? under.color ?? 'currentColor';
181
+ if (/underline/.test(value))
182
+ out.underline = out.color ?? under.color ?? 'currentColor';
183
+ break;
184
+ case 'font-family':
185
+ out.family = value;
186
+ break;
187
+ case 'font-size': {
188
+ const px = /^(\d+(?:\.\d+)?)px$/.exec(value);
189
+ if (px) out.size = Number(px[1]);
190
+ break;
191
+ }
192
+ }
193
+ }
194
+ return out;
195
+ }
196
+
197
+ function str(value: unknown, fallback: string): string {
198
+ return typeof value === 'string' && value ? value : fallback;
199
+ }
200
+
201
+ /** The first word of a code block's info string — its language. */
202
+ function languageOf(node: PMNode): string {
203
+ const info = node.attrs.params ?? node.attrs.language ?? '';
204
+ return String(info).trim().split(/\s/, 1)[0].toLowerCase();
205
+ }
206
+
207
+ /** What kind of textblock this is, for its look: its name, then its tag. */
208
+ function blockKind(node: PMNode): {
209
+ kind: 'paragraph' | 'heading' | 'code';
210
+ level: number;
211
+ } {
212
+ const name = node.type.name;
213
+ if (node.type.spec.code || name === 'code_block' || name === 'codeBlock') {
214
+ return { kind: 'code', level: 0 };
215
+ }
216
+ if (name === 'heading') {
217
+ return { kind: 'heading', level: Number(node.attrs.level ?? 1) };
218
+ }
219
+ const dom = domTagOf(node.type.spec, node);
220
+ const h = dom && /^h([1-6])$/.exec(dom.tag);
221
+ if (h) return { kind: 'heading', level: Number(h[1]) };
222
+ if (dom?.tag === 'pre') return { kind: 'code', level: 0 };
223
+ return { kind: 'paragraph', level: 0 };
224
+ }
225
+
226
+ export function deriveLook(
227
+ theme: Record<string, unknown>,
228
+ options: LookOptions,
229
+ ): EditorLook {
230
+ const muted = str(theme.textMuted, '#7f8c8d');
231
+ const text = options.dim ? muted : str(theme.text, '#2d3436');
232
+ const accent = str(theme.accent, '#2980b9');
233
+ const accentText = str(theme.accentText, '#ffffff');
234
+ const link = str(theme.link, accent);
235
+ const border = str(theme.border, '#b2bec3');
236
+ const background = str(theme.background, '#ffffff');
237
+ const surface = str(theme.surface, background);
238
+ const size = options.fontSize ?? Number(theme.fontSize ?? 14);
239
+ const family = options.fontFamily ?? str(theme.fontFamily, 'sans-serif');
240
+ const mono = options.monoFamily ?? 'monospace';
241
+ const selection = str(theme.selection, tint(accent, 0.35));
242
+ const caret = str(theme.caret, text);
243
+ const code = codeBlockLook(theme, { baseSize: size, monoFamily: mono });
244
+ const codeBg = tint(text, 0.08);
245
+ const highlight = tint('#f5c400', 0.45);
246
+ const radius = Number(theme.radius ?? 6);
247
+
248
+ const markStyles = options.markStyles;
249
+ const resolveLanguage = options.resolveLanguage;
250
+ const highlightCode = options.highlight !== false;
251
+
252
+ const markStyle = (mark: Mark, under: RunStyle): RunStyle => {
253
+ const role =
254
+ MARK_ROLES[mark.type.name] ??
255
+ MARK_ROLES[domTagOf(mark.type.spec, mark)?.tag ?? ''];
256
+ let out: RunStyle = {};
257
+ switch (role) {
258
+ case 'strong':
259
+ out = { weight: 700 };
260
+ break;
261
+ case 'em':
262
+ out = { style: 'italic' };
263
+ break;
264
+ case 'code':
265
+ out = {
266
+ family: mono,
267
+ size: Math.round((under.size ?? size) * 0.9),
268
+ color: under.color === muted ? muted : text,
269
+ bg: codeBg,
270
+ };
271
+ break;
272
+ case 'strike':
273
+ out = { strike: under.color ?? text };
274
+ break;
275
+ case 'link': {
276
+ const href = mark.attrs.href;
277
+ out = {
278
+ color: link,
279
+ underline: link,
280
+ href: typeof href === 'string' ? href : null,
281
+ };
282
+ break;
283
+ }
284
+ case 'underline':
285
+ out = { underline: under.color ?? text };
286
+ break;
287
+ case 'highlight':
288
+ out = { bg: str(mark.attrs.color, highlight) };
289
+ break;
290
+ case 'sub':
291
+ case 'sup':
292
+ out = { size: Math.round((under.size ?? size) * 0.8) };
293
+ break;
294
+ case 'textStyle': {
295
+ const a = mark.attrs as Record<string, unknown>;
296
+ if (typeof a.color === 'string') out.color = a.color;
297
+ if (typeof a.fontFamily === 'string') out.family = a.fontFamily;
298
+ if (typeof a.fontSize === 'string') {
299
+ const px = /^(\d+(?:\.\d+)?)px$/.exec(a.fontSize);
300
+ if (px) out.size = Number(px[1]);
301
+ }
302
+ break;
303
+ }
304
+ }
305
+ // an unknown mark's own `style` attribute, and a known one's too
306
+ const dom = domTagOf(mark.type.spec, mark);
307
+ if (dom && typeof dom.attrs.style === 'string') {
308
+ out = { ...out, ...styleFromCSS(dom.attrs.style, { ...under, ...out }) };
309
+ }
310
+ const custom = markStyles?.[mark.type.name];
311
+ if (custom) {
312
+ const merged = { ...under, ...out };
313
+ out = {
314
+ ...out,
315
+ ...(typeof custom === 'function' ? custom(mark, merged) : custom),
316
+ };
317
+ }
318
+ return out;
319
+ };
320
+
321
+ const atom = (node: PMNode): { text: string; style?: RunStyle } => {
322
+ const name = node.type.name;
323
+ if (
324
+ name === 'hard_break' ||
325
+ name === 'hardBreak' ||
326
+ domTagOf(node.type.spec, node)?.tag === 'br'
327
+ ) {
328
+ return { text: '\n' };
329
+ }
330
+ if (name === 'image') {
331
+ const src = String(node.attrs.src ?? '');
332
+ const label =
333
+ str(node.attrs.alt, '') ||
334
+ str(node.attrs.title, '') ||
335
+ src.split(/[/\\]/).pop() ||
336
+ 'image';
337
+ return { text: label, style: { color: muted, bg: codeBg } };
338
+ }
339
+ const leaf = node.type.spec.leafText?.(node) ?? '';
340
+ return { text: leaf || name, style: { color: muted, bg: codeBg } };
341
+ };
342
+
343
+ const cache = new Map<string, InlineLook>();
344
+ const inline = (node: PMNode, context: BlockContext): InlineLook => {
345
+ const { kind, level } = blockKind(node);
346
+ const lang = kind === 'code' ? languageOf(node) : '';
347
+ const key = `${node.type.name}|${kind}|${level}|${lang}|${context.quote ? 'q' : ''}${context.header ? 'h' : ''}`;
348
+ const hit = cache.get(key);
349
+ if (hit) return hit;
350
+ const ink = context.quote ? muted : text;
351
+ let base: RunStyle;
352
+ if (kind === 'heading') {
353
+ const scale = HEADING_SCALES[Math.max(1, Math.min(6, level)) - 1];
354
+ base = {
355
+ family,
356
+ size: Math.round(size * scale),
357
+ weight: 700,
358
+ color: ink,
359
+ };
360
+ } else if (kind === 'code') {
361
+ base = { family: code.family, size: code.size, color: code.color };
362
+ } else {
363
+ base = {
364
+ family,
365
+ size,
366
+ color: ink,
367
+ ...(context.header ? { weight: 700 } : null),
368
+ };
369
+ }
370
+ const look: InlineLook = {
371
+ base,
372
+ mark: markStyle,
373
+ atom,
374
+ ...(kind === 'code'
375
+ ? {
376
+ code: (source: string) =>
377
+ codeBlockRuns(source, code, {
378
+ lang,
379
+ highlight: highlightCode,
380
+ ...(resolveLanguage ? { resolveLanguage } : null),
381
+ }),
382
+ }
383
+ : null),
384
+ };
385
+ cache.set(key, look);
386
+ return look;
387
+ };
388
+
389
+ return {
390
+ size,
391
+ family,
392
+ mono,
393
+ text,
394
+ muted,
395
+ link,
396
+ accent,
397
+ accentText,
398
+ border,
399
+ background,
400
+ surface,
401
+ selection,
402
+ selectionBlurred: tint(text, 0.14),
403
+ caret,
404
+ codeBg,
405
+ headerBg: tint(text, 0.05),
406
+ highlight,
407
+ radius,
408
+ blockGap: Math.round(size * 0.7),
409
+ headingScales: HEADING_SCALES,
410
+ code,
411
+ key: [
412
+ text,
413
+ muted,
414
+ link,
415
+ accent,
416
+ border,
417
+ background,
418
+ size,
419
+ family,
420
+ mono,
421
+ selection,
422
+ caret,
423
+ highlightCode,
424
+ ].join('|'),
425
+ inline,
426
+ };
427
+ }