@mx-space/cli 0.14.2 → 0.15.1

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 (617) hide show
  1. package/README.md +36 -12
  2. package/dist/{Lexical.dev-CtGmYDoh.mjs → Lexical.dev-BSvx45_E.mjs} +350 -402
  3. package/dist/{Lexical.node-8sRFmq2X.mjs → Lexical.node-kAh5GM2n.mjs} +2 -2
  4. package/dist/{Lexical.prod-D-VfeKDz.mjs → Lexical.prod-Bqwgb3ez.mjs} +1757 -1785
  5. package/dist/{LexicalClipboard.dev-CzQ15z6E.mjs → LexicalClipboard.dev-BWU3KXIa.mjs} +19 -15
  6. package/dist/{LexicalClipboard.node-D4gMGws6.mjs → LexicalClipboard.node-BygAdNdF.mjs} +2 -2
  7. package/dist/{LexicalClipboard.prod-CltkQpzS.mjs → LexicalClipboard.prod-BtMuKNyT.mjs} +11 -11
  8. package/dist/{LexicalCodeCore.dev-DkYBZRGB.mjs → LexicalCodeCore.dev-CD2xgvDs.mjs} +95 -89
  9. package/dist/{LexicalCodeCore.prod-COc3_QL8.mjs → LexicalCodeCore.prod-Bl6FFMc7.mjs} +146 -158
  10. package/dist/{LexicalDragon.dev-Dv5_WUae.mjs → LexicalDragon.dev-BwdYhm4K.mjs} +3 -3
  11. package/dist/{LexicalDragon.node-DgjrmWkd.mjs → LexicalDragon.node-CpJhkCVV.mjs} +2 -2
  12. package/dist/{LexicalDragon.prod-DnpbDe-_.mjs → LexicalDragon.prod-CvXmWwo1.mjs} +3 -3
  13. package/dist/{LexicalExtension.dev-JMH_6-OZ.mjs → LexicalExtension.dev-LcRLXI5Z.mjs} +33 -30
  14. package/dist/{LexicalExtension.node-BUozzx4t.mjs → LexicalExtension.node-BwJt2LXV.mjs} +2 -2
  15. package/dist/{LexicalExtension.prod-UiyDgmou.mjs → LexicalExtension.prod-lg8_33-H.mjs} +87 -93
  16. package/dist/{LexicalHeadless.dev-BfLGciiX.mjs → LexicalHeadless.dev-BeUbKBes.mjs} +2 -2
  17. package/dist/{LexicalHeadless.prod-CWF7edmQ.mjs → LexicalHeadless.prod-4gbIA8HM.mjs} +2 -2
  18. package/dist/{LexicalHtml.dev-D5EF5PGW.mjs → LexicalHtml.dev-BLdZWTCJ.mjs} +22 -16
  19. package/dist/{LexicalHtml.node-BYbzHNVe.mjs → LexicalHtml.node-BeuJMvvt.mjs} +2 -2
  20. package/dist/{LexicalHtml.prod-D_FfkvVD.mjs → LexicalHtml.prod-CHUyCocN.mjs} +6 -6
  21. package/dist/{LexicalLink.dev-D3Pgh6ik.mjs → LexicalLink.dev-DgsFRqw0.mjs} +41 -58
  22. package/dist/{LexicalLink.prod-XZoAYVYD.mjs → LexicalLink.prod-CkXkeKY2.mjs} +115 -138
  23. package/dist/{LexicalList.dev-B5d3ObhB.mjs → LexicalList.dev-OOms3kQi.mjs} +15 -47
  24. package/dist/{LexicalList.prod-OQDpVAEb.mjs → LexicalList.prod-DzMBeqHn.mjs} +208 -224
  25. package/dist/{LexicalMarkdown.dev-BkM8G3DG.mjs → LexicalMarkdown.dev-DJLKbZtD.mjs} +42 -30
  26. package/dist/{LexicalMarkdown.prod-DcVXCex6.mjs → LexicalMarkdown.prod-Cp21kDCU.mjs} +12 -8
  27. package/dist/{LexicalRichText.dev-DppD7IrA.mjs → LexicalRichText.dev-0rkAGjUf.mjs} +84 -86
  28. package/dist/{LexicalRichText.node-CPSn7dkg.mjs → LexicalRichText.node-Cd-BySPE.mjs} +8 -8
  29. package/dist/{LexicalRichText.prod-h7JPxFNp.mjs → LexicalRichText.prod-DTQiEr8C.mjs} +96 -100
  30. package/dist/{LexicalSelection.dev-CD0SLbxP.mjs → LexicalSelection.dev-Bi0VlUEv.mjs} +29 -25
  31. package/dist/{LexicalSelection.node-CGlJgUlZ.mjs → LexicalSelection.node-t2U46EF_.mjs} +2 -2
  32. package/dist/{LexicalSelection.prod-DbVZN5AV.mjs → LexicalSelection.prod-CrFG111g.mjs} +3 -3
  33. package/dist/{LexicalTable.dev-D0HU14UV.mjs → LexicalTable.dev-D-sFhO-o.mjs} +288 -154
  34. package/dist/{LexicalTable.prod-BcPNSrxP.mjs → LexicalTable.prod-DwYaa_dN.mjs} +689 -632
  35. package/dist/{LexicalUtils.dev-iKy_TrRT.mjs → LexicalUtils.dev-Q2q3-UDM.mjs} +9 -6
  36. package/dist/{LexicalUtils.node-CIgMS8cG.mjs → LexicalUtils.node-Dl7OvqJV.mjs} +2 -2
  37. package/dist/{LexicalUtils.prod-DIAsKJzu.mjs → LexicalUtils.prod-CBnq_iEV.mjs} +8 -7
  38. package/dist/bin/mxs.mjs +1 -1
  39. package/dist/esm-CNZ7kdTg.mjs +2 -0
  40. package/dist/{esm-CwXl1N0a.mjs → esm-ZXjJmLEC.mjs} +422 -391
  41. package/dist/index.d.mts +16 -16
  42. package/dist/index.mjs +1 -1
  43. package/dist/{mxs-iW9DgqSZ.mjs → mxs-DC9zR3f2.mjs} +2203 -2782
  44. package/dist/{rolldown-runtime-JspESFgx.mjs → rolldown-runtime-B4iAMlE-.mjs} +1 -1
  45. package/dist/src/bin/mxs.d.ts +2 -0
  46. package/dist/src/bin/mxs.js +310 -0
  47. package/dist/src/cli/ai/_poll.d.ts +12 -0
  48. package/dist/src/cli/ai/_poll.js +38 -0
  49. package/dist/src/cli/ai/_resolve.d.ts +8 -0
  50. package/dist/src/cli/ai/_resolve.js +27 -0
  51. package/dist/src/cli/ai/index.d.ts +127 -0
  52. package/dist/src/cli/ai/index.js +46 -0
  53. package/dist/src/cli/ai/insights/by-article.d.ts +10 -0
  54. package/dist/src/cli/ai/insights/by-article.js +21 -0
  55. package/dist/src/cli/ai/insights/delete.d.ts +7 -0
  56. package/dist/src/cli/ai/insights/delete.js +18 -0
  57. package/dist/src/cli/ai/insights/edit.d.ts +8 -0
  58. package/dist/src/cli/ai/insights/edit.js +54 -0
  59. package/dist/src/cli/ai/insights/get.d.ts +6 -0
  60. package/dist/src/cli/ai/insights/get.js +11 -0
  61. package/dist/src/cli/ai/insights/index.d.ts +30 -0
  62. package/dist/src/cli/ai/insights/index.js +17 -0
  63. package/dist/src/cli/ai/insights/list.d.ts +10 -0
  64. package/dist/src/cli/ai/insights/list.js +20 -0
  65. package/dist/src/cli/ai/insights/refresh.d.ts +10 -0
  66. package/dist/src/cli/ai/insights/refresh.js +25 -0
  67. package/dist/src/cli/ai/insights/translate.d.ts +10 -0
  68. package/dist/src/cli/ai/insights/translate.js +25 -0
  69. package/dist/src/cli/ai/overview/by-article.d.ts +7 -0
  70. package/dist/src/cli/ai/overview/by-article.js +15 -0
  71. package/dist/src/cli/ai/overview/index.d.ts +11 -0
  72. package/dist/src/cli/ai/overview/index.js +4 -0
  73. package/dist/src/cli/ai/overview/list.d.ts +10 -0
  74. package/dist/src/cli/ai/overview/list.js +20 -0
  75. package/dist/src/cli/ai/summary/by-article.d.ts +10 -0
  76. package/dist/src/cli/ai/summary/by-article.js +21 -0
  77. package/dist/src/cli/ai/summary/delete.d.ts +7 -0
  78. package/dist/src/cli/ai/summary/delete.js +18 -0
  79. package/dist/src/cli/ai/summary/edit.d.ts +8 -0
  80. package/dist/src/cli/ai/summary/edit.js +54 -0
  81. package/dist/src/cli/ai/summary/get.d.ts +6 -0
  82. package/dist/src/cli/ai/summary/get.js +11 -0
  83. package/dist/src/cli/ai/summary/index.d.ts +30 -0
  84. package/dist/src/cli/ai/summary/index.js +9 -0
  85. package/dist/src/cli/ai/summary/list.d.ts +10 -0
  86. package/dist/src/cli/ai/summary/list.js +20 -0
  87. package/dist/src/cli/ai/summary/regen.d.ts +10 -0
  88. package/dist/src/cli/ai/summary/regen.js +25 -0
  89. package/dist/src/cli/ai/summary/translate.d.ts +10 -0
  90. package/dist/src/cli/ai/summary/translate.js +25 -0
  91. package/dist/src/cli/ai/translate/by-article.d.ts +9 -0
  92. package/dist/src/cli/ai/translate/by-article.js +19 -0
  93. package/dist/src/cli/ai/translate/delete.d.ts +7 -0
  94. package/dist/src/cli/ai/translate/delete.js +18 -0
  95. package/dist/src/cli/ai/translate/edit.d.ts +8 -0
  96. package/dist/src/cli/ai/translate/edit.js +97 -0
  97. package/dist/src/cli/ai/translate/entries/delete.d.ts +7 -0
  98. package/dist/src/cli/ai/translate/entries/delete.js +18 -0
  99. package/dist/src/cli/ai/translate/entries/edit.d.ts +8 -0
  100. package/dist/src/cli/ai/translate/entries/edit.js +73 -0
  101. package/dist/src/cli/ai/translate/entries/generate.d.ts +7 -0
  102. package/dist/src/cli/ai/translate/entries/generate.js +15 -0
  103. package/dist/src/cli/ai/translate/entries/index.d.ts +17 -0
  104. package/dist/src/cli/ai/translate/entries/index.js +6 -0
  105. package/dist/src/cli/ai/translate/entries/list.d.ts +10 -0
  106. package/dist/src/cli/ai/translate/entries/list.js +20 -0
  107. package/dist/src/cli/ai/translate/get.d.ts +6 -0
  108. package/dist/src/cli/ai/translate/get.js +11 -0
  109. package/dist/src/cli/ai/translate/index.d.ts +40 -0
  110. package/dist/src/cli/ai/translate/index.js +19 -0
  111. package/dist/src/cli/ai/translate/languages.d.ts +7 -0
  112. package/dist/src/cli/ai/translate/languages.js +15 -0
  113. package/dist/src/cli/ai/translate/list.d.ts +9 -0
  114. package/dist/src/cli/ai/translate/list.js +19 -0
  115. package/dist/src/cli/ai/translate/run.d.ts +10 -0
  116. package/dist/src/cli/ai/translate/run.js +31 -0
  117. package/dist/src/cli/ai/tts/by-article.d.ts +7 -0
  118. package/dist/src/cli/ai/tts/by-article.js +15 -0
  119. package/dist/src/cli/ai/tts/delete.d.ts +7 -0
  120. package/dist/src/cli/ai/tts/delete.js +18 -0
  121. package/dist/src/cli/ai/tts/index.d.ts +22 -0
  122. package/dist/src/cli/ai/tts/index.js +7 -0
  123. package/dist/src/cli/ai/tts/list.d.ts +10 -0
  124. package/dist/src/cli/ai/tts/list.js +20 -0
  125. package/dist/src/cli/ai/tts/run.d.ts +10 -0
  126. package/dist/src/cli/ai/tts/run.js +25 -0
  127. package/dist/src/cli/ai/tts/voices.d.ts +7 -0
  128. package/dist/src/cli/ai/tts/voices.js +12 -0
  129. package/dist/src/cli/ai/views.d.ts +3 -0
  130. package/dist/src/cli/ai/views.js +45 -0
  131. package/dist/src/cli/auth/index.d.ts +6 -0
  132. package/dist/src/cli/auth/index.js +22 -0
  133. package/dist/src/cli/auth/login.d.ts +11 -0
  134. package/dist/src/cli/auth/login.js +168 -0
  135. package/dist/src/cli/auth/logout.d.ts +6 -0
  136. package/dist/src/cli/auth/logout.js +21 -0
  137. package/dist/src/cli/auth/status.d.ts +4 -0
  138. package/dist/src/cli/auth/status.js +31 -0
  139. package/dist/src/cli/auth/view.d.ts +25 -0
  140. package/dist/src/cli/auth/view.js +46 -0
  141. package/dist/src/cli/auth/whoami.d.ts +7 -0
  142. package/dist/src/cli/auth/whoami.js +44 -0
  143. package/dist/src/cli/category/create.d.ts +10 -0
  144. package/dist/src/cli/category/create.js +24 -0
  145. package/dist/src/cli/category/delete.d.ts +8 -0
  146. package/dist/src/cli/category/delete.js +21 -0
  147. package/dist/src/cli/category/get.d.ts +6 -0
  148. package/dist/src/cli/category/get.js +11 -0
  149. package/dist/src/cli/category/index.d.ts +20 -0
  150. package/dist/src/cli/category/index.js +41 -0
  151. package/dist/src/cli/category/list.d.ts +4 -0
  152. package/dist/src/cli/category/list.js +10 -0
  153. package/dist/src/cli/category/update.d.ts +12 -0
  154. package/dist/src/cli/category/update.js +34 -0
  155. package/dist/src/cli/comment/_flags.d.ts +28 -0
  156. package/dist/src/cli/comment/_flags.js +48 -0
  157. package/dist/src/cli/comment/approve.d.ts +9 -0
  158. package/dist/src/cli/comment/approve.js +23 -0
  159. package/dist/src/cli/comment/delete.d.ts +9 -0
  160. package/dist/src/cli/comment/delete.js +24 -0
  161. package/dist/src/cli/comment/get.d.ts +6 -0
  162. package/dist/src/cli/comment/get.js +12 -0
  163. package/dist/src/cli/comment/index.d.ts +34 -0
  164. package/dist/src/cli/comment/index.js +53 -0
  165. package/dist/src/cli/comment/list.d.ts +9 -0
  166. package/dist/src/cli/comment/list.js +20 -0
  167. package/dist/src/cli/comment/reject.d.ts +9 -0
  168. package/dist/src/cli/comment/reject.js +23 -0
  169. package/dist/src/cli/comment/reply.d.ts +9 -0
  170. package/dist/src/cli/comment/reply.js +31 -0
  171. package/dist/src/cli/comment/unread.d.ts +7 -0
  172. package/dist/src/cli/comment/unread.js +21 -0
  173. package/dist/src/cli/comment/view.d.ts +3 -0
  174. package/dist/src/cli/comment/view.js +197 -0
  175. package/dist/src/cli/config/edit.d.ts +5 -0
  176. package/dist/src/cli/config/edit.js +36 -0
  177. package/dist/src/cli/config/get.d.ts +6 -0
  178. package/dist/src/cli/config/get.js +11 -0
  179. package/dist/src/cli/config/index.d.ts +10 -0
  180. package/dist/src/cli/config/index.js +22 -0
  181. package/dist/src/cli/config/list.d.ts +4 -0
  182. package/dist/src/cli/config/list.js +10 -0
  183. package/dist/src/cli/config/set.d.ts +9 -0
  184. package/dist/src/cli/config/set.js +48 -0
  185. package/dist/src/cli/draft/_shared.d.ts +27 -0
  186. package/dist/src/cli/draft/_shared.js +85 -0
  187. package/dist/src/cli/draft/create.d.ts +21 -0
  188. package/dist/src/cli/draft/create.js +34 -0
  189. package/dist/src/cli/draft/delete.d.ts +7 -0
  190. package/dist/src/cli/draft/delete.js +20 -0
  191. package/dist/src/cli/draft/get.d.ts +6 -0
  192. package/dist/src/cli/draft/get.js +11 -0
  193. package/dist/src/cli/draft/index.d.ts +54 -0
  194. package/dist/src/cli/draft/index.js +42 -0
  195. package/dist/src/cli/draft/list.d.ts +11 -0
  196. package/dist/src/cli/draft/list.js +23 -0
  197. package/dist/src/cli/draft/publish.d.ts +8 -0
  198. package/dist/src/cli/draft/publish.js +64 -0
  199. package/dist/src/cli/draft/update.d.ts +22 -0
  200. package/dist/src/cli/draft/update.js +29 -0
  201. package/dist/src/cli/file/_shared.d.ts +6 -0
  202. package/dist/src/cli/file/_shared.js +5 -0
  203. package/dist/src/cli/file/delete.d.ts +8 -0
  204. package/dist/src/cli/file/delete.js +21 -0
  205. package/dist/src/cli/file/index.d.ts +19 -0
  206. package/dist/src/cli/file/index.js +33 -0
  207. package/dist/src/cli/file/list.d.ts +6 -0
  208. package/dist/src/cli/file/list.js +11 -0
  209. package/dist/src/cli/file/rename.d.ts +8 -0
  210. package/dist/src/cli/file/rename.js +16 -0
  211. package/dist/src/cli/file/upload.d.ts +9 -0
  212. package/dist/src/cli/file/upload.js +32 -0
  213. package/dist/src/cli/help/index.d.ts +62 -0
  214. package/dist/src/cli/help/index.js +276 -0
  215. package/dist/src/cli/help/registry.d.ts +28 -0
  216. package/dist/src/cli/help/registry.js +29 -0
  217. package/dist/src/cli/note/_flags.d.ts +66 -0
  218. package/dist/src/cli/note/_flags.js +73 -0
  219. package/dist/src/cli/note/create.d.ts +23 -0
  220. package/dist/src/cli/note/create.js +25 -0
  221. package/dist/src/cli/note/delete.d.ts +8 -0
  222. package/dist/src/cli/note/delete.js +21 -0
  223. package/dist/src/cli/note/edit.d.ts +28 -0
  224. package/dist/src/cli/note/edit.js +114 -0
  225. package/dist/src/cli/note/get.d.ts +6 -0
  226. package/dist/src/cli/note/get.js +29 -0
  227. package/dist/src/cli/note/index.d.ts +77 -0
  228. package/dist/src/cli/note/index.js +63 -0
  229. package/dist/src/cli/note/list.d.ts +10 -0
  230. package/dist/src/cli/note/list.js +22 -0
  231. package/dist/src/cli/note/publish.d.ts +7 -0
  232. package/dist/src/cli/note/publish.js +17 -0
  233. package/dist/src/cli/note/unpublish.d.ts +7 -0
  234. package/dist/src/cli/note/unpublish.js +17 -0
  235. package/dist/src/cli/note/update.d.ts +25 -0
  236. package/dist/src/cli/note/update.js +36 -0
  237. package/dist/src/cli/note/view.d.ts +3 -0
  238. package/dist/src/cli/note/view.js +162 -0
  239. package/dist/src/cli/page/create.d.ts +41 -0
  240. package/dist/src/cli/page/create.js +56 -0
  241. package/dist/src/cli/page/delete.d.ts +7 -0
  242. package/dist/src/cli/page/delete.js +37 -0
  243. package/dist/src/cli/page/edit.d.ts +19 -0
  244. package/dist/src/cli/page/edit.js +117 -0
  245. package/dist/src/cli/page/get.d.ts +6 -0
  246. package/dist/src/cli/page/get.js +16 -0
  247. package/dist/src/cli/page/index.d.ts +44 -0
  248. package/dist/src/cli/page/index.js +38 -0
  249. package/dist/src/cli/page/list.d.ts +4 -0
  250. package/dist/src/cli/page/list.js +10 -0
  251. package/dist/src/cli/page/update.d.ts +16 -0
  252. package/dist/src/cli/page/update.js +48 -0
  253. package/dist/src/cli/page/view.d.ts +2 -0
  254. package/dist/src/cli/page/view.js +79 -0
  255. package/dist/src/cli/post/_flags.d.ts +66 -0
  256. package/dist/src/cli/post/_flags.js +96 -0
  257. package/dist/src/cli/post/apply.d.ts +7 -0
  258. package/dist/src/cli/post/apply.js +70 -0
  259. package/dist/src/cli/post/create.d.ts +21 -0
  260. package/dist/src/cli/post/create.js +24 -0
  261. package/dist/src/cli/post/delete.d.ts +8 -0
  262. package/dist/src/cli/post/delete.js +21 -0
  263. package/dist/src/cli/post/edit.d.ts +26 -0
  264. package/dist/src/cli/post/edit.js +115 -0
  265. package/dist/src/cli/post/get.d.ts +7 -0
  266. package/dist/src/cli/post/get.js +15 -0
  267. package/dist/src/cli/post/index.d.ts +91 -0
  268. package/dist/src/cli/post/index.js +73 -0
  269. package/dist/src/cli/post/list.d.ts +10 -0
  270. package/dist/src/cli/post/list.js +23 -0
  271. package/dist/src/cli/post/publish.d.ts +7 -0
  272. package/dist/src/cli/post/publish.js +17 -0
  273. package/dist/src/cli/post/stage.d.ts +23 -0
  274. package/dist/src/cli/post/stage.js +55 -0
  275. package/dist/src/cli/post/unpublish.d.ts +7 -0
  276. package/dist/src/cli/post/unpublish.js +17 -0
  277. package/dist/src/cli/post/update.d.ts +23 -0
  278. package/dist/src/cli/post/update.js +38 -0
  279. package/dist/src/cli/post/view.d.ts +3 -0
  280. package/dist/src/cli/post/view.js +150 -0
  281. package/dist/src/cli/preview/index.d.ts +13 -0
  282. package/dist/src/cli/preview/index.js +226 -0
  283. package/dist/src/cli/profile/index.d.ts +14 -0
  284. package/dist/src/cli/profile/index.js +36 -0
  285. package/dist/src/cli/profile/ls.d.ts +5 -0
  286. package/dist/src/cli/profile/ls.js +26 -0
  287. package/dist/src/cli/profile/mark.d.ts +9 -0
  288. package/dist/src/cli/profile/mark.js +23 -0
  289. package/dist/src/cli/profile/rm.d.ts +12 -0
  290. package/dist/src/cli/profile/rm.js +50 -0
  291. package/dist/src/cli/profile/show.d.ts +9 -0
  292. package/dist/src/cli/profile/show.js +40 -0
  293. package/dist/src/cli/profile/use.d.ts +6 -0
  294. package/dist/src/cli/profile/use.js +11 -0
  295. package/dist/src/cli/profile/view.d.ts +8 -0
  296. package/dist/src/cli/profile/view.js +21 -0
  297. package/dist/src/cli/project/_flags.d.ts +56 -0
  298. package/dist/src/cli/project/_flags.js +130 -0
  299. package/dist/src/cli/project/create.d.ts +17 -0
  300. package/dist/src/cli/project/create.js +25 -0
  301. package/dist/src/cli/project/delete.d.ts +8 -0
  302. package/dist/src/cli/project/delete.js +22 -0
  303. package/dist/src/cli/project/edit.d.ts +11 -0
  304. package/dist/src/cli/project/edit.js +61 -0
  305. package/dist/src/cli/project/get.d.ts +7 -0
  306. package/dist/src/cli/project/get.js +14 -0
  307. package/dist/src/cli/project/index.d.ts +43 -0
  308. package/dist/src/cli/project/index.js +52 -0
  309. package/dist/src/cli/project/list.d.ts +8 -0
  310. package/dist/src/cli/project/list.js +19 -0
  311. package/dist/src/cli/project/update.d.ts +18 -0
  312. package/dist/src/cli/project/update.js +24 -0
  313. package/dist/src/cli/project/view-cmd.d.ts +7 -0
  314. package/dist/src/cli/project/view-cmd.js +15 -0
  315. package/dist/src/cli/project/view.d.ts +3 -0
  316. package/dist/src/cli/project/view.js +102 -0
  317. package/dist/src/cli/render/codehighlight.d.ts +8 -0
  318. package/dist/src/cli/render/codehighlight.js +264 -0
  319. package/dist/src/cli/render/envelope.d.ts +7 -0
  320. package/dist/src/cli/render/envelope.js +23 -0
  321. package/dist/src/cli/render/frontmatter.d.ts +8 -0
  322. package/dist/src/cli/render/frontmatter.js +50 -0
  323. package/dist/src/cli/render/helpers.d.ts +2 -0
  324. package/dist/src/cli/render/helpers.js +11 -0
  325. package/dist/src/cli/render/index.d.ts +7 -0
  326. package/dist/src/cli/render/index.js +10 -0
  327. package/dist/src/cli/render/lexical/blocks.d.ts +19 -0
  328. package/dist/src/cli/render/lexical/blocks.js +208 -0
  329. package/dist/src/cli/render/lexical/code.d.ts +2 -0
  330. package/dist/src/cli/render/lexical/code.js +22 -0
  331. package/dist/src/cli/render/lexical/embeds.d.ts +6 -0
  332. package/dist/src/cli/render/lexical/embeds.js +51 -0
  333. package/dist/src/cli/render/lexical/index.d.ts +9 -0
  334. package/dist/src/cli/render/lexical/index.js +25 -0
  335. package/dist/src/cli/render/lexical/inlines.d.ts +17 -0
  336. package/dist/src/cli/render/lexical/inlines.js +76 -0
  337. package/dist/src/cli/render/lexical/parser.d.ts +10 -0
  338. package/dist/src/cli/render/lexical/parser.js +64 -0
  339. package/dist/src/cli/render/lexical/walker.d.ts +21 -0
  340. package/dist/src/cli/render/lexical/walker.js +51 -0
  341. package/dist/src/cli/render/markdown.d.ts +18 -0
  342. package/dist/src/cli/render/markdown.js +196 -0
  343. package/dist/src/cli/render/metadata-block.d.ts +14 -0
  344. package/dist/src/cli/render/metadata-block.js +50 -0
  345. package/dist/src/cli/skill/all.d.ts +4 -0
  346. package/dist/src/cli/skill/all.js +11 -0
  347. package/dist/src/cli/skill/get.d.ts +6 -0
  348. package/dist/src/cli/skill/get.js +12 -0
  349. package/dist/src/cli/skill/index.d.ts +10 -0
  350. package/dist/src/cli/skill/index.js +34 -0
  351. package/dist/src/cli/skill/list.d.ts +4 -0
  352. package/dist/src/cli/skill/list.js +11 -0
  353. package/dist/src/cli/skill/search.d.ts +6 -0
  354. package/dist/src/cli/skill/search.js +12 -0
  355. package/dist/src/cli/skill/views.d.ts +6 -0
  356. package/dist/src/cli/skill/views.js +90 -0
  357. package/dist/src/cli/snippet/_flags.d.ts +57 -0
  358. package/dist/src/cli/snippet/_flags.js +123 -0
  359. package/dist/src/cli/snippet/_resolve.d.ts +4 -0
  360. package/dist/src/cli/snippet/_resolve.js +32 -0
  361. package/dist/src/cli/snippet/_sync.d.ts +5 -0
  362. package/dist/src/cli/snippet/_sync.js +54 -0
  363. package/dist/src/cli/snippet/create.d.ts +19 -0
  364. package/dist/src/cli/snippet/create.js +35 -0
  365. package/dist/src/cli/snippet/delete.d.ts +8 -0
  366. package/dist/src/cli/snippet/delete.js +28 -0
  367. package/dist/src/cli/snippet/edit.d.ts +7 -0
  368. package/dist/src/cli/snippet/edit.js +29 -0
  369. package/dist/src/cli/snippet/get.d.ts +6 -0
  370. package/dist/src/cli/snippet/get.js +12 -0
  371. package/dist/src/cli/snippet/index.d.ts +43 -0
  372. package/dist/src/cli/snippet/index.js +58 -0
  373. package/dist/src/cli/snippet/list.d.ts +9 -0
  374. package/dist/src/cli/snippet/list.js +20 -0
  375. package/dist/src/cli/snippet/pull.d.ts +8 -0
  376. package/dist/src/cli/snippet/pull.js +33 -0
  377. package/dist/src/cli/snippet/push.d.ts +10 -0
  378. package/dist/src/cli/snippet/push.js +31 -0
  379. package/dist/src/cli/snippet/update.d.ts +8 -0
  380. package/dist/src/cli/snippet/update.js +16 -0
  381. package/dist/src/cli/topic/create.d.ts +10 -0
  382. package/dist/src/cli/topic/create.js +24 -0
  383. package/dist/src/cli/topic/delete.d.ts +7 -0
  384. package/dist/src/cli/topic/delete.js +37 -0
  385. package/dist/src/cli/topic/get.d.ts +6 -0
  386. package/dist/src/cli/topic/get.js +15 -0
  387. package/dist/src/cli/topic/index.d.ts +20 -0
  388. package/dist/src/cli/topic/index.js +32 -0
  389. package/dist/src/cli/topic/list.d.ts +4 -0
  390. package/dist/src/cli/topic/list.js +10 -0
  391. package/dist/src/cli/topic/update.d.ts +11 -0
  392. package/dist/src/cli/topic/update.js +51 -0
  393. package/dist/src/cli/ui/index.d.ts +24 -0
  394. package/dist/src/cli/ui/index.js +83 -0
  395. package/dist/src/cli/update/index.d.ts +10 -0
  396. package/dist/src/cli/update/index.js +142 -0
  397. package/dist/src/domain/admin-link.d.ts +12 -0
  398. package/dist/src/domain/admin-link.js +45 -0
  399. package/dist/src/domain/content-spec.d.ts +20 -0
  400. package/dist/src/domain/content-spec.js +78 -0
  401. package/dist/src/domain/envelope-compat.d.ts +68 -0
  402. package/dist/src/domain/envelope-compat.js +121 -0
  403. package/dist/src/domain/envelope.d.ts +34 -0
  404. package/dist/src/domain/envelope.js +355 -0
  405. package/dist/src/domain/errors.d.ts +336 -0
  406. package/dist/src/domain/errors.js +239 -0
  407. package/dist/src/domain/gate.d.ts +14 -0
  408. package/dist/src/domain/gate.js +18 -0
  409. package/dist/src/domain/payload.d.ts +64 -0
  410. package/dist/src/domain/payload.js +237 -0
  411. package/dist/src/domain/preflight-guards.d.ts +54 -0
  412. package/dist/src/domain/preflight-guards.js +130 -0
  413. package/dist/src/domain/runtime-flags.d.ts +33 -0
  414. package/dist/src/domain/runtime-flags.js +166 -0
  415. package/dist/src/domain/schema/api-envelope.d.ts +67 -0
  416. package/dist/src/domain/schema/api-envelope.js +65 -0
  417. package/dist/src/domain/schema/category.d.ts +23 -0
  418. package/dist/src/domain/schema/category.js +19 -0
  419. package/dist/src/domain/schema/config.d.ts +13 -0
  420. package/dist/src/domain/schema/config.js +18 -0
  421. package/dist/src/domain/schema/note.d.ts +76 -0
  422. package/dist/src/domain/schema/note.js +35 -0
  423. package/dist/src/domain/schema/page.d.ts +40 -0
  424. package/dist/src/domain/schema/page.js +22 -0
  425. package/dist/src/domain/schema/post.d.ts +68 -0
  426. package/dist/src/domain/schema/post.js +35 -0
  427. package/dist/src/domain/schema/profile.d.ts +14 -0
  428. package/dist/src/domain/schema/profile.js +22 -0
  429. package/dist/src/domain/schema/topic.d.ts +24 -0
  430. package/dist/src/domain/schema/topic.js +16 -0
  431. package/dist/src/domain/version.d.ts +15 -0
  432. package/dist/src/domain/version.js +43 -0
  433. package/dist/src/index.d.ts +4 -0
  434. package/dist/src/index.js +8 -0
  435. package/dist/src/layers/App.d.ts +30 -0
  436. package/dist/src/layers/App.js +39 -0
  437. package/dist/src/services/Ai/index.d.ts +13 -0
  438. package/dist/src/services/Ai/index.js +127 -0
  439. package/dist/src/services/Ai/overview.d.ts +7 -0
  440. package/dist/src/services/Ai/overview.js +11 -0
  441. package/dist/src/services/Ai/resources.d.ts +7 -0
  442. package/dist/src/services/Ai/resources.js +59 -0
  443. package/dist/src/services/Ai/shared.d.ts +2 -0
  444. package/dist/src/services/Ai/shared.js +11 -0
  445. package/dist/src/services/Ai/tasks.d.ts +8 -0
  446. package/dist/src/services/Ai/tasks.js +144 -0
  447. package/dist/src/services/Ai/types.d.ts +130 -0
  448. package/dist/src/services/Ai/types.js +1 -0
  449. package/dist/src/services/Api.d.ts +67 -0
  450. package/dist/src/services/Api.js +348 -0
  451. package/dist/src/services/Auth.d.ts +101 -0
  452. package/dist/src/services/Auth.js +402 -0
  453. package/dist/src/services/Backup.d.ts +8 -0
  454. package/dist/src/services/Backup.js +4 -0
  455. package/dist/src/services/Cache.d.ts +8 -0
  456. package/dist/src/services/Cache.js +4 -0
  457. package/dist/src/services/Comment.d.ts +48 -0
  458. package/dist/src/services/Comment.js +102 -0
  459. package/dist/src/services/Config.d.ts +95 -0
  460. package/dist/src/services/Config.js +359 -0
  461. package/dist/src/services/Editor.d.ts +28 -0
  462. package/dist/src/services/Editor.js +95 -0
  463. package/dist/src/services/Lexical.d.ts +27 -0
  464. package/dist/src/services/Lexical.js +56 -0
  465. package/dist/src/services/Migration.d.ts +31 -0
  466. package/dist/src/services/Migration.js +177 -0
  467. package/dist/src/services/Profile.d.ts +29 -0
  468. package/dist/src/services/Profile.js +115 -0
  469. package/dist/src/services/Renderer/content.d.ts +16 -0
  470. package/dist/src/services/Renderer/content.js +110 -0
  471. package/dist/src/services/Renderer/datetime.d.ts +38 -0
  472. package/dist/src/services/Renderer/datetime.js +147 -0
  473. package/dist/src/services/Renderer/errors.d.ts +3 -0
  474. package/dist/src/services/Renderer/errors.js +59 -0
  475. package/dist/src/services/Renderer/index.d.ts +13 -0
  476. package/dist/src/services/Renderer/index.js +11 -0
  477. package/dist/src/services/Renderer/lists.d.ts +1 -0
  478. package/dist/src/services/Renderer/lists.js +101 -0
  479. package/dist/src/services/Renderer/options.d.ts +10 -0
  480. package/dist/src/services/Renderer/options.js +13 -0
  481. package/dist/src/services/Renderer/primitives.d.ts +4 -0
  482. package/dist/src/services/Renderer/primitives.js +12 -0
  483. package/dist/src/services/Renderer/service.d.ts +35 -0
  484. package/dist/src/services/Renderer/service.js +123 -0
  485. package/dist/src/services/Renderer/view.d.ts +16 -0
  486. package/dist/src/services/Renderer/view.js +1 -0
  487. package/dist/src/services/Resolver.d.ts +47 -0
  488. package/dist/src/services/Resolver.js +269 -0
  489. package/dist/src/services/Skill.d.ts +29 -0
  490. package/dist/src/services/Skill.js +421 -0
  491. package/dist/src/services/UpdateNotifier.d.ts +162 -0
  492. package/dist/src/services/UpdateNotifier.js +572 -0
  493. package/dist/test/cli/ai/ai.test.d.ts +1 -0
  494. package/dist/test/cli/ai/ai.test.js +507 -0
  495. package/dist/test/cli/ai/verbs.test.d.ts +1 -0
  496. package/dist/test/cli/ai/verbs.test.js +235 -0
  497. package/dist/test/cli/auth/login.test.d.ts +1 -0
  498. package/dist/test/cli/auth/login.test.js +236 -0
  499. package/dist/test/cli/auth/logout-whoami.test.d.ts +1 -0
  500. package/dist/test/cli/auth/logout-whoami.test.js +124 -0
  501. package/dist/test/cli/auth/status.test.d.ts +1 -0
  502. package/dist/test/cli/auth/status.test.js +90 -0
  503. package/dist/test/cli/category/category.test.d.ts +1 -0
  504. package/dist/test/cli/category/category.test.js +175 -0
  505. package/dist/test/cli/comment/comment.test.d.ts +1 -0
  506. package/dist/test/cli/comment/comment.test.js +445 -0
  507. package/dist/test/cli/config/config.test.d.ts +1 -0
  508. package/dist/test/cli/config/config.test.js +281 -0
  509. package/dist/test/cli/edit-roundtrip.test.d.ts +1 -0
  510. package/dist/test/cli/edit-roundtrip.test.js +259 -0
  511. package/dist/test/cli/file/file.test.d.ts +1 -0
  512. package/dist/test/cli/file/file.test.js +185 -0
  513. package/dist/test/cli/help.test.d.ts +1 -0
  514. package/dist/test/cli/help.test.js +289 -0
  515. package/dist/test/cli/note/create.test.d.ts +1 -0
  516. package/dist/test/cli/note/create.test.js +155 -0
  517. package/dist/test/cli/note/list.test.d.ts +1 -0
  518. package/dist/test/cli/note/list.test.js +115 -0
  519. package/dist/test/cli/note/publish.test.d.ts +1 -0
  520. package/dist/test/cli/note/publish.test.js +123 -0
  521. package/dist/test/cli/page/page.test.d.ts +1 -0
  522. package/dist/test/cli/page/page.test.js +185 -0
  523. package/dist/test/cli/post/create.test.d.ts +1 -0
  524. package/dist/test/cli/post/create.test.js +172 -0
  525. package/dist/test/cli/post/list.test.d.ts +1 -0
  526. package/dist/test/cli/post/list.test.js +133 -0
  527. package/dist/test/cli/post/publish.test.d.ts +1 -0
  528. package/dist/test/cli/post/publish.test.js +139 -0
  529. package/dist/test/cli/post/stage-apply.test.d.ts +1 -0
  530. package/dist/test/cli/post/stage-apply.test.js +215 -0
  531. package/dist/test/cli/post/update.test.d.ts +1 -0
  532. package/dist/test/cli/post/update.test.js +160 -0
  533. package/dist/test/cli/post-note-crud.test.d.ts +1 -0
  534. package/dist/test/cli/post-note-crud.test.js +362 -0
  535. package/dist/test/cli/profile/ls.test.d.ts +1 -0
  536. package/dist/test/cli/profile/ls.test.js +93 -0
  537. package/dist/test/cli/profile/mark-use.test.d.ts +1 -0
  538. package/dist/test/cli/profile/mark-use.test.js +216 -0
  539. package/dist/test/cli/project-crud.test.d.ts +1 -0
  540. package/dist/test/cli/project-crud.test.js +315 -0
  541. package/dist/test/cli/render/lexical.test.d.ts +1 -0
  542. package/dist/test/cli/render/lexical.test.js +216 -0
  543. package/dist/test/cli/render/markdown.test.d.ts +1 -0
  544. package/dist/test/cli/render/markdown.test.js +39 -0
  545. package/dist/test/cli/snippet-crud.test.d.ts +1 -0
  546. package/dist/test/cli/snippet-crud.test.js +293 -0
  547. package/dist/test/cli/topic/topic.test.d.ts +1 -0
  548. package/dist/test/cli/topic/topic.test.js +181 -0
  549. package/dist/test/cli/update.test.d.ts +1 -0
  550. package/dist/test/cli/update.test.js +395 -0
  551. package/dist/test/domain/content-spec.test.d.ts +1 -0
  552. package/dist/test/domain/content-spec.test.js +126 -0
  553. package/dist/test/domain/envelope-compat.test.d.ts +1 -0
  554. package/dist/test/domain/envelope-compat.test.js +126 -0
  555. package/dist/test/domain/envelope.test.d.ts +1 -0
  556. package/dist/test/domain/envelope.test.js +149 -0
  557. package/dist/test/domain/errors.test.d.ts +1 -0
  558. package/dist/test/domain/errors.test.js +127 -0
  559. package/dist/test/domain/gate.test.d.ts +1 -0
  560. package/dist/test/domain/gate.test.js +128 -0
  561. package/dist/test/domain/payload.test.d.ts +1 -0
  562. package/dist/test/domain/payload.test.js +259 -0
  563. package/dist/test/helper/test-fs.d.ts +24 -0
  564. package/dist/test/helper/test-fs.js +161 -0
  565. package/dist/test/helper/test-http.d.ts +31 -0
  566. package/dist/test/helper/test-http.js +66 -0
  567. package/dist/test/integration/_helpers.d.ts +5 -0
  568. package/dist/test/integration/_helpers.js +24 -0
  569. package/dist/test/integration/cli-error-envelope.test.d.ts +1 -0
  570. package/dist/test/integration/cli-error-envelope.test.js +137 -0
  571. package/dist/test/integration/cli-help-render.test.d.ts +1 -0
  572. package/dist/test/integration/cli-help-render.test.js +149 -0
  573. package/dist/test/integration/cli-help.test.d.ts +1 -0
  574. package/dist/test/integration/cli-help.test.js +67 -0
  575. package/dist/test/integration/cli-post-list.test.d.ts +1 -0
  576. package/dist/test/integration/cli-post-list.test.js +140 -0
  577. package/dist/test/integration/cli-skill.test.d.ts +1 -0
  578. package/dist/test/integration/cli-skill.test.js +74 -0
  579. package/dist/test/integration/cli-version.test.d.ts +1 -0
  580. package/dist/test/integration/cli-version.test.js +37 -0
  581. package/dist/test/services/Api.test.d.ts +1 -0
  582. package/dist/test/services/Api.test.js +553 -0
  583. package/dist/test/services/Auth.test.d.ts +1 -0
  584. package/dist/test/services/Auth.test.js +650 -0
  585. package/dist/test/services/Config.test.d.ts +1 -0
  586. package/dist/test/services/Config.test.js +510 -0
  587. package/dist/test/services/Datetime.test.d.ts +1 -0
  588. package/dist/test/services/Datetime.test.js +113 -0
  589. package/dist/test/services/Editor.test.d.ts +1 -0
  590. package/dist/test/services/Editor.test.js +205 -0
  591. package/dist/test/services/Lexical.errors.test.d.ts +1 -0
  592. package/dist/test/services/Lexical.errors.test.js +60 -0
  593. package/dist/test/services/Lexical.test.d.ts +1 -0
  594. package/dist/test/services/Lexical.test.js +68 -0
  595. package/dist/test/services/Migration.test.d.ts +1 -0
  596. package/dist/test/services/Migration.test.js +376 -0
  597. package/dist/test/services/Profile.test.d.ts +1 -0
  598. package/dist/test/services/Profile.test.js +277 -0
  599. package/dist/test/services/Renderer.test.d.ts +1 -0
  600. package/dist/test/services/Renderer.test.js +538 -0
  601. package/dist/test/services/Resolver.test.d.ts +1 -0
  602. package/dist/test/services/Resolver.test.js +320 -0
  603. package/dist/test/services/Skill.test.d.ts +1 -0
  604. package/dist/test/services/Skill.test.js +261 -0
  605. package/dist/test/services/UpdateNotifier.spawn.test.d.ts +1 -0
  606. package/dist/test/services/UpdateNotifier.spawn.test.js +73 -0
  607. package/dist/test/services/UpdateNotifier.test.d.ts +1 -0
  608. package/dist/test/services/UpdateNotifier.test.js +912 -0
  609. package/dist/vendor/litexml/cli.mjs +2481 -2561
  610. package/dist/vendor/litexml/litexml-html-preview-client.css +178 -60
  611. package/dist/vendor/litexml/litexml-html-preview-client.js +9950 -8762
  612. package/dist/vendor/litexml/style.css +11 -7
  613. package/package.json +23 -21
  614. package/skills/commands-ai.md +45 -12
  615. package/skills/overview.md +1 -1
  616. package/skills/safety.md +1 -1
  617. package/dist/esm-CH7CrOvh.mjs +0 -2
@@ -1,4 +1,4 @@
1
- //#region ../../node_modules/.pnpm/lexical@0.48.0_typescript@6.0.3/node_modules/lexical/dist/Lexical.dev.mjs
1
+ //#region ../../node_modules/.pnpm/lexical@0.49.0_typescript@6.0.3/node_modules/lexical/dist/Lexical.dev.mjs
2
2
  /**
3
3
  * Copyright (c) Meta Platforms, Inc. and affiliates.
4
4
  *
@@ -75,8 +75,10 @@ const NON_BREAKING_SPACE = "\xA0";
75
75
  const COMPOSITION_SUFFIX = IS_SAFARI || IS_IOS || IS_APPLE_WEBKIT ? NON_BREAKING_SPACE : "​";
76
76
  const DOUBLE_LINE_BREAK = "\n\n";
77
77
  const COMPOSITION_START_CHAR = IS_FIREFOX ? NON_BREAKING_SPACE : COMPOSITION_SUFFIX;
78
- const RTL_REGEX = /* @__PURE__ */ new RegExp("^[^A-Za-zÀ-ÖØ-öø-ʸ̀-֐ࠀ-῿‎Ⰰ-﬜︀-﹯﻽-￿]*[֑-߿יִ-﷽ﹰ-ﻼ]");
79
- const LTR_REGEX = /* @__PURE__ */ new RegExp("^[^֑-߿יִ-﷽ﹰ-ﻼ]*[A-Za-zÀ-ÖØ-öø-ʸ̀-֐ࠀ-῿‎Ⰰ-﬜︀-﹯﻽-￿]");
78
+ const RTL = "֑-߿יִ-﷽ﹰ-ﻼ";
79
+ const LTR = "A-Za-zÀ-ÖØ-öø-ʸ̀-֐ࠀ-῿‎Ⰰ-﬜︀-﹯﻽-￿";
80
+ const RTL_REGEX = new RegExp("^[^" + LTR + "]*[" + RTL + "]");
81
+ const LTR_REGEX = new RegExp("^[^" + RTL + "]*[" + LTR + "]");
80
82
  const TEXT_TYPE_TO_FORMAT = {
81
83
  bold: 1,
82
84
  capitalize: IS_CAPITALIZE,
@@ -448,7 +450,7 @@ function indexPath(root, child) {
448
450
  */
449
451
  let envLexicalVersion;
450
452
  try {
451
- envLexicalVersion = "0.48.0+dev.esm";
453
+ envLexicalVersion = "0.49.0+dev.esm";
452
454
  } catch (_unused) {}
453
455
  const LEXICAL_VERSION = envLexicalVersion ?? "\"<unknown>+source\"";
454
456
  /**
@@ -2970,7 +2972,7 @@ function onSelectionChange(domSelection, editor, isActive) {
2970
2972
  selection.format = hasTextNodes ? combinedFormat : 0;
2971
2973
  }
2972
2974
  }
2973
- dispatchCommand(editor, SELECTION_CHANGE_COMMAND, void 0);
2975
+ dispatchCommand(editor, SELECTION_CHANGE_COMMAND);
2974
2976
  });
2975
2977
  }
2976
2978
  function $updateSelectionFormatStyle(selection, format, style) {
@@ -3004,6 +3006,27 @@ function onClick(event, editor) {
3004
3006
  if (isHTMLElement(domAnchorNode) || isDOMTextNode(domAnchorNode)) $setSelection($internalCreateRangeSelection(lastSelection, domSelection, editor, event));
3005
3007
  }
3006
3008
  }
3009
+ if (IS_FIREFOX && domSelection !== null && domSelection.rangeCount === 0) {
3010
+ const rootElement = editor._rootElement;
3011
+ if (rootElement !== null && event.target === rootElement) {
3012
+ const clientY = event.clientY;
3013
+ let offset = rootElement.childNodes.length;
3014
+ for (let i = 0; i < rootElement.childNodes.length; i++) {
3015
+ const child = rootElement.childNodes[i];
3016
+ if (isHTMLElement(child)) {
3017
+ const rect = child.getBoundingClientRect();
3018
+ if (clientY <= (rect.top + rect.bottom) / 2) {
3019
+ offset = i;
3020
+ break;
3021
+ }
3022
+ }
3023
+ }
3024
+ domSelection.setBaseAndExtent(rootElement, offset, rootElement, offset);
3025
+ const newSelection = $internalCreateRangeSelection(lastSelection, domSelection, editor, event);
3026
+ if (newSelection !== null) $setSelection(newSelection);
3027
+ else domSelection.removeAllRanges();
3028
+ }
3029
+ }
3007
3030
  dispatchCommand(editor, CLICK_COMMAND, event);
3008
3031
  });
3009
3032
  }
@@ -3180,7 +3203,7 @@ function $handleBeforeInput(event) {
3180
3203
  dispatchCommand(editor, INSERT_LINE_BREAK_COMMAND, false);
3181
3204
  } else if (data === DOUBLE_LINE_BREAK) {
3182
3205
  event.preventDefault();
3183
- dispatchCommand(editor, INSERT_PARAGRAPH_COMMAND, void 0);
3206
+ dispatchCommand(editor, INSERT_PARAGRAPH_COMMAND);
3184
3207
  } else if (data == null && event.dataTransfer) {
3185
3208
  const text = event.dataTransfer.getData("text/plain");
3186
3209
  event.preventDefault();
@@ -3219,7 +3242,7 @@ function $handleBeforeInput(event) {
3219
3242
  if (inputState.isInsertLineBreak && !IS_IOS) {
3220
3243
  inputState.isInsertLineBreak = false;
3221
3244
  dispatchCommand(editor, INSERT_LINE_BREAK_COMMAND, false);
3222
- } else dispatchCommand(editor, INSERT_PARAGRAPH_COMMAND, void 0);
3245
+ } else dispatchCommand(editor, INSERT_PARAGRAPH_COMMAND);
3223
3246
  break;
3224
3247
  case "insertFromPaste":
3225
3248
  case "insertFromPasteAsQuotation":
@@ -3266,11 +3289,9 @@ function $handleBeforeInput(event) {
3266
3289
  dispatchCommand(editor, FORMAT_TEXT_COMMAND, "underline");
3267
3290
  break;
3268
3291
  case "historyUndo":
3269
- dispatchCommand(editor, UNDO_COMMAND, void 0);
3270
- break;
3271
- case "historyRedo":
3272
- dispatchCommand(editor, REDO_COMMAND, void 0);
3292
+ dispatchCommand(editor, UNDO_COMMAND);
3273
3293
  break;
3294
+ case "historyRedo": dispatchCommand(editor, REDO_COMMAND);
3274
3295
  }
3275
3296
  return true;
3276
3297
  }
@@ -3474,19 +3495,21 @@ function $handleKeyDown(event) {
3474
3495
  } else if (isParagraph(event)) {
3475
3496
  inputState.isInsertLineBreak = false;
3476
3497
  dispatchCommand(editor, KEY_ENTER_COMMAND, event);
3477
- } else if (isDeleteBackward(event)) if (isBackspace(event)) {
3478
- if (dispatchCommand(editor, KEY_BACKSPACE_COMMAND, event)) markHandledSelectionCommandInsertText(inputState);
3479
- } else {
3480
- event.preventDefault();
3481
- dispatchCommand(editor, DELETE_CHARACTER_COMMAND, true);
3482
- }
3483
- else if (isEscape(event)) dispatchCommand(editor, KEY_ESCAPE_COMMAND, event);
3484
- else if (isDeleteForward(event)) if (isDelete(event)) dispatchCommand(editor, KEY_DELETE_COMMAND, event);
3485
- else {
3486
- event.preventDefault();
3487
- dispatchCommand(editor, DELETE_CHARACTER_COMMAND, false);
3488
- }
3489
- else if (isDeleteWordBackward(event)) {
3498
+ } else if (isDeleteBackward(event)) {
3499
+ if (isBackspace(event)) {
3500
+ if (dispatchCommand(editor, KEY_BACKSPACE_COMMAND, event)) markHandledSelectionCommandInsertText(inputState);
3501
+ } else {
3502
+ event.preventDefault();
3503
+ dispatchCommand(editor, DELETE_CHARACTER_COMMAND, true);
3504
+ }
3505
+ } else if (isEscape(event)) dispatchCommand(editor, KEY_ESCAPE_COMMAND, event);
3506
+ else if (isDeleteForward(event)) {
3507
+ if (isDelete(event)) dispatchCommand(editor, KEY_DELETE_COMMAND, event);
3508
+ else {
3509
+ event.preventDefault();
3510
+ dispatchCommand(editor, DELETE_CHARACTER_COMMAND, false);
3511
+ }
3512
+ } else if (isDeleteWordBackward(event)) {
3490
3513
  event.preventDefault();
3491
3514
  dispatchCommand(editor, DELETE_WORD_COMMAND, true);
3492
3515
  } else if (isDeleteWordForward(event)) {
@@ -3510,10 +3533,10 @@ function $handleKeyDown(event) {
3510
3533
  } else if (isTab(event)) dispatchCommand(editor, KEY_TAB_COMMAND, event);
3511
3534
  else if (isUndo(event)) {
3512
3535
  event.preventDefault();
3513
- dispatchCommand(editor, UNDO_COMMAND, void 0);
3536
+ dispatchCommand(editor, UNDO_COMMAND);
3514
3537
  } else if (isRedo(event)) {
3515
3538
  event.preventDefault();
3516
- dispatchCommand(editor, REDO_COMMAND, void 0);
3539
+ dispatchCommand(editor, REDO_COMMAND);
3517
3540
  } else {
3518
3541
  const prevSelection = editor._editorState._selection;
3519
3542
  if (isSelectAll(event)) {
@@ -4672,10 +4695,14 @@ var LexicalNode = class {
4672
4695
  $setSelection(selection);
4673
4696
  const anchor = selection.anchor;
4674
4697
  const focus = selection.focus;
4675
- if (anchor.key === toReplaceKey) if (includeChildren && anchor.type === "element") anchor.set(writableReplaceWith.__key, prevSizeBeforeChildrenTransfer + anchor.offset, "element");
4676
- else $moveSelectionPointToEnd(anchor, writableReplaceWith);
4677
- if (focus.key === toReplaceKey) if (includeChildren && focus.type === "element") focus.set(writableReplaceWith.__key, prevSizeBeforeChildrenTransfer + focus.offset, "element");
4678
- else $moveSelectionPointToEnd(focus, writableReplaceWith);
4698
+ if (anchor.key === toReplaceKey) {
4699
+ if (includeChildren && anchor.type === "element") anchor.set(writableReplaceWith.__key, prevSizeBeforeChildrenTransfer + anchor.offset, "element");
4700
+ else $moveSelectionPointToEnd(anchor, writableReplaceWith);
4701
+ }
4702
+ if (focus.key === toReplaceKey) {
4703
+ if (includeChildren && focus.type === "element") focus.set(writableReplaceWith.__key, prevSizeBeforeChildrenTransfer + focus.offset, "element");
4704
+ else $moveSelectionPointToEnd(focus, writableReplaceWith);
4705
+ }
4679
4706
  }
4680
4707
  if ($getCompositionKey() === toReplaceKey) $setCompositionKey(key);
4681
4708
  return writableReplaceWith;
@@ -5043,8 +5070,10 @@ function getStyleObjectFromCSS(css) {
5043
5070
  }
5044
5071
  if (chunkStart === -1) chunkStart = i;
5045
5072
  }
5046
- if (chunkStart !== -1) if (isParsingValue) currentValue += css.slice(chunkStart, length);
5047
- else currentProperty += css.slice(chunkStart, length);
5073
+ if (chunkStart !== -1) {
5074
+ if (isParsingValue) currentValue += css.slice(chunkStart, length);
5075
+ else currentProperty += css.slice(chunkStart, length);
5076
+ }
5048
5077
  const property = currentProperty.trim();
5049
5078
  const value = currentValue.trim();
5050
5079
  if (property !== "" && value !== "") styles[property] = value;
@@ -5173,7 +5202,7 @@ function $isInlineFormattable(node) {
5173
5202
  return node != null && node.__isInlineFormattable === true;
5174
5203
  }
5175
5204
  /** @noInheritDoc */
5176
- var TextNode = class TextNode extends LexicalNode {
5205
+ var TextNode = class extends LexicalNode {
5177
5206
  /** @internal */
5178
5207
  __text;
5179
5208
  /** @internal */
@@ -5188,11 +5217,57 @@ var TextNode = class TextNode extends LexicalNode {
5188
5217
  get __isInlineFormattable() {
5189
5218
  return true;
5190
5219
  }
5191
- static getType() {
5192
- return "text";
5193
- }
5194
- static clone(node) {
5195
- return new TextNode(node.__text, node.__key);
5220
+ $config() {
5221
+ return this.config("text", { importDOM: {
5222
+ "#text": () => ({
5223
+ conversion: $convertTextDOMNode,
5224
+ priority: 0
5225
+ }),
5226
+ b: () => ({
5227
+ conversion: convertBringAttentionToElement,
5228
+ priority: 0
5229
+ }),
5230
+ code: () => ({
5231
+ conversion: convertTextFormatElement,
5232
+ priority: 0
5233
+ }),
5234
+ em: () => ({
5235
+ conversion: convertTextFormatElement,
5236
+ priority: 0
5237
+ }),
5238
+ i: () => ({
5239
+ conversion: convertTextFormatElement,
5240
+ priority: 0
5241
+ }),
5242
+ mark: () => ({
5243
+ conversion: convertTextFormatElement,
5244
+ priority: 0
5245
+ }),
5246
+ s: () => ({
5247
+ conversion: convertTextFormatElement,
5248
+ priority: 0
5249
+ }),
5250
+ span: () => ({
5251
+ conversion: convertSpanElement,
5252
+ priority: 0
5253
+ }),
5254
+ strong: () => ({
5255
+ conversion: convertTextFormatElement,
5256
+ priority: 0
5257
+ }),
5258
+ sub: () => ({
5259
+ conversion: convertTextFormatElement,
5260
+ priority: 0
5261
+ }),
5262
+ sup: () => ({
5263
+ conversion: convertTextFormatElement,
5264
+ priority: 0
5265
+ }),
5266
+ u: () => ({
5267
+ conversion: convertTextFormatElement,
5268
+ priority: 0
5269
+ })
5270
+ } });
5196
5271
  }
5197
5272
  afterCloneFrom(prevNode) {
5198
5273
  super.afterCloneFrom(prevNode);
@@ -5390,61 +5465,6 @@ var TextNode = class TextNode extends LexicalNode {
5390
5465
  if (prevStyle !== nextStyle) setDOMStyleFromCSS(dom.style, nextStyle, prevStyle);
5391
5466
  return false;
5392
5467
  }
5393
- static importDOM() {
5394
- return {
5395
- "#text": () => ({
5396
- conversion: $convertTextDOMNode,
5397
- priority: 0
5398
- }),
5399
- b: () => ({
5400
- conversion: convertBringAttentionToElement,
5401
- priority: 0
5402
- }),
5403
- code: () => ({
5404
- conversion: convertTextFormatElement,
5405
- priority: 0
5406
- }),
5407
- em: () => ({
5408
- conversion: convertTextFormatElement,
5409
- priority: 0
5410
- }),
5411
- i: () => ({
5412
- conversion: convertTextFormatElement,
5413
- priority: 0
5414
- }),
5415
- mark: () => ({
5416
- conversion: convertTextFormatElement,
5417
- priority: 0
5418
- }),
5419
- s: () => ({
5420
- conversion: convertTextFormatElement,
5421
- priority: 0
5422
- }),
5423
- span: () => ({
5424
- conversion: convertSpanElement,
5425
- priority: 0
5426
- }),
5427
- strong: () => ({
5428
- conversion: convertTextFormatElement,
5429
- priority: 0
5430
- }),
5431
- sub: () => ({
5432
- conversion: convertTextFormatElement,
5433
- priority: 0
5434
- }),
5435
- sup: () => ({
5436
- conversion: convertTextFormatElement,
5437
- priority: 0
5438
- }),
5439
- u: () => ({
5440
- conversion: convertTextFormatElement,
5441
- priority: 0
5442
- })
5443
- };
5444
- }
5445
- static importJSON(serializedNode) {
5446
- return $createTextNode().updateFromJSON(serializedNode);
5447
- }
5448
5468
  updateFromJSON(serializedNode) {
5449
5469
  return super.updateFromJSON(serializedNode).setTextContent(serializedNode.text).setFormat(serializedNode.format).setDetail(serializedNode.detail).setMode(serializedNode.mode).setStyle(serializedNode.style);
5450
5470
  }
@@ -5930,29 +5950,20 @@ function applyTextFormatFromStyle(style, shouldApply) {
5930
5950
  };
5931
5951
  }
5932
5952
  /** @noInheritDoc */
5933
- var TabNode = class TabNode extends TextNode {
5934
- static getType() {
5935
- return "tab";
5936
- }
5937
- static clone(node) {
5938
- return new TabNode(node.__key);
5953
+ var TabNode = class extends TextNode {
5954
+ $config() {
5955
+ return this.config("tab", { extends: TextNode });
5939
5956
  }
5940
- constructor(key) {
5957
+ constructor(key = void 0) {
5941
5958
  super(" ", key);
5942
5959
  this.__detail = IS_UNMERGEABLE;
5943
5960
  }
5944
- static importDOM() {
5945
- return null;
5946
- }
5947
5961
  createDOM(config) {
5948
5962
  const dom = super.createDOM(config);
5949
5963
  const classNames = getCachedClassNameArray(config.theme, "tab");
5950
5964
  if (classNames !== void 0) dom.classList.add(...classNames);
5951
5965
  return dom;
5952
5966
  }
5953
- static importJSON(serializedTabNode) {
5954
- return $createTabNode().updateFromJSON(serializedTabNode);
5955
- }
5956
5967
  /**
5957
5968
  * Always normalizes the stored content to `'\t'` regardless of input — see
5958
5969
  * comment below for the rationale.
@@ -6086,6 +6097,28 @@ function $transferStartingElementPointToTextPoint(start, end, format, style) {
6086
6097
  if (start.is(end)) end.set(textNode.__key, 0, "text");
6087
6098
  start.set(textNode.__key, 0, "text");
6088
6099
  }
6100
+ function $insertTextAtPoint(selection, text, format, style) {
6101
+ const anchorNode = selection.anchor.getNode();
6102
+ if (!$isTextNode(anchorNode)) formatDevErrorMessage(`insertText: anchor is not a text node`);
6103
+ const offset = selection.anchor.offset;
6104
+ const textNode = $createTextNode(text);
6105
+ textNode.setFormat(format);
6106
+ textNode.setStyle(style);
6107
+ const parent = anchorNode.getParentOrThrow();
6108
+ if (offset === 0) {
6109
+ if (parent.isInline() && !anchorNode.__prev) parent.insertBefore(textNode);
6110
+ else anchorNode.insertBefore(textNode, false);
6111
+ } else if (offset === anchorNode.getTextContentSize()) {
6112
+ if (parent.isInline() && !anchorNode.__next) parent.insertAfter(textNode);
6113
+ else anchorNode.insertAfter(textNode, false);
6114
+ } else {
6115
+ const [before] = anchorNode.splitText(offset);
6116
+ before.insertAfter(textNode, false);
6117
+ }
6118
+ if (anchorNode.getTextContent() === "" && anchorNode.isAttached()) anchorNode.remove();
6119
+ textNode.selectEnd();
6120
+ if (textNode.isComposing() && selection.anchor.type === "text") selection.anchor.set(selection.anchor.key, selection.anchor.offset - text.length, selection.anchor.type);
6121
+ }
6089
6122
  var NodeSelection = class NodeSelection {
6090
6123
  _nodes;
6091
6124
  _cachedNodes;
@@ -6311,10 +6344,11 @@ var RangeSelection = class RangeSelection {
6311
6344
  prevWasElement = false;
6312
6345
  if ($isTextNode(node)) {
6313
6346
  let text = node.getTextContent();
6314
- if (node === firstNode) if (node === lastNode) {
6315
- if (anchor.type !== "element" || focus.type !== "element" || focus.offset === anchor.offset) text = anchorOffset < focusOffset ? text.slice(anchorOffset, focusOffset) : text.slice(focusOffset, anchorOffset);
6316
- } else text = isBefore ? text.slice(anchorOffset) : text.slice(focusOffset);
6317
- else if (node === lastNode) text = isBefore ? text.slice(0, focusOffset) : text.slice(0, anchorOffset);
6347
+ if (node === firstNode) {
6348
+ if (node === lastNode) {
6349
+ if (anchor.type !== "element" || focus.type !== "element" || focus.offset === anchor.offset) text = anchorOffset < focusOffset ? text.slice(anchorOffset, focusOffset) : text.slice(focusOffset, anchorOffset);
6350
+ } else text = isBefore ? text.slice(anchorOffset) : text.slice(focusOffset);
6351
+ } else if (node === lastNode) text = isBefore ? text.slice(0, focusOffset) : text.slice(0, anchorOffset);
6318
6352
  textContent += text;
6319
6353
  } else if (($isDecoratorNode(node) || $isLineBreakNode(node)) && (node !== lastNode || !this.isCollapsed())) textContent += node.getTextContent();
6320
6354
  }
@@ -6401,201 +6435,93 @@ var RangeSelection = class RangeSelection {
6401
6435
  * @param text the text to insert into the Selection
6402
6436
  */
6403
6437
  insertText(text) {
6404
- const anchor = this.anchor;
6405
- const focus = this.focus;
6406
- const format = this.format;
6407
- const style = this.style;
6408
- let firstPoint = anchor;
6409
- let endPoint = focus;
6410
- if (!this.isCollapsed() && focus.isBefore(anchor)) {
6411
- firstPoint = focus;
6412
- endPoint = anchor;
6413
- }
6414
- if (firstPoint.type === "element") $transferStartingElementPointToTextPoint(firstPoint, endPoint, format, style);
6415
- if (endPoint.type === "element") $setPointFromCaret(endPoint, $normalizeCaret($caretFromPoint(endPoint, "next")));
6416
- const startOffset = firstPoint.offset;
6417
- let endOffset = endPoint.offset;
6418
- const selectedNodes = this.getNodes();
6419
- const selectedNodesLength = selectedNodes.length;
6420
- let firstNode = selectedNodes[0];
6421
- if (!$isTextNode(firstNode)) formatDevErrorMessage(`insertText: first node is not a text node`);
6422
- const firstNodeTextLength = firstNode.getTextContent().length;
6423
- const firstNodeParent = firstNode.getParentOrThrow();
6424
- let lastNode = selectedNodes[selectedNodesLength - 1];
6425
- if (selectedNodesLength === 1 && endPoint.type === "element") {
6426
- endOffset = firstNodeTextLength;
6427
- endPoint.set(firstPoint.key, endOffset, "text");
6428
- }
6429
- if (this.isCollapsed() && startOffset === firstNodeTextLength && ($isTokenOrSegmented(firstNode) || !firstNode.canInsertTextAfter() || !firstNodeParent.canInsertTextAfter() && firstNode.getNextSibling() === null)) {
6430
- const candidateNextSibling = firstNode.getNextSibling();
6431
- let nextSibling;
6432
- if (!$isTextNode(candidateNextSibling) || !candidateNextSibling.canInsertTextBefore() || $isTokenOrSegmented(candidateNextSibling)) {
6433
- nextSibling = $createTextNode();
6434
- nextSibling.setFormat(format);
6435
- nextSibling.setStyle(style);
6436
- if (!firstNodeParent.canInsertTextAfter()) firstNodeParent.insertAfter(nextSibling);
6437
- else firstNode.insertAfter(nextSibling);
6438
- } else nextSibling = candidateNextSibling;
6439
- nextSibling.select(0, 0);
6440
- firstNode = nextSibling;
6441
- if (text !== "") {
6442
- this.insertText(text);
6443
- return;
6444
- }
6445
- } else if (this.isCollapsed() && startOffset === 0 && ($isTokenOrSegmented(firstNode) || !firstNode.canInsertTextBefore() || !firstNodeParent.canInsertTextBefore() && firstNode.getPreviousSibling() === null)) {
6446
- const candidatePrevSibling = firstNode.getPreviousSibling();
6447
- let prevSibling;
6448
- if (!$isTextNode(candidatePrevSibling) || $isTokenOrSegmented(candidatePrevSibling)) {
6449
- prevSibling = $createTextNode();
6450
- prevSibling.setFormat(format);
6451
- if (!firstNodeParent.canInsertTextBefore()) firstNodeParent.insertBefore(prevSibling);
6452
- else firstNode.insertBefore(prevSibling);
6453
- } else prevSibling = candidatePrevSibling;
6454
- prevSibling.select();
6455
- firstNode = prevSibling;
6456
- if (text !== "") {
6457
- this.insertText(text);
6458
- return;
6459
- }
6460
- } else if (firstNode.isSegmented() && startOffset !== firstNodeTextLength) if ($getCompositionKey() !== null) firstNode = firstNode.setMode("normal").setFormat(format).setStyle(style);
6461
- else {
6462
- const textNode = $createTextNode(firstNode.getTextContent());
6463
- textNode.setFormat(format);
6464
- firstNode.replace(textNode);
6465
- firstNode = textNode;
6466
- }
6467
- else if (!this.isCollapsed() && text !== "") {
6468
- const lastNodeParent = lastNode.getParent();
6469
- if (!firstNodeParent.canInsertTextBefore() || !firstNodeParent.canInsertTextAfter() || $isElementNode(lastNodeParent) && (!lastNodeParent.canInsertTextBefore() || !lastNodeParent.canInsertTextAfter())) {
6470
- this.insertText("");
6471
- $normalizeSelectionPointsForBoundaries(this.anchor, this.focus);
6472
- this.insertText(text);
6438
+ let format = this.format;
6439
+ let style = this.style;
6440
+ if (!this.isCollapsed()) {
6441
+ const firstNode = (this.focus.isBefore(this.anchor) ? this.focus : this.anchor).getNode();
6442
+ if ($isTextNode(firstNode)) {
6443
+ format = firstNode.getFormat();
6444
+ style = firstNode.getStyle();
6445
+ }
6446
+ this.removeText();
6447
+ this.format = format;
6448
+ this.style = style;
6449
+ if (text === "") return;
6450
+ if ($getCompositionKey() === null) {
6451
+ if (this.anchor.type === "element") $transferStartingElementPointToTextPoint(this.anchor, this.focus, format, style);
6452
+ $insertTextAtPoint(this, text, format, style);
6473
6453
  return;
6474
6454
  }
6475
6455
  }
6476
- if (selectedNodesLength === 1) {
6477
- if ($isTokenOrTab(firstNode)) {
6478
- const textNode = $createTextNode(text);
6479
- textNode.select();
6480
- firstNode.replace(textNode);
6481
- return;
6482
- }
6483
- const firstNodeFormat = firstNode.getFormat();
6484
- const firstNodeStyle = firstNode.getStyle();
6485
- if (startOffset === endOffset && (firstNodeFormat !== format || firstNodeStyle !== style)) if (firstNode.getTextContent() === "") {
6486
- firstNode.setFormat(format);
6487
- firstNode.setStyle(style);
6488
- } else {
6489
- const textNode = $createTextNode(text);
6490
- textNode.setFormat(format);
6491
- textNode.setStyle(style);
6492
- textNode.select();
6493
- if (startOffset === 0) firstNode.insertBefore(textNode, false);
6456
+ if (this.anchor.type === "element") $transferStartingElementPointToTextPoint(this.anchor, this.focus, format, style);
6457
+ const anchorNode = this.anchor.getNode();
6458
+ if (!$isTextNode(anchorNode)) formatDevErrorMessage(`insertText: anchor is not a text node`);
6459
+ const offset = this.anchor.offset;
6460
+ const anchorParent = anchorNode.getParentOrThrow();
6461
+ const anchorSize = anchorNode.getTextContentSize();
6462
+ if ($isTokenOrSegmented(anchorNode) || offset === 0 && (!anchorNode.canInsertTextBefore() || !anchorParent.canInsertTextBefore() && !anchorNode.__prev) || offset === anchorSize && (!anchorNode.canInsertTextAfter() || !anchorParent.canInsertTextAfter() && !anchorNode.__next)) {
6463
+ if (anchorNode.isSegmented() && offset !== 0 && offset !== anchorSize) {
6464
+ if ($getCompositionKey() !== null) anchorNode.setMode("normal").setFormat(format).setStyle(style);
6494
6465
  else {
6495
- const [targetNode] = firstNode.splitText(startOffset);
6496
- targetNode.insertAfter(textNode, false);
6497
- }
6498
- if (textNode.isComposing() && this.anchor.type === "text") {
6499
- this.anchor.offset -= text.length;
6500
- this._cachedNodes = null;
6501
- this._cachedIsBackward = null;
6466
+ const replacement = $createTextNode(anchorNode.getTextContent());
6467
+ replacement.setFormat(format);
6468
+ replacement.setStyle(style);
6469
+ anchorNode.replace(replacement);
6470
+ replacement.select(offset, offset);
6502
6471
  }
6472
+ if (text !== "") this.insertText(text);
6503
6473
  return;
6504
6474
  }
6505
- else if ($isTabNode(firstNode)) {
6506
- const textNode = $createTextNode(text);
6507
- textNode.setFormat(format);
6508
- textNode.setStyle(style);
6509
- textNode.select();
6510
- firstNode.replace(textNode);
6475
+ if (text === "") return;
6476
+ if (offset === 0) {
6477
+ const prev = anchorNode.getPreviousSibling();
6478
+ if ($isTextNode(prev) && prev.canInsertTextAfter() && !$isTokenOrSegmented(prev)) prev.select();
6479
+ else {
6480
+ const newNode = $createTextNode();
6481
+ newNode.setFormat(format);
6482
+ newNode.setStyle(style);
6483
+ if (!anchorParent.canInsertTextBefore()) anchorParent.insertBefore(newNode);
6484
+ else anchorNode.insertBefore(newNode);
6485
+ newNode.select();
6486
+ }
6487
+ this.insertText(text);
6511
6488
  return;
6512
- }
6513
- const delCount = endOffset - startOffset;
6514
- firstNode = firstNode.spliceText(startOffset, delCount, text, true);
6515
- if (firstNode.getTextContent() === "") firstNode.remove();
6516
- else if (this.anchor.type === "text") {
6517
- this.format = firstNodeFormat;
6518
- this.style = firstNodeStyle;
6519
- if (firstNode.isComposing()) {
6520
- this.anchor.offset -= text.length;
6521
- this._cachedNodes = null;
6522
- this._cachedIsBackward = null;
6489
+ } else if (offset === anchorSize) {
6490
+ const next = anchorNode.getNextSibling();
6491
+ if ($isTextNode(next) && next.canInsertTextBefore() && !$isTokenOrSegmented(next)) next.select(0, 0);
6492
+ else {
6493
+ const newNode = $createTextNode();
6494
+ newNode.setFormat(format);
6495
+ newNode.setStyle(style);
6496
+ if (!anchorParent.canInsertTextAfter()) anchorParent.insertAfter(newNode);
6497
+ else anchorNode.insertAfter(newNode);
6498
+ newNode.select(0, 0);
6523
6499
  }
6500
+ this.insertText(text);
6501
+ return;
6524
6502
  }
6525
- } else {
6526
- const markedNodeKeysForKeep = /* @__PURE__ */ new Set([...firstNode.getParentKeys(), ...lastNode.getParentKeys()]);
6527
- const firstElement = $isElementNode(firstNode) ? firstNode : firstNode.getParentOrThrow();
6528
- let lastElement = $isElementNode(lastNode) ? lastNode : lastNode.getParentOrThrow();
6529
- let lastElementChild = lastNode;
6530
- if (!firstElement.is(lastElement) && lastElement.isInline()) do {
6531
- lastElementChild = lastElement;
6532
- lastElement = lastElement.getParentOrThrow();
6533
- } while (lastElement.isInline());
6534
- if (endPoint.type === "text" && (endOffset !== 0 || lastNode.getTextContent() === "") || endPoint.type === "element" && lastNode.getIndexWithinParent() < endOffset) if ($isTextNode(lastNode) && !$isTokenOrTab(lastNode) && endOffset !== lastNode.getTextContentSize()) {
6535
- if (lastNode.isSegmented()) {
6536
- const textNode = $createTextNode(lastNode.getTextContent());
6537
- lastNode.replace(textNode);
6538
- lastNode = textNode;
6539
- }
6540
- if (!$isRootNode(endPoint.getNode()) && endPoint.type === "text") {
6541
- if (!$isTextNode(lastNode)) formatDevErrorMessage(`insertText: lastNode is not a TextNode`);
6542
- lastNode = lastNode.spliceText(0, endOffset, "");
6543
- }
6544
- markedNodeKeysForKeep.add(lastNode.__key);
6503
+ const newNode = $createTextNode(text);
6504
+ newNode.setFormat(format);
6505
+ newNode.setStyle(style);
6506
+ anchorNode.replace(newNode);
6507
+ newNode.select();
6508
+ return;
6509
+ }
6510
+ if (text === "") return;
6511
+ const atStartOfInline = anchorParent.isInline() && offset === 0 && !anchorNode.__prev;
6512
+ const atEndOfInline = anchorParent.isInline() && offset === anchorSize && !anchorNode.__next;
6513
+ const formatDiffers = anchorNode.getFormat() !== format || anchorNode.getStyle() !== style;
6514
+ if (atStartOfInline || atEndOfInline || formatDiffers) {
6515
+ if (anchorNode.getTextContent() === "" && !atStartOfInline && !atEndOfInline) {
6516
+ anchorNode.setFormat(format);
6517
+ anchorNode.setStyle(style);
6545
6518
  } else {
6546
- const lastNodeParent = lastNode.getParentOrThrow();
6547
- if (!lastNodeParent.canBeEmpty() && lastNodeParent.getChildrenSize() === 1) lastNodeParent.remove();
6548
- else lastNode.remove();
6549
- }
6550
- else markedNodeKeysForKeep.add(lastNode.__key);
6551
- const lastNodeChildren = lastElement.getChildren();
6552
- const selectedNodesSet = new Set(selectedNodes);
6553
- const firstAndLastElementsAreEqual = firstElement.is(lastElement);
6554
- const insertionTarget = firstElement.isInline() && firstNode.getNextSibling() === null ? firstElement : firstNode;
6555
- for (let i = lastNodeChildren.length - 1; i >= 0; i--) {
6556
- const lastNodeChild = lastNodeChildren[i];
6557
- if (lastNodeChild.is(firstNode) || $isElementNode(lastNodeChild) && lastNodeChild.isParentOf(firstNode)) break;
6558
- if (lastNodeChild.isAttached()) if (!selectedNodesSet.has(lastNodeChild) || lastNodeChild.is(lastElementChild)) {
6559
- if (!firstAndLastElementsAreEqual) insertionTarget.insertAfter(lastNodeChild, false);
6560
- } else lastNodeChild.remove();
6561
- }
6562
- if (!firstAndLastElementsAreEqual) {
6563
- let parent = lastElement;
6564
- let lastRemovedParent = null;
6565
- while (parent !== null) {
6566
- const children = parent.getChildren();
6567
- const childrenLength = children.length;
6568
- if (childrenLength === 0 || children[childrenLength - 1].is(lastRemovedParent)) {
6569
- markedNodeKeysForKeep.delete(parent.__key);
6570
- lastRemovedParent = parent;
6571
- }
6572
- parent = parent.getParent();
6573
- }
6574
- }
6575
- if (!$isTokenOrTab(firstNode)) {
6576
- firstNode = firstNode.spliceText(startOffset, firstNodeTextLength - startOffset, text, true);
6577
- if (firstNode.getTextContent() === "") firstNode.remove();
6578
- else if (this.anchor.type === "text") {
6579
- this.format = firstNode.getFormat();
6580
- this.style = firstNode.getStyle();
6581
- if (firstNode.isComposing()) {
6582
- this.anchor.offset -= text.length;
6583
- this._cachedNodes = null;
6584
- this._cachedIsBackward = null;
6585
- }
6586
- }
6587
- } else if (startOffset === firstNodeTextLength) firstNode.select();
6588
- else {
6589
- const textNode = $createTextNode(text);
6590
- textNode.select();
6591
- firstNode.replace(textNode);
6592
- }
6593
- for (let i = 1; i < selectedNodesLength; i++) {
6594
- const selectedNode = selectedNodes[i];
6595
- const key = selectedNode.__key;
6596
- if (!markedNodeKeysForKeep.has(key)) selectedNode.remove();
6519
+ $insertTextAtPoint(this, text, format, style);
6520
+ return;
6597
6521
  }
6598
6522
  }
6523
+ anchorNode.spliceText(offset, 0, text, true);
6524
+ if (anchorNode.isComposing() && this.anchor.type === "text") this.anchor.set(this.anchor.key, this.anchor.offset - text.length, this.anchor.type);
6599
6525
  }
6600
6526
  /**
6601
6527
  * Removes the text in the Selection, adjusting the EditorState accordingly.
@@ -6846,19 +6772,21 @@ var RangeSelection = class RangeSelection {
6846
6772
  if (granularity === "character" && $isTextNode(focusNode) && focusNode.isUnmergeable()) {
6847
6773
  if (isBackward ? this.focus.offset === 0 : this.focus.offset === focusNode.getTextContentSize()) {
6848
6774
  const sibling = $getSiblingCaret(focusNode, isBackward ? "previous" : "next").getNodeAtCaret();
6849
- if ($isTextNode(sibling)) if (collapse) {
6850
- const sibKeyedDOM = editor.getElementByKey(sibling.getKey());
6851
- const sibDOM = sibKeyedDOM ? $getDOMTextNode(sibling, sibKeyedDOM, editor) : null;
6852
- if (sibDOM) {
6853
- const sibOffset = isBackward ? sibDOM.length : 0;
6854
- setDOMSelectionBaseAndExtent(domSelection, sibDOM, sibOffset, sibDOM, sibOffset);
6775
+ if ($isTextNode(sibling)) {
6776
+ if (collapse) {
6777
+ const sibKeyedDOM = editor.getElementByKey(sibling.getKey());
6778
+ const sibDOM = sibKeyedDOM ? $getDOMTextNode(sibling, sibKeyedDOM, editor) : null;
6779
+ if (sibDOM) {
6780
+ const sibOffset = isBackward ? sibDOM.length : 0;
6781
+ setDOMSelectionBaseAndExtent(domSelection, sibDOM, sibOffset, sibDOM, sibOffset);
6782
+ }
6783
+ } else {
6784
+ const sibLen = sibling.getTextContentSize();
6785
+ if (isBackward) this.focus.set(sibling.__key, sibLen - 1, "text");
6786
+ else this.focus.set(sibling.__key, 1, "text");
6787
+ this.dirty = true;
6788
+ return;
6855
6789
  }
6856
- } else {
6857
- const sibLen = sibling.getTextContentSize();
6858
- if (isBackward) this.focus.set(sibling.__key, sibLen - 1, "text");
6859
- else this.focus.set(sibling.__key, 1, "text");
6860
- this.dirty = true;
6861
- return;
6862
6790
  }
6863
6791
  }
6864
6792
  }
@@ -7400,8 +7328,10 @@ function $updateCaretSelectionForUnicodeCharacter(selection, isBackward) {
7400
7328
  const endOffset = isBefore ? focusOffset : anchorOffset;
7401
7329
  const characterOffset = endOffset - 1;
7402
7330
  if (startOffset !== characterOffset) {
7403
- if (shouldDeleteExactlyOneCodeUnit(anchorNode.getTextContent().slice(startOffset, endOffset))) if (isBackward) focus.set(focus.key, characterOffset, focus.type);
7404
- else anchor.set(anchor.key, characterOffset, anchor.type);
7331
+ if (shouldDeleteExactlyOneCodeUnit(anchorNode.getTextContent().slice(startOffset, endOffset))) {
7332
+ if (isBackward) focus.set(focus.key, characterOffset, focus.type);
7333
+ else anchor.set(anchor.key, characterOffset, anchor.type);
7334
+ }
7405
7335
  }
7406
7336
  }
7407
7337
  }
@@ -8095,10 +8025,12 @@ function $getNodesFromCaretRangeCompat(range) {
8095
8025
  }
8096
8026
  while (nodes.length > 1) {
8097
8027
  const lastIncludedNode = nodes[nodes.length - 1];
8098
- if ($isElementNode(lastIncludedNode)) if (seenElements.has(lastIncludedNode) || lastIncludedNode.isEmpty() || seenAncestors.has(lastIncludedNode));
8099
- else {
8100
- nodes.pop();
8101
- continue;
8028
+ if ($isElementNode(lastIncludedNode)) {
8029
+ if (seenElements.has(lastIncludedNode) || lastIncludedNode.isEmpty() || seenAncestors.has(lastIncludedNode));
8030
+ else {
8031
+ nodes.pop();
8032
+ continue;
8033
+ }
8102
8034
  }
8103
8035
  break;
8104
8036
  }
@@ -8503,7 +8435,7 @@ function $commitPendingUpdatesImpl(editor, recoveryEditorState) {
8503
8435
  }
8504
8436
  }
8505
8437
  if (mutatedNodes !== null) triggerMutationListeners(editor, mutatedNodes, tags, dirtyLeaves, currentEditorState);
8506
- if (!$isRangeSelection(pendingSelection) && pendingSelection !== null && (currentSelection === null || !currentSelection.is(pendingSelection))) editor.dispatchCommand(SELECTION_CHANGE_COMMAND, void 0);
8438
+ if (!$isRangeSelection(pendingSelection) && pendingSelection !== null && (currentSelection === null || !currentSelection.is(pendingSelection))) editor.dispatchCommand(SELECTION_CHANGE_COMMAND);
8507
8439
  /**
8508
8440
  * Capture pendingDecorators after garbage collecting detached decorators
8509
8441
  */
@@ -8692,9 +8624,11 @@ function $beginUpdate(editor, updateFn, options) {
8692
8624
  const headless = editor._headless || editor.getRootElement() === null;
8693
8625
  setPendingNodeToClone(null);
8694
8626
  try {
8695
- if (editorStateWasCloned) if (headless) {
8696
- if (currentEditorState._selection !== null) pendingEditorState._selection = currentEditorState._selection.clone();
8697
- } else pendingEditorState._selection = $internalCreateSelection(editor, options && options.event || null);
8627
+ if (editorStateWasCloned) {
8628
+ if (headless) {
8629
+ if (currentEditorState._selection !== null) pendingEditorState._selection = currentEditorState._selection.clone();
8630
+ } else pendingEditorState._selection = $internalCreateSelection(editor, options && options.event || null);
8631
+ }
8698
8632
  const startingCompositionKey = editor._compositionKey;
8699
8633
  updateFn();
8700
8634
  skipTransforms = $processNestedUpdates(editor, skipTransforms);
@@ -8754,8 +8688,12 @@ function $beginUpdate(editor, updateFn, options) {
8754
8688
  * within an update
8755
8689
  */
8756
8690
  function updateEditorSync(editor, updateFn, options) {
8757
- if (activeEditor === editor && options === void 0) updateFn();
8758
- else $beginUpdate(editor, updateFn, options);
8691
+ if (activeEditor === editor && options === void 0) {
8692
+ if (isCurrentlyReadOnlyMode()) {
8693
+ console.warn("updateEditorSync: an editor update (e.g. a command listener that mutates the editor) ran while a read-only context was on the stack. This most commonly happens when a command is dispatched from inside editor.read(). The update has been deferred to a fresh writable update so it still applies, but dispatching mutations from a read-only context is an anti-pattern — dispatch after editor.read() returns, or via queueMicrotask.");
8694
+ $beginUpdate(editor, updateFn, options);
8695
+ } else updateFn();
8696
+ } else $beginUpdate(editor, updateFn, options);
8759
8697
  }
8760
8698
  function updateEditor(editor, updateFn, options) {
8761
8699
  if (editor._updating) editor._updates.push([updateFn, options]);
@@ -9198,10 +9136,12 @@ var ElementNode = class extends LexicalNode {
9198
9136
  const nodeAfterRange = this.getChildAtIndex(start + deleteCount);
9199
9137
  let nodeBeforeRange = null;
9200
9138
  let newSize = oldSize - deleteCount + nodesToInsert.length;
9201
- if (start !== 0) if (start === oldSize) nodeBeforeRange = this.getLastChild();
9202
- else {
9203
- const node = this.getChildAtIndex(start);
9204
- if (node !== null) nodeBeforeRange = node.getPreviousSibling();
9139
+ if (start !== 0) {
9140
+ if (start === oldSize) nodeBeforeRange = this.getLastChild();
9141
+ else {
9142
+ const node = this.getChildAtIndex(start);
9143
+ if (node !== null) nodeBeforeRange = node.getPreviousSibling();
9144
+ }
9205
9145
  }
9206
9146
  if (deleteCount > 0) {
9207
9147
  let nodeToDelete = nodeBeforeRange === null ? this.getFirstChild() : nodeBeforeRange.getNextSibling();
@@ -9434,14 +9374,11 @@ function $isDecoratorNode(node) {
9434
9374
  return node instanceof DecoratorNode;
9435
9375
  }
9436
9376
  /** @noInheritDoc */
9437
- var RootNode = class RootNode extends ElementNode {
9377
+ var RootNode = class extends ElementNode {
9438
9378
  /** @internal */
9439
9379
  __cachedText;
9440
- static getType() {
9441
- return "root";
9442
- }
9443
- static clone() {
9444
- return new RootNode();
9380
+ $config() {
9381
+ return this.config("root", { extends: ElementNode });
9445
9382
  }
9446
9383
  constructor() {
9447
9384
  super("root");
@@ -9578,8 +9515,8 @@ var EditorState = class EditorState {
9578
9515
  */
9579
9516
  /** @internal */
9580
9517
  var ArtificialNode__DO_NOT_USE = class extends ElementNode {
9581
- static getType() {
9582
- return "artificial";
9518
+ $config() {
9519
+ return this.config("artificial", { extends: ElementNode });
9583
9520
  }
9584
9521
  createDOM(config) {
9585
9522
  return $getDocument().createElement("div");
@@ -9593,16 +9530,16 @@ var ArtificialNode__DO_NOT_USE = class extends ElementNode {
9593
9530
  *
9594
9531
  */
9595
9532
  /** @noInheritDoc */
9596
- var LineBreakNode = class LineBreakNode extends LexicalNode {
9533
+ var LineBreakNode = class extends LexicalNode {
9597
9534
  /** @internal */
9598
- static getType() {
9599
- return "linebreak";
9600
- }
9601
- static clone(node) {
9602
- return new LineBreakNode(node.__key);
9603
- }
9604
- constructor(key) {
9605
- super(key);
9535
+ $config() {
9536
+ return this.config("linebreak", { importDOM: { br: (node) => {
9537
+ if (isOnlyChildInBlockNode(node) || isLastChildInBlockNode(node)) return null;
9538
+ return {
9539
+ conversion: $convertLineBreakElement,
9540
+ priority: 0
9541
+ };
9542
+ } } });
9606
9543
  }
9607
9544
  getTextContent() {
9608
9545
  return "\n";
@@ -9616,18 +9553,6 @@ var LineBreakNode = class LineBreakNode extends LexicalNode {
9616
9553
  isInline() {
9617
9554
  return true;
9618
9555
  }
9619
- static importDOM() {
9620
- return { br: (node) => {
9621
- if (isOnlyChildInBlockNode(node) || isLastChildInBlockNode(node)) return null;
9622
- return {
9623
- conversion: $convertLineBreakElement,
9624
- priority: 0
9625
- };
9626
- } };
9627
- }
9628
- static importJSON(serializedLineBreakNode) {
9629
- return $createLineBreakNode().updateFromJSON(serializedLineBreakNode);
9630
- }
9631
9556
  };
9632
9557
  function $convertLineBreakElement(node) {
9633
9558
  return { node: $createLineBreakNode() };
@@ -9686,13 +9611,16 @@ function isWhitespaceDomTextNode(node) {
9686
9611
  *
9687
9612
  */
9688
9613
  /** @noInheritDoc */
9689
- var ParagraphNode = class ParagraphNode extends ElementNode {
9614
+ var ParagraphNode = class extends ElementNode {
9690
9615
  /** @internal */
9691
- static getType() {
9692
- return "paragraph";
9693
- }
9694
- static clone(node) {
9695
- return new ParagraphNode(node.__key);
9616
+ $config() {
9617
+ return this.config("paragraph", {
9618
+ extends: ElementNode,
9619
+ importDOM: { p: () => ({
9620
+ conversion: $convertParagraphElement,
9621
+ priority: 0
9622
+ }) }
9623
+ });
9696
9624
  }
9697
9625
  createDOM(config) {
9698
9626
  const dom = $getDocument().createElement("p");
@@ -9703,12 +9631,6 @@ var ParagraphNode = class ParagraphNode extends ElementNode {
9703
9631
  updateDOM(prevNode, dom, config) {
9704
9632
  return false;
9705
9633
  }
9706
- static importDOM() {
9707
- return { p: (node) => ({
9708
- conversion: $convertParagraphElement,
9709
- priority: 0
9710
- }) };
9711
- }
9712
9634
  exportDOM(editor) {
9713
9635
  const { element } = super.exportDOM(editor);
9714
9636
  if (isHTMLElement(element)) {
@@ -9718,9 +9640,6 @@ var ParagraphNode = class ParagraphNode extends ElementNode {
9718
9640
  }
9719
9641
  return { element };
9720
9642
  }
9721
- static importJSON(serializedNode) {
9722
- return $createParagraphNode().updateFromJSON(serializedNode);
9723
- }
9724
9643
  exportJSON() {
9725
9644
  const json = super.exportJSON();
9726
9645
  if (json.textFormat === void 0 || json.textStyle === void 0) {
@@ -10492,8 +10411,8 @@ var LexicalEditor = class {
10492
10411
  * @param type - the type of command listeners to trigger.
10493
10412
  * @param payload - the data to pass as an argument to the command listeners.
10494
10413
  */
10495
- dispatchCommand(type, payload) {
10496
- return dispatchCommand(this, type, payload);
10414
+ dispatchCommand(type, ...args) {
10415
+ return dispatchCommand(this, type, ...args);
10497
10416
  }
10498
10417
  /**
10499
10418
  * Gets a map of all decorators in the editor.
@@ -10666,8 +10585,10 @@ var LexicalEditor = class {
10666
10585
  const root = $getRoot();
10667
10586
  if (selection !== null) {
10668
10587
  if (!selection.dirty) $setSelection(selection.clone());
10669
- } else if (root.getChildrenSize() !== 0) if (options.defaultSelection === "rootStart") root.selectStart();
10670
- else root.selectEnd();
10588
+ } else if (root.getChildrenSize() !== 0) {
10589
+ if (options.defaultSelection === "rootStart") root.selectStart();
10590
+ else root.selectEnd();
10591
+ }
10671
10592
  $addUpdateTag(FOCUS_TAG);
10672
10593
  $onUpdate(() => {
10673
10594
  rootElement.removeAttribute("autocapitalize");
@@ -10728,6 +10649,7 @@ function getPendingNodeToClone() {
10728
10649
  pendingNodeToClone = null;
10729
10650
  return node;
10730
10651
  }
10652
+ const INTERNAL_SKIP_AFTER_CLONE_FROM = Symbol("INTERNAL_SKIP_AFTER_CLONE_FROM");
10731
10653
  let keyCounter = 1;
10732
10654
  function resetRandomKey() {
10733
10655
  keyCounter = 1;
@@ -10882,8 +10804,10 @@ function errorOnNodeKeyConstructorMismatch(node, existingKey, pendingNode) {
10882
10804
  if (pendingNode) {
10883
10805
  if (!(existingKey === pendingNode.__key)) formatDevErrorMessage(`Lexical node with constructor ${node.constructor.name} (type ${node.getType()}) has an incorrect clone implementation, got ${String(existingKey)} for nodeKey when expecting ${pendingNode.__key}`);
10884
10806
  }
10885
- if (existingNode && existingNode.constructor !== node.constructor) if (node.constructor.name !== existingNode.constructor.name) formatDevErrorMessage(`Lexical node with constructor ${node.constructor.name} attempted to re-use key from node in active editor state with constructor ${existingNode.constructor.name}. Keys must not be re-used when the type is changed.`);
10886
- else formatDevErrorMessage(`Lexical node with constructor ${node.constructor.name} attempted to re-use key from node in active editor state with different constructor with the same name (possibly due to invalid Hot Module Replacement). Keys must not be re-used when the type is changed.`);
10807
+ if (existingNode && existingNode.constructor !== node.constructor) {
10808
+ if (node.constructor.name !== existingNode.constructor.name) formatDevErrorMessage(`Lexical node with constructor ${node.constructor.name} attempted to re-use key from node in active editor state with constructor ${existingNode.constructor.name}. Keys must not be re-used when the type is changed.`);
10809
+ else formatDevErrorMessage(`Lexical node with constructor ${node.constructor.name} attempted to re-use key from node in active editor state with different constructor with the same name (possibly due to invalid Hot Module Replacement). Keys must not be re-used when the type is changed.`);
10810
+ }
10887
10811
  }
10888
10812
  function internalMarkParentElementsAsDirty(parentKey, nodeMap, dirtyElements) {
10889
10813
  let nextParentKey = parentKey;
@@ -11480,8 +11404,8 @@ function isFirefoxClipboardEvents(editor) {
11480
11404
  const inputType = event && event.inputType;
11481
11405
  return inputType === "insertFromPaste" || inputType === "insertFromPasteAsQuotation";
11482
11406
  }
11483
- function dispatchCommand(editor, command, payload) {
11484
- return triggerCommandListeners(editor, command, payload, editor);
11407
+ function dispatchCommand(editor, command, ...args) {
11408
+ return triggerCommandListeners(editor, command, args[0], editor);
11485
11409
  }
11486
11410
  function getElementByKeyOrThrow(editor, key) {
11487
11411
  const element = editor._keyToDOMMap.get(key);
@@ -11532,13 +11456,15 @@ function scrollIntoViewIfNeeded(editor, selectionRect, rootElement) {
11532
11456
  let diff = 0;
11533
11457
  if (currentTop < targetTop) diff = -(targetTop - currentTop);
11534
11458
  else if (currentBottom > targetBottom) diff = currentBottom - targetBottom;
11535
- if (diff !== 0) if (isBodyElement) defaultView.scrollBy(0, diff);
11536
- else {
11537
- const scrollTop = element.scrollTop;
11538
- element.scrollTop += diff;
11539
- const yOffset = element.scrollTop - scrollTop;
11540
- currentTop -= yOffset;
11541
- currentBottom -= yOffset;
11459
+ if (diff !== 0) {
11460
+ if (isBodyElement) defaultView.scrollBy(0, diff);
11461
+ else {
11462
+ const scrollTop = element.scrollTop;
11463
+ element.scrollTop += diff;
11464
+ const yOffset = element.scrollTop - scrollTop;
11465
+ currentTop -= yOffset;
11466
+ currentBottom -= yOffset;
11467
+ }
11542
11468
  }
11543
11469
  if (isBodyElement) break;
11544
11470
  element = getParentElement(element);
@@ -11620,7 +11546,7 @@ function $isRootOrShadowRoot(node) {
11620
11546
  * @returns The copy of the node.
11621
11547
  */
11622
11548
  function $copyNode(node, skipReset = false) {
11623
- const copy = node.constructor.clone(node);
11549
+ const copy = node.constructor.clone(node, INTERNAL_SKIP_AFTER_CLONE_FROM);
11624
11550
  $setNodeKey(copy, null);
11625
11551
  copy.afterCloneFrom(node);
11626
11552
  if (!skipReset) copy.resetOnCopyNodeFrom(node);
@@ -12358,7 +12284,7 @@ function computeTypeToNodeMap(editorState) {
12358
12284
  */
12359
12285
  function $cloneWithProperties(latestNode) {
12360
12286
  const constructor = latestNode.constructor;
12361
- const mutableNode = constructor.clone(latestNode);
12287
+ const mutableNode = constructor.clone(latestNode, INTERNAL_SKIP_AFTER_CLONE_FROM);
12362
12288
  mutableNode.afterCloneFrom(latestNode);
12363
12289
  if (!(mutableNode.__key === latestNode.__key)) formatDevErrorMessage(`$cloneWithProperties: ${constructor.name}.clone(node) (with type '${constructor.getType()}') did not return a node with the same key, make sure to specify node.__key as the last argument to the constructor`);
12364
12290
  if (!(mutableNode.__parent === latestNode.__parent && mutableNode.__next === latestNode.__next && mutableNode.__prev === latestNode.__prev)) formatDevErrorMessage(`$cloneWithProperties: ${constructor.name}.clone(node) (with type '${constructor.getType()}') overrode afterCloneFrom but did not call super.afterCloneFrom(prevNode)`);
@@ -12533,42 +12459,57 @@ function isAbstractNodeClass(klass) {
12533
12459
  return klass === DecoratorNode || klass === ElementNode || klass === LexicalNode;
12534
12460
  }
12535
12461
  const STATIC_NODE_CONFIG_CACHE = /* @__PURE__ */ new WeakMap();
12462
+ const SYNTHESIZED_GET_TYPE = Symbol("lexical.synthesizedGetType");
12463
+ const IS_UNOPTIMIZED_DEV_BUILD = TabNode.length === 0 && TextNode.length === 0 && TextNode.name === "TextNode";
12536
12464
  /** @internal */
12537
12465
  function getStaticNodeConfig(klass) {
12538
12466
  const cache = STATIC_NODE_CONFIG_CACHE.get(klass);
12539
12467
  if (cache) return cache;
12540
12468
  const nodeConfigRecord = klass.prototype != null && PROTOTYPE_CONFIG_METHOD in klass.prototype ? klass.prototype[PROTOTYPE_CONFIG_METHOD]() : void 0;
12541
12469
  const isAbstract = isAbstractNodeClass(klass);
12542
- const nodeType = !isAbstract && hasOwnStaticMethod(klass, "getType") ? klass.getType() : void 0;
12470
+ const ownGetType = !isAbstract && hasOwnStaticMethod(klass, "getType") ? klass.getType : void 0;
12471
+ const nodeType = ownGetType && !(SYNTHESIZED_GET_TYPE in ownGetType) ? ownGetType.call(klass) : void 0;
12543
12472
  let ownNodeConfig;
12544
12473
  let ownNodeType = nodeType;
12545
- if (nodeConfigRecord) if (nodeType) ownNodeConfig = nodeConfigRecord[nodeType];
12546
- else {
12547
- for (const [k, v] of Object.entries(nodeConfigRecord)) {
12548
- ownNodeType = k;
12549
- ownNodeConfig = v;
12550
- }
12551
- if (!ownNodeConfig) for (const symbolKey of Object.getOwnPropertySymbols(nodeConfigRecord)) {
12552
- const symbolConfig = nodeConfigRecord[symbolKey];
12553
- if (symbolConfig) {
12554
- ownNodeConfig = symbolConfig;
12555
- break;
12474
+ if (nodeConfigRecord) {
12475
+ if (nodeType) ownNodeConfig = nodeConfigRecord[nodeType];
12476
+ else {
12477
+ for (const [k, v] of Object.entries(nodeConfigRecord)) {
12478
+ ownNodeType = k;
12479
+ ownNodeConfig = v;
12480
+ }
12481
+ if (!ownNodeConfig) for (const symbolKey of Object.getOwnPropertySymbols(nodeConfigRecord)) {
12482
+ const symbolConfig = nodeConfigRecord[symbolKey];
12483
+ if (symbolConfig) {
12484
+ ownNodeConfig = symbolConfig;
12485
+ break;
12486
+ }
12556
12487
  }
12557
12488
  }
12558
12489
  }
12559
12490
  if (!isAbstract && ownNodeType) {
12560
- if (!hasOwnStaticMethod(klass, "getType")) klass.getType = () => ownNodeType;
12491
+ if (!hasOwnStaticMethod(klass, "getType")) {
12492
+ const synthesizedForKlass = klass;
12493
+ const synthesizedGetType = function() {
12494
+ if (this !== synthesizedForKlass) return LexicalNode.getType.call(this);
12495
+ return ownNodeType;
12496
+ };
12497
+ synthesizedGetType[SYNTHESIZED_GET_TYPE] = true;
12498
+ klass.getType = synthesizedGetType;
12499
+ }
12561
12500
  if (!hasOwnStaticMethod(klass, "clone")) {
12562
- if (TextNode.length === 0) {
12501
+ if (IS_UNOPTIMIZED_DEV_BUILD) {
12563
12502
  if (!(klass.length === 0)) formatDevErrorMessage(`${klass.name} (type ${ownNodeType}) must implement a static clone method since its constructor has ${String(klass.length)} required arguments (expecting 0). Use an explicit default in the first argument of your constructor(prop: T=X, nodeKey?: NodeKey).`);
12564
12503
  }
12565
- klass.clone = (prevNode) => {
12504
+ klass.clone = (prevNode, internalSkipAfterCloneFrom) => {
12566
12505
  setPendingNodeToClone(prevNode);
12567
- return new klass();
12506
+ const node = new klass();
12507
+ if (internalSkipAfterCloneFrom !== INTERNAL_SKIP_AFTER_CLONE_FROM) node.afterCloneFrom(prevNode);
12508
+ return node;
12568
12509
  };
12569
12510
  }
12570
12511
  if (!hasOwnStaticMethod(klass, "importJSON")) {
12571
- if (TextNode.length === 0) {
12512
+ if (IS_UNOPTIMIZED_DEV_BUILD) {
12572
12513
  if (!(klass.length === 0)) formatDevErrorMessage(`${klass.name} (type ${ownNodeType}) must implement a static importJSON method since its constructor has ${String(klass.length)} required arguments (expecting 0). Use an explicit default in the first argument of your constructor(prop: T=X, nodeKey?: NodeKey).`);
12573
12514
  }
12574
12515
  klass.importJSON = ownNodeConfig && ownNodeConfig.$importJSON || ((serializedNode) => new klass().updateFromJSON(serializedNode));
@@ -13787,9 +13728,10 @@ function $setPointFromCaret(point, caret) {
13787
13728
  const { origin, direction } = caret;
13788
13729
  const isNext = direction === "next";
13789
13730
  if ($isTextPointCaret(caret)) point.set(origin.getKey(), caret.offset, "text");
13790
- else if ($isSiblingCaret(caret)) if ($isTextNode(origin)) point.set(origin.getKey(), $getTextNodeOffset(origin, direction), "text");
13791
- else point.set(origin.getParentOrThrow().getKey(), origin.getIndexWithinParent() + (isNext ? 1 : 0), "element");
13792
- else {
13731
+ else if ($isSiblingCaret(caret)) {
13732
+ if ($isTextNode(origin)) point.set(origin.getKey(), $getTextNodeOffset(origin, direction), "text");
13733
+ else point.set(origin.getParentOrThrow().getKey(), origin.getIndexWithinParent() + (isNext ? 1 : 0), "element");
13734
+ } else {
13793
13735
  if (!($isChildCaret(caret) && $isElementNode(origin))) formatDevErrorMessage(`$setPointFromCaret: exhaustiveness check`);
13794
13736
  point.set(origin.getKey(), isNext ? 0 : origin.getChildrenSize(), "element");
13795
13737
  }
@@ -13876,7 +13818,13 @@ function $removeTextFromCaretRange(initialRange, sliceMode = "removeEmptySlices"
13876
13818
  const { origin } = caret;
13877
13819
  if (!$isElementNode(origin) || seenStart.has(origin.getKey())) removedNodes.push(origin);
13878
13820
  }
13879
- for (const node of removedNodes) node.remove();
13821
+ const removedParents = /* @__PURE__ */ new Set();
13822
+ for (const node of removedNodes) {
13823
+ const parent = node.getParent();
13824
+ if (parent !== null && !seenStart.has(parent.getKey())) removedParents.add(parent);
13825
+ $removeFromParent(node);
13826
+ }
13827
+ for (const parent of removedParents) if (!parent.canBeEmpty() && !$isRootOrShadowRoot(parent) && parent.isEmpty() && parent.isAttached()) parent.remove();
13880
13828
  for (const slice of range.getTextSlices()) {
13881
13829
  if (!slice) continue;
13882
13830
  const { origin } = slice.caret;