@ckeditor/ckeditor5-engine 44.0.0-alpha.9 → 44.1.0-alpha.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 (364) hide show
  1. package/dist/controller/datacontroller.d.ts +1 -1
  2. package/dist/controller/editingcontroller.d.ts +1 -1
  3. package/dist/conversion/conversion.d.ts +1 -1
  4. package/dist/conversion/conversionhelpers.d.ts +1 -1
  5. package/dist/conversion/downcastdispatcher.d.ts +1 -1
  6. package/dist/conversion/downcasthelpers.d.ts +1 -1
  7. package/dist/conversion/mapper.d.ts +1 -1
  8. package/dist/conversion/modelconsumable.d.ts +1 -1
  9. package/dist/conversion/upcastdispatcher.d.ts +1 -1
  10. package/dist/conversion/upcasthelpers.d.ts +1 -1
  11. package/dist/conversion/viewconsumable.d.ts +1 -1
  12. package/dist/dataprocessor/basichtmlwriter.d.ts +1 -1
  13. package/dist/dataprocessor/dataprocessor.d.ts +1 -1
  14. package/dist/dataprocessor/htmldataprocessor.d.ts +1 -1
  15. package/dist/dataprocessor/htmlwriter.d.ts +1 -1
  16. package/dist/dataprocessor/xmldataprocessor.d.ts +1 -1
  17. package/dist/dev-utils/model.d.ts +1 -1
  18. package/dist/dev-utils/operationreplayer.d.ts +1 -1
  19. package/dist/dev-utils/utils.d.ts +1 -1
  20. package/dist/dev-utils/view.d.ts +1 -1
  21. package/dist/index.css +2 -2
  22. package/dist/index.css.map +1 -1
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.js +1073 -974
  25. package/dist/index.js.map +1 -1
  26. package/dist/model/batch.d.ts +1 -1
  27. package/dist/model/differ.d.ts +1 -1
  28. package/dist/model/document.d.ts +1 -1
  29. package/dist/model/documentfragment.d.ts +13 -1
  30. package/dist/model/documentselection.d.ts +1 -1
  31. package/dist/model/element.d.ts +13 -1
  32. package/dist/model/history.d.ts +1 -1
  33. package/dist/model/item.d.ts +1 -1
  34. package/dist/model/liveposition.d.ts +1 -1
  35. package/dist/model/liverange.d.ts +1 -1
  36. package/dist/model/markercollection.d.ts +1 -1
  37. package/dist/model/model.d.ts +1 -1
  38. package/dist/model/node.d.ts +1 -1
  39. package/dist/model/nodelist.d.ts +10 -1
  40. package/dist/model/operation/attributeoperation.d.ts +1 -1
  41. package/dist/model/operation/detachoperation.d.ts +1 -1
  42. package/dist/model/operation/insertoperation.d.ts +1 -1
  43. package/dist/model/operation/markeroperation.d.ts +1 -1
  44. package/dist/model/operation/mergeoperation.d.ts +1 -1
  45. package/dist/model/operation/moveoperation.d.ts +1 -1
  46. package/dist/model/operation/nooperation.d.ts +1 -1
  47. package/dist/model/operation/operation.d.ts +1 -1
  48. package/dist/model/operation/operationfactory.d.ts +1 -1
  49. package/dist/model/operation/renameoperation.d.ts +1 -1
  50. package/dist/model/operation/rootattributeoperation.d.ts +1 -1
  51. package/dist/model/operation/rootoperation.d.ts +1 -1
  52. package/dist/model/operation/splitoperation.d.ts +1 -1
  53. package/dist/model/operation/transform.d.ts +1 -1
  54. package/dist/model/operation/utils.d.ts +1 -1
  55. package/dist/model/position.d.ts +1 -1
  56. package/dist/model/range.d.ts +1 -1
  57. package/dist/model/rootelement.d.ts +1 -1
  58. package/dist/model/schema.d.ts +1 -1
  59. package/dist/model/selection.d.ts +1 -1
  60. package/dist/model/text.d.ts +1 -1
  61. package/dist/model/textproxy.d.ts +1 -1
  62. package/dist/model/treewalker.d.ts +1 -1
  63. package/dist/model/typecheckable.d.ts +1 -1
  64. package/dist/model/utils/autoparagraphing.d.ts +1 -1
  65. package/dist/model/utils/deletecontent.d.ts +1 -1
  66. package/dist/model/utils/getselectedcontent.d.ts +1 -1
  67. package/dist/model/utils/insertcontent.d.ts +1 -1
  68. package/dist/model/utils/insertobject.d.ts +1 -1
  69. package/dist/model/utils/modifyselection.d.ts +1 -1
  70. package/dist/model/utils/selection-post-fixer.d.ts +1 -1
  71. package/dist/model/writer.d.ts +1 -1
  72. package/dist/view/attributeelement.d.ts +1 -1
  73. package/dist/view/containerelement.d.ts +1 -1
  74. package/dist/view/datatransfer.d.ts +1 -1
  75. package/dist/view/document.d.ts +1 -1
  76. package/dist/view/documentfragment.d.ts +1 -1
  77. package/dist/view/documentselection.d.ts +1 -1
  78. package/dist/view/domconverter.d.ts +1 -1
  79. package/dist/view/downcastwriter.d.ts +1 -1
  80. package/dist/view/editableelement.d.ts +1 -1
  81. package/dist/view/element.d.ts +1 -1
  82. package/dist/view/elementdefinition.d.ts +1 -1
  83. package/dist/view/emptyelement.d.ts +1 -1
  84. package/dist/view/filler.d.ts +1 -1
  85. package/dist/view/item.d.ts +1 -1
  86. package/dist/view/matcher.d.ts +1 -1
  87. package/dist/view/node.d.ts +1 -1
  88. package/dist/view/observer/arrowkeysobserver.d.ts +1 -1
  89. package/dist/view/observer/bubblingemittermixin.d.ts +1 -1
  90. package/dist/view/observer/bubblingeventinfo.d.ts +1 -1
  91. package/dist/view/observer/clickobserver.d.ts +1 -1
  92. package/dist/view/observer/compositionobserver.d.ts +1 -1
  93. package/dist/view/observer/domeventdata.d.ts +1 -1
  94. package/dist/view/observer/domeventobserver.d.ts +1 -1
  95. package/dist/view/observer/fakeselectionobserver.d.ts +1 -1
  96. package/dist/view/observer/focusobserver.d.ts +1 -1
  97. package/dist/view/observer/inputobserver.d.ts +1 -1
  98. package/dist/view/observer/keyobserver.d.ts +1 -1
  99. package/dist/view/observer/mouseobserver.d.ts +1 -1
  100. package/dist/view/observer/mutationobserver.d.ts +1 -1
  101. package/dist/view/observer/observer.d.ts +1 -1
  102. package/dist/view/observer/selectionobserver.d.ts +1 -1
  103. package/dist/view/observer/tabobserver.d.ts +1 -1
  104. package/dist/view/placeholder.d.ts +1 -1
  105. package/dist/view/position.d.ts +1 -1
  106. package/dist/view/range.d.ts +1 -1
  107. package/dist/view/rawelement.d.ts +1 -1
  108. package/dist/view/renderer.d.ts +1 -1
  109. package/dist/view/rooteditableelement.d.ts +1 -1
  110. package/dist/view/selection.d.ts +1 -1
  111. package/dist/view/styles/background.d.ts +1 -1
  112. package/dist/view/styles/border.d.ts +1 -1
  113. package/dist/view/styles/margin.d.ts +1 -1
  114. package/dist/view/styles/padding.d.ts +1 -1
  115. package/dist/view/styles/utils.d.ts +1 -1
  116. package/dist/view/stylesmap.d.ts +9 -1
  117. package/dist/view/text.d.ts +1 -1
  118. package/dist/view/textproxy.d.ts +1 -1
  119. package/dist/view/treewalker.d.ts +1 -1
  120. package/dist/view/typecheckable.d.ts +1 -1
  121. package/dist/view/uielement.d.ts +1 -1
  122. package/dist/view/upcastwriter.d.ts +1 -1
  123. package/dist/view/view.d.ts +1 -1
  124. package/package.json +2 -2
  125. package/src/controller/datacontroller.d.ts +1 -1
  126. package/src/controller/datacontroller.js +1 -1
  127. package/src/controller/editingcontroller.d.ts +1 -1
  128. package/src/controller/editingcontroller.js +1 -1
  129. package/src/conversion/conversion.d.ts +1 -1
  130. package/src/conversion/conversion.js +1 -1
  131. package/src/conversion/conversionhelpers.d.ts +1 -1
  132. package/src/conversion/conversionhelpers.js +1 -1
  133. package/src/conversion/downcastdispatcher.d.ts +1 -1
  134. package/src/conversion/downcastdispatcher.js +5 -7
  135. package/src/conversion/downcasthelpers.d.ts +1 -1
  136. package/src/conversion/downcasthelpers.js +1 -1
  137. package/src/conversion/mapper.d.ts +1 -1
  138. package/src/conversion/mapper.js +27 -22
  139. package/src/conversion/modelconsumable.d.ts +1 -1
  140. package/src/conversion/modelconsumable.js +1 -1
  141. package/src/conversion/upcastdispatcher.d.ts +1 -1
  142. package/src/conversion/upcastdispatcher.js +14 -8
  143. package/src/conversion/upcasthelpers.d.ts +1 -1
  144. package/src/conversion/upcasthelpers.js +1 -1
  145. package/src/conversion/viewconsumable.d.ts +1 -1
  146. package/src/conversion/viewconsumable.js +1 -1
  147. package/src/dataprocessor/basichtmlwriter.d.ts +1 -1
  148. package/src/dataprocessor/basichtmlwriter.js +1 -1
  149. package/src/dataprocessor/dataprocessor.d.ts +1 -1
  150. package/src/dataprocessor/dataprocessor.js +1 -1
  151. package/src/dataprocessor/htmldataprocessor.d.ts +1 -1
  152. package/src/dataprocessor/htmldataprocessor.js +1 -1
  153. package/src/dataprocessor/htmlwriter.d.ts +1 -1
  154. package/src/dataprocessor/htmlwriter.js +1 -1
  155. package/src/dataprocessor/xmldataprocessor.d.ts +1 -1
  156. package/src/dataprocessor/xmldataprocessor.js +1 -1
  157. package/src/dev-utils/model.d.ts +1 -1
  158. package/src/dev-utils/model.js +1 -1
  159. package/src/dev-utils/operationreplayer.d.ts +1 -1
  160. package/src/dev-utils/operationreplayer.js +1 -1
  161. package/src/dev-utils/utils.d.ts +1 -1
  162. package/src/dev-utils/utils.js +1 -1
  163. package/src/dev-utils/view.d.ts +1 -1
  164. package/src/dev-utils/view.js +1 -1
  165. package/src/index.d.ts +1 -1
  166. package/src/index.js +1 -1
  167. package/src/model/batch.d.ts +1 -1
  168. package/src/model/batch.js +1 -1
  169. package/src/model/differ.d.ts +1 -1
  170. package/src/model/differ.js +1 -1
  171. package/src/model/document.d.ts +1 -1
  172. package/src/model/document.js +1 -1
  173. package/src/model/documentfragment.d.ts +13 -1
  174. package/src/model/documentfragment.js +18 -1
  175. package/src/model/documentselection.d.ts +1 -1
  176. package/src/model/documentselection.js +1 -1
  177. package/src/model/element.d.ts +13 -1
  178. package/src/model/element.js +36 -10
  179. package/src/model/history.d.ts +1 -1
  180. package/src/model/history.js +1 -1
  181. package/src/model/item.d.ts +1 -1
  182. package/src/model/item.js +1 -1
  183. package/src/model/liveposition.d.ts +1 -1
  184. package/src/model/liveposition.js +1 -1
  185. package/src/model/liverange.d.ts +1 -1
  186. package/src/model/liverange.js +1 -1
  187. package/src/model/markercollection.d.ts +1 -1
  188. package/src/model/markercollection.js +1 -1
  189. package/src/model/model.d.ts +1 -1
  190. package/src/model/model.js +1 -1
  191. package/src/model/node.d.ts +1 -1
  192. package/src/model/node.js +1 -1
  193. package/src/model/nodelist.d.ts +10 -1
  194. package/src/model/nodelist.js +34 -8
  195. package/src/model/operation/attributeoperation.d.ts +1 -1
  196. package/src/model/operation/attributeoperation.js +1 -1
  197. package/src/model/operation/detachoperation.d.ts +1 -1
  198. package/src/model/operation/detachoperation.js +1 -1
  199. package/src/model/operation/insertoperation.d.ts +1 -1
  200. package/src/model/operation/insertoperation.js +1 -1
  201. package/src/model/operation/markeroperation.d.ts +1 -1
  202. package/src/model/operation/markeroperation.js +1 -1
  203. package/src/model/operation/mergeoperation.d.ts +1 -1
  204. package/src/model/operation/mergeoperation.js +1 -1
  205. package/src/model/operation/moveoperation.d.ts +1 -1
  206. package/src/model/operation/moveoperation.js +1 -1
  207. package/src/model/operation/nooperation.d.ts +1 -1
  208. package/src/model/operation/nooperation.js +1 -1
  209. package/src/model/operation/operation.d.ts +1 -1
  210. package/src/model/operation/operation.js +1 -1
  211. package/src/model/operation/operationfactory.d.ts +1 -1
  212. package/src/model/operation/operationfactory.js +1 -1
  213. package/src/model/operation/renameoperation.d.ts +1 -1
  214. package/src/model/operation/renameoperation.js +1 -1
  215. package/src/model/operation/rootattributeoperation.d.ts +1 -1
  216. package/src/model/operation/rootattributeoperation.js +1 -1
  217. package/src/model/operation/rootoperation.d.ts +1 -1
  218. package/src/model/operation/rootoperation.js +1 -1
  219. package/src/model/operation/splitoperation.d.ts +1 -1
  220. package/src/model/operation/splitoperation.js +1 -1
  221. package/src/model/operation/transform.d.ts +1 -1
  222. package/src/model/operation/transform.js +1 -1
  223. package/src/model/operation/utils.d.ts +1 -1
  224. package/src/model/operation/utils.js +1 -1
  225. package/src/model/position.d.ts +1 -1
  226. package/src/model/position.js +3 -3
  227. package/src/model/range.d.ts +1 -1
  228. package/src/model/range.js +1 -1
  229. package/src/model/rootelement.d.ts +1 -1
  230. package/src/model/rootelement.js +1 -1
  231. package/src/model/schema.d.ts +1 -1
  232. package/src/model/schema.js +1 -1
  233. package/src/model/selection.d.ts +1 -1
  234. package/src/model/selection.js +1 -1
  235. package/src/model/text.d.ts +1 -1
  236. package/src/model/text.js +1 -1
  237. package/src/model/textproxy.d.ts +1 -1
  238. package/src/model/textproxy.js +1 -1
  239. package/src/model/treewalker.d.ts +1 -1
  240. package/src/model/treewalker.js +5 -10
  241. package/src/model/typecheckable.d.ts +1 -1
  242. package/src/model/typecheckable.js +1 -1
  243. package/src/model/utils/autoparagraphing.d.ts +1 -1
  244. package/src/model/utils/autoparagraphing.js +1 -1
  245. package/src/model/utils/deletecontent.d.ts +1 -1
  246. package/src/model/utils/deletecontent.js +1 -1
  247. package/src/model/utils/getselectedcontent.d.ts +1 -1
  248. package/src/model/utils/getselectedcontent.js +1 -1
  249. package/src/model/utils/insertcontent.d.ts +1 -1
  250. package/src/model/utils/insertcontent.js +1 -1
  251. package/src/model/utils/insertobject.d.ts +1 -1
  252. package/src/model/utils/insertobject.js +1 -1
  253. package/src/model/utils/modifyselection.d.ts +1 -1
  254. package/src/model/utils/modifyselection.js +1 -1
  255. package/src/model/utils/selection-post-fixer.d.ts +1 -1
  256. package/src/model/utils/selection-post-fixer.js +1 -1
  257. package/src/model/writer.d.ts +1 -1
  258. package/src/model/writer.js +5 -2
  259. package/src/view/attributeelement.d.ts +1 -1
  260. package/src/view/attributeelement.js +1 -1
  261. package/src/view/containerelement.d.ts +1 -1
  262. package/src/view/containerelement.js +1 -1
  263. package/src/view/datatransfer.d.ts +1 -1
  264. package/src/view/datatransfer.js +1 -1
  265. package/src/view/document.d.ts +1 -1
  266. package/src/view/document.js +1 -1
  267. package/src/view/documentfragment.d.ts +1 -1
  268. package/src/view/documentfragment.js +1 -1
  269. package/src/view/documentselection.d.ts +1 -1
  270. package/src/view/documentselection.js +1 -1
  271. package/src/view/domconverter.d.ts +1 -1
  272. package/src/view/domconverter.js +1 -1
  273. package/src/view/downcastwriter.d.ts +1 -1
  274. package/src/view/downcastwriter.js +3 -3
  275. package/src/view/editableelement.d.ts +1 -1
  276. package/src/view/editableelement.js +1 -1
  277. package/src/view/element.d.ts +1 -1
  278. package/src/view/element.js +11 -9
  279. package/src/view/elementdefinition.d.ts +1 -1
  280. package/src/view/elementdefinition.js +1 -1
  281. package/src/view/emptyelement.d.ts +1 -1
  282. package/src/view/emptyelement.js +1 -1
  283. package/src/view/filler.d.ts +1 -1
  284. package/src/view/filler.js +1 -1
  285. package/src/view/item.d.ts +1 -1
  286. package/src/view/item.js +1 -1
  287. package/src/view/matcher.d.ts +1 -1
  288. package/src/view/matcher.js +21 -16
  289. package/src/view/node.d.ts +1 -1
  290. package/src/view/node.js +1 -1
  291. package/src/view/observer/arrowkeysobserver.d.ts +1 -1
  292. package/src/view/observer/arrowkeysobserver.js +1 -1
  293. package/src/view/observer/bubblingemittermixin.d.ts +1 -1
  294. package/src/view/observer/bubblingemittermixin.js +1 -1
  295. package/src/view/observer/bubblingeventinfo.d.ts +1 -1
  296. package/src/view/observer/bubblingeventinfo.js +1 -1
  297. package/src/view/observer/clickobserver.d.ts +1 -1
  298. package/src/view/observer/clickobserver.js +1 -1
  299. package/src/view/observer/compositionobserver.d.ts +1 -1
  300. package/src/view/observer/compositionobserver.js +1 -1
  301. package/src/view/observer/domeventdata.d.ts +1 -1
  302. package/src/view/observer/domeventdata.js +1 -1
  303. package/src/view/observer/domeventobserver.d.ts +1 -1
  304. package/src/view/observer/domeventobserver.js +1 -1
  305. package/src/view/observer/fakeselectionobserver.d.ts +1 -1
  306. package/src/view/observer/fakeselectionobserver.js +1 -1
  307. package/src/view/observer/focusobserver.d.ts +1 -1
  308. package/src/view/observer/focusobserver.js +1 -1
  309. package/src/view/observer/inputobserver.d.ts +1 -1
  310. package/src/view/observer/inputobserver.js +1 -1
  311. package/src/view/observer/keyobserver.d.ts +1 -1
  312. package/src/view/observer/keyobserver.js +1 -1
  313. package/src/view/observer/mouseobserver.d.ts +1 -1
  314. package/src/view/observer/mouseobserver.js +1 -1
  315. package/src/view/observer/mutationobserver.d.ts +1 -1
  316. package/src/view/observer/mutationobserver.js +1 -1
  317. package/src/view/observer/observer.d.ts +1 -1
  318. package/src/view/observer/observer.js +1 -1
  319. package/src/view/observer/selectionobserver.d.ts +1 -1
  320. package/src/view/observer/selectionobserver.js +1 -1
  321. package/src/view/observer/tabobserver.d.ts +1 -1
  322. package/src/view/observer/tabobserver.js +1 -1
  323. package/src/view/placeholder.d.ts +1 -1
  324. package/src/view/placeholder.js +1 -1
  325. package/src/view/position.d.ts +1 -1
  326. package/src/view/position.js +1 -1
  327. package/src/view/range.d.ts +1 -1
  328. package/src/view/range.js +1 -1
  329. package/src/view/rawelement.d.ts +1 -1
  330. package/src/view/rawelement.js +1 -1
  331. package/src/view/renderer.d.ts +1 -1
  332. package/src/view/renderer.js +1 -1
  333. package/src/view/rooteditableelement.d.ts +1 -1
  334. package/src/view/rooteditableelement.js +1 -1
  335. package/src/view/selection.d.ts +1 -1
  336. package/src/view/selection.js +1 -1
  337. package/src/view/styles/background.d.ts +1 -1
  338. package/src/view/styles/background.js +1 -1
  339. package/src/view/styles/border.d.ts +1 -1
  340. package/src/view/styles/border.js +1 -1
  341. package/src/view/styles/margin.d.ts +1 -1
  342. package/src/view/styles/margin.js +1 -1
  343. package/src/view/styles/padding.d.ts +1 -1
  344. package/src/view/styles/padding.js +1 -1
  345. package/src/view/styles/utils.d.ts +1 -1
  346. package/src/view/styles/utils.js +1 -1
  347. package/src/view/stylesmap.d.ts +9 -1
  348. package/src/view/stylesmap.js +19 -4
  349. package/src/view/text.d.ts +1 -1
  350. package/src/view/text.js +1 -1
  351. package/src/view/textproxy.d.ts +1 -1
  352. package/src/view/textproxy.js +1 -1
  353. package/src/view/treewalker.d.ts +1 -1
  354. package/src/view/treewalker.js +38 -43
  355. package/src/view/typecheckable.d.ts +1 -1
  356. package/src/view/typecheckable.js +1 -1
  357. package/src/view/uielement.d.ts +1 -1
  358. package/src/view/uielement.js +1 -1
  359. package/src/view/upcastwriter.d.ts +1 -1
  360. package/src/view/upcastwriter.js +1 -1
  361. package/src/view/view.d.ts +1 -1
  362. package/src/view/view.js +1 -1
  363. package/theme/placeholder.css +1 -1
  364. package/theme/renderer.css +1 -1
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/conversion/mapper
@@ -9,7 +9,6 @@ import ModelPosition from '../model/position.js';
9
9
  import ModelRange from '../model/range.js';
10
10
  import ViewPosition from '../view/position.js';
11
11
  import ViewRange from '../view/range.js';
12
- import ViewText from '../view/text.js';
13
12
  import { CKEditorError, EmitterMixin } from '@ckeditor/ckeditor5-utils';
14
13
  /**
15
14
  * Maps elements, positions and markers between the {@link module:engine/view/document~Document view} and
@@ -429,26 +428,32 @@ export default class Mapper extends /* #__PURE__ */ EmitterMixin() {
429
428
  * @returns Length of the node in the tree model.
430
429
  */
431
430
  getModelLength(viewNode) {
432
- if (this._viewToModelLengthCallbacks.get(viewNode.name)) {
433
- const callback = this._viewToModelLengthCallbacks.get(viewNode.name);
434
- return callback(viewNode);
435
- }
436
- else if (this._viewToModelMapping.has(viewNode)) {
437
- return 1;
438
- }
439
- else if (viewNode.is('$text')) {
440
- return viewNode.data.length;
441
- }
442
- else if (viewNode.is('uiElement')) {
443
- return 0;
444
- }
445
- else {
446
- let len = 0;
447
- for (const child of viewNode.getChildren()) {
448
- len += this.getModelLength(child);
431
+ const stack = [viewNode];
432
+ let len = 0;
433
+ while (stack.length > 0) {
434
+ const node = stack.pop();
435
+ const callback = node.name &&
436
+ this._viewToModelLengthCallbacks.size > 0 &&
437
+ this._viewToModelLengthCallbacks.get(node.name);
438
+ if (callback) {
439
+ len += callback(node);
440
+ }
441
+ else if (this._viewToModelMapping.has(node)) {
442
+ len += 1;
443
+ }
444
+ else if (node.is('$text')) {
445
+ len += node.data.length;
446
+ }
447
+ else if (node.is('uiElement')) {
448
+ continue;
449
+ }
450
+ else {
451
+ for (const child of node.getChildren()) {
452
+ stack.push(child);
453
+ }
449
454
  }
450
- return len;
451
455
  }
456
+ return len;
452
457
  }
453
458
  /**
454
459
  * Finds the position in the view node (or in its children) with the expected model offset.
@@ -524,10 +529,10 @@ export default class Mapper extends /* #__PURE__ */ EmitterMixin() {
524
529
  // If the position is just before a text node, put it at the beginning of that text node.
525
530
  const nodeBefore = viewPosition.nodeBefore;
526
531
  const nodeAfter = viewPosition.nodeAfter;
527
- if (nodeBefore instanceof ViewText) {
532
+ if (nodeBefore && nodeBefore.is('view:$text')) {
528
533
  return new ViewPosition(nodeBefore, nodeBefore.data.length);
529
534
  }
530
- else if (nodeAfter instanceof ViewText) {
535
+ else if (nodeAfter && nodeAfter.is('view:$text')) {
531
536
  return new ViewPosition(nodeAfter, 0);
532
537
  }
533
538
  // Otherwise, just return the given position.
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/conversion/modelconsumable
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/conversion/modelconsumable
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/conversion/upcastdispatcher
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/conversion/upcastdispatcher
@@ -190,9 +190,9 @@ export default class UpcastDispatcher extends /* #__PURE__ */ EmitterMixin() {
190
190
  // Remove all empty elements that were created while splitting.
191
191
  this._removeEmptyElements();
192
192
  // Move all items that were converted in context tree to the document fragment.
193
- for (const item of Array.from(this._modelCursor.parent.getChildren())) {
194
- writer.append(item, documentFragment);
195
- }
193
+ const parent = this._modelCursor.parent;
194
+ const children = parent._removeChildren(0, parent.childCount);
195
+ documentFragment._insertChild(0, children);
196
196
  // Extract temporary markers elements from model and set as static markers collection.
197
197
  documentFragment.markers = extractMarkersFromModelFragment(documentFragment, writer);
198
198
  }
@@ -391,15 +391,21 @@ export default class UpcastDispatcher extends /* #__PURE__ */ EmitterMixin() {
391
391
  * as some elements might have become empty after other empty elements were removed from them.
392
392
  */
393
393
  _removeEmptyElements() {
394
- let anyRemoved = false;
394
+ // For every parent, prepare an array of children (empty elements) to remove from it.
395
+ // Then, in next step, we will remove all children together, which is faster than removing them one by one.
396
+ const toRemove = new Map();
395
397
  for (const element of this._splitParts.keys()) {
396
398
  if (element.isEmpty && !this._emptyElementsToKeep.has(element)) {
397
- this.conversionApi.writer.remove(element);
399
+ const children = toRemove.get(element.parent) || [];
400
+ children.push(element);
398
401
  this._splitParts.delete(element);
399
- anyRemoved = true;
402
+ toRemove.set(element.parent, children);
400
403
  }
401
404
  }
402
- if (anyRemoved) {
405
+ for (const [parent, children] of toRemove) {
406
+ parent._removeChildrenArray(children);
407
+ }
408
+ if (toRemove.size) {
403
409
  this._removeEmptyElements();
404
410
  }
405
411
  }
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  import { type ClassPatterns, type MatcherPattern, type PropertyPatterns } from '../view/matcher.js';
6
6
  import ConversionHelpers from './conversionhelpers.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  import Matcher from '../view/matcher.js';
6
6
  import ConversionHelpers from './conversionhelpers.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  import type Element from '../view/element.js';
6
6
  import type Node from '../view/node.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/conversion/viewconsumable
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/dataprocessor/basichtmlwriter
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  import { global } from '@ckeditor/ckeditor5-utils';
6
6
  /**
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/dataprocessor/dataprocessor
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  export {};
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  import DomConverter from '../view/domconverter.js';
6
6
  import type DataProcessor from './dataprocessor.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/dataprocessor/htmldataprocessor
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/dataprocessor/htmlwriter
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  export {};
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  import DomConverter from '../view/domconverter.js';
6
6
  import type DataProcessor from './dataprocessor.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/dataprocessor/xmldataprocessor
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  import Model from '../model/model.js';
6
6
  import ModelRange from '../model/range.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/dev-utils/model
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  import type Model from '../model/model.js';
6
6
  import type Operation from '../model/operation/operation.js';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/dev-utils/operationreplayer
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * Note: This package is used only internally for debugging purposes and should not be used
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * Note: This package is used only internally for debugging purposes and should not be used
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/dev-utils/view
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/dev-utils/view
package/src/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine
package/src/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  import type Operation from './operation/operation.js';
6
6
  /**
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/model/batch
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/model/differ
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/model/differ
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/model/document
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/model/document
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/model/documentfragment
@@ -204,4 +204,16 @@ export default class DocumentFragment extends TypeCheckable implements Iterable<
204
204
  * @returns Array containing removed nodes.
205
205
  */
206
206
  _removeChildren(index: number, howMany?: number): Array<Node>;
207
+ /**
208
+ * Removes children nodes provided as an array and sets
209
+ * the {@link module:engine/model/node~Node#parent parent} of these nodes to `null`.
210
+ *
211
+ * These nodes do not need to be direct siblings.
212
+ *
213
+ * This method is faster than removing nodes one by one, as it recalculates offsets only once.
214
+ *
215
+ * @internal
216
+ * @param nodes Array of nodes.
217
+ */
218
+ _removeChildrenArray(nodes: Array<Node>): void;
207
219
  }
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/model/documentfragment
@@ -284,6 +284,23 @@ export default class DocumentFragment extends TypeCheckable {
284
284
  }
285
285
  return nodes;
286
286
  }
287
+ /**
288
+ * Removes children nodes provided as an array and sets
289
+ * the {@link module:engine/model/node~Node#parent parent} of these nodes to `null`.
290
+ *
291
+ * These nodes do not need to be direct siblings.
292
+ *
293
+ * This method is faster than removing nodes one by one, as it recalculates offsets only once.
294
+ *
295
+ * @internal
296
+ * @param nodes Array of nodes.
297
+ */
298
+ _removeChildrenArray(nodes) {
299
+ this._children._removeNodesArray(nodes);
300
+ for (const node of nodes) {
301
+ node.parent = null;
302
+ }
303
+ }
287
304
  }
288
305
  // The magic of type inference using `is` method is centralized in `TypeCheckable` class.
289
306
  // Proper overload would interfere with that.
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/model/documentselection
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/model/documentselection
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/model/element
@@ -164,6 +164,18 @@ export default class Element extends Node {
164
164
  * @returns Array containing removed nodes.
165
165
  */
166
166
  _removeChildren(index: number, howMany?: number): Array<Node>;
167
+ /**
168
+ * Removes children nodes provided as an array and sets
169
+ * the {@link module:engine/model/node~Node#parent parent} of these nodes to `null`.
170
+ *
171
+ * These nodes do not need to be direct siblings.
172
+ *
173
+ * This method is faster than removing nodes one by one, as it recalculates offsets only once.
174
+ *
175
+ * @internal
176
+ * @param nodes Array of nodes.
177
+ */
178
+ _removeChildrenArray(nodes: Array<Node>): void;
167
179
  /**
168
180
  * Creates an `Element` instance from given plain object (i.e. parsed JSON string).
169
181
  * Converts `Element` children to proper nodes.
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
6
  * @module engine/model/element
@@ -183,7 +183,7 @@ export default class Element extends Node {
183
183
  * element will be cloned without any child.
184
184
  */
185
185
  _clone(deep = false) {
186
- const children = deep ? Array.from(this._children).map(node => node._clone(true)) : undefined;
186
+ const children = deep ? cloneNodes(this._children) : undefined;
187
187
  return new Element(this.name, this.getAttributes(), children);
188
188
  }
189
189
  /**
@@ -233,6 +233,23 @@ export default class Element extends Node {
233
233
  }
234
234
  return nodes;
235
235
  }
236
+ /**
237
+ * Removes children nodes provided as an array and sets
238
+ * the {@link module:engine/model/node~Node#parent parent} of these nodes to `null`.
239
+ *
240
+ * These nodes do not need to be direct siblings.
241
+ *
242
+ * This method is faster than removing nodes one by one, as it recalculates offsets only once.
243
+ *
244
+ * @internal
245
+ * @param nodes Array of nodes.
246
+ */
247
+ _removeChildrenArray(nodes) {
248
+ this._children._removeNodesArray(nodes);
249
+ for (const node of nodes) {
250
+ node.parent = null;
251
+ }
252
+ }
236
253
  /**
237
254
  * Creates an `Element` instance from given plain object (i.e. parsed JSON string).
238
255
  * Converts `Element` children to proper nodes.
@@ -279,15 +296,24 @@ function normalize(nodes) {
279
296
  if (!isIterable(nodes)) {
280
297
  nodes = [nodes];
281
298
  }
282
- // Array.from to enable .map() on non-arrays.
283
- return Array.from(nodes)
284
- .map(node => {
299
+ const normalizedNodes = [];
300
+ for (const node of nodes) {
285
301
  if (typeof node == 'string') {
286
- return new Text(node);
302
+ normalizedNodes.push(new Text(node));
287
303
  }
288
- if (node instanceof TextProxy) {
289
- return new Text(node.data, node.getAttributes());
304
+ else if (node instanceof TextProxy) {
305
+ normalizedNodes.push(new Text(node.data, node.getAttributes()));
290
306
  }
291
- return node;
292
- });
307
+ else {
308
+ normalizedNodes.push(node);
309
+ }
310
+ }
311
+ return normalizedNodes;
312
+ }
313
+ function cloneNodes(nodes) {
314
+ const clonedNodes = [];
315
+ for (const node of nodes) {
316
+ clonedNodes.push(node._clone(true));
317
+ }
318
+ return clonedNodes;
293
319
  }
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  import type Operation from './operation/operation.js';
6
6
  /**
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  import { CKEditorError } from '@ckeditor/ckeditor5-utils';
6
6
  /**