@react-x11/components 0.9.0 → 0.11.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 (579) hide show
  1. package/README.md +10 -4
  2. package/dist/charts/node.d.ts +11 -1
  3. package/dist/charts/node.d.ts.map +1 -1
  4. package/dist/charts/node.js +44 -14
  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 +27 -24
  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/index.d.ts +1 -1
  24. package/dist/code-language/index.d.ts.map +1 -1
  25. package/dist/code-language/index.js +1 -1
  26. package/dist/code-language/index.js.map +1 -1
  27. package/dist/code-language/languages/glsl.d.ts.map +1 -1
  28. package/dist/code-language/languages/glsl.js +10 -2
  29. package/dist/code-language/languages/glsl.js.map +1 -1
  30. package/dist/code-language/languages/javascript.d.ts.map +1 -1
  31. package/dist/code-language/languages/javascript.js +18 -3
  32. package/dist/code-language/languages/javascript.js.map +1 -1
  33. package/dist/code-language/languages/json.d.ts.map +1 -1
  34. package/dist/code-language/languages/json.js +10 -2
  35. package/dist/code-language/languages/json.js.map +1 -1
  36. package/dist/code-language/languages/shell.d.ts.map +1 -1
  37. package/dist/code-language/languages/shell.js +10 -2
  38. package/dist/code-language/languages/shell.js.map +1 -1
  39. package/dist/code-language/languages/sql.d.ts.map +1 -1
  40. package/dist/code-language/languages/sql.js +20 -2
  41. package/dist/code-language/languages/sql.js.map +1 -1
  42. package/dist/code-language/runs.d.ts +31 -0
  43. package/dist/code-language/runs.d.ts.map +1 -1
  44. package/dist/code-language/runs.js +105 -0
  45. package/dist/code-language/runs.js.map +1 -1
  46. package/dist/code-language/stream.d.ts +22 -0
  47. package/dist/code-language/stream.d.ts.map +1 -1
  48. package/dist/code-language/stream.js +259 -9
  49. package/dist/code-language/stream.js.map +1 -1
  50. package/dist/code-language/types.d.ts +5 -4
  51. package/dist/code-language/types.d.ts.map +1 -1
  52. package/dist/codeblock/index.d.ts +26 -2
  53. package/dist/codeblock/index.d.ts.map +1 -1
  54. package/dist/codeblock/index.js +57 -4
  55. package/dist/codeblock/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 +262 -6
  115. package/dist/html/css/cascade.d.ts.map +1 -1
  116. package/dist/html/css/cascade.js +1373 -67
  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 +501 -15
  139. package/dist/html/css/style.d.ts.map +1 -1
  140. package/dist/html/css/style.js +3729 -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 +65 -16
  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 +3077 -219
  172. package/dist/html/layout/block.js.map +1 -1
  173. package/dist/html/layout/boxes.d.ts +367 -17
  174. package/dist/html/layout/boxes.d.ts.map +1 -1
  175. package/dist/html/layout/boxes.js +1742 -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 +154 -1
  205. package/dist/html/layout/inline.d.ts.map +1 -1
  206. package/dist/html/layout/inline.js +3598 -175
  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 +169 -4
  221. package/dist/html/node.d.ts.map +1 -1
  222. package/dist/html/node.js +1429 -137
  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 +3635 -107
  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 +442 -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 +1 -1
  245. package/dist/index.d.ts.map +1 -1
  246. package/dist/index.js.map +1 -1
  247. package/dist/internal/codelines.d.ts +42 -0
  248. package/dist/internal/codelines.d.ts.map +1 -0
  249. package/dist/internal/codelines.js +170 -0
  250. package/dist/internal/codelines.js.map +1 -0
  251. package/dist/internal/collate.d.ts +3 -0
  252. package/dist/internal/collate.d.ts.map +1 -0
  253. package/dist/internal/collate.js +11 -0
  254. package/dist/internal/collate.js.map +1 -0
  255. package/dist/internal/markdown/ast.d.ts +11 -0
  256. package/dist/internal/markdown/ast.d.ts.map +1 -1
  257. package/dist/internal/markdown/parse.d.ts.map +1 -1
  258. package/dist/internal/markdown/parse.js +109 -8
  259. package/dist/internal/markdown/parse.js.map +1 -1
  260. package/dist/internal/prewarm.d.ts +18 -0
  261. package/dist/internal/prewarm.d.ts.map +1 -0
  262. package/dist/internal/prewarm.js +42 -0
  263. package/dist/internal/prewarm.js.map +1 -0
  264. package/dist/internal/sdf.d.ts +20 -0
  265. package/dist/internal/sdf.d.ts.map +1 -0
  266. package/dist/internal/sdf.js +216 -0
  267. package/dist/internal/sdf.js.map +1 -0
  268. package/dist/internal/splice.d.ts +12 -0
  269. package/dist/internal/splice.d.ts.map +1 -0
  270. package/dist/internal/splice.js +23 -0
  271. package/dist/internal/splice.js.map +1 -0
  272. package/dist/internal/window.d.ts +12 -0
  273. package/dist/internal/window.d.ts.map +1 -1
  274. package/dist/internal/window.js +23 -6
  275. package/dist/internal/window.js.map +1 -1
  276. package/dist/maps/anchors.d.ts +6 -1
  277. package/dist/maps/anchors.d.ts.map +1 -1
  278. package/dist/maps/anchors.js +260 -1
  279. package/dist/maps/anchors.js.map +1 -1
  280. package/dist/maps/controller.d.ts +57 -0
  281. package/dist/maps/controller.d.ts.map +1 -1
  282. package/dist/maps/controller.js +97 -18
  283. package/dist/maps/controller.js.map +1 -1
  284. package/dist/maps/gl/buckets.d.ts +5 -1
  285. package/dist/maps/gl/buckets.d.ts.map +1 -1
  286. package/dist/maps/gl/buckets.js +5 -2
  287. package/dist/maps/gl/buckets.js.map +1 -1
  288. package/dist/maps/gl/build-worker.d.ts +2 -0
  289. package/dist/maps/gl/build-worker.d.ts.map +1 -1
  290. package/dist/maps/gl/build-worker.js +1 -1
  291. package/dist/maps/gl/build-worker.js.map +1 -1
  292. package/dist/maps/gl/cover.d.ts +23 -4
  293. package/dist/maps/gl/cover.d.ts.map +1 -1
  294. package/dist/maps/gl/cover.js +61 -48
  295. package/dist/maps/gl/cover.js.map +1 -1
  296. package/dist/maps/gl/placement.d.ts +21 -8
  297. package/dist/maps/gl/placement.d.ts.map +1 -1
  298. package/dist/maps/gl/placement.js +133 -58
  299. package/dist/maps/gl/placement.js.map +1 -1
  300. package/dist/maps/gl/renderer.d.ts +36 -4
  301. package/dist/maps/gl/renderer.d.ts.map +1 -1
  302. package/dist/maps/gl/renderer.js +81 -24
  303. package/dist/maps/gl/renderer.js.map +1 -1
  304. package/dist/maps/gl/shaders.d.ts +18 -17
  305. package/dist/maps/gl/shaders.d.ts.map +1 -1
  306. package/dist/maps/gl/shaders.js +34 -32
  307. package/dist/maps/gl/shaders.js.map +1 -1
  308. package/dist/maps/gl/store.d.ts +10 -0
  309. package/dist/maps/gl/store.d.ts.map +1 -1
  310. package/dist/maps/gl/store.js +47 -4
  311. package/dist/maps/gl/store.js.map +1 -1
  312. package/dist/maps/gl/text.d.ts +153 -24
  313. package/dist/maps/gl/text.d.ts.map +1 -1
  314. package/dist/maps/gl/text.js +379 -63
  315. package/dist/maps/gl/text.js.map +1 -1
  316. package/dist/maps/gl/view.d.ts +293 -2
  317. package/dist/maps/gl/view.d.ts.map +1 -1
  318. package/dist/maps/gl/view.js +317 -82
  319. package/dist/maps/gl/view.js.map +1 -1
  320. package/dist/maps/icons.d.ts +32 -0
  321. package/dist/maps/icons.d.ts.map +1 -0
  322. package/dist/maps/icons.js +151 -0
  323. package/dist/maps/icons.js.map +1 -0
  324. package/dist/maps/index.d.ts +2 -0
  325. package/dist/maps/index.d.ts.map +1 -1
  326. package/dist/maps/index.js +2 -0
  327. package/dist/maps/index.js.map +1 -1
  328. package/dist/maps/labels.d.ts +56 -4
  329. package/dist/maps/labels.d.ts.map +1 -1
  330. package/dist/maps/labels.js +213 -46
  331. package/dist/maps/labels.js.map +1 -1
  332. package/dist/maps/node.d.ts +17 -0
  333. package/dist/maps/node.d.ts.map +1 -1
  334. package/dist/maps/node.js +64 -30
  335. package/dist/maps/node.js.map +1 -1
  336. package/dist/maps/proj.d.ts +48 -0
  337. package/dist/maps/proj.d.ts.map +1 -1
  338. package/dist/maps/proj.js +73 -0
  339. package/dist/maps/proj.js.map +1 -1
  340. package/dist/maps/sources.d.ts +5 -3
  341. package/dist/maps/sources.d.ts.map +1 -1
  342. package/dist/maps/sources.js +5 -3
  343. package/dist/maps/sources.js.map +1 -1
  344. package/dist/maps/style.d.ts +35 -0
  345. package/dist/maps/style.d.ts.map +1 -1
  346. package/dist/maps/style.js.map +1 -1
  347. package/dist/maps/styles.d.ts +12 -0
  348. package/dist/maps/styles.d.ts.map +1 -1
  349. package/dist/maps/styles.js +120 -6
  350. package/dist/maps/styles.js.map +1 -1
  351. package/dist/maps/tiles.d.ts +31 -11
  352. package/dist/maps/tiles.d.ts.map +1 -1
  353. package/dist/maps/tiles.js +61 -27
  354. package/dist/maps/tiles.js.map +1 -1
  355. package/dist/maps/types.d.ts +28 -4
  356. package/dist/maps/types.d.ts.map +1 -1
  357. package/dist/markdown/index.d.ts.map +1 -1
  358. package/dist/markdown/index.js +209 -68
  359. package/dist/markdown/index.js.map +1 -1
  360. package/dist/markdown/spans.d.ts.map +1 -1
  361. package/dist/markdown/spans.js +6 -0
  362. package/dist/markdown/spans.js.map +1 -1
  363. package/dist/qml/containers.d.ts.map +1 -1
  364. package/dist/qml/containers.js +6 -1
  365. package/dist/qml/containers.js.map +1 -1
  366. package/dist/qml/interaction.d.ts.map +1 -1
  367. package/dist/qml/interaction.js +38 -5
  368. package/dist/qml/interaction.js.map +1 -1
  369. package/dist/qml/layouts.d.ts.map +1 -1
  370. package/dist/qml/layouts.js +21 -6
  371. package/dist/qml/layouts.js.map +1 -1
  372. package/dist/qml/qtquick.d.ts.map +1 -1
  373. package/dist/qml/qtquick.js +9 -2
  374. package/dist/qml/qtquick.js.map +1 -1
  375. package/dist/qml/react.d.ts.map +1 -1
  376. package/dist/qml/react.js +9 -7
  377. package/dist/qml/react.js.map +1 -1
  378. package/dist/reorder/clock.d.ts +7 -0
  379. package/dist/reorder/clock.d.ts.map +1 -0
  380. package/dist/reorder/clock.js +26 -0
  381. package/dist/reorder/clock.js.map +1 -0
  382. package/dist/reorder/index.d.ts +25 -3
  383. package/dist/reorder/index.d.ts.map +1 -1
  384. package/dist/reorder/index.js +64 -19
  385. package/dist/reorder/index.js.map +1 -1
  386. package/dist/rich-text-editor/index.d.ts +0 -11
  387. package/dist/rich-text-editor/index.d.ts.map +1 -1
  388. package/dist/rich-text-editor/index.js +38 -9
  389. package/dist/rich-text-editor/index.js.map +1 -1
  390. package/dist/rich-text-editor/keymap.d.ts.map +1 -1
  391. package/dist/rich-text-editor/keymap.js +2 -1
  392. package/dist/rich-text-editor/keymap.js.map +1 -1
  393. package/dist/rich-text-editor/keys.d.ts +17 -6
  394. package/dist/rich-text-editor/keys.d.ts.map +1 -1
  395. package/dist/rich-text-editor/keys.js +135 -26
  396. package/dist/rich-text-editor/keys.js.map +1 -1
  397. package/dist/rich-text-editor/markdown.d.ts.map +1 -1
  398. package/dist/rich-text-editor/markdown.js +30 -1
  399. package/dist/rich-text-editor/markdown.js.map +1 -1
  400. package/dist/rich-text-editor/marks.d.ts +9 -0
  401. package/dist/rich-text-editor/marks.d.ts.map +1 -0
  402. package/dist/rich-text-editor/marks.js +83 -0
  403. package/dist/rich-text-editor/marks.js.map +1 -0
  404. package/dist/rich-text-editor/render.d.ts.map +1 -1
  405. package/dist/rich-text-editor/render.js +28 -10
  406. package/dist/rich-text-editor/render.js.map +1 -1
  407. package/dist/rich-text-editor/replace.d.ts +13 -0
  408. package/dist/rich-text-editor/replace.d.ts.map +1 -0
  409. package/dist/rich-text-editor/replace.js +64 -0
  410. package/dist/rich-text-editor/replace.js.map +1 -0
  411. package/dist/rich-text-editor/toolbar.d.ts.map +1 -1
  412. package/dist/rich-text-editor/toolbar.js +1 -1
  413. package/dist/rich-text-editor/toolbar.js.map +1 -1
  414. package/dist/rich-text-editor/virtual.d.ts.map +1 -1
  415. package/dist/rich-text-editor/virtual.js +17 -0
  416. package/dist/rich-text-editor/virtual.js.map +1 -1
  417. package/dist/richtext/node.d.ts +46 -2
  418. package/dist/richtext/node.d.ts.map +1 -1
  419. package/dist/richtext/node.js +187 -4
  420. package/dist/richtext/node.js.map +1 -1
  421. package/dist/richtext/runs.d.ts +13 -8
  422. package/dist/richtext/runs.d.ts.map +1 -1
  423. package/dist/richtext/runs.js +18 -8
  424. package/dist/richtext/runs.js.map +1 -1
  425. package/dist/table/index.d.ts.map +1 -1
  426. package/dist/table/index.js +23 -0
  427. package/dist/table/index.js.map +1 -1
  428. package/dist/table/rows.d.ts +3 -2
  429. package/dist/table/rows.d.ts.map +1 -1
  430. package/dist/table/rows.js +20 -6
  431. package/dist/table/rows.js.map +1 -1
  432. package/dist/terminal/index.d.ts.map +1 -1
  433. package/dist/terminal/index.js +4 -0
  434. package/dist/terminal/index.js.map +1 -1
  435. package/dist/terminal/vt/pty.d.ts +13 -2
  436. package/dist/terminal/vt/pty.d.ts.map +1 -1
  437. package/dist/terminal/vt/pty.js +18 -3
  438. package/dist/terminal/vt/pty.js.map +1 -1
  439. package/dist/terminal-output/index.d.ts.map +1 -1
  440. package/dist/terminal-output/index.js +103 -23
  441. package/dist/terminal-output/index.js.map +1 -1
  442. package/dist/terminal-output/runs.d.ts +4 -1
  443. package/dist/terminal-output/runs.d.ts.map +1 -1
  444. package/dist/terminal-output/runs.js +5 -1
  445. package/dist/terminal-output/runs.js.map +1 -1
  446. package/dist/three/canvas.d.ts.map +1 -1
  447. package/dist/three/canvas.js +85 -7
  448. package/dist/three/canvas.js.map +1 -1
  449. package/dist/three/events.d.ts +22 -4
  450. package/dist/three/events.d.ts.map +1 -1
  451. package/dist/three/events.js +34 -4
  452. package/dist/three/events.js.map +1 -1
  453. package/dist/tree/index.d.ts.map +1 -1
  454. package/dist/tree/index.js +17 -0
  455. package/dist/tree/index.js.map +1 -1
  456. package/package.json +42 -33
  457. package/src/charts/node.ts +62 -26
  458. package/src/charts/render.ts +120 -30
  459. package/src/code/index.ts +36 -32
  460. package/src/code-editor/completion.ts +3 -2
  461. package/src/code-editor/index.ts +19 -0
  462. package/src/code-editor/node.ts +1574 -184
  463. package/src/code-language/index.ts +1 -1
  464. package/src/code-language/languages/glsl.ts +12 -2
  465. package/src/code-language/languages/javascript.ts +21 -4
  466. package/src/code-language/languages/json.ts +12 -2
  467. package/src/code-language/languages/shell.ts +12 -2
  468. package/src/code-language/languages/sql.ts +22 -2
  469. package/src/code-language/runs.ts +111 -1
  470. package/src/code-language/stream.ts +257 -17
  471. package/src/code-language/types.ts +5 -4
  472. package/src/codeblock/index.ts +68 -4
  473. package/src/flow/draw.ts +167 -41
  474. package/src/flow/gl/color.ts +85 -0
  475. package/src/flow/gl/index.ts +342 -0
  476. package/src/flow/gl/pack.ts +585 -0
  477. package/src/flow/gl/renderer.ts +679 -0
  478. package/src/flow/gl/shaders.ts +371 -0
  479. package/src/flow/gl/text.ts +1295 -0
  480. package/src/flow/index.ts +794 -67
  481. package/src/flow/node.ts +2496 -1256
  482. package/src/flow/paint.ts +511 -0
  483. package/src/flow/paths.ts +80 -15
  484. package/src/flow/scene.ts +2199 -0
  485. package/src/flow/types.ts +113 -1
  486. package/src/html/controls.ts +73 -2
  487. package/src/html/css/calc.ts +385 -0
  488. package/src/html/css/cascade.ts +1481 -62
  489. package/src/html/css/color.ts +755 -0
  490. package/src/html/css/content.ts +417 -0
  491. package/src/html/css/counter-styles.ts +973 -0
  492. package/src/html/css/decode.ts +130 -0
  493. package/src/html/css/parse.ts +1514 -160
  494. package/src/html/css/style.ts +4131 -223
  495. package/src/html/css/ua.ts +66 -17
  496. package/src/html/css/values.ts +150 -50
  497. package/src/html/css/vars.ts +348 -0
  498. package/src/html/dom.ts +284 -17
  499. package/src/html/fonts.ts +641 -0
  500. package/src/html/gif.ts +233 -0
  501. package/src/html/index.ts +180 -20
  502. package/src/html/layout/block.ts +3560 -208
  503. package/src/html/layout/boxes.ts +2141 -190
  504. package/src/html/layout/cache.ts +289 -0
  505. package/src/html/layout/collapse.ts +317 -0
  506. package/src/html/layout/css-grid.ts +1063 -0
  507. package/src/html/layout/flex.ts +1115 -106
  508. package/src/html/layout/floats.ts +128 -14
  509. package/src/html/layout/grid-lines.ts +141 -0
  510. package/src/html/layout/grid.ts +181 -0
  511. package/src/html/layout/inline.ts +4187 -192
  512. package/src/html/layout/shaping.ts +140 -0
  513. package/src/html/layout/table.ts +696 -186
  514. package/src/html/layout/tracks.ts +437 -0
  515. package/src/html/node.ts +1585 -156
  516. package/src/html/paint.ts +4582 -267
  517. package/src/html/resources.ts +161 -50
  518. package/src/html/surfaces.ts +81 -0
  519. package/src/html/svg.ts +504 -0
  520. package/src/html/url.ts +86 -0
  521. package/src/index.ts +2 -0
  522. package/src/internal/codelines.ts +200 -0
  523. package/src/internal/collate.ts +12 -0
  524. package/src/internal/markdown/ast.ts +11 -0
  525. package/src/internal/markdown/parse.ts +154 -11
  526. package/src/internal/prewarm.ts +45 -0
  527. package/src/internal/sdf.ts +227 -0
  528. package/src/internal/splice.ts +25 -0
  529. package/src/internal/window.ts +36 -5
  530. package/src/maps/anchors.ts +307 -1
  531. package/src/maps/controller.ts +116 -31
  532. package/src/maps/gl/buckets.ts +5 -1
  533. package/src/maps/gl/build-worker.ts +13 -2
  534. package/src/maps/gl/cover.ts +79 -44
  535. package/src/maps/gl/placement.ts +221 -69
  536. package/src/maps/gl/renderer.ts +104 -20
  537. package/src/maps/gl/shaders.ts +35 -32
  538. package/src/maps/gl/store.ts +66 -17
  539. package/src/maps/gl/text.ts +444 -71
  540. package/src/maps/gl/view.ts +361 -96
  541. package/src/maps/icons.ts +183 -0
  542. package/src/maps/index.ts +4 -0
  543. package/src/maps/labels.ts +269 -49
  544. package/src/maps/node.ts +82 -49
  545. package/src/maps/proj.ts +87 -0
  546. package/src/maps/sources.ts +5 -3
  547. package/src/maps/style.ts +32 -0
  548. package/src/maps/styles.ts +215 -4
  549. package/src/maps/tiles.ts +64 -31
  550. package/src/maps/types.ts +28 -4
  551. package/src/markdown/index.ts +293 -92
  552. package/src/markdown/spans.ts +5 -0
  553. package/src/qml/containers.tsx +6 -1
  554. package/src/qml/interaction.tsx +42 -5
  555. package/src/qml/layouts.tsx +21 -6
  556. package/src/qml/qtquick.tsx +9 -2
  557. package/src/qml/react.tsx +7 -5
  558. package/src/reorder/clock.ts +27 -0
  559. package/src/reorder/index.ts +100 -27
  560. package/src/rich-text-editor/index.ts +37 -12
  561. package/src/rich-text-editor/keymap.ts +1 -1
  562. package/src/rich-text-editor/keys.ts +135 -26
  563. package/src/rich-text-editor/markdown.ts +36 -1
  564. package/src/rich-text-editor/marks.ts +101 -0
  565. package/src/rich-text-editor/render.ts +49 -12
  566. package/src/rich-text-editor/replace.ts +85 -0
  567. package/src/rich-text-editor/toolbar.ts +1 -1
  568. package/src/rich-text-editor/virtual.ts +25 -0
  569. package/src/richtext/node.ts +235 -14
  570. package/src/richtext/runs.ts +23 -12
  571. package/src/table/index.ts +29 -0
  572. package/src/table/rows.ts +18 -8
  573. package/src/terminal/index.ts +4 -0
  574. package/src/terminal/vt/pty.ts +16 -2
  575. package/src/terminal-output/index.ts +129 -31
  576. package/src/terminal-output/runs.ts +16 -2
  577. package/src/three/canvas.ts +102 -8
  578. package/src/three/events.ts +49 -9
  579. package/src/tree/index.ts +19 -0
@@ -35,23 +35,38 @@ import {
35
35
  cancelAfterLayout,
36
36
  type LayoutTick,
37
37
  } from '../internal/timers.js';
38
+ import { scaleOf } from '../internal/units.js';
38
39
 
39
40
  function isRow(inst: QmlInstance): boolean {
40
41
  return inst.typeInfo.name === 'RowLayout';
41
42
  }
42
43
 
43
- /** Reflect yoga's answers into the managed children's geometry slots. */
44
+ /**
45
+ * Reflect yoga's answers into the managed children's geometry slots.
46
+ *
47
+ * `abs` is device pixels and the slots are the logical ones the document is
48
+ * written in (react-x11's docs/scale.md), and this is not only read-back:
49
+ * an author `width:` is the item's size hint and the slot this writes, so a
50
+ * device number here came back as a hint twice the size and the row drew
51
+ * it that way. Divided once, after the subtraction: `(a - b) / s` rounds
52
+ * once where `a / s - b / s` rounds three times, and at a scale of 1.25
53
+ * half the positions would read like 78.39999999999999 rather than 78.4.
54
+ * And from `abs` rather than `getClientRects()`, which answers nothing for
55
+ * a box with no area: a 0×0 item in a row still has an `x`.
56
+ */
44
57
  function feedbackLayout(inst: QmlInstance): void {
45
58
  if (inst.destroyed) return;
46
- const containerAbs = hostNode(inst)?.abs;
59
+ const container = hostNode(inst);
60
+ const containerAbs = container?.abs;
47
61
  if (!containerAbs) return;
62
+ const s = scaleOf(container);
48
63
  for (const child of inst.visualChildren()) {
49
64
  const abs = hostNode(child)?.abs;
50
65
  if (!abs) continue; // a custom view without captureNode: skip quietly
51
- child.slots.get('x')?.reflect(abs.x - containerAbs.x);
52
- child.slots.get('y')?.reflect(abs.y - containerAbs.y);
53
- child.slots.get('width')?.reflect(abs.width);
54
- child.slots.get('height')?.reflect(abs.height);
66
+ child.slots.get('x')?.reflect((abs.x - containerAbs.x) / s);
67
+ child.slots.get('y')?.reflect((abs.y - containerAbs.y) / s);
68
+ child.slots.get('width')?.reflect(abs.width / s);
69
+ child.slots.get('height')?.reflect(abs.height / s);
55
70
  }
56
71
  }
57
72
 
@@ -40,6 +40,7 @@ import { layoutTypes } from './layouts.js';
40
40
  import { modelTypes } from './models.js';
41
41
  import { stateTypes } from './states.js';
42
42
  import { cancel, schedule, warn } from './globals.js';
43
+ import { scaleOf } from '../internal/units.js';
43
44
 
44
45
  // Qt namespace constants used from expressions (`Qt.LeftButton`,
45
46
  // `mouse.modifiers & Qt.ShiftModifier`, `Qt.AlignHCenter`).
@@ -120,8 +121,14 @@ function TextView({ inst }: { inst: QmlInstance }): ReactElement {
120
121
  if (!node?.app?.fonts || !node.resolvedTextStyle) return;
121
122
  try {
122
123
  const layout = node.app.fonts.layout(text, node.resolvedTextStyle());
123
- inst.slots.get('implicitWidth')?.assign(Math.ceil(layout.width));
124
- inst.slots.get('implicitHeight')?.assign(Math.ceil(layout.height));
124
+ // The resolved size is the device one — the cascade resolves a
125
+ // theme's size once, at the root, in device pixels — so at scale 2 a
126
+ // `font.pixelSize: 20` is laid out at 40 and measured in device
127
+ // pixels. Divided back into the logical ones an implicit size is read
128
+ // in, or every binding on it reads double.
129
+ const s = scaleOf(node);
130
+ inst.slots.get('implicitWidth')?.assign(Math.ceil(layout.width / s));
131
+ inst.slots.get('implicitHeight')?.assign(Math.ceil(layout.height / s));
125
132
  } catch {
126
133
  // No fonts loaded (headless without the fonts option): leave 0.
127
134
  }
package/src/qml/react.tsx CHANGED
@@ -175,7 +175,9 @@ export const QmlView = forwardRef(function QmlView(
175
175
 
176
176
  // Root-size feedback. `afterLayout` (not a bare effect): react-x11 lays
177
177
  // out on the frame flush, so an effect body reads the geometry of the
178
- // previous pass — src/internal/timers.ts documents the shape.
178
+ // previous pass — src/internal/timers.ts documents the shape. The client
179
+ // rect, not `abs`: `abs` is device pixels, and the root's size is read in
180
+ // the logical ones the document and the wrapper's `style` are written in.
179
181
  const wrapRef = useRef<DrawnNode>(null);
180
182
  const rootW = root.slots.get('width');
181
183
  const rootH = root.slots.get('height');
@@ -183,10 +185,10 @@ export const QmlView = forwardRef(function QmlView(
183
185
  useEffect(() => {
184
186
  if (sized) return;
185
187
  const tick = afterLayout(() => {
186
- const abs = wrapRef.current?.abs;
187
- if (!abs || root.destroyed) return;
188
- if (abs.width) root.slots.get('implicitWidth')?.assign(abs.width);
189
- if (abs.height) root.slots.get('implicitHeight')?.assign(abs.height);
188
+ const box = wrapRef.current?.getClientRects()[0];
189
+ if (!box || root.destroyed) return;
190
+ if (box.width) root.slots.get('implicitWidth')?.assign(box.width);
191
+ if (box.height) root.slots.get('implicitHeight')?.assign(box.height);
190
192
  flushBindings();
191
193
  });
192
194
  return () => cancelAfterLayout(tick);
@@ -0,0 +1,27 @@
1
+ // The drop flight's clock — the time it reads and the timer that steps it —
2
+ // in a module of its own, so that a test can hold it.
3
+ //
4
+ // The flight home is wall-clock time on purpose: `dropAnimation={180}` is a
5
+ // hundred and eighty milliseconds however many frames the machine manages.
6
+ // That is also what makes it hard to look at. A runner slow enough to spend
7
+ // the whole flight inside the `await` that released the item finds it
8
+ // already landed, which is how "a drag that landed nowhere flies back"
9
+ // failed on CI. `test/held-clock.ts` stands in for this object and nothing
10
+ // else, so the drag, and the layout tick the flight starts from, stay real.
11
+ //
12
+ // Exported from this module and not from `./index.ts`: everything there is
13
+ // the package's `./reorder` subpath, and this is for the tests.
14
+ import { cancelLater, later } from '../internal/timers.js';
15
+ import type { DelayTick } from '../internal/timers.js';
16
+
17
+ export const flightClock = {
18
+ now(): number {
19
+ return Date.now();
20
+ },
21
+ arm(step: () => void, ms: number): DelayTick {
22
+ return later(step, ms);
23
+ },
24
+ disarm(handle: DelayTick): void {
25
+ cancelLater(handle);
26
+ },
27
+ };
@@ -47,7 +47,12 @@
47
47
  // is over. It is one object for one gesture, never read at import time.
48
48
  // - **The indicator, not the slide.** Neighbours do not glide out of the
49
49
  // way: this renderer has no transform, and a line at the closest edge
50
- // answers the same question for a rectangle per item. The one thing that
50
+ // answers the same question for a rectangle per item. That is the
51
+ // *default*, not a limit — an app that wants the gap instead can open one
52
+ // from `onDragUpdate` and let flex layout move the rows, which is what
53
+ // `examples/reorder.tsx`'s first list does in about twenty lines. What
54
+ // this component will not do is pick that for everyone: a gap costs a
55
+ // reflow per pointer move, and a line costs none. The one thing that
51
56
  // does move is the drop: `dropAnimation` flies a copy of the item from
52
57
  // where the pointer let go to where the item landed. That copy is a box
53
58
  // **inside the item**, not the ghost popup carried on — a popup outlives
@@ -147,14 +152,11 @@ import {
147
152
  import { hx } from './hx.js';
148
153
  // Shared with <Tree> and <Table> — internal, deliberately not a shared
149
154
  // *module*; the header of src/internal/timers.ts says why. The drop flight
150
- // needs both: a tick after the layout that placed the item, and a clock.
151
- import {
152
- afterLayout,
153
- cancelAfterLayout,
154
- cancelLater,
155
- later,
156
- } from '../internal/timers.js';
155
+ // needs both: a tick after the layout that placed the item, and a clock —
156
+ // which is `./clock.ts`'s, where a test can hold it.
157
+ import { afterLayout, cancelAfterLayout } from '../internal/timers.js';
157
158
  import type { DelayTick, LayoutTick } from '../internal/timers.js';
159
+ import { flightClock } from './clock.js';
158
160
  import {
159
161
  closestSlot,
160
162
  insertManyAtSlot,
@@ -338,14 +340,39 @@ export interface ReorderDragStart {
338
340
 
339
341
  /** Where the drag is now. Fires on the list the item belongs to, whichever
340
342
  * list the pointer is over — `over` is null over anything that is not a
341
- * list in the group. `over.index` is the index the item would **land at**,
342
- * which is what `onReorder`'s `to` and `onInsert`'s `index` will say, not
343
- * the raw gap it is hovering. */
343
+ * list in the group, and **only** then. `over.index` is the index the item
344
+ * would **land at**, which is what `onReorder`'s `to` and `onInsert`'s
345
+ * `index` will say, not the raw gap it is hovering; `over.settled` says the
346
+ * drop would land there and change nothing. */
344
347
  export interface ReorderDragUpdate {
345
348
  id: ReorderId;
346
349
  ids: ReorderId[];
347
350
  from: number;
348
- over: { list: string | undefined; index: number } | null;
351
+ over: {
352
+ list: string | undefined;
353
+ /** Where the row would **end up** — what `onReorder`'s `to` will say. */
354
+ index: number;
355
+ /**
356
+ * Which gap the pointer is over, counting the one before the first row
357
+ * as 0 and the one past the last as `length`.
358
+ *
359
+ * Not the same number as `index`, and the difference is not a detail: a
360
+ * row moving within its own list closes the hole it leaves behind, so
361
+ * dragging row 0 down onto the gap after row 1 is **slot 2** and lands
362
+ * at **index 1**. Draw a drop position from `index` and it sits one
363
+ * place too high for every downward drag and exactly right for every
364
+ * upward one, which is what an off-by-one that only happens half the
365
+ * time looks like.
366
+ *
367
+ * So: `slot` to draw *where the drop would go*, `index` to say *what
368
+ * the list will become*.
369
+ */
370
+ slot: number;
371
+ /** The drop would land here and change nothing. A position, not an
372
+ * absence: the pointer is over the list, at an index it can name, and
373
+ * the rows are simply already in that order. */
374
+ settled: boolean;
375
+ } | null;
349
376
  combine: ReorderId | null;
350
377
  input: ReorderInput;
351
378
  }
@@ -539,7 +566,14 @@ interface DragOver {
539
566
  listUid: string;
540
567
  list: string | undefined;
541
568
  index: number;
569
+ /** The gap the pointer is over. **Not** `index`: for a move within one
570
+ * list the row leaves a hole behind it, so dragging row 0 down to the
571
+ * gap after row 1 is slot 2 and lands at index 1. */
572
+ slot: number;
542
573
  combine: ReorderId | null;
574
+ /** The drop would land here and change nothing — the rows are already in
575
+ * this order. Still a position, and still over the list. */
576
+ settled: boolean;
543
577
  }
544
578
 
545
579
  /**
@@ -843,11 +877,30 @@ function refuse(): boolean {
843
877
  return false;
844
878
  }
845
879
 
880
+ /**
881
+ * Whether two answers say the same thing — the gate that keeps one
882
+ * `onDragUpdate` per *change* rather than one per pointer motion.
883
+ *
884
+ * `slot` is part of the comparison and not an afterthought: it and `index`
885
+ * move independently. Dragging a row down its own list, the gap after the
886
+ * next row and the gap after the one beyond it are slots 2 and 3, and both
887
+ * land the row at index 1 and 2 — but the pair (1,2) and (2,3) differ in
888
+ * both. Where they *don't* is at the top of a downward drag: slots 1 and 2
889
+ * both land at index 1, because the row closes the hole it left. Comparing
890
+ * on `index` alone therefore swallowed the move from slot 1 to slot 2, and a
891
+ * list drawing the drop as a space kept it a row too high for as long as the
892
+ * pointer stayed in that band — an off-by-one that looked like a rule
893
+ * problem and was a dropped notification.
894
+ */
846
895
  function sameOver(a: DragOver | null, b: DragOver | null): boolean {
847
896
  if (a === b) return true;
848
897
  if (!a || !b) return false;
849
898
  return (
850
- a.listUid === b.listUid && a.index === b.index && a.combine === b.combine
899
+ a.listUid === b.listUid &&
900
+ a.index === b.index &&
901
+ a.slot === b.slot &&
902
+ a.settled === b.settled &&
903
+ a.combine === b.combine
851
904
  );
852
905
  }
853
906
 
@@ -1144,18 +1197,26 @@ export function ReorderList(props: ReorderListProps): ReactElement {
1144
1197
  ev.reject();
1145
1198
  return;
1146
1199
  }
1147
- // one of this list's own items, over a gap that is already its own:
1148
- // nothing would move, so nothing is promised
1200
+ // One of this list's own items, over a slot it already occupies: the
1201
+ // drop would change nothing.
1149
1202
  const move =
1150
1203
  !combining && moving.length > 0
1151
1204
  ? moveManyToSlot(ids, moving, slot, payload!.id)
1152
1205
  : null;
1153
- if (!combining && moving.length > 0 && move === null) {
1154
- mark(null);
1155
- if (activeDrag?.over?.listUid === uid) activeDrag.over = null;
1156
- return;
1157
- }
1158
- mark(at);
1206
+ const settled = !combining && moving.length > 0 && move === null;
1207
+ // No line: there is no insertion to point at. But the drag **is** over
1208
+ // this list, at a position this list can name, and saying `over: null`
1209
+ // for it conflated two different facts — "nowhere" and "here, and
1210
+ // already in order".
1211
+ //
1212
+ // That conflation is visible, not theoretical. A list that draws the
1213
+ // drop as a gap closes the gap when told `over` is null; closing it
1214
+ // moves the rows back up; the pointer is then over a different row, so
1215
+ // a gap opens again, which moves the rows down, which puts the pointer
1216
+ // back over the gap. Walking a pointer down the list a step at a time,
1217
+ // that alternates every other sample — and what it looks like is a drop
1218
+ // target one slot away from the pointer.
1219
+ mark(settled ? null : at);
1159
1220
  if (activeDrag) {
1160
1221
  activeDrag.over = {
1161
1222
  listUid: uid,
@@ -1163,7 +1224,9 @@ export function ReorderList(props: ReorderListProps): ReactElement {
1163
1224
  // where it would land, not the gap it is over — a same-list move
1164
1225
  // closes the hole it left behind, and a newcomer lands at the gap
1165
1226
  index: move ? move.to : slot,
1227
+ slot,
1166
1228
  combine: combining,
1229
+ settled,
1167
1230
  };
1168
1231
  }
1169
1232
  };
@@ -1361,7 +1424,10 @@ export function ReorderList(props: ReorderListProps): ReactElement {
1361
1424
  id: itemId,
1362
1425
  ids: move.ids,
1363
1426
  from,
1364
- over: { list: id, index: move.to },
1427
+ // The keyboard path is not a preview: the row has already *moved*,
1428
+ // so where it is and where it would land are the same place and
1429
+ // there is no hole still open behind it.
1430
+ over: { list: id, index: move.to, slot: move.to, settled: false },
1365
1431
  combine: null,
1366
1432
  input: 'keyboard',
1367
1433
  });
@@ -1423,7 +1489,14 @@ export function ReorderList(props: ReorderListProps): ReactElement {
1423
1489
  id: itemId,
1424
1490
  ids: payload?.ids ?? [itemId],
1425
1491
  from: payload?.index ?? -1,
1426
- over: over ? { list: over.list, index: over.index } : null,
1492
+ over: over
1493
+ ? {
1494
+ list: over.list,
1495
+ index: over.index,
1496
+ slot: over.slot,
1497
+ settled: over.settled,
1498
+ }
1499
+ : null,
1427
1500
  combine: over?.combine ?? null,
1428
1501
  input: 'pointer',
1429
1502
  });
@@ -1746,7 +1819,7 @@ export function ReorderItem(props: ReorderItemProps): ReactElement {
1746
1819
  useEffect(
1747
1820
  () => () => {
1748
1821
  cancelAfterLayout(ticks.current.layout);
1749
- cancelLater(ticks.current.timer);
1822
+ flightClock.disarm(ticks.current.timer);
1750
1823
  },
1751
1824
  [],
1752
1825
  );
@@ -1796,9 +1869,9 @@ export function ReorderItem(props: ReorderItemProps): ReactElement {
1796
1869
  setFlight(null);
1797
1870
  return;
1798
1871
  }
1799
- const started = Date.now();
1872
+ const started = flightClock.now();
1800
1873
  const stepOn = (): void => {
1801
- const t = Math.min((Date.now() - started) / ms, 1);
1874
+ const t = Math.min((flightClock.now() - started) / ms, 1);
1802
1875
  if (t >= 1) {
1803
1876
  ticks.current.timer = null;
1804
1877
  setFlight(null);
@@ -1806,7 +1879,7 @@ export function ReorderItem(props: ReorderItemProps): ReactElement {
1806
1879
  }
1807
1880
  const left = 1 - ease(t);
1808
1881
  setFlight({ x: dx * left, y: dy * left });
1809
- ticks.current.timer = later(stepOn, FLIGHT_STEP_MS);
1882
+ ticks.current.timer = flightClock.arm(stepOn, FLIGHT_STEP_MS);
1810
1883
  };
1811
1884
  stepOn();
1812
1885
  });
@@ -50,11 +50,10 @@ import type {
50
50
  import { XK_ESCAPE, XK_KP_ENTER, XK_RETURN } from 'react-x11/keysyms';
51
51
  import { tint } from 'react-x11/style';
52
52
  import type { Style } from 'react-x11/style';
53
- import { toggleMark } from 'prosemirror-commands';
54
53
  import { redo, undo } from 'prosemirror-history';
55
54
  import { Fragment, Slice } from 'prosemirror-model';
56
55
  import type { Node as PMNode, Schema } from 'prosemirror-model';
57
- import { EditorState, Selection } from 'prosemirror-state';
56
+ import { EditorState } from 'prosemirror-state';
58
57
  import type { Command, Plugin, Transaction } from 'prosemirror-state';
59
58
  import type { EditorProps, EditorView } from 'prosemirror-view';
60
59
 
@@ -80,11 +79,13 @@ import type { DropAnswer } from './drag.js';
80
79
  import { docFromHTML, htmlFromContent } from './html.js';
81
80
  import { defaultPlugins } from './keymap.js';
82
81
  import { deriveLook } from './look.js';
82
+ import { toggleMark } from './marks.js';
83
83
  import type { MarkStyle } from './look.js';
84
84
  import { docFromText, markdownCodec, textFromDoc } from './markdown.js';
85
85
  import type { MarkdownCodec } from './markdown.js';
86
86
  import { registerEditorElements, ROOT_ELEMENT, TEXT_ELEMENT } from './nodes.js';
87
87
  import { renderBlockRange, renderBlocks } from './render.js';
88
+ import { replaceDocumentTr } from './replace.js';
88
89
  import type { ImageInfo, NodeViewProps, RenderContext } from './render.js';
89
90
  import type { RunStyle } from './inline.js';
90
91
  import { schema as defaultSchema } from './schema.js';
@@ -106,6 +107,7 @@ import type { ToolbarEntry } from './toolbar.js';
106
107
  import { RichEditorView } from './view.js';
107
108
  import type { ViewConfig, ViewProps } from './view.js';
108
109
  import { useBlockWindow } from './virtual.js';
110
+ import { useFontPrewarm } from '../internal/prewarm.js';
109
111
 
110
112
  registerRichText();
111
113
  registerEditorElements();
@@ -337,16 +339,7 @@ function replaceDocument(
337
339
  doc: PMNode,
338
340
  addToHistory: boolean,
339
341
  ): void {
340
- const { state } = view;
341
- const tr = state.tr.replaceWith(0, state.doc.content.size, doc.content);
342
- // keep the caret about where it was, inside what is there now
343
- tr.setSelection(
344
- Selection.near(
345
- tr.doc.resolve(Math.min(state.selection.head, tr.doc.content.size)),
346
- ),
347
- );
348
- if (!addToHistory) tr.setMeta('addToHistory', false);
349
- view.dispatch(tr);
342
+ view.dispatch(replaceDocumentTr(view.state, doc, addToHistory));
350
343
  }
351
344
 
352
345
  function inListOrCode(state: EditorState): boolean {
@@ -384,6 +377,33 @@ interface LinkEdit {
384
377
  * />
385
378
  * ```
386
379
  */
380
+ /**
381
+ * Whether the document an editor mounts with has code in it: a code span or
382
+ * block as markdown spells one, as HTML does, or as a node's schema says.
383
+ */
384
+ function hasCode(props: RichTextEditorProps, format: EditorFormat): boolean {
385
+ const content = props.state?.doc ?? props.value ?? props.defaultValue;
386
+ if (content == null) return false;
387
+ if (typeof content === 'string') {
388
+ if (format === 'markdown') {
389
+ return content.includes('`') || content.includes('~~~');
390
+ }
391
+ if (format === 'html') {
392
+ return content.includes('<code') || content.includes('<pre');
393
+ }
394
+ return false;
395
+ }
396
+ let found = false;
397
+ content.descendants((node) => {
398
+ if (found) return false;
399
+ if (node.type.spec.code || node.marks.some((m) => m.type.spec.code)) {
400
+ found = true;
401
+ }
402
+ return !found;
403
+ });
404
+ return found;
405
+ }
406
+
387
407
  export function RichTextEditor(props: RichTextEditorProps): ReactElement {
388
408
  const theme = useTheme() as unknown as Record<string, unknown>;
389
409
  const clipboard = useClipboard();
@@ -431,6 +451,11 @@ export function RichTextEditor(props: RichTextEditorProps): ReactElement {
431
451
  disabled,
432
452
  ],
433
453
  );
454
+ // A document that mounts with code in it sets that code in the mono
455
+ // family on its first frame: warmed while the editor renders, asked of
456
+ // the content it mounts with, once.
457
+ const [mountsWithCode] = useState(() => hasCode(props, format));
458
+ useFontPrewarm(mountsWithCode ? look.mono : null);
434
459
 
435
460
  // The editor's own plugins, made once per schema and option set — a
436
461
  // plugin instance carries its state across a reconfigure, so the undo
@@ -29,7 +29,6 @@ import {
29
29
  chainCommands,
30
30
  exitCode,
31
31
  setBlockType,
32
- toggleMark,
33
32
  wrapIn,
34
33
  } from 'prosemirror-commands';
35
34
  import { history, redo, undo } from 'prosemirror-history';
@@ -64,6 +63,7 @@ import {
64
63
  toggleTaskList,
65
64
  } from './commands.js';
66
65
  import { hasTables, tableRepair } from './tables.js';
66
+ import { toggleMark } from './marks.js';
67
67
 
68
68
  // --- the event ---------------------------------------------------------------
69
69