roosterjs-content-model-core 0.26.4 → 0.27.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 (385) hide show
  1. package/lib/coreApi/addUndoSnapshot.d.ts +1 -1
  2. package/lib/coreApi/addUndoSnapshot.js +3 -3
  3. package/lib/coreApi/addUndoSnapshot.js.map +1 -1
  4. package/lib/coreApi/attachDomEvent.d.ts +1 -1
  5. package/lib/coreApi/attachDomEvent.js +3 -3
  6. package/lib/coreApi/attachDomEvent.js.map +1 -1
  7. package/lib/coreApi/createContentModel.js +1 -1
  8. package/lib/coreApi/createContentModel.js.map +1 -1
  9. package/lib/coreApi/createEditorContext.js +3 -3
  10. package/lib/coreApi/createEditorContext.js.map +1 -1
  11. package/lib/coreApi/focus.d.ts +1 -1
  12. package/lib/coreApi/focus.js +2 -2
  13. package/lib/coreApi/focus.js.map +1 -1
  14. package/lib/coreApi/formatContentModel.d.ts +1 -1
  15. package/lib/coreApi/formatContentModel.js +2 -4
  16. package/lib/coreApi/formatContentModel.js.map +1 -1
  17. package/lib/coreApi/getDOMSelection.js +2 -2
  18. package/lib/coreApi/getDOMSelection.js.map +1 -1
  19. package/lib/coreApi/getVisibleViewport.d.ts +1 -1
  20. package/lib/coreApi/getVisibleViewport.js +4 -2
  21. package/lib/coreApi/getVisibleViewport.js.map +1 -1
  22. package/lib/coreApi/hasFocus.d.ts +1 -1
  23. package/lib/coreApi/hasFocus.js +3 -3
  24. package/lib/coreApi/hasFocus.js.map +1 -1
  25. package/lib/coreApi/paste.d.ts +1 -1
  26. package/lib/coreApi/paste.js +2 -2
  27. package/lib/coreApi/paste.js.map +1 -1
  28. package/lib/coreApi/setContentModel.js +1 -1
  29. package/lib/coreApi/setContentModel.js.map +1 -1
  30. package/lib/coreApi/setDOMSelection.js +2 -2
  31. package/lib/coreApi/setDOMSelection.js.map +1 -1
  32. package/lib/coreApi/switchShadowEdit.d.ts +1 -1
  33. package/lib/coreApi/switchShadowEdit.js +3 -3
  34. package/lib/coreApi/switchShadowEdit.js.map +1 -1
  35. package/lib/coreApi/triggerEvent.d.ts +1 -1
  36. package/lib/coreApi/triggerEvent.js +1 -1
  37. package/lib/coreApi/triggerEvent.js.map +1 -1
  38. package/lib/corePlugin/CachePlugin.d.ts +2 -2
  39. package/lib/corePlugin/CachePlugin.js.map +1 -1
  40. package/lib/corePlugin/ContextMenuPlugin.d.ts +2 -2
  41. package/lib/corePlugin/ContextMenuPlugin.js.map +1 -1
  42. package/lib/corePlugin/CopyPastePlugin.d.ts +2 -2
  43. package/lib/corePlugin/CopyPastePlugin.js +2 -1
  44. package/lib/corePlugin/CopyPastePlugin.js.map +1 -1
  45. package/lib/corePlugin/DOMEventPlugin.d.ts +2 -2
  46. package/lib/corePlugin/DOMEventPlugin.js.map +1 -1
  47. package/lib/corePlugin/EntityPlugin.js +5 -11
  48. package/lib/corePlugin/EntityPlugin.js.map +1 -1
  49. package/lib/corePlugin/FormatPlugin.d.ts +2 -2
  50. package/lib/corePlugin/FormatPlugin.js.map +1 -1
  51. package/lib/corePlugin/LifecyclePlugin.d.ts +2 -2
  52. package/lib/corePlugin/LifecyclePlugin.js.map +1 -1
  53. package/lib/corePlugin/SelectionPlugin.d.ts +2 -2
  54. package/lib/corePlugin/SelectionPlugin.js.map +1 -1
  55. package/lib/corePlugin/UndoPlugin.d.ts +2 -2
  56. package/lib/corePlugin/UndoPlugin.js.map +1 -1
  57. package/lib/corePlugin/createEditorCorePlugins.d.ts +7 -0
  58. package/lib/corePlugin/{createStandaloneEditorCorePlugins.js → createEditorCorePlugins.js} +5 -5
  59. package/lib/corePlugin/createEditorCorePlugins.js.map +1 -0
  60. package/lib/corePlugin/utils/applyDefaultFormat.d.ts +3 -3
  61. package/lib/corePlugin/utils/applyDefaultFormat.js +1 -1
  62. package/lib/corePlugin/utils/applyDefaultFormat.js.map +1 -1
  63. package/lib/corePlugin/utils/applyPendingFormat.d.ts +2 -2
  64. package/lib/corePlugin/utils/applyPendingFormat.js.map +1 -1
  65. package/lib/corePlugin/utils/entityDelimiterUtils.d.ts +5 -5
  66. package/lib/corePlugin/utils/entityDelimiterUtils.js.map +1 -1
  67. package/{lib-amd/editor/StandaloneEditor.d.ts → lib/editor/Editor.d.ts} +8 -7
  68. package/lib/editor/{StandaloneEditor.js → Editor.js} +42 -41
  69. package/lib/editor/Editor.js.map +1 -0
  70. package/lib/editor/SnapshotsManagerImpl.js +9 -1
  71. package/lib/editor/SnapshotsManagerImpl.js.map +1 -1
  72. package/lib/editor/coreApiMap.d.ts +6 -0
  73. package/lib/editor/{standaloneCoreApiMap.js → coreApiMap.js} +4 -4
  74. package/lib/editor/coreApiMap.js.map +1 -0
  75. package/lib/editor/{createStandaloneEditorCore.d.ts → createEditorCore.d.ts} +3 -4
  76. package/lib/editor/{createStandaloneEditorCore.js → createEditorCore.js} +11 -12
  77. package/lib/editor/createEditorCore.js.map +1 -0
  78. package/lib/editor/createEditorDefaultSettings.d.ts +13 -0
  79. package/lib/editor/{createStandaloneEditorDefaultSettings.js → createEditorDefaultSettings.js} +3 -3
  80. package/lib/editor/createEditorDefaultSettings.js.map +1 -0
  81. package/lib/index.d.ts +3 -2
  82. package/lib/index.js +7 -4
  83. package/lib/index.js.map +1 -1
  84. package/lib/publicApi/domUtils/cacheGetEventData.d.ts +9 -0
  85. package/lib/publicApi/domUtils/cacheGetEventData.js +20 -0
  86. package/lib/publicApi/domUtils/cacheGetEventData.js.map +1 -0
  87. package/lib/publicApi/model/exportContent.d.ts +2 -2
  88. package/lib/publicApi/model/exportContent.js.map +1 -1
  89. package/lib/publicApi/model/mergeModel.js +6 -0
  90. package/lib/publicApi/model/mergeModel.js.map +1 -1
  91. package/lib/publicApi/selection/deleteBlock.js +0 -3
  92. package/lib/publicApi/selection/deleteBlock.js.map +1 -1
  93. package/lib/publicApi/selection/deleteSegment.js +0 -3
  94. package/lib/publicApi/selection/deleteSegment.js.map +1 -1
  95. package/lib/publicApi/table/normalizeTable.d.ts +4 -0
  96. package/lib/publicApi/table/normalizeTable.js +8 -1
  97. package/lib/publicApi/table/normalizeTable.js.map +1 -1
  98. package/lib/publicApi/undo/redo.d.ts +2 -2
  99. package/lib/publicApi/undo/redo.js.map +1 -1
  100. package/lib/publicApi/undo/undo.d.ts +2 -2
  101. package/lib/publicApi/undo/undo.js.map +1 -1
  102. package/lib/utils/createSnapshotSelection.d.ts +2 -2
  103. package/lib/utils/createSnapshotSelection.js +6 -6
  104. package/lib/utils/createSnapshotSelection.js.map +1 -1
  105. package/lib/utils/paste/generatePasteOptionFromPlugins.d.ts +2 -2
  106. package/lib/utils/paste/generatePasteOptionFromPlugins.js.map +1 -1
  107. package/lib/utils/paste/mergePasteContent.d.ts +2 -2
  108. package/lib/utils/paste/mergePasteContent.js +1 -1
  109. package/lib/utils/paste/mergePasteContent.js.map +1 -1
  110. package/lib/utils/restoreSnapshotColors.d.ts +2 -2
  111. package/lib/utils/restoreSnapshotColors.js +1 -1
  112. package/lib/utils/restoreSnapshotColors.js.map +1 -1
  113. package/lib/utils/restoreSnapshotHTML.d.ts +2 -2
  114. package/lib/utils/restoreSnapshotHTML.js +15 -16
  115. package/lib/utils/restoreSnapshotHTML.js.map +1 -1
  116. package/lib/utils/restoreSnapshotSelection.d.ts +2 -2
  117. package/lib/utils/restoreSnapshotSelection.js +6 -6
  118. package/lib/utils/restoreSnapshotSelection.js.map +1 -1
  119. package/lib/utils/sanitizeElement.js +1 -1
  120. package/lib/utils/sanitizeElement.js.map +1 -1
  121. package/lib-amd/coreApi/addUndoSnapshot.d.ts +1 -1
  122. package/lib-amd/coreApi/addUndoSnapshot.js +3 -3
  123. package/lib-amd/coreApi/addUndoSnapshot.js.map +1 -1
  124. package/lib-amd/coreApi/attachDomEvent.d.ts +1 -1
  125. package/lib-amd/coreApi/attachDomEvent.js +3 -3
  126. package/lib-amd/coreApi/attachDomEvent.js.map +1 -1
  127. package/lib-amd/coreApi/createContentModel.js +1 -1
  128. package/lib-amd/coreApi/createContentModel.js.map +1 -1
  129. package/lib-amd/coreApi/createEditorContext.js +3 -3
  130. package/lib-amd/coreApi/createEditorContext.js.map +1 -1
  131. package/lib-amd/coreApi/focus.d.ts +1 -1
  132. package/lib-amd/coreApi/focus.js +2 -2
  133. package/lib-amd/coreApi/focus.js.map +1 -1
  134. package/lib-amd/coreApi/formatContentModel.d.ts +1 -1
  135. package/lib-amd/coreApi/formatContentModel.js +2 -4
  136. package/lib-amd/coreApi/formatContentModel.js.map +1 -1
  137. package/lib-amd/coreApi/getDOMSelection.js +2 -2
  138. package/lib-amd/coreApi/getDOMSelection.js.map +1 -1
  139. package/lib-amd/coreApi/getVisibleViewport.d.ts +1 -1
  140. package/lib-amd/coreApi/getVisibleViewport.js +4 -2
  141. package/lib-amd/coreApi/getVisibleViewport.js.map +1 -1
  142. package/lib-amd/coreApi/hasFocus.d.ts +1 -1
  143. package/lib-amd/coreApi/hasFocus.js +3 -3
  144. package/lib-amd/coreApi/hasFocus.js.map +1 -1
  145. package/lib-amd/coreApi/paste.d.ts +1 -1
  146. package/lib-amd/coreApi/paste.js +2 -2
  147. package/lib-amd/coreApi/paste.js.map +1 -1
  148. package/lib-amd/coreApi/setContentModel.js +1 -1
  149. package/lib-amd/coreApi/setContentModel.js.map +1 -1
  150. package/lib-amd/coreApi/setDOMSelection.js +2 -2
  151. package/lib-amd/coreApi/setDOMSelection.js.map +1 -1
  152. package/lib-amd/coreApi/switchShadowEdit.d.ts +1 -1
  153. package/lib-amd/coreApi/switchShadowEdit.js +3 -3
  154. package/lib-amd/coreApi/switchShadowEdit.js.map +1 -1
  155. package/lib-amd/coreApi/triggerEvent.d.ts +1 -1
  156. package/lib-amd/coreApi/triggerEvent.js +1 -1
  157. package/lib-amd/coreApi/triggerEvent.js.map +1 -1
  158. package/lib-amd/corePlugin/CachePlugin.d.ts +2 -2
  159. package/lib-amd/corePlugin/CachePlugin.js.map +1 -1
  160. package/lib-amd/corePlugin/ContextMenuPlugin.d.ts +2 -2
  161. package/lib-amd/corePlugin/ContextMenuPlugin.js.map +1 -1
  162. package/lib-amd/corePlugin/CopyPastePlugin.d.ts +2 -2
  163. package/lib-amd/corePlugin/CopyPastePlugin.js +2 -1
  164. package/lib-amd/corePlugin/CopyPastePlugin.js.map +1 -1
  165. package/lib-amd/corePlugin/DOMEventPlugin.d.ts +2 -2
  166. package/lib-amd/corePlugin/DOMEventPlugin.js.map +1 -1
  167. package/lib-amd/corePlugin/EntityPlugin.js +5 -11
  168. package/lib-amd/corePlugin/EntityPlugin.js.map +1 -1
  169. package/lib-amd/corePlugin/FormatPlugin.d.ts +2 -2
  170. package/lib-amd/corePlugin/FormatPlugin.js.map +1 -1
  171. package/lib-amd/corePlugin/LifecyclePlugin.d.ts +2 -2
  172. package/lib-amd/corePlugin/LifecyclePlugin.js.map +1 -1
  173. package/lib-amd/corePlugin/SelectionPlugin.d.ts +2 -2
  174. package/lib-amd/corePlugin/SelectionPlugin.js.map +1 -1
  175. package/lib-amd/corePlugin/UndoPlugin.d.ts +2 -2
  176. package/lib-amd/corePlugin/UndoPlugin.js.map +1 -1
  177. package/lib-amd/corePlugin/createEditorCorePlugins.d.ts +7 -0
  178. package/lib-amd/corePlugin/{createStandaloneEditorCorePlugins.js → createEditorCorePlugins.js} +5 -5
  179. package/lib-amd/corePlugin/createEditorCorePlugins.js.map +1 -0
  180. package/lib-amd/corePlugin/utils/applyDefaultFormat.d.ts +3 -3
  181. package/lib-amd/corePlugin/utils/applyDefaultFormat.js +1 -1
  182. package/lib-amd/corePlugin/utils/applyDefaultFormat.js.map +1 -1
  183. package/lib-amd/corePlugin/utils/applyPendingFormat.d.ts +2 -2
  184. package/lib-amd/corePlugin/utils/applyPendingFormat.js.map +1 -1
  185. package/lib-amd/corePlugin/utils/entityDelimiterUtils.d.ts +5 -5
  186. package/lib-amd/corePlugin/utils/entityDelimiterUtils.js.map +1 -1
  187. package/{lib/editor/StandaloneEditor.d.ts → lib-amd/editor/Editor.d.ts} +8 -7
  188. package/lib-amd/editor/{StandaloneEditor.js → Editor.js} +42 -41
  189. package/lib-amd/editor/Editor.js.map +1 -0
  190. package/lib-amd/editor/SnapshotsManagerImpl.js +9 -1
  191. package/lib-amd/editor/SnapshotsManagerImpl.js.map +1 -1
  192. package/lib-amd/editor/coreApiMap.d.ts +6 -0
  193. package/lib-amd/editor/{standaloneCoreApiMap.js → coreApiMap.js} +4 -4
  194. package/lib-amd/editor/coreApiMap.js.map +1 -0
  195. package/{lib-mjs/editor/createStandaloneEditorCore.d.ts → lib-amd/editor/createEditorCore.d.ts} +3 -4
  196. package/lib-amd/editor/{createStandaloneEditorCore.js → createEditorCore.js} +9 -10
  197. package/lib-amd/editor/createEditorCore.js.map +1 -0
  198. package/lib-amd/editor/createEditorDefaultSettings.d.ts +13 -0
  199. package/lib-amd/editor/{createStandaloneEditorDefaultSettings.js → createEditorDefaultSettings.js} +3 -3
  200. package/lib-amd/editor/createEditorDefaultSettings.js.map +1 -0
  201. package/lib-amd/index.d.ts +3 -2
  202. package/lib-amd/index.js +5 -3
  203. package/lib-amd/index.js.map +1 -1
  204. package/lib-amd/publicApi/domUtils/cacheGetEventData.d.ts +9 -0
  205. package/lib-amd/publicApi/domUtils/cacheGetEventData.js +22 -0
  206. package/lib-amd/publicApi/domUtils/cacheGetEventData.js.map +1 -0
  207. package/lib-amd/publicApi/model/exportContent.d.ts +2 -2
  208. package/lib-amd/publicApi/model/exportContent.js.map +1 -1
  209. package/lib-amd/publicApi/model/mergeModel.js +6 -0
  210. package/lib-amd/publicApi/model/mergeModel.js.map +1 -1
  211. package/lib-amd/publicApi/selection/deleteBlock.js +0 -3
  212. package/lib-amd/publicApi/selection/deleteBlock.js.map +1 -1
  213. package/lib-amd/publicApi/selection/deleteSegment.js +0 -3
  214. package/lib-amd/publicApi/selection/deleteSegment.js.map +1 -1
  215. package/lib-amd/publicApi/table/normalizeTable.d.ts +4 -0
  216. package/lib-amd/publicApi/table/normalizeTable.js +8 -1
  217. package/lib-amd/publicApi/table/normalizeTable.js.map +1 -1
  218. package/lib-amd/publicApi/undo/redo.d.ts +2 -2
  219. package/lib-amd/publicApi/undo/redo.js.map +1 -1
  220. package/lib-amd/publicApi/undo/undo.d.ts +2 -2
  221. package/lib-amd/publicApi/undo/undo.js.map +1 -1
  222. package/lib-amd/utils/createSnapshotSelection.d.ts +2 -2
  223. package/lib-amd/utils/createSnapshotSelection.js +6 -6
  224. package/lib-amd/utils/createSnapshotSelection.js.map +1 -1
  225. package/lib-amd/utils/paste/generatePasteOptionFromPlugins.d.ts +2 -2
  226. package/lib-amd/utils/paste/generatePasteOptionFromPlugins.js.map +1 -1
  227. package/lib-amd/utils/paste/mergePasteContent.d.ts +2 -2
  228. package/lib-amd/utils/paste/mergePasteContent.js +1 -1
  229. package/lib-amd/utils/paste/mergePasteContent.js.map +1 -1
  230. package/lib-amd/utils/restoreSnapshotColors.d.ts +2 -2
  231. package/lib-amd/utils/restoreSnapshotColors.js +1 -1
  232. package/lib-amd/utils/restoreSnapshotColors.js.map +1 -1
  233. package/lib-amd/utils/restoreSnapshotHTML.d.ts +2 -2
  234. package/lib-amd/utils/restoreSnapshotHTML.js +15 -16
  235. package/lib-amd/utils/restoreSnapshotHTML.js.map +1 -1
  236. package/lib-amd/utils/restoreSnapshotSelection.d.ts +2 -2
  237. package/lib-amd/utils/restoreSnapshotSelection.js +6 -6
  238. package/lib-amd/utils/restoreSnapshotSelection.js.map +1 -1
  239. package/lib-amd/utils/sanitizeElement.js +1 -1
  240. package/lib-amd/utils/sanitizeElement.js.map +1 -1
  241. package/lib-mjs/coreApi/addUndoSnapshot.d.ts +1 -1
  242. package/lib-mjs/coreApi/addUndoSnapshot.js +3 -3
  243. package/lib-mjs/coreApi/addUndoSnapshot.js.map +1 -1
  244. package/lib-mjs/coreApi/attachDomEvent.d.ts +1 -1
  245. package/lib-mjs/coreApi/attachDomEvent.js +3 -3
  246. package/lib-mjs/coreApi/attachDomEvent.js.map +1 -1
  247. package/lib-mjs/coreApi/createContentModel.js +1 -1
  248. package/lib-mjs/coreApi/createContentModel.js.map +1 -1
  249. package/lib-mjs/coreApi/createEditorContext.js +3 -3
  250. package/lib-mjs/coreApi/createEditorContext.js.map +1 -1
  251. package/lib-mjs/coreApi/focus.d.ts +1 -1
  252. package/lib-mjs/coreApi/focus.js +2 -2
  253. package/lib-mjs/coreApi/focus.js.map +1 -1
  254. package/lib-mjs/coreApi/formatContentModel.d.ts +1 -1
  255. package/lib-mjs/coreApi/formatContentModel.js +2 -4
  256. package/lib-mjs/coreApi/formatContentModel.js.map +1 -1
  257. package/lib-mjs/coreApi/getDOMSelection.js +2 -2
  258. package/lib-mjs/coreApi/getDOMSelection.js.map +1 -1
  259. package/lib-mjs/coreApi/getVisibleViewport.d.ts +1 -1
  260. package/lib-mjs/coreApi/getVisibleViewport.js +4 -2
  261. package/lib-mjs/coreApi/getVisibleViewport.js.map +1 -1
  262. package/lib-mjs/coreApi/hasFocus.d.ts +1 -1
  263. package/lib-mjs/coreApi/hasFocus.js +3 -3
  264. package/lib-mjs/coreApi/hasFocus.js.map +1 -1
  265. package/lib-mjs/coreApi/paste.d.ts +1 -1
  266. package/lib-mjs/coreApi/paste.js +2 -2
  267. package/lib-mjs/coreApi/paste.js.map +1 -1
  268. package/lib-mjs/coreApi/setContentModel.js +1 -1
  269. package/lib-mjs/coreApi/setContentModel.js.map +1 -1
  270. package/lib-mjs/coreApi/setDOMSelection.js +2 -2
  271. package/lib-mjs/coreApi/setDOMSelection.js.map +1 -1
  272. package/lib-mjs/coreApi/switchShadowEdit.d.ts +1 -1
  273. package/lib-mjs/coreApi/switchShadowEdit.js +3 -3
  274. package/lib-mjs/coreApi/switchShadowEdit.js.map +1 -1
  275. package/lib-mjs/coreApi/triggerEvent.d.ts +1 -1
  276. package/lib-mjs/coreApi/triggerEvent.js +1 -1
  277. package/lib-mjs/coreApi/triggerEvent.js.map +1 -1
  278. package/lib-mjs/corePlugin/CachePlugin.d.ts +2 -2
  279. package/lib-mjs/corePlugin/CachePlugin.js.map +1 -1
  280. package/lib-mjs/corePlugin/ContextMenuPlugin.d.ts +2 -2
  281. package/lib-mjs/corePlugin/ContextMenuPlugin.js.map +1 -1
  282. package/lib-mjs/corePlugin/CopyPastePlugin.d.ts +2 -2
  283. package/lib-mjs/corePlugin/CopyPastePlugin.js +2 -1
  284. package/lib-mjs/corePlugin/CopyPastePlugin.js.map +1 -1
  285. package/lib-mjs/corePlugin/DOMEventPlugin.d.ts +2 -2
  286. package/lib-mjs/corePlugin/DOMEventPlugin.js.map +1 -1
  287. package/lib-mjs/corePlugin/EntityPlugin.js +6 -12
  288. package/lib-mjs/corePlugin/EntityPlugin.js.map +1 -1
  289. package/lib-mjs/corePlugin/FormatPlugin.d.ts +2 -2
  290. package/lib-mjs/corePlugin/FormatPlugin.js.map +1 -1
  291. package/lib-mjs/corePlugin/LifecyclePlugin.d.ts +2 -2
  292. package/lib-mjs/corePlugin/LifecyclePlugin.js.map +1 -1
  293. package/lib-mjs/corePlugin/SelectionPlugin.d.ts +2 -2
  294. package/lib-mjs/corePlugin/SelectionPlugin.js.map +1 -1
  295. package/lib-mjs/corePlugin/UndoPlugin.d.ts +2 -2
  296. package/lib-mjs/corePlugin/UndoPlugin.js.map +1 -1
  297. package/lib-mjs/corePlugin/createEditorCorePlugins.d.ts +7 -0
  298. package/lib-mjs/corePlugin/{createStandaloneEditorCorePlugins.js → createEditorCorePlugins.js} +3 -3
  299. package/lib-mjs/corePlugin/createEditorCorePlugins.js.map +1 -0
  300. package/lib-mjs/corePlugin/utils/applyDefaultFormat.d.ts +3 -3
  301. package/lib-mjs/corePlugin/utils/applyDefaultFormat.js +1 -1
  302. package/lib-mjs/corePlugin/utils/applyDefaultFormat.js.map +1 -1
  303. package/lib-mjs/corePlugin/utils/applyPendingFormat.d.ts +2 -2
  304. package/lib-mjs/corePlugin/utils/applyPendingFormat.js.map +1 -1
  305. package/lib-mjs/corePlugin/utils/entityDelimiterUtils.d.ts +5 -5
  306. package/lib-mjs/corePlugin/utils/entityDelimiterUtils.js.map +1 -1
  307. package/lib-mjs/editor/{StandaloneEditor.d.ts → Editor.d.ts} +8 -7
  308. package/lib-mjs/editor/{StandaloneEditor.js → Editor.js} +41 -40
  309. package/lib-mjs/editor/Editor.js.map +1 -0
  310. package/lib-mjs/editor/SnapshotsManagerImpl.js +9 -1
  311. package/lib-mjs/editor/SnapshotsManagerImpl.js.map +1 -1
  312. package/lib-mjs/editor/coreApiMap.d.ts +6 -0
  313. package/lib-mjs/editor/{standaloneCoreApiMap.js → coreApiMap.js} +3 -3
  314. package/lib-mjs/editor/coreApiMap.js.map +1 -0
  315. package/{lib-amd/editor/createStandaloneEditorCore.d.ts → lib-mjs/editor/createEditorCore.d.ts} +3 -4
  316. package/lib-mjs/editor/{createStandaloneEditorCore.js → createEditorCore.js} +8 -9
  317. package/lib-mjs/editor/createEditorCore.js.map +1 -0
  318. package/lib-mjs/editor/createEditorDefaultSettings.d.ts +13 -0
  319. package/lib-mjs/editor/{createStandaloneEditorDefaultSettings.js → createEditorDefaultSettings.js} +3 -3
  320. package/lib-mjs/editor/createEditorDefaultSettings.js.map +1 -0
  321. package/lib-mjs/index.d.ts +3 -2
  322. package/lib-mjs/index.js +3 -2
  323. package/lib-mjs/index.js.map +1 -1
  324. package/lib-mjs/publicApi/domUtils/cacheGetEventData.d.ts +9 -0
  325. package/lib-mjs/publicApi/domUtils/cacheGetEventData.js +16 -0
  326. package/lib-mjs/publicApi/domUtils/cacheGetEventData.js.map +1 -0
  327. package/lib-mjs/publicApi/model/exportContent.d.ts +2 -2
  328. package/lib-mjs/publicApi/model/exportContent.js.map +1 -1
  329. package/lib-mjs/publicApi/model/mergeModel.js +6 -0
  330. package/lib-mjs/publicApi/model/mergeModel.js.map +1 -1
  331. package/lib-mjs/publicApi/selection/deleteBlock.js +0 -3
  332. package/lib-mjs/publicApi/selection/deleteBlock.js.map +1 -1
  333. package/lib-mjs/publicApi/selection/deleteSegment.js +0 -3
  334. package/lib-mjs/publicApi/selection/deleteSegment.js.map +1 -1
  335. package/lib-mjs/publicApi/table/normalizeTable.d.ts +4 -0
  336. package/lib-mjs/publicApi/table/normalizeTable.js +7 -0
  337. package/lib-mjs/publicApi/table/normalizeTable.js.map +1 -1
  338. package/lib-mjs/publicApi/undo/redo.d.ts +2 -2
  339. package/lib-mjs/publicApi/undo/redo.js.map +1 -1
  340. package/lib-mjs/publicApi/undo/undo.d.ts +2 -2
  341. package/lib-mjs/publicApi/undo/undo.js.map +1 -1
  342. package/lib-mjs/utils/createSnapshotSelection.d.ts +2 -2
  343. package/lib-mjs/utils/createSnapshotSelection.js +6 -6
  344. package/lib-mjs/utils/createSnapshotSelection.js.map +1 -1
  345. package/lib-mjs/utils/paste/generatePasteOptionFromPlugins.d.ts +2 -2
  346. package/lib-mjs/utils/paste/generatePasteOptionFromPlugins.js.map +1 -1
  347. package/lib-mjs/utils/paste/mergePasteContent.d.ts +2 -2
  348. package/lib-mjs/utils/paste/mergePasteContent.js +1 -1
  349. package/lib-mjs/utils/paste/mergePasteContent.js.map +1 -1
  350. package/lib-mjs/utils/restoreSnapshotColors.d.ts +2 -2
  351. package/lib-mjs/utils/restoreSnapshotColors.js +1 -1
  352. package/lib-mjs/utils/restoreSnapshotColors.js.map +1 -1
  353. package/lib-mjs/utils/restoreSnapshotHTML.d.ts +2 -2
  354. package/lib-mjs/utils/restoreSnapshotHTML.js +16 -17
  355. package/lib-mjs/utils/restoreSnapshotHTML.js.map +1 -1
  356. package/lib-mjs/utils/restoreSnapshotSelection.d.ts +2 -2
  357. package/lib-mjs/utils/restoreSnapshotSelection.js +6 -6
  358. package/lib-mjs/utils/restoreSnapshotSelection.js.map +1 -1
  359. package/lib-mjs/utils/sanitizeElement.js +1 -1
  360. package/lib-mjs/utils/sanitizeElement.js.map +1 -1
  361. package/package.json +3 -3
  362. package/lib/corePlugin/createStandaloneEditorCorePlugins.d.ts +0 -7
  363. package/lib/corePlugin/createStandaloneEditorCorePlugins.js.map +0 -1
  364. package/lib/editor/StandaloneEditor.js.map +0 -1
  365. package/lib/editor/createStandaloneEditorCore.js.map +0 -1
  366. package/lib/editor/createStandaloneEditorDefaultSettings.d.ts +0 -13
  367. package/lib/editor/createStandaloneEditorDefaultSettings.js.map +0 -1
  368. package/lib/editor/standaloneCoreApiMap.d.ts +0 -6
  369. package/lib/editor/standaloneCoreApiMap.js.map +0 -1
  370. package/lib-amd/corePlugin/createStandaloneEditorCorePlugins.d.ts +0 -7
  371. package/lib-amd/corePlugin/createStandaloneEditorCorePlugins.js.map +0 -1
  372. package/lib-amd/editor/StandaloneEditor.js.map +0 -1
  373. package/lib-amd/editor/createStandaloneEditorCore.js.map +0 -1
  374. package/lib-amd/editor/createStandaloneEditorDefaultSettings.d.ts +0 -13
  375. package/lib-amd/editor/createStandaloneEditorDefaultSettings.js.map +0 -1
  376. package/lib-amd/editor/standaloneCoreApiMap.d.ts +0 -6
  377. package/lib-amd/editor/standaloneCoreApiMap.js.map +0 -1
  378. package/lib-mjs/corePlugin/createStandaloneEditorCorePlugins.d.ts +0 -7
  379. package/lib-mjs/corePlugin/createStandaloneEditorCorePlugins.js.map +0 -1
  380. package/lib-mjs/editor/StandaloneEditor.js.map +0 -1
  381. package/lib-mjs/editor/createStandaloneEditorCore.js.map +0 -1
  382. package/lib-mjs/editor/createStandaloneEditorDefaultSettings.d.ts +0 -13
  383. package/lib-mjs/editor/createStandaloneEditorDefaultSettings.js.map +0 -1
  384. package/lib-mjs/editor/standaloneCoreApiMap.d.ts +0 -6
  385. package/lib-mjs/editor/standaloneCoreApiMap.js.map +0 -1
@@ -2,7 +2,7 @@ import type { AddUndoSnapshot } from 'roosterjs-content-model-types';
2
2
  /**
3
3
  * @internal
4
4
  * Add an undo snapshot to current undo snapshot stack
5
- * @param core The StandaloneEditorCore object
5
+ * @param core The EditorCore object
6
6
  * @param canUndoByBackspace True if this action can be undone when user press Backspace key (aka Auto Complete).
7
7
  * @param entityStates @optional Entity states related to this snapshot.
8
8
  * Each entity state will cause an EntityOperation event with operation = EntityOperation.UpdateEntityState
@@ -5,19 +5,19 @@ var createSnapshotSelection_1 = require("../utils/createSnapshotSelection");
5
5
  /**
6
6
  * @internal
7
7
  * Add an undo snapshot to current undo snapshot stack
8
- * @param core The StandaloneEditorCore object
8
+ * @param core The EditorCore object
9
9
  * @param canUndoByBackspace True if this action can be undone when user press Backspace key (aka Auto Complete).
10
10
  * @param entityStates @optional Entity states related to this snapshot.
11
11
  * Each entity state will cause an EntityOperation event with operation = EntityOperation.UpdateEntityState
12
12
  * when undo/redo to this snapshot
13
13
  */
14
14
  var addUndoSnapshot = function (core, canUndoByBackspace, entityStates) {
15
- var lifecycle = core.lifecycle, contentDiv = core.contentDiv, undo = core.undo;
15
+ var lifecycle = core.lifecycle, physicalRoot = core.physicalRoot, undo = core.undo;
16
16
  var snapshot = null;
17
17
  if (!lifecycle.shadowEditFragment) {
18
18
  // Need to create snapshot selection before retrieve innerHTML since HTML can be changed during creating selection when normalize table
19
19
  var selection = (0, createSnapshotSelection_1.createSnapshotSelection)(core);
20
- var html = contentDiv.innerHTML;
20
+ var html = physicalRoot.innerHTML;
21
21
  snapshot = {
22
22
  html: html,
23
23
  entityStates: entityStates,
@@ -1 +1 @@
1
- {"version":3,"file":"addUndoSnapshot.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/addUndoSnapshot.ts"],"names":[],"mappings":";;;AAAA,4EAA2E;AAG3E;;;;;;;;GAQG;AACI,IAAM,eAAe,GAAoB,UAAC,IAAI,EAAE,kBAAkB,EAAE,YAAY;IAC3E,IAAA,SAAS,GAAuB,IAAI,UAA3B,EAAE,UAAU,GAAW,IAAI,WAAf,EAAE,IAAI,GAAK,IAAI,KAAT,CAAU;IAC7C,IAAI,QAAQ,GAAoB,IAAI,CAAC;IAErC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;QAC/B,uIAAuI;QACvI,IAAM,SAAS,GAAG,IAAA,iDAAuB,EAAC,IAAI,CAAC,CAAC;QAChD,IAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC;QAElC,QAAQ,GAAG;YACP,IAAI,MAAA;YACJ,YAAY,cAAA;YACZ,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC,UAAU;YAClC,SAAS,WAAA;SACZ,CAAC;QAEF,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAClE,IAAI,CAAC,gBAAgB,CAAC,aAAa,GAAG,KAAK,CAAC;KAC/C;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AArBW,QAAA,eAAe,mBAqB1B","sourcesContent":["import { createSnapshotSelection } from '../utils/createSnapshotSelection';\nimport type { AddUndoSnapshot, Snapshot } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Add an undo snapshot to current undo snapshot stack\n * @param core The StandaloneEditorCore object\n * @param canUndoByBackspace True if this action can be undone when user press Backspace key (aka Auto Complete).\n * @param entityStates @optional Entity states related to this snapshot.\n * Each entity state will cause an EntityOperation event with operation = EntityOperation.UpdateEntityState\n * when undo/redo to this snapshot\n */\nexport const addUndoSnapshot: AddUndoSnapshot = (core, canUndoByBackspace, entityStates) => {\n const { lifecycle, contentDiv, undo } = core;\n let snapshot: Snapshot | null = null;\n\n if (!lifecycle.shadowEditFragment) {\n // Need to create snapshot selection before retrieve innerHTML since HTML can be changed during creating selection when normalize table\n const selection = createSnapshotSelection(core);\n const html = contentDiv.innerHTML;\n\n snapshot = {\n html,\n entityStates,\n isDarkMode: !!lifecycle.isDarkMode,\n selection,\n };\n\n undo.snapshotsManager.addSnapshot(snapshot, !!canUndoByBackspace);\n undo.snapshotsManager.hasNewContent = false;\n }\n\n return snapshot;\n};\n"]}
1
+ {"version":3,"file":"addUndoSnapshot.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/addUndoSnapshot.ts"],"names":[],"mappings":";;;AAAA,4EAA2E;AAG3E;;;;;;;;GAQG;AACI,IAAM,eAAe,GAAoB,UAAC,IAAI,EAAE,kBAAkB,EAAE,YAAY;IAC3E,IAAA,SAAS,GAAyB,IAAI,UAA7B,EAAE,YAAY,GAAW,IAAI,aAAf,EAAE,IAAI,GAAK,IAAI,KAAT,CAAU;IAC/C,IAAI,QAAQ,GAAoB,IAAI,CAAC;IAErC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;QAC/B,uIAAuI;QACvI,IAAM,SAAS,GAAG,IAAA,iDAAuB,EAAC,IAAI,CAAC,CAAC;QAChD,IAAM,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC;QAEpC,QAAQ,GAAG;YACP,IAAI,MAAA;YACJ,YAAY,cAAA;YACZ,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC,UAAU;YAClC,SAAS,WAAA;SACZ,CAAC;QAEF,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAClE,IAAI,CAAC,gBAAgB,CAAC,aAAa,GAAG,KAAK,CAAC;KAC/C;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AArBW,QAAA,eAAe,mBAqB1B","sourcesContent":["import { createSnapshotSelection } from '../utils/createSnapshotSelection';\nimport type { AddUndoSnapshot, Snapshot } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Add an undo snapshot to current undo snapshot stack\n * @param core The EditorCore object\n * @param canUndoByBackspace True if this action can be undone when user press Backspace key (aka Auto Complete).\n * @param entityStates @optional Entity states related to this snapshot.\n * Each entity state will cause an EntityOperation event with operation = EntityOperation.UpdateEntityState\n * when undo/redo to this snapshot\n */\nexport const addUndoSnapshot: AddUndoSnapshot = (core, canUndoByBackspace, entityStates) => {\n const { lifecycle, physicalRoot, undo } = core;\n let snapshot: Snapshot | null = null;\n\n if (!lifecycle.shadowEditFragment) {\n // Need to create snapshot selection before retrieve innerHTML since HTML can be changed during creating selection when normalize table\n const selection = createSnapshotSelection(core);\n const html = physicalRoot.innerHTML;\n\n snapshot = {\n html,\n entityStates,\n isDarkMode: !!lifecycle.isDarkMode,\n selection,\n };\n\n undo.snapshotsManager.addSnapshot(snapshot, !!canUndoByBackspace);\n undo.snapshotsManager.hasNewContent = false;\n }\n\n return snapshot;\n};\n"]}
@@ -2,7 +2,7 @@ import type { AttachDomEvent } from 'roosterjs-content-model-types';
2
2
  /**
3
3
  * @internal
4
4
  * Attach a DOM event to the editor content DIV
5
- * @param core The StandaloneEditorCore object
5
+ * @param core The EditorCore object
6
6
  * @param eventName The DOM event name
7
7
  * @param pluginEventType Optional event type. When specified, editor will trigger a plugin event with this name when the DOM event is triggered
8
8
  * @param beforeDispatch Optional callback function to be invoked when the DOM event is triggered before trigger plugin event
@@ -5,7 +5,7 @@ var roosterjs_content_model_dom_1 = require("roosterjs-content-model-dom");
5
5
  /**
6
6
  * @internal
7
7
  * Attach a DOM event to the editor content DIV
8
- * @param core The StandaloneEditorCore object
8
+ * @param core The EditorCore object
9
9
  * @param eventName The DOM event name
10
10
  * @param pluginEventType Optional event type. When specified, editor will trigger a plugin event with this name when the DOM event is triggered
11
11
  * @param beforeDispatch Optional callback function to be invoked when the DOM event is triggered before trigger plugin event
@@ -25,9 +25,9 @@ var attachDomEvent = function (core, eventMap) {
25
25
  }, false /*broadcast*/);
26
26
  }
27
27
  };
28
- core.contentDiv.addEventListener(eventName, onEvent);
28
+ core.logicalRoot.addEventListener(eventName, onEvent);
29
29
  return function () {
30
- core.contentDiv.removeEventListener(eventName, onEvent);
30
+ core.logicalRoot.removeEventListener(eventName, onEvent);
31
31
  };
32
32
  });
33
33
  return function () { return disposers.forEach(function (disposers) { return disposers(); }); };
@@ -1 +1 @@
1
- {"version":3,"file":"attachDomEvent.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/attachDomEvent.ts"],"names":[],"mappings":";;;AAAA,2EAA4D;AAG5D;;;;;;;GAOG;AACI,IAAM,cAAc,GAAmB,UAAC,IAAI,EAAE,QAAQ;IACzD,IAAM,SAAS,GAAG,IAAA,2CAAa,EAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAA,GAAG;QAC7C,IAAA,KAAsC,QAAQ,CAAC,GAAG,CAAC,EAAjD,eAAe,qBAAA,EAAE,cAAc,oBAAkB,CAAC;QAC1D,IAAM,SAAS,GAAG,GAAgC,CAAC;QACnD,IAAM,OAAO,GAAG,UAAC,KAA4C;YACzD,IAAI,cAAc,EAAE;gBAChB,cAAc,CAAC,KAAK,CAAC,CAAC;aACzB;YAED,IAAI,eAAe,IAAI,IAAI,EAAE;gBACzB,IAAI,CAAC,GAAG,CAAC,YAAY,CACjB,IAAI,EACS;oBACT,SAAS,EAAE,eAAe;oBAC1B,QAAQ,EAAE,KAAK;iBAClB,EACD,KAAK,CAAC,aAAa,CACtB,CAAC;aACL;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAErD,OAAO;YACH,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC5D,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,OAAO,cAAM,OAAA,SAAS,CAAC,OAAO,CAAC,UAAA,SAAS,IAAI,OAAA,SAAS,EAAE,EAAX,CAAW,CAAC,EAA3C,CAA2C,CAAC;AAC7D,CAAC,CAAC;AA7BW,QAAA,cAAc,kBA6BzB","sourcesContent":["import { getObjectKeys } from 'roosterjs-content-model-dom';\nimport type { AttachDomEvent, PluginEvent } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Attach a DOM event to the editor content DIV\n * @param core The StandaloneEditorCore object\n * @param eventName The DOM event name\n * @param pluginEventType Optional event type. When specified, editor will trigger a plugin event with this name when the DOM event is triggered\n * @param beforeDispatch Optional callback function to be invoked when the DOM event is triggered before trigger plugin event\n */\nexport const attachDomEvent: AttachDomEvent = (core, eventMap) => {\n const disposers = getObjectKeys(eventMap || {}).map(key => {\n const { pluginEventType, beforeDispatch } = eventMap[key];\n const eventName = key as keyof HTMLElementEventMap;\n const onEvent = (event: HTMLElementEventMap[typeof eventName]) => {\n if (beforeDispatch) {\n beforeDispatch(event);\n }\n\n if (pluginEventType != null) {\n core.api.triggerEvent(\n core,\n <PluginEvent>{\n eventType: pluginEventType,\n rawEvent: event,\n },\n false /*broadcast*/\n );\n }\n };\n\n core.contentDiv.addEventListener(eventName, onEvent);\n\n return () => {\n core.contentDiv.removeEventListener(eventName, onEvent);\n };\n });\n\n return () => disposers.forEach(disposers => disposers());\n};\n"]}
1
+ {"version":3,"file":"attachDomEvent.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/attachDomEvent.ts"],"names":[],"mappings":";;;AAAA,2EAA4D;AAG5D;;;;;;;GAOG;AACI,IAAM,cAAc,GAAmB,UAAC,IAAI,EAAE,QAAQ;IACzD,IAAM,SAAS,GAAG,IAAA,2CAAa,EAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAA,GAAG;QAC7C,IAAA,KAAsC,QAAQ,CAAC,GAAG,CAAC,EAAjD,eAAe,qBAAA,EAAE,cAAc,oBAAkB,CAAC;QAC1D,IAAM,SAAS,GAAG,GAAgC,CAAC;QACnD,IAAM,OAAO,GAAG,UAAC,KAA4C;YACzD,IAAI,cAAc,EAAE;gBAChB,cAAc,CAAC,KAAK,CAAC,CAAC;aACzB;YAED,IAAI,eAAe,IAAI,IAAI,EAAE;gBACzB,IAAI,CAAC,GAAG,CAAC,YAAY,CACjB,IAAI,EACS;oBACT,SAAS,EAAE,eAAe;oBAC1B,QAAQ,EAAE,KAAK;iBAClB,EACD,KAAK,CAAC,aAAa,CACtB,CAAC;aACL;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEtD,OAAO;YACH,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC7D,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,OAAO,cAAM,OAAA,SAAS,CAAC,OAAO,CAAC,UAAA,SAAS,IAAI,OAAA,SAAS,EAAE,EAAX,CAAW,CAAC,EAA3C,CAA2C,CAAC;AAC7D,CAAC,CAAC;AA7BW,QAAA,cAAc,kBA6BzB","sourcesContent":["import { getObjectKeys } from 'roosterjs-content-model-dom';\nimport type { AttachDomEvent, PluginEvent } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Attach a DOM event to the editor content DIV\n * @param core The EditorCore object\n * @param eventName The DOM event name\n * @param pluginEventType Optional event type. When specified, editor will trigger a plugin event with this name when the DOM event is triggered\n * @param beforeDispatch Optional callback function to be invoked when the DOM event is triggered before trigger plugin event\n */\nexport const attachDomEvent: AttachDomEvent = (core, eventMap) => {\n const disposers = getObjectKeys(eventMap || {}).map(key => {\n const { pluginEventType, beforeDispatch } = eventMap[key];\n const eventName = key as keyof HTMLElementEventMap;\n const onEvent = (event: HTMLElementEventMap[typeof eventName]) => {\n if (beforeDispatch) {\n beforeDispatch(event);\n }\n\n if (pluginEventType != null) {\n core.api.triggerEvent(\n core,\n <PluginEvent>{\n eventType: pluginEventType,\n rawEvent: event,\n },\n false /*broadcast*/\n );\n }\n };\n\n core.logicalRoot.addEventListener(eventName, onEvent);\n\n return () => {\n core.logicalRoot.removeEventListener(eventName, onEvent);\n };\n });\n\n return () => disposers.forEach(disposers => disposers());\n};\n"]}
@@ -29,7 +29,7 @@ var createContentModel = function (core, option, selectionOverride) {
29
29
  var domToModelContext = option
30
30
  ? (0, roosterjs_content_model_dom_1.createDomToModelContext)(editorContext, core.domToModelSettings.builtIn, core.domToModelSettings.customized, option)
31
31
  : (0, roosterjs_content_model_dom_1.createDomToModelContextWithConfig)(core.domToModelSettings.calculated, editorContext);
32
- var model = (0, roosterjs_content_model_dom_1.domToContentModel)(core.contentDiv, domToModelContext, selection);
32
+ var model = (0, roosterjs_content_model_dom_1.domToContentModel)(core.logicalRoot, domToModelContext, selection);
33
33
  if (saveIndex) {
34
34
  core.cache.cachedModel = model;
35
35
  core.cache.cachedSelection = selection;
@@ -1 +1 @@
1
- {"version":3,"file":"createContentModel.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/createContentModel.ts"],"names":[],"mappings":";;;AAAA,4DAA2D;AAC3D,2EAIqC;AAGrC;;;;;;GAMG;AACI,IAAM,kBAAkB,GAAuB,UAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB;;IAClF,6EAA6E;IAC7E,MAAA,IAAI,CAAC,KAAK,CAAC,oBAAoB,0CAAE,cAAc,EAAE,CAAC;IAElD,IAAI,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;IAEpE,IAAI,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;QAClD,6EAA6E;QAC7E,WAAW,GAAG,IAAA,uBAAU,EAAC,WAAW,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;KACzE;IAED,IAAI,WAAW,EAAE;QACb,OAAO,WAAW,CAAC;KACtB;SAAM;QACH,IAAM,SAAS,GAAG,iBAAiB,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;QACnF,IAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC;QAChD,IAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACpE,IAAM,iBAAiB,GAAG,MAAM;YAC5B,CAAC,CAAC,IAAA,qDAAuB,EACnB,aAAa,EACb,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAC/B,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAClC,MAAM,CACT;YACH,CAAC,CAAC,IAAA,+DAAiC,EAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAE3F,IAAM,KAAK,GAAG,IAAA,+CAAiB,EAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;QAE/E,IAAI,SAAS,EAAE;YACX,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC;SAC1C;QAED,OAAO,KAAK,CAAC;KAChB;AACL,CAAC,CAAC;AAnCW,QAAA,kBAAkB,sBAmC7B","sourcesContent":["import { cloneModel } from '../publicApi/model/cloneModel';\nimport {\n createDomToModelContext,\n createDomToModelContextWithConfig,\n domToContentModel,\n} from 'roosterjs-content-model-dom';\nimport type { CreateContentModel } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Create Content Model from DOM tree in this editor\n * @param core The editor core object\n * @param option The option to customize the behavior of DOM to Content Model conversion\n * @param selectionOverride When passed, use this selection range instead of current selection in editor\n */\nexport const createContentModel: CreateContentModel = (core, option, selectionOverride) => {\n // Flush all mutations if any, so that we can get an up-to-date Content Model\n core.cache.textMutationObserver?.flushMutations();\n\n let cachedModel = selectionOverride ? null : core.cache.cachedModel;\n\n if (cachedModel && core.lifecycle.shadowEditFragment) {\n // When in shadow edit, use a cloned model so we won't pollute the cached one\n cachedModel = cloneModel(cachedModel, { includeCachedElement: true });\n }\n\n if (cachedModel) {\n return cachedModel;\n } else {\n const selection = selectionOverride || core.api.getDOMSelection(core) || undefined;\n const saveIndex = !option && !selectionOverride;\n const editorContext = core.api.createEditorContext(core, saveIndex);\n const domToModelContext = option\n ? createDomToModelContext(\n editorContext,\n core.domToModelSettings.builtIn,\n core.domToModelSettings.customized,\n option\n )\n : createDomToModelContextWithConfig(core.domToModelSettings.calculated, editorContext);\n\n const model = domToContentModel(core.contentDiv, domToModelContext, selection);\n\n if (saveIndex) {\n core.cache.cachedModel = model;\n core.cache.cachedSelection = selection;\n }\n\n return model;\n }\n};\n"]}
1
+ {"version":3,"file":"createContentModel.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/createContentModel.ts"],"names":[],"mappings":";;;AAAA,4DAA2D;AAC3D,2EAIqC;AAGrC;;;;;;GAMG;AACI,IAAM,kBAAkB,GAAuB,UAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB;;IAClF,6EAA6E;IAC7E,MAAA,IAAI,CAAC,KAAK,CAAC,oBAAoB,0CAAE,cAAc,EAAE,CAAC;IAElD,IAAI,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;IAEpE,IAAI,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;QAClD,6EAA6E;QAC7E,WAAW,GAAG,IAAA,uBAAU,EAAC,WAAW,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;KACzE;IAED,IAAI,WAAW,EAAE;QACb,OAAO,WAAW,CAAC;KACtB;SAAM;QACH,IAAM,SAAS,GAAG,iBAAiB,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;QACnF,IAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC;QAChD,IAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACpE,IAAM,iBAAiB,GAAG,MAAM;YAC5B,CAAC,CAAC,IAAA,qDAAuB,EACnB,aAAa,EACb,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAC/B,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAClC,MAAM,CACT;YACH,CAAC,CAAC,IAAA,+DAAiC,EAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAE3F,IAAM,KAAK,GAAG,IAAA,+CAAiB,EAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;QAEhF,IAAI,SAAS,EAAE;YACX,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC;SAC1C;QAED,OAAO,KAAK,CAAC;KAChB;AACL,CAAC,CAAC;AAnCW,QAAA,kBAAkB,sBAmC7B","sourcesContent":["import { cloneModel } from '../publicApi/model/cloneModel';\nimport {\n createDomToModelContext,\n createDomToModelContextWithConfig,\n domToContentModel,\n} from 'roosterjs-content-model-dom';\nimport type { CreateContentModel } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Create Content Model from DOM tree in this editor\n * @param core The editor core object\n * @param option The option to customize the behavior of DOM to Content Model conversion\n * @param selectionOverride When passed, use this selection range instead of current selection in editor\n */\nexport const createContentModel: CreateContentModel = (core, option, selectionOverride) => {\n // Flush all mutations if any, so that we can get an up-to-date Content Model\n core.cache.textMutationObserver?.flushMutations();\n\n let cachedModel = selectionOverride ? null : core.cache.cachedModel;\n\n if (cachedModel && core.lifecycle.shadowEditFragment) {\n // When in shadow edit, use a cloned model so we won't pollute the cached one\n cachedModel = cloneModel(cachedModel, { includeCachedElement: true });\n }\n\n if (cachedModel) {\n return cachedModel;\n } else {\n const selection = selectionOverride || core.api.getDOMSelection(core) || undefined;\n const saveIndex = !option && !selectionOverride;\n const editorContext = core.api.createEditorContext(core, saveIndex);\n const domToModelContext = option\n ? createDomToModelContext(\n editorContext,\n core.domToModelSettings.builtIn,\n core.domToModelSettings.customized,\n option\n )\n : createDomToModelContextWithConfig(core.domToModelSettings.calculated, editorContext);\n\n const model = domToContentModel(core.logicalRoot, domToModelContext, selection);\n\n if (saveIndex) {\n core.cache.cachedModel = model;\n core.cache.cachedSelection = selection;\n }\n\n return model;\n }\n};\n"]}
@@ -9,9 +9,9 @@ var getRootComputedStyleForContext_1 = require("../utils/getRootComputedStyleFor
9
9
  */
10
10
  var createEditorContext = function (core, saveIndex) {
11
11
  var _a;
12
- var lifecycle = core.lifecycle, format = core.format, darkColorHandler = core.darkColorHandler, contentDiv = core.contentDiv, cache = core.cache, domHelper = core.domHelper;
13
- var context = (0, tslib_1.__assign)({ isDarkMode: lifecycle.isDarkMode, defaultFormat: format.defaultFormat, pendingFormat: (_a = format.pendingFormat) !== null && _a !== void 0 ? _a : undefined, darkColorHandler: darkColorHandler, addDelimiterForEntity: true, allowCacheElement: true, domIndexer: saveIndex ? cache.domIndexer : undefined, zoomScale: domHelper.calculateZoomScale() }, (0, getRootComputedStyleForContext_1.getRootComputedStyleForContext)(contentDiv.ownerDocument));
14
- checkRootRtl(contentDiv, context);
12
+ var lifecycle = core.lifecycle, format = core.format, darkColorHandler = core.darkColorHandler, logicalRoot = core.logicalRoot, cache = core.cache, domHelper = core.domHelper;
13
+ var context = (0, tslib_1.__assign)({ isDarkMode: lifecycle.isDarkMode, defaultFormat: format.defaultFormat, pendingFormat: (_a = format.pendingFormat) !== null && _a !== void 0 ? _a : undefined, darkColorHandler: darkColorHandler, addDelimiterForEntity: true, allowCacheElement: true, domIndexer: saveIndex ? cache.domIndexer : undefined, zoomScale: domHelper.calculateZoomScale() }, (0, getRootComputedStyleForContext_1.getRootComputedStyleForContext)(logicalRoot.ownerDocument));
14
+ checkRootRtl(logicalRoot, context);
15
15
  return context;
16
16
  };
17
17
  exports.createEditorContext = createEditorContext;
@@ -1 +1 @@
1
- {"version":3,"file":"createEditorContext.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/createEditorContext.ts"],"names":[],"mappings":";;;;AAAA,0FAAyF;AAGzF;;;GAGG;AACI,IAAM,mBAAmB,GAAwB,UAAC,IAAI,EAAE,SAAS;;IAC5D,IAAA,SAAS,GAA6D,IAAI,UAAjE,EAAE,MAAM,GAAqD,IAAI,OAAzD,EAAE,gBAAgB,GAAmC,IAAI,iBAAvC,EAAE,UAAU,GAAuB,IAAI,WAA3B,EAAE,KAAK,GAAgB,IAAI,MAApB,EAAE,SAAS,GAAK,IAAI,UAAT,CAAU;IAEnF,IAAM,OAAO,2BACT,UAAU,EAAE,SAAS,CAAC,UAAU,EAChC,aAAa,EAAE,MAAM,CAAC,aAAa,EACnC,aAAa,EAAE,MAAA,MAAM,CAAC,aAAa,mCAAI,SAAS,EAChD,gBAAgB,EAAE,gBAAgB,EAClC,qBAAqB,EAAE,IAAI,EAC3B,iBAAiB,EAAE,IAAI,EACvB,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EACpD,SAAS,EAAE,SAAS,CAAC,kBAAkB,EAAE,IACtC,IAAA,+DAA8B,EAAC,UAAU,CAAC,aAAa,CAAC,CAC9D,CAAC;IAEF,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAElC,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAlBW,QAAA,mBAAmB,uBAkB9B;AAEF,SAAS,YAAY,CAAC,OAAoB,EAAE,OAAsB;;IAC9D,IAAM,KAAK,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CAAC,WAAW,0CAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAE5E,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,KAAI,KAAK,EAAE;QAC3B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;KAC5B;AACL,CAAC","sourcesContent":["import { getRootComputedStyleForContext } from '../utils/getRootComputedStyleForContext';\nimport type { EditorContext, CreateEditorContext } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Create a EditorContext object used by ContentModel API\n */\nexport const createEditorContext: CreateEditorContext = (core, saveIndex) => {\n const { lifecycle, format, darkColorHandler, contentDiv, cache, domHelper } = core;\n\n const context: EditorContext = {\n isDarkMode: lifecycle.isDarkMode,\n defaultFormat: format.defaultFormat,\n pendingFormat: format.pendingFormat ?? undefined,\n darkColorHandler: darkColorHandler,\n addDelimiterForEntity: true,\n allowCacheElement: true,\n domIndexer: saveIndex ? cache.domIndexer : undefined,\n zoomScale: domHelper.calculateZoomScale(),\n ...getRootComputedStyleForContext(contentDiv.ownerDocument),\n };\n\n checkRootRtl(contentDiv, context);\n\n return context;\n};\n\nfunction checkRootRtl(element: HTMLElement, context: EditorContext) {\n const style = element?.ownerDocument.defaultView?.getComputedStyle(element);\n\n if (style?.direction == 'rtl') {\n context.isRootRtl = true;\n }\n}\n"]}
1
+ {"version":3,"file":"createEditorContext.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/createEditorContext.ts"],"names":[],"mappings":";;;;AAAA,0FAAyF;AAGzF;;;GAGG;AACI,IAAM,mBAAmB,GAAwB,UAAC,IAAI,EAAE,SAAS;;IAC5D,IAAA,SAAS,GAA8D,IAAI,UAAlE,EAAE,MAAM,GAAsD,IAAI,OAA1D,EAAE,gBAAgB,GAAoC,IAAI,iBAAxC,EAAE,WAAW,GAAuB,IAAI,YAA3B,EAAE,KAAK,GAAgB,IAAI,MAApB,EAAE,SAAS,GAAK,IAAI,UAAT,CAAU;IAEpF,IAAM,OAAO,2BACT,UAAU,EAAE,SAAS,CAAC,UAAU,EAChC,aAAa,EAAE,MAAM,CAAC,aAAa,EACnC,aAAa,EAAE,MAAA,MAAM,CAAC,aAAa,mCAAI,SAAS,EAChD,gBAAgB,EAAE,gBAAgB,EAClC,qBAAqB,EAAE,IAAI,EAC3B,iBAAiB,EAAE,IAAI,EACvB,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EACpD,SAAS,EAAE,SAAS,CAAC,kBAAkB,EAAE,IACtC,IAAA,+DAA8B,EAAC,WAAW,CAAC,aAAa,CAAC,CAC/D,CAAC;IAEF,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAEnC,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAlBW,QAAA,mBAAmB,uBAkB9B;AAEF,SAAS,YAAY,CAAC,OAAoB,EAAE,OAAsB;;IAC9D,IAAM,KAAK,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CAAC,WAAW,0CAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAE5E,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,KAAI,KAAK,EAAE;QAC3B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;KAC5B;AACL,CAAC","sourcesContent":["import { getRootComputedStyleForContext } from '../utils/getRootComputedStyleForContext';\nimport type { EditorContext, CreateEditorContext } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Create a EditorContext object used by ContentModel API\n */\nexport const createEditorContext: CreateEditorContext = (core, saveIndex) => {\n const { lifecycle, format, darkColorHandler, logicalRoot, cache, domHelper } = core;\n\n const context: EditorContext = {\n isDarkMode: lifecycle.isDarkMode,\n defaultFormat: format.defaultFormat,\n pendingFormat: format.pendingFormat ?? undefined,\n darkColorHandler: darkColorHandler,\n addDelimiterForEntity: true,\n allowCacheElement: true,\n domIndexer: saveIndex ? cache.domIndexer : undefined,\n zoomScale: domHelper.calculateZoomScale(),\n ...getRootComputedStyleForContext(logicalRoot.ownerDocument),\n };\n\n checkRootRtl(logicalRoot, context);\n\n return context;\n};\n\nfunction checkRootRtl(element: HTMLElement, context: EditorContext) {\n const style = element?.ownerDocument.defaultView?.getComputedStyle(element);\n\n if (style?.direction == 'rtl') {\n context.isRootRtl = true;\n }\n}\n"]}
@@ -2,6 +2,6 @@ import type { Focus } from 'roosterjs-content-model-types';
2
2
  /**
3
3
  * @internal
4
4
  * Focus to editor. If there is a cached selection range, use it as current selection
5
- * @param core The StandaloneEditorCore object
5
+ * @param core The EditorCore object
6
6
  */
7
7
  export declare const focus: Focus;
@@ -4,7 +4,7 @@ exports.focus = void 0;
4
4
  /**
5
5
  * @internal
6
6
  * Focus to editor. If there is a cached selection range, use it as current selection
7
- * @param core The StandaloneEditorCore object
7
+ * @param core The EditorCore object
8
8
  */
9
9
  var focus = function (core) {
10
10
  var _a;
@@ -15,7 +15,7 @@ var focus = function (core) {
15
15
  }
16
16
  // fallback, in case editor still have no focus
17
17
  if (!core.api.hasFocus(core)) {
18
- core.contentDiv.focus();
18
+ core.logicalRoot.focus();
19
19
  }
20
20
  }
21
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"focus.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/focus.ts"],"names":[],"mappings":";;;AAEA;;;;GAIG;AACI,IAAM,KAAK,GAAU,UAAA,IAAI;;IAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;QAC5B,IAAA,GAAG,GAAgB,IAAI,IAApB,EAAE,SAAS,GAAK,IAAI,UAAT,CAAU;QAEhC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAA,MAAA,SAAS,CAAC,SAAS,0CAAE,IAAI,KAAI,OAAO,EAAE;YAC7D,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;SACtF;QAED,+CAA+C;QAC/C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAC1B,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;SAC3B;KACJ;AACL,CAAC,CAAC;AAbW,QAAA,KAAK,SAahB","sourcesContent":["import type { Focus } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Focus to editor. If there is a cached selection range, use it as current selection\n * @param core The StandaloneEditorCore object\n */\nexport const focus: Focus = core => {\n if (!core.lifecycle.shadowEditFragment) {\n const { api, selection } = core;\n\n if (!api.hasFocus(core) && selection.selection?.type == 'range') {\n api.setDOMSelection(core, selection.selection, true /*skipSelectionChangedEvent*/);\n }\n\n // fallback, in case editor still have no focus\n if (!core.api.hasFocus(core)) {\n core.contentDiv.focus();\n }\n }\n};\n"]}
1
+ {"version":3,"file":"focus.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/focus.ts"],"names":[],"mappings":";;;AAEA;;;;GAIG;AACI,IAAM,KAAK,GAAU,UAAA,IAAI;;IAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;QAC5B,IAAA,GAAG,GAAgB,IAAI,IAApB,EAAE,SAAS,GAAK,IAAI,UAAT,CAAU;QAEhC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAA,MAAA,SAAS,CAAC,SAAS,0CAAE,IAAI,KAAI,OAAO,EAAE;YAC7D,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;SACtF;QAED,+CAA+C;QAC/C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAC1B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;SAC5B;KACJ;AACL,CAAC,CAAC;AAbW,QAAA,KAAK,SAahB","sourcesContent":["import type { Focus } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Focus to editor. If there is a cached selection range, use it as current selection\n * @param core The EditorCore object\n */\nexport const focus: Focus = core => {\n if (!core.lifecycle.shadowEditFragment) {\n const { api, selection } = core;\n\n if (!api.hasFocus(core) && selection.selection?.type == 'range') {\n api.setDOMSelection(core, selection.selection, true /*skipSelectionChangedEvent*/);\n }\n\n // fallback, in case editor still have no focus\n if (!core.api.hasFocus(core)) {\n core.logicalRoot.focus();\n }\n }\n};\n"]}
@@ -5,7 +5,7 @@ import type { FormatContentModel } from 'roosterjs-content-model-types';
5
5
  * It will grab a Content Model for current editor content, and invoke a callback function
6
6
  * to do format change. Then according to the return value, write back the modified content model into editor.
7
7
  * If there is cached model, it will be used and updated.
8
- * @param core The StandaloneEditorCore object
8
+ * @param core The EditorCore object
9
9
  * @param formatter Formatter function, see ContentModelFormatter
10
10
  * @param options More options, see FormatContentModelOptions
11
11
  */
@@ -9,7 +9,7 @@ var ChangeSource_1 = require("../constants/ChangeSource");
9
9
  * It will grab a Content Model for current editor content, and invoke a callback function
10
10
  * to do format change. Then according to the return value, write back the modified content model into editor.
11
11
  * If there is cached model, it will be used and updated.
12
- * @param core The StandaloneEditorCore object
12
+ * @param core The EditorCore object
13
13
  * @param formatter Formatter function, see ContentModelFormatter
14
14
  * @param options More options, see FormatContentModelOptions
15
15
  */
@@ -32,9 +32,7 @@ var formatContentModel = function (core, formatter, options) {
32
32
  var selection = void 0;
33
33
  if (shouldAddSnapshot) {
34
34
  core.undo.isNested = true;
35
- if (core.undo.snapshotsManager.hasNewContent || entityStates) {
36
- core.api.addUndoSnapshot(core, !!canUndoByBackspace);
37
- }
35
+ core.api.addUndoSnapshot(core, !!canUndoByBackspace, entityStates);
38
36
  }
39
37
  try {
40
38
  handleImages(core, context);
@@ -1 +1 @@
1
- {"version":3,"file":"formatContentModel.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/formatContentModel.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChangeSource } from '../constants/ChangeSource';\nimport type {\n ChangedEntity,\n ContentChangedEvent,\n DOMSelection,\n FormatContentModel,\n FormatContentModelContext,\n StandaloneEditorCore,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * The general API to do format change with Content Model\n * It will grab a Content Model for current editor content, and invoke a callback function\n * to do format change. Then according to the return value, write back the modified content model into editor.\n * If there is cached model, it will be used and updated.\n * @param core The StandaloneEditorCore object\n * @param formatter Formatter function, see ContentModelFormatter\n * @param options More options, see FormatContentModelOptions\n */\nexport const formatContentModel: FormatContentModel = (core, formatter, options) => {\n const { apiName, onNodeCreated, getChangeData, changeSource, rawEvent, selectionOverride } =\n options || {};\n const model = core.api.createContentModel(core, undefined /*option*/, selectionOverride);\n const context: FormatContentModelContext = {\n newEntities: [],\n deletedEntities: [],\n rawEvent,\n newImages: [],\n };\n\n const hasFocus = core.api.hasFocus(core);\n\n const changed = formatter(model, context);\n const { skipUndoSnapshot, clearModelCache, entityStates, canUndoByBackspace } = context;\n\n if (changed) {\n const isNested = core.undo.isNested;\n const shouldAddSnapshot = !skipUndoSnapshot && !isNested;\n let selection: DOMSelection | undefined;\n\n if (shouldAddSnapshot) {\n core.undo.isNested = true;\n\n if (core.undo.snapshotsManager.hasNewContent || entityStates) {\n core.api.addUndoSnapshot(core, !!canUndoByBackspace);\n }\n }\n\n try {\n handleImages(core, context);\n\n selection =\n core.api.setContentModel(\n core,\n model,\n hasFocus ? undefined : { ignoreSelection: true }, // If editor did not have focus before format, do not set focus after format\n onNodeCreated\n ) ?? undefined;\n\n handlePendingFormat(core, context, selection);\n\n const eventData: ContentChangedEvent = {\n eventType: 'contentChanged',\n contentModel: clearModelCache ? undefined : model,\n selection: clearModelCache ? undefined : selection,\n source: changeSource || ChangeSource.Format,\n data: getChangeData?.(),\n formatApiName: apiName,\n changedEntities: getChangedEntities(context, rawEvent),\n };\n\n core.api.triggerEvent(core, eventData, true /*broadcast*/);\n\n if (canUndoByBackspace && selection?.type == 'range') {\n core.undo.posContainer = selection.range.startContainer;\n core.undo.posOffset = selection.range.startOffset;\n }\n\n if (shouldAddSnapshot) {\n core.api.addUndoSnapshot(core, !!canUndoByBackspace, entityStates);\n } else {\n core.undo.snapshotsManager.hasNewContent = true;\n }\n } finally {\n if (!isNested) {\n core.undo.isNested = false;\n }\n }\n } else {\n if (clearModelCache) {\n core.cache.cachedModel = undefined;\n core.cache.cachedSelection = undefined;\n }\n\n handlePendingFormat(core, context, core.api.getDOMSelection(core));\n }\n};\n\nfunction handleImages(core: StandaloneEditorCore, context: FormatContentModelContext) {\n if (context.newImages.length > 0) {\n const viewport = core.api.getVisibleViewport(core);\n\n if (viewport) {\n const { left, right } = viewport;\n const minMaxImageSize = 10;\n const maxWidth = Math.max(right - left, minMaxImageSize);\n context.newImages.forEach(image => {\n image.format.maxWidth = `${maxWidth}px`;\n });\n }\n }\n}\n\nfunction handlePendingFormat(\n core: StandaloneEditorCore,\n context: FormatContentModelContext,\n selection?: DOMSelection | null\n) {\n const pendingFormat =\n context.newPendingFormat == 'preserve'\n ? core.format.pendingFormat?.format\n : context.newPendingFormat;\n\n if (pendingFormat && selection?.type == 'range' && selection.range.collapsed) {\n core.format.pendingFormat = {\n format: { ...pendingFormat },\n posContainer: selection.range.startContainer,\n posOffset: selection.range.startOffset,\n };\n }\n}\n\nfunction getChangedEntities(context: FormatContentModelContext, rawEvent?: Event): ChangedEntity[] {\n return context.newEntities\n .map(\n (entity): ChangedEntity => ({\n entity,\n operation: 'newEntity',\n rawEvent,\n })\n )\n .concat(\n context.deletedEntities.map(entry => ({\n entity: entry.entity,\n operation: entry.operation,\n rawEvent,\n }))\n );\n}\n"]}
1
+ {"version":3,"file":"formatContentModel.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/formatContentModel.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChangeSource } from '../constants/ChangeSource';\nimport type {\n ChangedEntity,\n ContentChangedEvent,\n DOMSelection,\n FormatContentModel,\n FormatContentModelContext,\n EditorCore,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * The general API to do format change with Content Model\n * It will grab a Content Model for current editor content, and invoke a callback function\n * to do format change. Then according to the return value, write back the modified content model into editor.\n * If there is cached model, it will be used and updated.\n * @param core The EditorCore object\n * @param formatter Formatter function, see ContentModelFormatter\n * @param options More options, see FormatContentModelOptions\n */\nexport const formatContentModel: FormatContentModel = (core, formatter, options) => {\n const { apiName, onNodeCreated, getChangeData, changeSource, rawEvent, selectionOverride } =\n options || {};\n const model = core.api.createContentModel(core, undefined /*option*/, selectionOverride);\n const context: FormatContentModelContext = {\n newEntities: [],\n deletedEntities: [],\n rawEvent,\n newImages: [],\n };\n\n const hasFocus = core.api.hasFocus(core);\n\n const changed = formatter(model, context);\n const { skipUndoSnapshot, clearModelCache, entityStates, canUndoByBackspace } = context;\n\n if (changed) {\n const isNested = core.undo.isNested;\n const shouldAddSnapshot = !skipUndoSnapshot && !isNested;\n let selection: DOMSelection | undefined;\n\n if (shouldAddSnapshot) {\n core.undo.isNested = true;\n\n core.api.addUndoSnapshot(core, !!canUndoByBackspace, entityStates);\n }\n\n try {\n handleImages(core, context);\n\n selection =\n core.api.setContentModel(\n core,\n model,\n hasFocus ? undefined : { ignoreSelection: true }, // If editor did not have focus before format, do not set focus after format\n onNodeCreated\n ) ?? undefined;\n\n handlePendingFormat(core, context, selection);\n\n const eventData: ContentChangedEvent = {\n eventType: 'contentChanged',\n contentModel: clearModelCache ? undefined : model,\n selection: clearModelCache ? undefined : selection,\n source: changeSource || ChangeSource.Format,\n data: getChangeData?.(),\n formatApiName: apiName,\n changedEntities: getChangedEntities(context, rawEvent),\n };\n\n core.api.triggerEvent(core, eventData, true /*broadcast*/);\n\n if (canUndoByBackspace && selection?.type == 'range') {\n core.undo.posContainer = selection.range.startContainer;\n core.undo.posOffset = selection.range.startOffset;\n }\n\n if (shouldAddSnapshot) {\n core.api.addUndoSnapshot(core, !!canUndoByBackspace, entityStates);\n } else {\n core.undo.snapshotsManager.hasNewContent = true;\n }\n } finally {\n if (!isNested) {\n core.undo.isNested = false;\n }\n }\n } else {\n if (clearModelCache) {\n core.cache.cachedModel = undefined;\n core.cache.cachedSelection = undefined;\n }\n\n handlePendingFormat(core, context, core.api.getDOMSelection(core));\n }\n};\n\nfunction handleImages(core: EditorCore, context: FormatContentModelContext) {\n if (context.newImages.length > 0) {\n const viewport = core.api.getVisibleViewport(core);\n\n if (viewport) {\n const { left, right } = viewport;\n const minMaxImageSize = 10;\n const maxWidth = Math.max(right - left, minMaxImageSize);\n context.newImages.forEach(image => {\n image.format.maxWidth = `${maxWidth}px`;\n });\n }\n }\n}\n\nfunction handlePendingFormat(\n core: EditorCore,\n context: FormatContentModelContext,\n selection?: DOMSelection | null\n) {\n const pendingFormat =\n context.newPendingFormat == 'preserve'\n ? core.format.pendingFormat?.format\n : context.newPendingFormat;\n\n if (pendingFormat && selection?.type == 'range' && selection.range.collapsed) {\n core.format.pendingFormat = {\n format: { ...pendingFormat },\n posContainer: selection.range.startContainer,\n posOffset: selection.range.startOffset,\n };\n }\n}\n\nfunction getChangedEntities(context: FormatContentModelContext, rawEvent?: Event): ChangedEntity[] {\n return context.newEntities\n .map(\n (entity): ChangedEntity => ({\n entity,\n operation: 'newEntity',\n rawEvent,\n })\n )\n .concat(\n context.deletedEntities.map(entry => ({\n entity: entry.entity,\n operation: entry.operation,\n rawEvent,\n }))\n );\n}\n"]}
@@ -18,9 +18,9 @@ var getDOMSelection = function (core) {
18
18
  exports.getDOMSelection = getDOMSelection;
19
19
  function getNewSelection(core) {
20
20
  var _a;
21
- var selection = (_a = core.contentDiv.ownerDocument.defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();
21
+ var selection = (_a = core.logicalRoot.ownerDocument.defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();
22
22
  var range = selection && selection.rangeCount > 0 ? selection.getRangeAt(0) : null;
23
- return range && core.contentDiv.contains(range.commonAncestorContainer)
23
+ return range && core.logicalRoot.contains(range.commonAncestorContainer)
24
24
  ? {
25
25
  type: 'range',
26
26
  range: range,
@@ -1 +1 @@
1
- {"version":3,"file":"getDOMSelection.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/getDOMSelection.ts"],"names":[],"mappings":";;;AAMA;;GAEG;AACI,IAAM,eAAe,GAAoB,UAAA,IAAI;IAChD,IAAI,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;QACnC,OAAO,IAAI,CAAC;KACf;SAAM;QACH,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QAE3C,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACvE,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KAC/B;AACL,CAAC,CAAC;AAVW,QAAA,eAAe,mBAU1B;AAEF,SAAS,eAAe,CAAC,IAA0B;;IAC/C,IAAM,SAAS,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,0CAAE,YAAY,EAAE,CAAC;IAC5E,IAAM,KAAK,GAAG,SAAS,IAAI,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAErF,OAAO,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,uBAAuB,CAAC;QACnE,CAAC,CAAC;YACI,IAAI,EAAE,OAAO;YACb,KAAK,OAAA;YACL,UAAU,EAAE,mBAAmB,CAAC,SAAS,CAAC;SAC7C;QACH,CAAC,CAAC,IAAI,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,SAAuC;IAChE,IAAI,SAAS,IAAI,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE;QACvC,IAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtC,OAAO,CACH,CAAC,KAAK,CAAC,SAAS;YAChB,SAAS,CAAC,SAAS,IAAI,KAAK,CAAC,YAAY;YACzC,SAAS,CAAC,WAAW,IAAI,KAAK,CAAC,SAAS,CAC3C,CAAC;KACL;IAED,OAAO,KAAK,CAAC;AACjB,CAAC","sourcesContent":["import type {\n DOMSelection,\n GetDOMSelection,\n StandaloneEditorCore,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const getDOMSelection: GetDOMSelection = core => {\n if (core.lifecycle.shadowEditFragment) {\n return null;\n } else {\n const selection = core.selection.selection;\n\n return selection && (selection.type != 'range' || !core.api.hasFocus(core))\n ? selection\n : getNewSelection(core);\n }\n};\n\nfunction getNewSelection(core: StandaloneEditorCore): DOMSelection | null {\n const selection = core.contentDiv.ownerDocument.defaultView?.getSelection();\n const range = selection && selection.rangeCount > 0 ? selection.getRangeAt(0) : null;\n\n return range && core.contentDiv.contains(range.commonAncestorContainer)\n ? {\n type: 'range',\n range,\n isReverted: isSelectionReverted(selection),\n }\n : null;\n}\n\nfunction isSelectionReverted(selection: Selection | null | undefined): boolean {\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n return (\n !range.collapsed &&\n selection.focusNode != range.endContainer &&\n selection.focusOffset != range.endOffset\n );\n }\n\n return false;\n}\n"]}
1
+ {"version":3,"file":"getDOMSelection.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/getDOMSelection.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACI,IAAM,eAAe,GAAoB,UAAA,IAAI;IAChD,IAAI,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;QACnC,OAAO,IAAI,CAAC;KACf;SAAM;QACH,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QAE3C,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACvE,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KAC/B;AACL,CAAC,CAAC;AAVW,QAAA,eAAe,mBAU1B;AAEF,SAAS,eAAe,CAAC,IAAgB;;IACrC,IAAM,SAAS,GAAG,MAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,0CAAE,YAAY,EAAE,CAAC;IAC7E,IAAM,KAAK,GAAG,SAAS,IAAI,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAErF,OAAO,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,uBAAuB,CAAC;QACpE,CAAC,CAAC;YACI,IAAI,EAAE,OAAO;YACb,KAAK,OAAA;YACL,UAAU,EAAE,mBAAmB,CAAC,SAAS,CAAC;SAC7C;QACH,CAAC,CAAC,IAAI,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,SAAuC;IAChE,IAAI,SAAS,IAAI,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE;QACvC,IAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtC,OAAO,CACH,CAAC,KAAK,CAAC,SAAS;YAChB,SAAS,CAAC,SAAS,IAAI,KAAK,CAAC,YAAY;YACzC,SAAS,CAAC,WAAW,IAAI,KAAK,CAAC,SAAS,CAC3C,CAAC;KACL;IAED,OAAO,KAAK,CAAC;AACjB,CAAC","sourcesContent":["import type { DOMSelection, GetDOMSelection, EditorCore } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const getDOMSelection: GetDOMSelection = core => {\n if (core.lifecycle.shadowEditFragment) {\n return null;\n } else {\n const selection = core.selection.selection;\n\n return selection && (selection.type != 'range' || !core.api.hasFocus(core))\n ? selection\n : getNewSelection(core);\n }\n};\n\nfunction getNewSelection(core: EditorCore): DOMSelection | null {\n const selection = core.logicalRoot.ownerDocument.defaultView?.getSelection();\n const range = selection && selection.rangeCount > 0 ? selection.getRangeAt(0) : null;\n\n return range && core.logicalRoot.contains(range.commonAncestorContainer)\n ? {\n type: 'range',\n range,\n isReverted: isSelectionReverted(selection),\n }\n : null;\n}\n\nfunction isSelectionReverted(selection: Selection | null | undefined): boolean {\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n return (\n !range.collapsed &&\n selection.focusNode != range.endContainer &&\n selection.focusOffset != range.endOffset\n );\n }\n\n return false;\n}\n"]}
@@ -2,6 +2,6 @@ import type { GetVisibleViewport } from 'roosterjs-content-model-types';
2
2
  /**
3
3
  * @internal
4
4
  * Retrieves the rect of the visible viewport of the editor.
5
- * @param core The StandaloneEditorCore object
5
+ * @param core The EditorCore object
6
6
  */
7
7
  export declare const getVisibleViewport: GetVisibleViewport;
@@ -5,11 +5,13 @@ var tslib_1 = require("tslib");
5
5
  /**
6
6
  * @internal
7
7
  * Retrieves the rect of the visible viewport of the editor.
8
- * @param core The StandaloneEditorCore object
8
+ * @param core The EditorCore object
9
9
  */
10
10
  var getVisibleViewport = function (core) {
11
11
  var scrollContainer = core.domEvent.scrollContainer;
12
- return getIntersectedRect(scrollContainer == core.contentDiv ? [scrollContainer] : [scrollContainer, core.contentDiv]);
12
+ return getIntersectedRect(scrollContainer == core.physicalRoot
13
+ ? [scrollContainer]
14
+ : [scrollContainer, core.physicalRoot]);
13
15
  };
14
16
  exports.getVisibleViewport = getVisibleViewport;
15
17
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"getVisibleViewport.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/getVisibleViewport.ts"],"names":[],"mappings":";;;;AAEA;;;;GAIG;AACI,IAAM,kBAAkB,GAAuB,UAAA,IAAI;IACtD,IAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;IAEtD,OAAO,kBAAkB,CACrB,eAAe,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,CAC9F,CAAC;AACN,CAAC,CAAC;AANW,QAAA,kBAAkB,sBAM7B;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,SAAS,kBAAkB,CAAC,QAAuB,EAAE,eAA4B;IAA5B,gCAAA,EAAA,oBAA4B;IAC7E,IAAM,KAAK,GAAG,QAAQ;SACjB,GAAG,CAAC,UAAA,OAAO,IAAI,OAAA,aAAa,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,EAA9C,CAA8C,CAAC;SAC9D,MAAM,CAAC,eAAe,CAAC;SACvB,MAAM,CAAC,UAAC,IAAiB,IAAmB,OAAA,CAAC,CAAC,IAAI,EAAN,CAAM,CAAC,CAAC;IAEzD,IAAM,MAAM,GAAS;QACjB,GAAG,EAAE,IAAI,CAAC,GAAG,OAAR,IAAI,qDAAQ,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,GAAG,EAAL,CAAK,CAAC,UAAC;QACvC,MAAM,EAAE,IAAI,CAAC,GAAG,OAAR,IAAI,qDAAQ,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,EAAR,CAAQ,CAAC,UAAC;QAC7C,IAAI,EAAE,IAAI,CAAC,GAAG,OAAR,IAAI,qDAAQ,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,EAAN,CAAM,CAAC,UAAC;QACzC,KAAK,EAAE,IAAI,CAAC,GAAG,OAAR,IAAI,qDAAQ,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,EAAP,CAAO,CAAC,UAAC;KAC9C,CAAC;IAEF,OAAO,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACpF,CAAC;AAED,SAAS,aAAa,CAAC,UAAmB;IAChC,IAAA,KACF,UAAU,IAAa,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAD3D,IAAI,UAAA,EAAE,KAAK,WAAA,EAAE,GAAG,SAAA,EAAE,MAAM,YACmC,CAAC;IACpE,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC;QACzD,CAAC,CAAC,IAAI;QACN,CAAC,CAAC;YACI,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACtB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YACxB,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACpB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;SAC7B,CAAC;AACZ,CAAC","sourcesContent":["import type { GetVisibleViewport, Rect } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Retrieves the rect of the visible viewport of the editor.\n * @param core The StandaloneEditorCore object\n */\nexport const getVisibleViewport: GetVisibleViewport = core => {\n const scrollContainer = core.domEvent.scrollContainer;\n\n return getIntersectedRect(\n scrollContainer == core.contentDiv ? [scrollContainer] : [scrollContainer, core.contentDiv]\n );\n};\n\n/**\n * Get the intersected Rect of elements provided\n *\n * @example\n * The result of the following Elements Rects would be:\n {\n top: Element2.top,\n bottom: Element1.bottom,\n left: Element2.left,\n right: Element2.right\n }\n +-------------------------+\n | Element 1 |\n | +-----------------+ |\n | | Element2 | |\n | | | |\n | | | |\n +-------------------------+\n | |\n +-----------------+\n\n * @param elements Elements to use.\n * @param additionalRects additional rects to use\n * @returns If the Rect is valid return the rect, if not, return null.\n */\nfunction getIntersectedRect(elements: HTMLElement[], additionalRects: Rect[] = []): Rect | null {\n const rects = elements\n .map(element => normalizeRect(element.getBoundingClientRect()))\n .concat(additionalRects)\n .filter((rect: Rect | null): rect is Rect => !!rect);\n\n const result: Rect = {\n top: Math.max(...rects.map(r => r.top)),\n bottom: Math.min(...rects.map(r => r.bottom)),\n left: Math.max(...rects.map(r => r.left)),\n right: Math.min(...rects.map(r => r.right)),\n };\n\n return result.top < result.bottom && result.left < result.right ? result : null;\n}\n\nfunction normalizeRect(clientRect: DOMRect): Rect | null {\n const { left, right, top, bottom } =\n clientRect || <DOMRect>{ left: 0, right: 0, top: 0, bottom: 0 };\n return left === 0 && right === 0 && top === 0 && bottom === 0\n ? null\n : {\n left: Math.round(left),\n right: Math.round(right),\n top: Math.round(top),\n bottom: Math.round(bottom),\n };\n}\n"]}
1
+ {"version":3,"file":"getVisibleViewport.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/getVisibleViewport.ts"],"names":[],"mappings":";;;;AAEA;;;;GAIG;AACI,IAAM,kBAAkB,GAAuB,UAAA,IAAI;IACtD,IAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;IAEtD,OAAO,kBAAkB,CACrB,eAAe,IAAI,IAAI,CAAC,YAAY;QAChC,CAAC,CAAC,CAAC,eAAe,CAAC;QACnB,CAAC,CAAC,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAC7C,CAAC;AACN,CAAC,CAAC;AARW,QAAA,kBAAkB,sBAQ7B;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,SAAS,kBAAkB,CAAC,QAAuB,EAAE,eAA4B;IAA5B,gCAAA,EAAA,oBAA4B;IAC7E,IAAM,KAAK,GAAG,QAAQ;SACjB,GAAG,CAAC,UAAA,OAAO,IAAI,OAAA,aAAa,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,EAA9C,CAA8C,CAAC;SAC9D,MAAM,CAAC,eAAe,CAAC;SACvB,MAAM,CAAC,UAAC,IAAiB,IAAmB,OAAA,CAAC,CAAC,IAAI,EAAN,CAAM,CAAC,CAAC;IAEzD,IAAM,MAAM,GAAS;QACjB,GAAG,EAAE,IAAI,CAAC,GAAG,OAAR,IAAI,qDAAQ,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,GAAG,EAAL,CAAK,CAAC,UAAC;QACvC,MAAM,EAAE,IAAI,CAAC,GAAG,OAAR,IAAI,qDAAQ,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,EAAR,CAAQ,CAAC,UAAC;QAC7C,IAAI,EAAE,IAAI,CAAC,GAAG,OAAR,IAAI,qDAAQ,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,EAAN,CAAM,CAAC,UAAC;QACzC,KAAK,EAAE,IAAI,CAAC,GAAG,OAAR,IAAI,qDAAQ,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,EAAP,CAAO,CAAC,UAAC;KAC9C,CAAC;IAEF,OAAO,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACpF,CAAC;AAED,SAAS,aAAa,CAAC,UAAmB;IAChC,IAAA,KACF,UAAU,IAAa,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAD3D,IAAI,UAAA,EAAE,KAAK,WAAA,EAAE,GAAG,SAAA,EAAE,MAAM,YACmC,CAAC;IACpE,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC;QACzD,CAAC,CAAC,IAAI;QACN,CAAC,CAAC;YACI,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACtB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YACxB,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACpB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;SAC7B,CAAC;AACZ,CAAC","sourcesContent":["import type { GetVisibleViewport, Rect } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Retrieves the rect of the visible viewport of the editor.\n * @param core The EditorCore object\n */\nexport const getVisibleViewport: GetVisibleViewport = core => {\n const scrollContainer = core.domEvent.scrollContainer;\n\n return getIntersectedRect(\n scrollContainer == core.physicalRoot\n ? [scrollContainer]\n : [scrollContainer, core.physicalRoot]\n );\n};\n\n/**\n * Get the intersected Rect of elements provided\n *\n * @example\n * The result of the following Elements Rects would be:\n {\n top: Element2.top,\n bottom: Element1.bottom,\n left: Element2.left,\n right: Element2.right\n }\n +-------------------------+\n | Element 1 |\n | +-----------------+ |\n | | Element2 | |\n | | | |\n | | | |\n +-------------------------+\n | |\n +-----------------+\n\n * @param elements Elements to use.\n * @param additionalRects additional rects to use\n * @returns If the Rect is valid return the rect, if not, return null.\n */\nfunction getIntersectedRect(elements: HTMLElement[], additionalRects: Rect[] = []): Rect | null {\n const rects = elements\n .map(element => normalizeRect(element.getBoundingClientRect()))\n .concat(additionalRects)\n .filter((rect: Rect | null): rect is Rect => !!rect);\n\n const result: Rect = {\n top: Math.max(...rects.map(r => r.top)),\n bottom: Math.min(...rects.map(r => r.bottom)),\n left: Math.max(...rects.map(r => r.left)),\n right: Math.min(...rects.map(r => r.right)),\n };\n\n return result.top < result.bottom && result.left < result.right ? result : null;\n}\n\nfunction normalizeRect(clientRect: DOMRect): Rect | null {\n const { left, right, top, bottom } =\n clientRect || <DOMRect>{ left: 0, right: 0, top: 0, bottom: 0 };\n return left === 0 && right === 0 && top === 0 && bottom === 0\n ? null\n : {\n left: Math.round(left),\n right: Math.round(right),\n top: Math.round(top),\n bottom: Math.round(bottom),\n };\n}\n"]}
@@ -2,7 +2,7 @@ import type { HasFocus } from 'roosterjs-content-model-types';
2
2
  /**
3
3
  * @internal
4
4
  * Check if the editor has focus now
5
- * @param core The StandaloneEditorCore object
5
+ * @param core The EditorCore object
6
6
  * @returns True if the editor has focus, otherwise false
7
7
  */
8
8
  export declare const hasFocus: HasFocus;
@@ -4,12 +4,12 @@ exports.hasFocus = void 0;
4
4
  /**
5
5
  * @internal
6
6
  * Check if the editor has focus now
7
- * @param core The StandaloneEditorCore object
7
+ * @param core The EditorCore object
8
8
  * @returns True if the editor has focus, otherwise false
9
9
  */
10
10
  var hasFocus = function (core) {
11
- var activeElement = core.contentDiv.ownerDocument.activeElement;
12
- return !!(activeElement && core.contentDiv.contains(activeElement));
11
+ var activeElement = core.logicalRoot.ownerDocument.activeElement;
12
+ return !!(activeElement && core.logicalRoot.contains(activeElement));
13
13
  };
14
14
  exports.hasFocus = hasFocus;
15
15
  //# sourceMappingURL=hasFocus.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hasFocus.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/hasFocus.ts"],"names":[],"mappings":";;;AAEA;;;;;GAKG;AACI,IAAM,QAAQ,GAAa,UAAA,IAAI;IAClC,IAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC;IAClE,OAAO,CAAC,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;AACxE,CAAC,CAAC;AAHW,QAAA,QAAQ,YAGnB","sourcesContent":["import type { HasFocus } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Check if the editor has focus now\n * @param core The StandaloneEditorCore object\n * @returns True if the editor has focus, otherwise false\n */\nexport const hasFocus: HasFocus = core => {\n const activeElement = core.contentDiv.ownerDocument.activeElement;\n return !!(activeElement && core.contentDiv.contains(activeElement));\n};\n"]}
1
+ {"version":3,"file":"hasFocus.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/hasFocus.ts"],"names":[],"mappings":";;;AAEA;;;;;GAKG;AACI,IAAM,QAAQ,GAAa,UAAA,IAAI;IAClC,IAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC;IACnE,OAAO,CAAC,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;AACzE,CAAC,CAAC;AAHW,QAAA,QAAQ,YAGnB","sourcesContent":["import type { HasFocus } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Check if the editor has focus now\n * @param core The EditorCore object\n * @returns True if the editor has focus, otherwise false\n */\nexport const hasFocus: HasFocus = core => {\n const activeElement = core.logicalRoot.ownerDocument.activeElement;\n return !!(activeElement && core.logicalRoot.contains(activeElement));\n};\n"]}
@@ -2,7 +2,7 @@ import type { Paste } from 'roosterjs-content-model-types';
2
2
  /**
3
3
  * @internal
4
4
  * Paste into editor using a clipboardData object
5
- * @param core The StandaloneEditorCore object.
5
+ * @param core The EditorCore object.
6
6
  * @param clipboardData Clipboard data retrieved from clipboard
7
7
  * @param pasteType Type of content to paste. @default normal
8
8
  */
@@ -13,7 +13,7 @@ var CloneOption = {
13
13
  /**
14
14
  * @internal
15
15
  * Paste into editor using a clipboardData object
16
- * @param core The StandaloneEditorCore object.
16
+ * @param core The EditorCore object.
17
17
  * @param clipboardData Clipboard data retrieved from clipboard
18
18
  * @param pasteType Type of content to paste. @default normal
19
19
  */
@@ -32,7 +32,7 @@ var paste = function (core, clipboardData, pasteType) {
32
32
  // 2. Handle HTML from clipboard
33
33
  var htmlFromClipboard = (0, retrieveHtmlInfo_1.retrieveHtmlInfo)(doc, clipboardData);
34
34
  // 3. Create target fragment
35
- var sourceFragment = (0, createPasteFragment_1.createPasteFragment)(core.contentDiv.ownerDocument, clipboardData, pasteType, (_a = (clipboardData.rawHtml == clipboardData.html
35
+ var sourceFragment = (0, createPasteFragment_1.createPasteFragment)(core.physicalRoot.ownerDocument, clipboardData, pasteType, (_a = (clipboardData.rawHtml == clipboardData.html
36
36
  ? doc
37
37
  : createDOMFromHtml(clipboardData.html, core.trustedHTMLHandler))) === null || _a === void 0 ? void 0 : _a.body);
38
38
  // 4. Trigger BeforePaste event to allow plugins modify the fragment
@@ -1 +1 @@
1
- {"version":3,"file":"paste.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/paste.ts"],"names":[],"mappings":";;;AAAA,4DAA2D;AAC3D,8DAA6D;AAC7D,0EAAyE;AACzE,gGAA+F;AAC/F,sEAAqE;AACrE,oEAAmE;AAUnE,IAAM,WAAW,GAAsB;IACnC,oBAAoB,EAAE,UAAC,IAAI,EAAE,IAAI,IAAK,OAAA,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAApC,CAAoC;CAC7E,CAAC;AAEF;;;;;;GAMG;AACI,IAAM,KAAK,GAAU,UACxB,IAA0B,EAC1B,aAA4B,EAC5B,SAA+B;;IAA/B,0BAAA,EAAA,oBAA+B;IAE/B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAErB,IAAI,aAAa,CAAC,gBAAgB,EAAE;QAChC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,IAAA,uBAAU,EAAC,aAAa,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAAC;KAC3F;SAAM;QACH,aAAa,CAAC,gBAAgB,GAAG,IAAA,uBAAU,EAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;KAC/F;IAED,uBAAuB;IACvB,IAAM,GAAG,GAAG,iBAAiB,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAE9E,gCAAgC;IAChC,IAAM,iBAAiB,GAAG,IAAA,mCAAgB,EAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAE/D,4BAA4B;IAC5B,IAAM,cAAc,GAAG,IAAA,yCAAmB,EACtC,IAAI,CAAC,UAAU,CAAC,aAAa,EAC7B,aAAa,EACb,SAAS,EACT,MAAA,CAAC,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,IAAI;QACxC,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,CACnE,0CAAE,IAAI,CACV,CAAC;IAEF,oEAAoE;IACpE,IAAM,WAAW,GAAG,IAAA,+DAA8B,EAC9C,IAAI,EACJ,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,SAAS,CACZ,CAAC;IAEF,sCAAsC;IACtC,IAAA,mCAAgB,EAAC,WAAW,CAAC,QAAQ,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAEzE,kDAAkD;IAClD,IAAA,qCAAiB,EAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;AACxD,CAAC,CAAC;AA5CW,QAAA,KAAK,SA4ChB;AAEF,SAAS,iBAAiB,CACtB,IAA+B,EAC/B,kBAAsC;IAEtC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChG,CAAC","sourcesContent":["import { cloneModel } from '../publicApi/model/cloneModel';\nimport { convertInlineCss } from '../utils/convertInlineCss';\nimport { createPasteFragment } from '../utils/paste/createPasteFragment';\nimport { generatePasteOptionFromPlugins } from '../utils/paste/generatePasteOptionFromPlugins';\nimport { mergePasteContent } from '../utils/paste/mergePasteContent';\nimport { retrieveHtmlInfo } from '../utils/paste/retrieveHtmlInfo';\nimport type { CloneModelOptions } from '../publicApi/model/cloneModel';\nimport type {\n PasteType,\n ClipboardData,\n Paste,\n StandaloneEditorCore,\n TrustedHTMLHandler,\n} from 'roosterjs-content-model-types';\n\nconst CloneOption: CloneModelOptions = {\n includeCachedElement: (node, type) => (type == 'cache' ? undefined : node),\n};\n\n/**\n * @internal\n * Paste into editor using a clipboardData object\n * @param core The StandaloneEditorCore object.\n * @param clipboardData Clipboard data retrieved from clipboard\n * @param pasteType Type of content to paste. @default normal\n */\nexport const paste: Paste = (\n core: StandaloneEditorCore,\n clipboardData: ClipboardData,\n pasteType: PasteType = 'normal'\n) => {\n core.api.focus(core);\n\n if (clipboardData.modelBeforePaste) {\n core.api.setContentModel(core, cloneModel(clipboardData.modelBeforePaste, CloneOption));\n } else {\n clipboardData.modelBeforePaste = cloneModel(core.api.createContentModel(core), CloneOption);\n }\n\n // 1. Prepare variables\n const doc = createDOMFromHtml(clipboardData.rawHtml, core.trustedHTMLHandler);\n\n // 2. Handle HTML from clipboard\n const htmlFromClipboard = retrieveHtmlInfo(doc, clipboardData);\n\n // 3. Create target fragment\n const sourceFragment = createPasteFragment(\n core.contentDiv.ownerDocument,\n clipboardData,\n pasteType,\n (clipboardData.rawHtml == clipboardData.html\n ? doc\n : createDOMFromHtml(clipboardData.html, core.trustedHTMLHandler)\n )?.body\n );\n\n // 4. Trigger BeforePaste event to allow plugins modify the fragment\n const eventResult = generatePasteOptionFromPlugins(\n core,\n clipboardData,\n sourceFragment,\n htmlFromClipboard,\n pasteType\n );\n\n // 5. Convert global CSS to inline CSS\n convertInlineCss(eventResult.fragment, htmlFromClipboard.globalCssRules);\n\n // 6. Merge pasted content into main Content Model\n mergePasteContent(core, eventResult, clipboardData);\n};\n\nfunction createDOMFromHtml(\n html: string | null | undefined,\n trustedHTMLHandler: TrustedHTMLHandler\n): Document | null {\n return html ? new DOMParser().parseFromString(trustedHTMLHandler(html), 'text/html') : null;\n}\n"]}
1
+ {"version":3,"file":"paste.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/paste.ts"],"names":[],"mappings":";;;AAAA,4DAA2D;AAC3D,8DAA6D;AAC7D,0EAAyE;AACzE,gGAA+F;AAC/F,sEAAqE;AACrE,oEAAmE;AAUnE,IAAM,WAAW,GAAsB;IACnC,oBAAoB,EAAE,UAAC,IAAI,EAAE,IAAI,IAAK,OAAA,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAApC,CAAoC;CAC7E,CAAC;AAEF;;;;;;GAMG;AACI,IAAM,KAAK,GAAU,UACxB,IAAgB,EAChB,aAA4B,EAC5B,SAA+B;;IAA/B,0BAAA,EAAA,oBAA+B;IAE/B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAErB,IAAI,aAAa,CAAC,gBAAgB,EAAE;QAChC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,IAAA,uBAAU,EAAC,aAAa,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAAC;KAC3F;SAAM;QACH,aAAa,CAAC,gBAAgB,GAAG,IAAA,uBAAU,EAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;KAC/F;IAED,uBAAuB;IACvB,IAAM,GAAG,GAAG,iBAAiB,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAE9E,gCAAgC;IAChC,IAAM,iBAAiB,GAAG,IAAA,mCAAgB,EAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAE/D,4BAA4B;IAC5B,IAAM,cAAc,GAAG,IAAA,yCAAmB,EACtC,IAAI,CAAC,YAAY,CAAC,aAAa,EAC/B,aAAa,EACb,SAAS,EACT,MAAA,CAAC,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,IAAI;QACxC,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,CACnE,0CAAE,IAAI,CACV,CAAC;IAEF,oEAAoE;IACpE,IAAM,WAAW,GAAG,IAAA,+DAA8B,EAC9C,IAAI,EACJ,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,SAAS,CACZ,CAAC;IAEF,sCAAsC;IACtC,IAAA,mCAAgB,EAAC,WAAW,CAAC,QAAQ,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAEzE,kDAAkD;IAClD,IAAA,qCAAiB,EAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;AACxD,CAAC,CAAC;AA5CW,QAAA,KAAK,SA4ChB;AAEF,SAAS,iBAAiB,CACtB,IAA+B,EAC/B,kBAAsC;IAEtC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChG,CAAC","sourcesContent":["import { cloneModel } from '../publicApi/model/cloneModel';\nimport { convertInlineCss } from '../utils/convertInlineCss';\nimport { createPasteFragment } from '../utils/paste/createPasteFragment';\nimport { generatePasteOptionFromPlugins } from '../utils/paste/generatePasteOptionFromPlugins';\nimport { mergePasteContent } from '../utils/paste/mergePasteContent';\nimport { retrieveHtmlInfo } from '../utils/paste/retrieveHtmlInfo';\nimport type { CloneModelOptions } from '../publicApi/model/cloneModel';\nimport type {\n PasteType,\n ClipboardData,\n Paste,\n EditorCore,\n TrustedHTMLHandler,\n} from 'roosterjs-content-model-types';\n\nconst CloneOption: CloneModelOptions = {\n includeCachedElement: (node, type) => (type == 'cache' ? undefined : node),\n};\n\n/**\n * @internal\n * Paste into editor using a clipboardData object\n * @param core The EditorCore object.\n * @param clipboardData Clipboard data retrieved from clipboard\n * @param pasteType Type of content to paste. @default normal\n */\nexport const paste: Paste = (\n core: EditorCore,\n clipboardData: ClipboardData,\n pasteType: PasteType = 'normal'\n) => {\n core.api.focus(core);\n\n if (clipboardData.modelBeforePaste) {\n core.api.setContentModel(core, cloneModel(clipboardData.modelBeforePaste, CloneOption));\n } else {\n clipboardData.modelBeforePaste = cloneModel(core.api.createContentModel(core), CloneOption);\n }\n\n // 1. Prepare variables\n const doc = createDOMFromHtml(clipboardData.rawHtml, core.trustedHTMLHandler);\n\n // 2. Handle HTML from clipboard\n const htmlFromClipboard = retrieveHtmlInfo(doc, clipboardData);\n\n // 3. Create target fragment\n const sourceFragment = createPasteFragment(\n core.physicalRoot.ownerDocument,\n clipboardData,\n pasteType,\n (clipboardData.rawHtml == clipboardData.html\n ? doc\n : createDOMFromHtml(clipboardData.html, core.trustedHTMLHandler)\n )?.body\n );\n\n // 4. Trigger BeforePaste event to allow plugins modify the fragment\n const eventResult = generatePasteOptionFromPlugins(\n core,\n clipboardData,\n sourceFragment,\n htmlFromClipboard,\n pasteType\n );\n\n // 5. Convert global CSS to inline CSS\n convertInlineCss(eventResult.fragment, htmlFromClipboard.globalCssRules);\n\n // 6. Merge pasted content into main Content Model\n mergePasteContent(core, eventResult, clipboardData);\n};\n\nfunction createDOMFromHtml(\n html: string | null | undefined,\n trustedHTMLHandler: TrustedHTMLHandler\n): Document | null {\n return html ? new DOMParser().parseFromString(trustedHTMLHandler(html), 'text/html') : null;\n}\n"]}
@@ -16,7 +16,7 @@ var setContentModel = function (core, model, option, onNodeCreated) {
16
16
  ? (0, roosterjs_content_model_dom_1.createModelToDomContext)(editorContext, core.modelToDomSettings.builtIn, core.modelToDomSettings.customized, option)
17
17
  : (0, roosterjs_content_model_dom_1.createModelToDomContextWithConfig)(core.modelToDomSettings.calculated, editorContext);
18
18
  modelToDomContext.onNodeCreated = onNodeCreated;
19
- var selection = (0, roosterjs_content_model_dom_1.contentModelToDom)(core.contentDiv.ownerDocument, core.contentDiv, model, modelToDomContext);
19
+ var selection = (0, roosterjs_content_model_dom_1.contentModelToDom)(core.logicalRoot.ownerDocument, core.logicalRoot, model, modelToDomContext);
20
20
  if (!core.lifecycle.shadowEditFragment) {
21
21
  core.cache.cachedSelection = selection || undefined;
22
22
  if (!(option === null || option === void 0 ? void 0 : option.ignoreSelection) && selection) {
@@ -1 +1 @@
1
- {"version":3,"file":"setContentModel.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/setContentModel.ts"],"names":[],"mappings":";;;AAAA,2EAIqC;AAGrC;;;;;;GAMG;AACI,IAAM,eAAe,GAAoB,UAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa;;IAC/E,IAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7E,IAAM,iBAAiB,GAAG,MAAM;QAC5B,CAAC,CAAC,IAAA,qDAAuB,EACnB,aAAa,EACb,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAC/B,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAClC,MAAM,CACT;QACH,CAAC,CAAC,IAAA,+DAAiC,EAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAE3F,iBAAiB,CAAC,aAAa,GAAG,aAAa,CAAC;IAEhD,IAAM,SAAS,GAAG,IAAA,+CAAiB,EAC/B,IAAI,CAAC,UAAU,CAAC,aAAa,EAC7B,IAAI,CAAC,UAAU,EACf,KAAK,EACL,iBAAiB,CACpB,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;QACpC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS,IAAI,SAAS,CAAC;QAEpD,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,eAAe,CAAA,IAAI,SAAS,EAAE;YACvC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;SAC7C;aAAM;YACH,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;SACxC;QAED,8FAA8F;QAC9F,MAAA,IAAI,CAAC,KAAK,CAAC,oBAAoB,0CAAE,cAAc,EAAE,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;KAClC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAnCW,QAAA,eAAe,mBAmC1B","sourcesContent":["import {\n contentModelToDom,\n createModelToDomContext,\n createModelToDomContextWithConfig,\n} from 'roosterjs-content-model-dom';\nimport type { SetContentModel } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Set content with content model\n * @param core The editor core object\n * @param model The content model to set\n * @param option Additional options to customize the behavior of Content Model to DOM conversion\n */\nexport const setContentModel: SetContentModel = (core, model, option, onNodeCreated) => {\n const editorContext = core.api.createEditorContext(core, true /*saveIndex*/);\n const modelToDomContext = option\n ? createModelToDomContext(\n editorContext,\n core.modelToDomSettings.builtIn,\n core.modelToDomSettings.customized,\n option\n )\n : createModelToDomContextWithConfig(core.modelToDomSettings.calculated, editorContext);\n\n modelToDomContext.onNodeCreated = onNodeCreated;\n\n const selection = contentModelToDom(\n core.contentDiv.ownerDocument,\n core.contentDiv,\n model,\n modelToDomContext\n );\n\n if (!core.lifecycle.shadowEditFragment) {\n core.cache.cachedSelection = selection || undefined;\n\n if (!option?.ignoreSelection && selection) {\n core.api.setDOMSelection(core, selection);\n } else {\n core.selection.selection = selection;\n }\n\n // Clear pending mutations since we will use our latest model object to replace existing cache\n core.cache.textMutationObserver?.flushMutations();\n core.cache.cachedModel = model;\n }\n\n return selection;\n};\n"]}
1
+ {"version":3,"file":"setContentModel.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/setContentModel.ts"],"names":[],"mappings":";;;AAAA,2EAIqC;AAGrC;;;;;;GAMG;AACI,IAAM,eAAe,GAAoB,UAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa;;IAC/E,IAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7E,IAAM,iBAAiB,GAAG,MAAM;QAC5B,CAAC,CAAC,IAAA,qDAAuB,EACnB,aAAa,EACb,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAC/B,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAClC,MAAM,CACT;QACH,CAAC,CAAC,IAAA,+DAAiC,EAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAE3F,iBAAiB,CAAC,aAAa,GAAG,aAAa,CAAC;IAEhD,IAAM,SAAS,GAAG,IAAA,+CAAiB,EAC/B,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,IAAI,CAAC,WAAW,EAChB,KAAK,EACL,iBAAiB,CACpB,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;QACpC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS,IAAI,SAAS,CAAC;QAEpD,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,eAAe,CAAA,IAAI,SAAS,EAAE;YACvC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;SAC7C;aAAM;YACH,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;SACxC;QAED,8FAA8F;QAC9F,MAAA,IAAI,CAAC,KAAK,CAAC,oBAAoB,0CAAE,cAAc,EAAE,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;KAClC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAnCW,QAAA,eAAe,mBAmC1B","sourcesContent":["import {\n contentModelToDom,\n createModelToDomContext,\n createModelToDomContextWithConfig,\n} from 'roosterjs-content-model-dom';\nimport type { SetContentModel } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Set content with content model\n * @param core The editor core object\n * @param model The content model to set\n * @param option Additional options to customize the behavior of Content Model to DOM conversion\n */\nexport const setContentModel: SetContentModel = (core, model, option, onNodeCreated) => {\n const editorContext = core.api.createEditorContext(core, true /*saveIndex*/);\n const modelToDomContext = option\n ? createModelToDomContext(\n editorContext,\n core.modelToDomSettings.builtIn,\n core.modelToDomSettings.customized,\n option\n )\n : createModelToDomContextWithConfig(core.modelToDomSettings.calculated, editorContext);\n\n modelToDomContext.onNodeCreated = onNodeCreated;\n\n const selection = contentModelToDom(\n core.logicalRoot.ownerDocument,\n core.logicalRoot,\n model,\n modelToDomContext\n );\n\n if (!core.lifecycle.shadowEditFragment) {\n core.cache.cachedSelection = selection || undefined;\n\n if (!option?.ignoreSelection && selection) {\n core.api.setDOMSelection(core, selection);\n } else {\n core.selection.selection = selection;\n }\n\n // Clear pending mutations since we will use our latest model object to replace existing cache\n core.cache.textMutationObserver?.flushMutations();\n core.cache.cachedModel = model;\n }\n\n return selection;\n};\n"]}
@@ -19,12 +19,12 @@ var setDOMSelection = function (core, selection, skipSelectionChangedEvent) {
19
19
  // We are applying a new selection, so we don't need to apply cached selection in DOMEventPlugin.
20
20
  // Set skipReselectOnFocus to skip this behavior
21
21
  var skipReselectOnFocus = core.selection.skipReselectOnFocus;
22
- var doc = core.contentDiv.ownerDocument;
22
+ var doc = core.physicalRoot.ownerDocument;
23
23
  var sheet = (_a = core.selection.selectionStyleNode) === null || _a === void 0 ? void 0 : _a.sheet;
24
24
  core.selection.skipReselectOnFocus = true;
25
25
  try {
26
26
  var selectionRules = void 0;
27
- var rootSelector = '#' + addUniqueId(core.contentDiv, CONTENT_DIV_ID);
27
+ var rootSelector = '#' + addUniqueId(core.physicalRoot, CONTENT_DIV_ID);
28
28
  switch (selection === null || selection === void 0 ? void 0 : selection.type) {
29
29
  case 'image':
30
30
  var image = selection.image;
@@ -1 +1 @@
1
- {"version":3,"file":"setDOMSelection.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/setDOMSelection.ts"],"names":[],"mappings":"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","sourcesContent":["import { addRangeToSelection } from '../corePlugin/utils/addRangeToSelection';\nimport { isNodeOfType, toArray } from 'roosterjs-content-model-dom';\nimport { parseTableCells } from '../publicApi/domUtils/tableCellUtils';\nimport type {\n SelectionChangedEvent,\n SetDOMSelection,\n TableSelection,\n} from 'roosterjs-content-model-types';\n\nconst IMAGE_ID = 'image';\nconst TABLE_ID = 'table';\nconst CONTENT_DIV_ID = 'contentDiv';\nconst DEFAULT_SELECTION_BORDER_COLOR = '#DB626C';\nconst TABLE_CSS_RULE = '{background-color: rgb(198,198,198) !important;}';\nconst CARET_CSS_RULE = '{caret-color: transparent}';\nconst MAX_RULE_SELECTOR_LENGTH = 9000;\n\n/**\n * @internal\n */\nexport const setDOMSelection: SetDOMSelection = (core, selection, skipSelectionChangedEvent) => {\n // We are applying a new selection, so we don't need to apply cached selection in DOMEventPlugin.\n // Set skipReselectOnFocus to skip this behavior\n const skipReselectOnFocus = core.selection.skipReselectOnFocus;\n\n const doc = core.contentDiv.ownerDocument;\n const sheet = core.selection.selectionStyleNode?.sheet;\n\n core.selection.skipReselectOnFocus = true;\n\n try {\n let selectionRules: string[] | undefined;\n const rootSelector = '#' + addUniqueId(core.contentDiv, CONTENT_DIV_ID);\n\n switch (selection?.type) {\n case 'image':\n const image = selection.image;\n\n selectionRules = buildImageCSS(\n rootSelector,\n addUniqueId(image, IMAGE_ID),\n core.selection.imageSelectionBorderColor\n );\n core.selection.selection = selection;\n\n setRangeSelection(doc, image);\n break;\n case 'table':\n const { table, firstColumn, firstRow } = selection;\n\n selectionRules = buildTableCss(\n rootSelector,\n addUniqueId(table, TABLE_ID),\n selection\n );\n core.selection.selection = selection;\n\n setRangeSelection(doc, table.rows[firstRow]?.cells[firstColumn]);\n break;\n case 'range':\n addRangeToSelection(doc, selection.range, selection.isReverted);\n\n core.selection.selection = core.api.hasFocus(core) ? null : selection;\n break;\n\n default:\n core.selection.selection = null;\n break;\n }\n\n if (sheet) {\n for (let i = sheet.cssRules.length - 1; i >= 0; i--) {\n sheet.deleteRule(i);\n }\n\n if (selectionRules) {\n for (let i = 0; i < selectionRules.length; i++) {\n sheet.insertRule(selectionRules[i]);\n }\n }\n }\n } finally {\n core.selection.skipReselectOnFocus = skipReselectOnFocus;\n }\n\n if (!skipSelectionChangedEvent) {\n const eventData: SelectionChangedEvent = {\n eventType: 'selectionChanged',\n newSelection: selection,\n };\n\n core.api.triggerEvent(core, eventData, true /*broadcast*/);\n }\n};\n\nfunction buildImageCSS(editorSelector: string, imageId: string, borderColor?: string): string[] {\n const color = borderColor || DEFAULT_SELECTION_BORDER_COLOR;\n\n return [\n `${editorSelector} #${imageId} {outline-style:auto!important;outline-color:${color}!important;}`,\n `${editorSelector} ${CARET_CSS_RULE}`,\n ];\n}\n\nfunction buildTableCss(\n editorSelector: string,\n tableId: string,\n selection: TableSelection\n): string[] {\n const { firstColumn, firstRow, lastColumn, lastRow } = selection;\n const cells = parseTableCells(selection.table);\n const isAllTableSelected =\n firstRow == 0 &&\n firstColumn == 0 &&\n lastRow == cells.length - 1 &&\n lastColumn == (cells[lastRow]?.length ?? 0) - 1;\n const rootSelector = editorSelector + ' #' + tableId;\n const selectors = isAllTableSelected\n ? [rootSelector, `${rootSelector} *`]\n : handleTableSelected(rootSelector, selection, cells);\n\n const cssRules: string[] = [`${editorSelector} ${CARET_CSS_RULE}`];\n let currentRules: string = '';\n\n for (let i = 0; i < selectors.length; i++) {\n currentRules += (currentRules.length > 0 ? ',' : '') + selectors[i] || '';\n\n if (\n currentRules.length + (selectors[0]?.length || 0) > MAX_RULE_SELECTOR_LENGTH ||\n i == selectors.length - 1\n ) {\n cssRules.push(currentRules + ' ' + TABLE_CSS_RULE);\n currentRules = '';\n }\n }\n\n return cssRules;\n}\n\nfunction handleTableSelected(\n rootSelector: string,\n selection: TableSelection,\n cells: (HTMLTableCellElement | null)[][]\n) {\n const { firstRow, firstColumn, lastRow, lastColumn, table } = selection;\n const selectors: string[] = [];\n\n // Get whether table has thead, tbody or tfoot, then Set the start and end of each of the table children,\n // so we can build the selector according the element between the table and the row.\n let cont = 0;\n const indexes = toArray(table.childNodes)\n .filter(\n (node): node is HTMLTableSectionElement =>\n ['THEAD', 'TBODY', 'TFOOT'].indexOf(\n isNodeOfType(node, 'ELEMENT_NODE') ? node.tagName : ''\n ) > -1\n )\n .map(node => {\n const result = {\n el: node.tagName,\n start: cont,\n end: node.childNodes.length + cont,\n };\n\n cont = result.end;\n return result;\n });\n\n cells.forEach((row, rowIndex) => {\n let tdCount = 0;\n\n //Get current TBODY/THEAD/TFOOT\n const midElement = indexes.filter(ind => ind.start <= rowIndex && ind.end > rowIndex)[0];\n const middleElSelector = midElement ? '>' + midElement.el + '>' : '>';\n const currentRow =\n midElement && rowIndex + 1 >= midElement.start\n ? rowIndex + 1 - midElement.start\n : rowIndex + 1;\n\n for (let cellIndex = 0; cellIndex < row.length; cellIndex++) {\n const cell = row[cellIndex];\n\n if (cell) {\n tdCount++;\n\n if (\n rowIndex >= firstRow &&\n rowIndex <= lastRow &&\n cellIndex >= firstColumn &&\n cellIndex <= lastColumn\n ) {\n const selector = `${rootSelector}${middleElSelector} tr:nth-child(${currentRow})>${cell.tagName}:nth-child(${tdCount})`;\n\n selectors.push(selector, selector + ' *');\n }\n }\n }\n });\n\n return selectors;\n}\n\nfunction setRangeSelection(doc: Document, element: HTMLElement | undefined) {\n if (element && doc.contains(element)) {\n const range = doc.createRange();\n\n range.selectNode(element);\n range.collapse();\n\n addRangeToSelection(doc, range);\n }\n}\n\nfunction addUniqueId(element: HTMLElement, idPrefix: string): string {\n idPrefix = element.id || idPrefix;\n\n const doc = element.ownerDocument;\n let i = 0;\n\n while (!element.id || doc.querySelectorAll('#' + element.id).length > 1) {\n element.id = idPrefix + '_' + i++;\n }\n\n return element.id;\n}\n"]}
1
+ {"version":3,"file":"setDOMSelection.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-core/lib/coreApi/setDOMSelection.ts"],"names":[],"mappings":"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","sourcesContent":["import { addRangeToSelection } from '../corePlugin/utils/addRangeToSelection';\nimport { isNodeOfType, toArray } from 'roosterjs-content-model-dom';\nimport { parseTableCells } from '../publicApi/domUtils/tableCellUtils';\nimport type {\n SelectionChangedEvent,\n SetDOMSelection,\n TableSelection,\n} from 'roosterjs-content-model-types';\n\nconst IMAGE_ID = 'image';\nconst TABLE_ID = 'table';\nconst CONTENT_DIV_ID = 'contentDiv';\nconst DEFAULT_SELECTION_BORDER_COLOR = '#DB626C';\nconst TABLE_CSS_RULE = '{background-color: rgb(198,198,198) !important;}';\nconst CARET_CSS_RULE = '{caret-color: transparent}';\nconst MAX_RULE_SELECTOR_LENGTH = 9000;\n\n/**\n * @internal\n */\nexport const setDOMSelection: SetDOMSelection = (core, selection, skipSelectionChangedEvent) => {\n // We are applying a new selection, so we don't need to apply cached selection in DOMEventPlugin.\n // Set skipReselectOnFocus to skip this behavior\n const skipReselectOnFocus = core.selection.skipReselectOnFocus;\n\n const doc = core.physicalRoot.ownerDocument;\n const sheet = core.selection.selectionStyleNode?.sheet;\n\n core.selection.skipReselectOnFocus = true;\n\n try {\n let selectionRules: string[] | undefined;\n const rootSelector = '#' + addUniqueId(core.physicalRoot, CONTENT_DIV_ID);\n\n switch (selection?.type) {\n case 'image':\n const image = selection.image;\n\n selectionRules = buildImageCSS(\n rootSelector,\n addUniqueId(image, IMAGE_ID),\n core.selection.imageSelectionBorderColor\n );\n core.selection.selection = selection;\n\n setRangeSelection(doc, image);\n break;\n case 'table':\n const { table, firstColumn, firstRow } = selection;\n\n selectionRules = buildTableCss(\n rootSelector,\n addUniqueId(table, TABLE_ID),\n selection\n );\n core.selection.selection = selection;\n\n setRangeSelection(doc, table.rows[firstRow]?.cells[firstColumn]);\n break;\n case 'range':\n addRangeToSelection(doc, selection.range, selection.isReverted);\n\n core.selection.selection = core.api.hasFocus(core) ? null : selection;\n break;\n\n default:\n core.selection.selection = null;\n break;\n }\n\n if (sheet) {\n for (let i = sheet.cssRules.length - 1; i >= 0; i--) {\n sheet.deleteRule(i);\n }\n\n if (selectionRules) {\n for (let i = 0; i < selectionRules.length; i++) {\n sheet.insertRule(selectionRules[i]);\n }\n }\n }\n } finally {\n core.selection.skipReselectOnFocus = skipReselectOnFocus;\n }\n\n if (!skipSelectionChangedEvent) {\n const eventData: SelectionChangedEvent = {\n eventType: 'selectionChanged',\n newSelection: selection,\n };\n\n core.api.triggerEvent(core, eventData, true /*broadcast*/);\n }\n};\n\nfunction buildImageCSS(editorSelector: string, imageId: string, borderColor?: string): string[] {\n const color = borderColor || DEFAULT_SELECTION_BORDER_COLOR;\n\n return [\n `${editorSelector} #${imageId} {outline-style:auto!important;outline-color:${color}!important;}`,\n `${editorSelector} ${CARET_CSS_RULE}`,\n ];\n}\n\nfunction buildTableCss(\n editorSelector: string,\n tableId: string,\n selection: TableSelection\n): string[] {\n const { firstColumn, firstRow, lastColumn, lastRow } = selection;\n const cells = parseTableCells(selection.table);\n const isAllTableSelected =\n firstRow == 0 &&\n firstColumn == 0 &&\n lastRow == cells.length - 1 &&\n lastColumn == (cells[lastRow]?.length ?? 0) - 1;\n const rootSelector = editorSelector + ' #' + tableId;\n const selectors = isAllTableSelected\n ? [rootSelector, `${rootSelector} *`]\n : handleTableSelected(rootSelector, selection, cells);\n\n const cssRules: string[] = [`${editorSelector} ${CARET_CSS_RULE}`];\n let currentRules: string = '';\n\n for (let i = 0; i < selectors.length; i++) {\n currentRules += (currentRules.length > 0 ? ',' : '') + selectors[i] || '';\n\n if (\n currentRules.length + (selectors[0]?.length || 0) > MAX_RULE_SELECTOR_LENGTH ||\n i == selectors.length - 1\n ) {\n cssRules.push(currentRules + ' ' + TABLE_CSS_RULE);\n currentRules = '';\n }\n }\n\n return cssRules;\n}\n\nfunction handleTableSelected(\n rootSelector: string,\n selection: TableSelection,\n cells: (HTMLTableCellElement | null)[][]\n) {\n const { firstRow, firstColumn, lastRow, lastColumn, table } = selection;\n const selectors: string[] = [];\n\n // Get whether table has thead, tbody or tfoot, then Set the start and end of each of the table children,\n // so we can build the selector according the element between the table and the row.\n let cont = 0;\n const indexes = toArray(table.childNodes)\n .filter(\n (node): node is HTMLTableSectionElement =>\n ['THEAD', 'TBODY', 'TFOOT'].indexOf(\n isNodeOfType(node, 'ELEMENT_NODE') ? node.tagName : ''\n ) > -1\n )\n .map(node => {\n const result = {\n el: node.tagName,\n start: cont,\n end: node.childNodes.length + cont,\n };\n\n cont = result.end;\n return result;\n });\n\n cells.forEach((row, rowIndex) => {\n let tdCount = 0;\n\n //Get current TBODY/THEAD/TFOOT\n const midElement = indexes.filter(ind => ind.start <= rowIndex && ind.end > rowIndex)[0];\n const middleElSelector = midElement ? '>' + midElement.el + '>' : '>';\n const currentRow =\n midElement && rowIndex + 1 >= midElement.start\n ? rowIndex + 1 - midElement.start\n : rowIndex + 1;\n\n for (let cellIndex = 0; cellIndex < row.length; cellIndex++) {\n const cell = row[cellIndex];\n\n if (cell) {\n tdCount++;\n\n if (\n rowIndex >= firstRow &&\n rowIndex <= lastRow &&\n cellIndex >= firstColumn &&\n cellIndex <= lastColumn\n ) {\n const selector = `${rootSelector}${middleElSelector} tr:nth-child(${currentRow})>${cell.tagName}:nth-child(${tdCount})`;\n\n selectors.push(selector, selector + ' *');\n }\n }\n }\n });\n\n return selectors;\n}\n\nfunction setRangeSelection(doc: Document, element: HTMLElement | undefined) {\n if (element && doc.contains(element)) {\n const range = doc.createRange();\n\n range.selectNode(element);\n range.collapse();\n\n addRangeToSelection(doc, range);\n }\n}\n\nfunction addUniqueId(element: HTMLElement, idPrefix: string): string {\n idPrefix = element.id || idPrefix;\n\n const doc = element.ownerDocument;\n let i = 0;\n\n while (!element.id || doc.querySelectorAll('#' + element.id).length > 1) {\n element.id = idPrefix + '_' + i++;\n }\n\n return element.id;\n}\n"]}
@@ -2,7 +2,7 @@ import type { SwitchShadowEdit } from 'roosterjs-content-model-types';
2
2
  /**
3
3
  * @internal
4
4
  * Switch the Shadow Edit mode of editor On/Off
5
- * @param editorCore The StandaloneEditorCore object
5
+ * @param editorCore The EditorCore object
6
6
  * @param isOn True to switch On, False to switch Off
7
7
  */
8
8
  export declare const switchShadowEdit: SwitchShadowEdit;
@@ -6,7 +6,7 @@ var roosterjs_content_model_dom_1 = require("roosterjs-content-model-dom");
6
6
  /**
7
7
  * @internal
8
8
  * Switch the Shadow Edit mode of editor On/Off
9
- * @param editorCore The StandaloneEditorCore object
9
+ * @param editorCore The EditorCore object
10
10
  * @param isOn True to switch On, False to switch Off
11
11
  */
12
12
  var switchShadowEdit = function (editorCore, isOn) {
@@ -14,8 +14,8 @@ var switchShadowEdit = function (editorCore, isOn) {
14
14
  if (isOn != !!core.lifecycle.shadowEditFragment) {
15
15
  if (isOn) {
16
16
  var model = !core.cache.cachedModel ? core.api.createContentModel(core) : null;
17
- var fragment = core.contentDiv.ownerDocument.createDocumentFragment();
18
- var clonedRoot = core.contentDiv.cloneNode(true /*deep*/);
17
+ var fragment = core.logicalRoot.ownerDocument.createDocumentFragment();
18
+ var clonedRoot = core.logicalRoot.cloneNode(true /*deep*/);
19
19
  (0, roosterjs_content_model_dom_1.moveChildNodes)(fragment, clonedRoot);
20
20
  core.api.triggerEvent(core, {
21
21
  eventType: 'enteredShadowEdit',