roosterjs-content-model-core 0.20.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 (417) hide show
  1. package/LICENSE +25 -0
  2. package/README.md +262 -0
  3. package/lib/constants/ChangeSource.d.ts +59 -0
  4. package/lib/constants/ChangeSource.js +63 -0
  5. package/lib/constants/ChangeSource.js.map +1 -0
  6. package/lib/coreApi/createContentModel.d.ts +9 -0
  7. package/lib/coreApi/createContentModel.js +40 -0
  8. package/lib/coreApi/createContentModel.js.map +1 -0
  9. package/lib/coreApi/createEditorContext.d.ts +6 -0
  10. package/lib/coreApi/createEditorContext.js +38 -0
  11. package/lib/coreApi/createEditorContext.js.map +1 -0
  12. package/lib/coreApi/formatContentModel.d.ts +12 -0
  13. package/lib/coreApi/formatContentModel.js +128 -0
  14. package/lib/coreApi/formatContentModel.js.map +1 -0
  15. package/lib/coreApi/getDOMSelection.d.ts +5 -0
  16. package/lib/coreApi/getDOMSelection.js +41 -0
  17. package/lib/coreApi/getDOMSelection.js.map +1 -0
  18. package/lib/coreApi/setContentModel.d.ts +9 -0
  19. package/lib/coreApi/setContentModel.js +33 -0
  20. package/lib/coreApi/setContentModel.js.map +1 -0
  21. package/lib/coreApi/setDOMSelection.d.ts +5 -0
  22. package/lib/coreApi/setDOMSelection.js +41 -0
  23. package/lib/coreApi/setDOMSelection.js.map +1 -0
  24. package/lib/coreApi/switchShadowEdit.d.ts +8 -0
  25. package/lib/coreApi/switchShadowEdit.js +54 -0
  26. package/lib/coreApi/switchShadowEdit.js.map +1 -0
  27. package/lib/corePlugin/ContentModelCachePlugin.d.ts +53 -0
  28. package/lib/corePlugin/ContentModelCachePlugin.js +169 -0
  29. package/lib/corePlugin/ContentModelCachePlugin.js.map +1 -0
  30. package/lib/corePlugin/ContentModelCopyPastePlugin.d.ts +46 -0
  31. package/lib/corePlugin/ContentModelCopyPastePlugin.js +233 -0
  32. package/lib/corePlugin/ContentModelCopyPastePlugin.js.map +1 -0
  33. package/lib/corePlugin/ContentModelFormatPlugin.d.ts +59 -0
  34. package/lib/corePlugin/ContentModelFormatPlugin.js +147 -0
  35. package/lib/corePlugin/ContentModelFormatPlugin.js.map +1 -0
  36. package/lib/corePlugin/ContentModelTypeInContainerPlugin.d.ts +23 -0
  37. package/lib/corePlugin/ContentModelTypeInContainerPlugin.js +32 -0
  38. package/lib/corePlugin/ContentModelTypeInContainerPlugin.js.map +1 -0
  39. package/lib/corePlugin/utils/addRangeToSelection.d.ts +4 -0
  40. package/lib/corePlugin/utils/addRangeToSelection.js +16 -0
  41. package/lib/corePlugin/utils/addRangeToSelection.js.map +1 -0
  42. package/lib/corePlugin/utils/applyDefaultFormat.d.ts +9 -0
  43. package/lib/corePlugin/utils/applyDefaultFormat.js +79 -0
  44. package/lib/corePlugin/utils/applyDefaultFormat.js.map +1 -0
  45. package/lib/corePlugin/utils/applyPendingFormat.d.ts +8 -0
  46. package/lib/corePlugin/utils/applyPendingFormat.js +51 -0
  47. package/lib/corePlugin/utils/applyPendingFormat.js.map +1 -0
  48. package/lib/corePlugin/utils/areSameSelection.d.ts +6 -0
  49. package/lib/corePlugin/utils/areSameSelection.js +36 -0
  50. package/lib/corePlugin/utils/areSameSelection.js.map +1 -0
  51. package/lib/corePlugin/utils/contentModelDomIndexer.d.ts +6 -0
  52. package/lib/corePlugin/utils/contentModelDomIndexer.js +190 -0
  53. package/lib/corePlugin/utils/contentModelDomIndexer.js.map +1 -0
  54. package/lib/editor/createContentModelEditorCore.d.ts +6 -0
  55. package/lib/editor/createContentModelEditorCore.js +50 -0
  56. package/lib/editor/createContentModelEditorCore.js.map +1 -0
  57. package/lib/editor/promoteToContentModelEditorCore.d.ts +8 -0
  58. package/lib/editor/promoteToContentModelEditorCore.js +72 -0
  59. package/lib/editor/promoteToContentModelEditorCore.js.map +1 -0
  60. package/lib/index.d.ts +29 -0
  61. package/lib/index.js +71 -0
  62. package/lib/index.js.map +1 -0
  63. package/lib/metadata/definitionCreators.d.ts +48 -0
  64. package/lib/metadata/definitionCreators.js +95 -0
  65. package/lib/metadata/definitionCreators.js.map +1 -0
  66. package/lib/metadata/updateImageMetadata.d.ts +7 -0
  67. package/lib/metadata/updateImageMetadata.js +28 -0
  68. package/lib/metadata/updateImageMetadata.js.map +1 -0
  69. package/lib/metadata/updateListMetadata.d.ts +15 -0
  70. package/lib/metadata/updateListMetadata.js +181 -0
  71. package/lib/metadata/updateListMetadata.js.map +1 -0
  72. package/lib/metadata/updateTableCellMetadata.d.ts +7 -0
  73. package/lib/metadata/updateTableCellMetadata.js +20 -0
  74. package/lib/metadata/updateTableCellMetadata.js.map +1 -0
  75. package/lib/metadata/updateTableMetadata.d.ts +7 -0
  76. package/lib/metadata/updateTableMetadata.js +32 -0
  77. package/lib/metadata/updateTableMetadata.js.map +1 -0
  78. package/lib/modelApi/edit/deleteExpandedSelection.d.ts +7 -0
  79. package/lib/modelApi/edit/deleteExpandedSelection.js +99 -0
  80. package/lib/modelApi/edit/deleteExpandedSelection.js.map +1 -0
  81. package/lib/modelApi/edit/deleteSingleChar.d.ts +4 -0
  82. package/lib/modelApi/edit/deleteSingleChar.js +36 -0
  83. package/lib/modelApi/edit/deleteSingleChar.js.map +1 -0
  84. package/lib/override/tablePreProcessor.d.ts +5 -0
  85. package/lib/override/tablePreProcessor.js +25 -0
  86. package/lib/override/tablePreProcessor.js.map +1 -0
  87. package/lib/publicApi/domUtils/borderValues.d.ts +13 -0
  88. package/lib/publicApi/domUtils/borderValues.js +48 -0
  89. package/lib/publicApi/domUtils/borderValues.js.map +1 -0
  90. package/lib/publicApi/domUtils/eventUtils.d.ts +13 -0
  91. package/lib/publicApi/domUtils/eventUtils.js +29 -0
  92. package/lib/publicApi/domUtils/eventUtils.js.map +1 -0
  93. package/lib/publicApi/domUtils/stringUtil.d.ts +18 -0
  94. package/lib/publicApi/domUtils/stringUtil.js +35 -0
  95. package/lib/publicApi/domUtils/stringUtil.js.map +1 -0
  96. package/lib/publicApi/model/cloneModel.d.ts +30 -0
  97. package/lib/publicApi/model/cloneModel.js +207 -0
  98. package/lib/publicApi/model/cloneModel.js.map +1 -0
  99. package/lib/publicApi/model/getClosestAncestorBlockGroupIndex.d.ts +12 -0
  100. package/lib/publicApi/model/getClosestAncestorBlockGroupIndex.js +28 -0
  101. package/lib/publicApi/model/getClosestAncestorBlockGroupIndex.js.map +1 -0
  102. package/lib/publicApi/model/isBlockGroupOfType.d.ts +8 -0
  103. package/lib/publicApi/model/isBlockGroupOfType.js +14 -0
  104. package/lib/publicApi/model/isBlockGroupOfType.js.map +1 -0
  105. package/lib/publicApi/model/mergeModel.d.ts +36 -0
  106. package/lib/publicApi/model/mergeModel.js +262 -0
  107. package/lib/publicApi/model/mergeModel.js.map +1 -0
  108. package/lib/publicApi/model/paste.d.ts +14 -0
  109. package/lib/publicApi/model/paste.js +150 -0
  110. package/lib/publicApi/model/paste.js.map +1 -0
  111. package/lib/publicApi/selection/collectSelections.d.ts +50 -0
  112. package/lib/publicApi/selection/collectSelections.js +182 -0
  113. package/lib/publicApi/selection/collectSelections.js.map +1 -0
  114. package/lib/publicApi/selection/deleteBlock.d.ts +11 -0
  115. package/lib/publicApi/selection/deleteBlock.js +56 -0
  116. package/lib/publicApi/selection/deleteBlock.js.map +1 -0
  117. package/lib/publicApi/selection/deleteSegment.d.ts +10 -0
  118. package/lib/publicApi/selection/deleteSegment.js +88 -0
  119. package/lib/publicApi/selection/deleteSegment.js.map +1 -0
  120. package/lib/publicApi/selection/deleteSelection.d.ts +9 -0
  121. package/lib/publicApi/selection/deleteSelection.js +44 -0
  122. package/lib/publicApi/selection/deleteSelection.js.map +1 -0
  123. package/lib/publicApi/selection/getSelectionRootNode.d.ts +9 -0
  124. package/lib/publicApi/selection/getSelectionRootNode.js +23 -0
  125. package/lib/publicApi/selection/getSelectionRootNode.js.map +1 -0
  126. package/lib/publicApi/selection/iterateSelections.d.ts +48 -0
  127. package/lib/publicApi/selection/iterateSelections.js +147 -0
  128. package/lib/publicApi/selection/iterateSelections.js.map +1 -0
  129. package/lib/publicApi/selection/setSelection.d.ts +8 -0
  130. package/lib/publicApi/selection/setSelection.js +131 -0
  131. package/lib/publicApi/selection/setSelection.js.map +1 -0
  132. package/lib/publicApi/table/applyTableFormat.d.ts +8 -0
  133. package/lib/publicApi/table/applyTableFormat.js +241 -0
  134. package/lib/publicApi/table/applyTableFormat.js.map +1 -0
  135. package/lib/publicApi/table/normalizeTable.d.ts +13 -0
  136. package/lib/publicApi/table/normalizeTable.js +121 -0
  137. package/lib/publicApi/table/normalizeTable.js.map +1 -0
  138. package/lib/publicApi/table/setTableCellBackgroundColor.d.ts +15 -0
  139. package/lib/publicApi/table/setTableCellBackgroundColor.js +105 -0
  140. package/lib/publicApi/table/setTableCellBackgroundColor.js.map +1 -0
  141. package/lib-amd/constants/ChangeSource.d.ts +59 -0
  142. package/lib-amd/constants/ChangeSource.js +65 -0
  143. package/lib-amd/constants/ChangeSource.js.map +1 -0
  144. package/lib-amd/coreApi/createContentModel.d.ts +9 -0
  145. package/lib-amd/coreApi/createContentModel.js +39 -0
  146. package/lib-amd/coreApi/createContentModel.js.map +1 -0
  147. package/lib-amd/coreApi/createEditorContext.d.ts +6 -0
  148. package/lib-amd/coreApi/createEditorContext.js +40 -0
  149. package/lib-amd/coreApi/createEditorContext.js.map +1 -0
  150. package/lib-amd/coreApi/formatContentModel.d.ts +12 -0
  151. package/lib-amd/coreApi/formatContentModel.js +128 -0
  152. package/lib-amd/coreApi/formatContentModel.js.map +1 -0
  153. package/lib-amd/coreApi/getDOMSelection.d.ts +5 -0
  154. package/lib-amd/coreApi/getDOMSelection.js +43 -0
  155. package/lib-amd/coreApi/getDOMSelection.js.map +1 -0
  156. package/lib-amd/coreApi/setContentModel.d.ts +9 -0
  157. package/lib-amd/coreApi/setContentModel.js +33 -0
  158. package/lib-amd/coreApi/setContentModel.js.map +1 -0
  159. package/lib-amd/coreApi/setDOMSelection.d.ts +5 -0
  160. package/lib-amd/coreApi/setDOMSelection.js +43 -0
  161. package/lib-amd/coreApi/setDOMSelection.js.map +1 -0
  162. package/lib-amd/coreApi/switchShadowEdit.d.ts +8 -0
  163. package/lib-amd/coreApi/switchShadowEdit.js +55 -0
  164. package/lib-amd/coreApi/switchShadowEdit.js.map +1 -0
  165. package/lib-amd/corePlugin/ContentModelCachePlugin.d.ts +53 -0
  166. package/lib-amd/corePlugin/ContentModelCachePlugin.js +169 -0
  167. package/lib-amd/corePlugin/ContentModelCachePlugin.js.map +1 -0
  168. package/lib-amd/corePlugin/ContentModelCopyPastePlugin.d.ts +46 -0
  169. package/lib-amd/corePlugin/ContentModelCopyPastePlugin.js +226 -0
  170. package/lib-amd/corePlugin/ContentModelCopyPastePlugin.js.map +1 -0
  171. package/lib-amd/corePlugin/ContentModelFormatPlugin.d.ts +59 -0
  172. package/lib-amd/corePlugin/ContentModelFormatPlugin.js +145 -0
  173. package/lib-amd/corePlugin/ContentModelFormatPlugin.js.map +1 -0
  174. package/lib-amd/corePlugin/ContentModelTypeInContainerPlugin.d.ts +23 -0
  175. package/lib-amd/corePlugin/ContentModelTypeInContainerPlugin.js +34 -0
  176. package/lib-amd/corePlugin/ContentModelTypeInContainerPlugin.js.map +1 -0
  177. package/lib-amd/corePlugin/utils/addRangeToSelection.d.ts +4 -0
  178. package/lib-amd/corePlugin/utils/addRangeToSelection.js +18 -0
  179. package/lib-amd/corePlugin/utils/addRangeToSelection.js.map +1 -0
  180. package/lib-amd/corePlugin/utils/applyDefaultFormat.d.ts +9 -0
  181. package/lib-amd/corePlugin/utils/applyDefaultFormat.js +78 -0
  182. package/lib-amd/corePlugin/utils/applyDefaultFormat.js.map +1 -0
  183. package/lib-amd/corePlugin/utils/applyPendingFormat.d.ts +8 -0
  184. package/lib-amd/corePlugin/utils/applyPendingFormat.js +50 -0
  185. package/lib-amd/corePlugin/utils/applyPendingFormat.js.map +1 -0
  186. package/lib-amd/corePlugin/utils/areSameSelection.d.ts +6 -0
  187. package/lib-amd/corePlugin/utils/areSameSelection.js +38 -0
  188. package/lib-amd/corePlugin/utils/areSameSelection.js.map +1 -0
  189. package/lib-amd/corePlugin/utils/contentModelDomIndexer.d.ts +6 -0
  190. package/lib-amd/corePlugin/utils/contentModelDomIndexer.js +189 -0
  191. package/lib-amd/corePlugin/utils/contentModelDomIndexer.js.map +1 -0
  192. package/lib-amd/editor/createContentModelEditorCore.d.ts +6 -0
  193. package/lib-amd/editor/createContentModelEditorCore.js +44 -0
  194. package/lib-amd/editor/createContentModelEditorCore.js.map +1 -0
  195. package/lib-amd/editor/promoteToContentModelEditorCore.d.ts +8 -0
  196. package/lib-amd/editor/promoteToContentModelEditorCore.js +64 -0
  197. package/lib-amd/editor/promoteToContentModelEditorCore.js.map +1 -0
  198. package/lib-amd/index.d.ts +29 -0
  199. package/lib-amd/index.js +44 -0
  200. package/lib-amd/index.js.map +1 -0
  201. package/lib-amd/metadata/definitionCreators.d.ts +48 -0
  202. package/lib-amd/metadata/definitionCreators.js +97 -0
  203. package/lib-amd/metadata/definitionCreators.js.map +1 -0
  204. package/lib-amd/metadata/updateImageMetadata.d.ts +7 -0
  205. package/lib-amd/metadata/updateImageMetadata.js +28 -0
  206. package/lib-amd/metadata/updateImageMetadata.js.map +1 -0
  207. package/lib-amd/metadata/updateListMetadata.d.ts +15 -0
  208. package/lib-amd/metadata/updateListMetadata.js +179 -0
  209. package/lib-amd/metadata/updateListMetadata.js.map +1 -0
  210. package/lib-amd/metadata/updateTableCellMetadata.d.ts +7 -0
  211. package/lib-amd/metadata/updateTableCellMetadata.js +20 -0
  212. package/lib-amd/metadata/updateTableCellMetadata.js.map +1 -0
  213. package/lib-amd/metadata/updateTableMetadata.d.ts +7 -0
  214. package/lib-amd/metadata/updateTableMetadata.js +31 -0
  215. package/lib-amd/metadata/updateTableMetadata.js.map +1 -0
  216. package/lib-amd/modelApi/edit/deleteExpandedSelection.d.ts +7 -0
  217. package/lib-amd/modelApi/edit/deleteExpandedSelection.js +96 -0
  218. package/lib-amd/modelApi/edit/deleteExpandedSelection.js.map +1 -0
  219. package/lib-amd/modelApi/edit/deleteSingleChar.d.ts +4 -0
  220. package/lib-amd/modelApi/edit/deleteSingleChar.js +37 -0
  221. package/lib-amd/modelApi/edit/deleteSingleChar.js.map +1 -0
  222. package/lib-amd/override/tablePreProcessor.d.ts +5 -0
  223. package/lib-amd/override/tablePreProcessor.js +25 -0
  224. package/lib-amd/override/tablePreProcessor.js.map +1 -0
  225. package/lib-amd/publicApi/domUtils/borderValues.d.ts +13 -0
  226. package/lib-amd/publicApi/domUtils/borderValues.js +50 -0
  227. package/lib-amd/publicApi/domUtils/borderValues.js.map +1 -0
  228. package/lib-amd/publicApi/domUtils/eventUtils.d.ts +13 -0
  229. package/lib-amd/publicApi/domUtils/eventUtils.js +31 -0
  230. package/lib-amd/publicApi/domUtils/eventUtils.js.map +1 -0
  231. package/lib-amd/publicApi/domUtils/stringUtil.d.ts +18 -0
  232. package/lib-amd/publicApi/domUtils/stringUtil.js +37 -0
  233. package/lib-amd/publicApi/domUtils/stringUtil.js.map +1 -0
  234. package/lib-amd/publicApi/model/cloneModel.d.ts +30 -0
  235. package/lib-amd/publicApi/model/cloneModel.js +208 -0
  236. package/lib-amd/publicApi/model/cloneModel.js.map +1 -0
  237. package/lib-amd/publicApi/model/getClosestAncestorBlockGroupIndex.d.ts +12 -0
  238. package/lib-amd/publicApi/model/getClosestAncestorBlockGroupIndex.js +30 -0
  239. package/lib-amd/publicApi/model/getClosestAncestorBlockGroupIndex.js.map +1 -0
  240. package/lib-amd/publicApi/model/isBlockGroupOfType.d.ts +8 -0
  241. package/lib-amd/publicApi/model/isBlockGroupOfType.js +16 -0
  242. package/lib-amd/publicApi/model/isBlockGroupOfType.js.map +1 -0
  243. package/lib-amd/publicApi/model/mergeModel.d.ts +36 -0
  244. package/lib-amd/publicApi/model/mergeModel.js +258 -0
  245. package/lib-amd/publicApi/model/mergeModel.js.map +1 -0
  246. package/lib-amd/publicApi/model/paste.d.ts +14 -0
  247. package/lib-amd/publicApi/model/paste.js +146 -0
  248. package/lib-amd/publicApi/model/paste.js.map +1 -0
  249. package/lib-amd/publicApi/selection/collectSelections.d.ts +50 -0
  250. package/lib-amd/publicApi/selection/collectSelections.js +180 -0
  251. package/lib-amd/publicApi/selection/collectSelections.js.map +1 -0
  252. package/lib-amd/publicApi/selection/deleteBlock.d.ts +11 -0
  253. package/lib-amd/publicApi/selection/deleteBlock.js +58 -0
  254. package/lib-amd/publicApi/selection/deleteBlock.js.map +1 -0
  255. package/lib-amd/publicApi/selection/deleteSegment.d.ts +10 -0
  256. package/lib-amd/publicApi/selection/deleteSegment.js +87 -0
  257. package/lib-amd/publicApi/selection/deleteSegment.js.map +1 -0
  258. package/lib-amd/publicApi/selection/deleteSelection.d.ts +9 -0
  259. package/lib-amd/publicApi/selection/deleteSelection.js +44 -0
  260. package/lib-amd/publicApi/selection/deleteSelection.js.map +1 -0
  261. package/lib-amd/publicApi/selection/getSelectionRootNode.d.ts +9 -0
  262. package/lib-amd/publicApi/selection/getSelectionRootNode.js +25 -0
  263. package/lib-amd/publicApi/selection/getSelectionRootNode.js.map +1 -0
  264. package/lib-amd/publicApi/selection/iterateSelections.d.ts +48 -0
  265. package/lib-amd/publicApi/selection/iterateSelections.js +148 -0
  266. package/lib-amd/publicApi/selection/iterateSelections.js.map +1 -0
  267. package/lib-amd/publicApi/selection/setSelection.d.ts +8 -0
  268. package/lib-amd/publicApi/selection/setSelection.js +132 -0
  269. package/lib-amd/publicApi/selection/setSelection.js.map +1 -0
  270. package/lib-amd/publicApi/table/applyTableFormat.d.ts +8 -0
  271. package/lib-amd/publicApi/table/applyTableFormat.js +236 -0
  272. package/lib-amd/publicApi/table/applyTableFormat.js.map +1 -0
  273. package/lib-amd/publicApi/table/normalizeTable.d.ts +13 -0
  274. package/lib-amd/publicApi/table/normalizeTable.js +121 -0
  275. package/lib-amd/publicApi/table/normalizeTable.js.map +1 -0
  276. package/lib-amd/publicApi/table/setTableCellBackgroundColor.d.ts +15 -0
  277. package/lib-amd/publicApi/table/setTableCellBackgroundColor.js +105 -0
  278. package/lib-amd/publicApi/table/setTableCellBackgroundColor.js.map +1 -0
  279. package/lib-mjs/constants/ChangeSource.d.ts +59 -0
  280. package/lib-mjs/constants/ChangeSource.js +60 -0
  281. package/lib-mjs/constants/ChangeSource.js.map +1 -0
  282. package/lib-mjs/coreApi/createContentModel.d.ts +9 -0
  283. package/lib-mjs/coreApi/createContentModel.js +36 -0
  284. package/lib-mjs/coreApi/createContentModel.js.map +1 -0
  285. package/lib-mjs/coreApi/createEditorContext.d.ts +6 -0
  286. package/lib-mjs/coreApi/createEditorContext.js +34 -0
  287. package/lib-mjs/coreApi/createEditorContext.js.map +1 -0
  288. package/lib-mjs/coreApi/formatContentModel.d.ts +12 -0
  289. package/lib-mjs/coreApi/formatContentModel.js +124 -0
  290. package/lib-mjs/coreApi/formatContentModel.js.map +1 -0
  291. package/lib-mjs/coreApi/getDOMSelection.d.ts +5 -0
  292. package/lib-mjs/coreApi/getDOMSelection.js +37 -0
  293. package/lib-mjs/coreApi/getDOMSelection.js.map +1 -0
  294. package/lib-mjs/coreApi/setContentModel.d.ts +9 -0
  295. package/lib-mjs/coreApi/setContentModel.js +29 -0
  296. package/lib-mjs/coreApi/setContentModel.js.map +1 -0
  297. package/lib-mjs/coreApi/setDOMSelection.d.ts +5 -0
  298. package/lib-mjs/coreApi/setDOMSelection.js +37 -0
  299. package/lib-mjs/coreApi/setDOMSelection.js.map +1 -0
  300. package/lib-mjs/coreApi/switchShadowEdit.d.ts +8 -0
  301. package/lib-mjs/coreApi/switchShadowEdit.js +50 -0
  302. package/lib-mjs/coreApi/switchShadowEdit.js.map +1 -0
  303. package/lib-mjs/corePlugin/ContentModelCachePlugin.d.ts +53 -0
  304. package/lib-mjs/corePlugin/ContentModelCachePlugin.js +165 -0
  305. package/lib-mjs/corePlugin/ContentModelCachePlugin.js.map +1 -0
  306. package/lib-mjs/corePlugin/ContentModelCopyPastePlugin.d.ts +46 -0
  307. package/lib-mjs/corePlugin/ContentModelCopyPastePlugin.js +228 -0
  308. package/lib-mjs/corePlugin/ContentModelCopyPastePlugin.js.map +1 -0
  309. package/lib-mjs/corePlugin/ContentModelFormatPlugin.d.ts +59 -0
  310. package/lib-mjs/corePlugin/ContentModelFormatPlugin.js +143 -0
  311. package/lib-mjs/corePlugin/ContentModelFormatPlugin.js.map +1 -0
  312. package/lib-mjs/corePlugin/ContentModelTypeInContainerPlugin.d.ts +23 -0
  313. package/lib-mjs/corePlugin/ContentModelTypeInContainerPlugin.js +29 -0
  314. package/lib-mjs/corePlugin/ContentModelTypeInContainerPlugin.js.map +1 -0
  315. package/lib-mjs/corePlugin/utils/addRangeToSelection.d.ts +4 -0
  316. package/lib-mjs/corePlugin/utils/addRangeToSelection.js +12 -0
  317. package/lib-mjs/corePlugin/utils/addRangeToSelection.js.map +1 -0
  318. package/lib-mjs/corePlugin/utils/applyDefaultFormat.d.ts +9 -0
  319. package/lib-mjs/corePlugin/utils/applyDefaultFormat.js +75 -0
  320. package/lib-mjs/corePlugin/utils/applyDefaultFormat.js.map +1 -0
  321. package/lib-mjs/corePlugin/utils/applyPendingFormat.d.ts +8 -0
  322. package/lib-mjs/corePlugin/utils/applyPendingFormat.js +47 -0
  323. package/lib-mjs/corePlugin/utils/applyPendingFormat.js.map +1 -0
  324. package/lib-mjs/corePlugin/utils/areSameSelection.d.ts +6 -0
  325. package/lib-mjs/corePlugin/utils/areSameSelection.js +32 -0
  326. package/lib-mjs/corePlugin/utils/areSameSelection.js.map +1 -0
  327. package/lib-mjs/corePlugin/utils/contentModelDomIndexer.d.ts +6 -0
  328. package/lib-mjs/corePlugin/utils/contentModelDomIndexer.js +187 -0
  329. package/lib-mjs/corePlugin/utils/contentModelDomIndexer.js.map +1 -0
  330. package/lib-mjs/editor/createContentModelEditorCore.d.ts +6 -0
  331. package/lib-mjs/editor/createContentModelEditorCore.js +46 -0
  332. package/lib-mjs/editor/createContentModelEditorCore.js.map +1 -0
  333. package/lib-mjs/editor/promoteToContentModelEditorCore.d.ts +8 -0
  334. package/lib-mjs/editor/promoteToContentModelEditorCore.js +68 -0
  335. package/lib-mjs/editor/promoteToContentModelEditorCore.js.map +1 -0
  336. package/lib-mjs/index.d.ts +29 -0
  337. package/lib-mjs/index.js +30 -0
  338. package/lib-mjs/index.js.map +1 -0
  339. package/lib-mjs/metadata/definitionCreators.d.ts +48 -0
  340. package/lib-mjs/metadata/definitionCreators.js +87 -0
  341. package/lib-mjs/metadata/definitionCreators.js.map +1 -0
  342. package/lib-mjs/metadata/updateImageMetadata.d.ts +7 -0
  343. package/lib-mjs/metadata/updateImageMetadata.js +24 -0
  344. package/lib-mjs/metadata/updateImageMetadata.js.map +1 -0
  345. package/lib-mjs/metadata/updateListMetadata.d.ts +15 -0
  346. package/lib-mjs/metadata/updateListMetadata.js +177 -0
  347. package/lib-mjs/metadata/updateListMetadata.js.map +1 -0
  348. package/lib-mjs/metadata/updateTableCellMetadata.d.ts +7 -0
  349. package/lib-mjs/metadata/updateTableCellMetadata.js +16 -0
  350. package/lib-mjs/metadata/updateTableCellMetadata.js.map +1 -0
  351. package/lib-mjs/metadata/updateTableMetadata.d.ts +7 -0
  352. package/lib-mjs/metadata/updateTableMetadata.js +28 -0
  353. package/lib-mjs/metadata/updateTableMetadata.js.map +1 -0
  354. package/lib-mjs/modelApi/edit/deleteExpandedSelection.d.ts +7 -0
  355. package/lib-mjs/modelApi/edit/deleteExpandedSelection.js +95 -0
  356. package/lib-mjs/modelApi/edit/deleteExpandedSelection.js.map +1 -0
  357. package/lib-mjs/modelApi/edit/deleteSingleChar.d.ts +4 -0
  358. package/lib-mjs/modelApi/edit/deleteSingleChar.js +32 -0
  359. package/lib-mjs/modelApi/edit/deleteSingleChar.js.map +1 -0
  360. package/lib-mjs/override/tablePreProcessor.d.ts +5 -0
  361. package/lib-mjs/override/tablePreProcessor.js +21 -0
  362. package/lib-mjs/override/tablePreProcessor.js.map +1 -0
  363. package/lib-mjs/publicApi/domUtils/borderValues.d.ts +13 -0
  364. package/lib-mjs/publicApi/domUtils/borderValues.js +43 -0
  365. package/lib-mjs/publicApi/domUtils/borderValues.js.map +1 -0
  366. package/lib-mjs/publicApi/domUtils/eventUtils.d.ts +13 -0
  367. package/lib-mjs/publicApi/domUtils/eventUtils.js +24 -0
  368. package/lib-mjs/publicApi/domUtils/eventUtils.js.map +1 -0
  369. package/lib-mjs/publicApi/domUtils/stringUtil.d.ts +18 -0
  370. package/lib-mjs/publicApi/domUtils/stringUtil.js +29 -0
  371. package/lib-mjs/publicApi/domUtils/stringUtil.js.map +1 -0
  372. package/lib-mjs/publicApi/model/cloneModel.d.ts +30 -0
  373. package/lib-mjs/publicApi/model/cloneModel.js +203 -0
  374. package/lib-mjs/publicApi/model/cloneModel.js.map +1 -0
  375. package/lib-mjs/publicApi/model/getClosestAncestorBlockGroupIndex.d.ts +12 -0
  376. package/lib-mjs/publicApi/model/getClosestAncestorBlockGroupIndex.js +24 -0
  377. package/lib-mjs/publicApi/model/getClosestAncestorBlockGroupIndex.js.map +1 -0
  378. package/lib-mjs/publicApi/model/isBlockGroupOfType.d.ts +8 -0
  379. package/lib-mjs/publicApi/model/isBlockGroupOfType.js +10 -0
  380. package/lib-mjs/publicApi/model/isBlockGroupOfType.js.map +1 -0
  381. package/lib-mjs/publicApi/model/mergeModel.d.ts +36 -0
  382. package/lib-mjs/publicApi/model/mergeModel.js +258 -0
  383. package/lib-mjs/publicApi/model/mergeModel.js.map +1 -0
  384. package/lib-mjs/publicApi/model/paste.d.ts +14 -0
  385. package/lib-mjs/publicApi/model/paste.js +145 -0
  386. package/lib-mjs/publicApi/model/paste.js.map +1 -0
  387. package/lib-mjs/publicApi/selection/collectSelections.d.ts +50 -0
  388. package/lib-mjs/publicApi/selection/collectSelections.js +173 -0
  389. package/lib-mjs/publicApi/selection/collectSelections.js.map +1 -0
  390. package/lib-mjs/publicApi/selection/deleteBlock.d.ts +11 -0
  391. package/lib-mjs/publicApi/selection/deleteBlock.js +52 -0
  392. package/lib-mjs/publicApi/selection/deleteBlock.js.map +1 -0
  393. package/lib-mjs/publicApi/selection/deleteSegment.d.ts +10 -0
  394. package/lib-mjs/publicApi/selection/deleteSegment.js +84 -0
  395. package/lib-mjs/publicApi/selection/deleteSegment.js.map +1 -0
  396. package/lib-mjs/publicApi/selection/deleteSelection.d.ts +9 -0
  397. package/lib-mjs/publicApi/selection/deleteSelection.js +40 -0
  398. package/lib-mjs/publicApi/selection/deleteSelection.js.map +1 -0
  399. package/lib-mjs/publicApi/selection/getSelectionRootNode.d.ts +9 -0
  400. package/lib-mjs/publicApi/selection/getSelectionRootNode.js +19 -0
  401. package/lib-mjs/publicApi/selection/getSelectionRootNode.js.map +1 -0
  402. package/lib-mjs/publicApi/selection/iterateSelections.d.ts +48 -0
  403. package/lib-mjs/publicApi/selection/iterateSelections.js +143 -0
  404. package/lib-mjs/publicApi/selection/iterateSelections.js.map +1 -0
  405. package/lib-mjs/publicApi/selection/setSelection.d.ts +8 -0
  406. package/lib-mjs/publicApi/selection/setSelection.js +127 -0
  407. package/lib-mjs/publicApi/selection/setSelection.js.map +1 -0
  408. package/lib-mjs/publicApi/table/applyTableFormat.d.ts +8 -0
  409. package/lib-mjs/publicApi/table/applyTableFormat.js +237 -0
  410. package/lib-mjs/publicApi/table/applyTableFormat.js.map +1 -0
  411. package/lib-mjs/publicApi/table/normalizeTable.d.ts +13 -0
  412. package/lib-mjs/publicApi/table/normalizeTable.js +117 -0
  413. package/lib-mjs/publicApi/table/normalizeTable.js.map +1 -0
  414. package/lib-mjs/publicApi/table/setTableCellBackgroundColor.d.ts +15 -0
  415. package/lib-mjs/publicApi/table/setTableCellBackgroundColor.js +100 -0
  416. package/lib-mjs/publicApi/table/setTableCellBackgroundColor.js.map +1 -0
  417. package/package.json +21 -0
@@ -0,0 +1,50 @@
1
+ define(["require", "exports"], function (require, exports) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.combineBorderValue = exports.extractBorderValues = void 0;
5
+ var BorderStyles = [
6
+ 'none',
7
+ 'hidden',
8
+ 'dotted',
9
+ 'dashed',
10
+ 'solid',
11
+ 'double',
12
+ 'groove',
13
+ 'ridge',
14
+ 'inset',
15
+ 'outset',
16
+ ];
17
+ var BorderSizeRegex = /^(thin|medium|thick|[\d\.]+\w*)$/;
18
+ /**
19
+ * Extract an integrated border string with border width, style, color to value tuple
20
+ * @param combinedBorder The integrated border style string
21
+ * @returns An array with the splitted values
22
+ */
23
+ function extractBorderValues(combinedBorder) {
24
+ var result = {};
25
+ var values = (combinedBorder || '').replace(/, /g, ',').split(' ');
26
+ values.forEach(function (v) {
27
+ if (BorderStyles.indexOf(v) >= 0 && !result.style) {
28
+ result.style = v;
29
+ }
30
+ else if (BorderSizeRegex.test(v) && !result.width) {
31
+ result.width = v;
32
+ }
33
+ else if (v && !result.color) {
34
+ result.color = v; // TODO: Do we need to use a regex to match all possible colors?
35
+ }
36
+ });
37
+ return result;
38
+ }
39
+ exports.extractBorderValues = extractBorderValues;
40
+ /**
41
+ * Combine border value array back to string
42
+ * @param values Input string values
43
+ * @param initialValue Initial value for those items without valid value
44
+ */
45
+ function combineBorderValue(value) {
46
+ return [value.width || '', value.style || '', value.color || ''].join(' ').trim() || 'none';
47
+ }
48
+ exports.combineBorderValue = combineBorderValue;
49
+ });
50
+ //# sourceMappingURL=borderValues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"borderValues.js","sourceRoot":"","sources":["../../../../../packages-content-model/roosterjs-content-model-core/lib/publicApi/domUtils/borderValues.ts"],"names":[],"mappings":";;;;IAEA,IAAM,YAAY,GAAG;QACjB,MAAM;QACN,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,OAAO;QACP,OAAO;QACP,QAAQ;KACX,CAAC;IACF,IAAM,eAAe,GAAG,kCAAkC,CAAC;IAE3D;;;;OAIG;IACH,SAAgB,mBAAmB,CAAC,cAAuB;QACvD,IAAM,MAAM,GAAW,EAAE,CAAC;QAC1B,IAAM,MAAM,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAErE,MAAM,CAAC,OAAO,CAAC,UAAA,CAAC;YACZ,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;gBAC/C,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;aACpB;iBAAM,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;gBACjD,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;aACpB;iBAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;gBAC3B,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,gEAAgE;aACrF;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;IAfD,kDAeC;IAED;;;;OAIG;IACH,SAAgB,kBAAkB,CAAC,KAAa;QAC5C,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC;IAChG,CAAC;IAFD,gDAEC","sourcesContent":["import type { Border } from 'roosterjs-content-model-types';\n\nconst BorderStyles = [\n 'none',\n 'hidden',\n 'dotted',\n 'dashed',\n 'solid',\n 'double',\n 'groove',\n 'ridge',\n 'inset',\n 'outset',\n];\nconst BorderSizeRegex = /^(thin|medium|thick|[\\d\\.]+\\w*)$/;\n\n/**\n * Extract an integrated border string with border width, style, color to value tuple\n * @param combinedBorder The integrated border style string\n * @returns An array with the splitted values\n */\nexport function extractBorderValues(combinedBorder?: string): Border {\n const result: Border = {};\n const values = (combinedBorder || '').replace(/, /g, ',').split(' ');\n\n values.forEach(v => {\n if (BorderStyles.indexOf(v) >= 0 && !result.style) {\n result.style = v;\n } else if (BorderSizeRegex.test(v) && !result.width) {\n result.width = v;\n } else if (v && !result.color) {\n result.color = v; // TODO: Do we need to use a regex to match all possible colors?\n }\n });\n\n return result;\n}\n\n/**\n * Combine border value array back to string\n * @param values Input string values\n * @param initialValue Initial value for those items without valid value\n */\nexport function combineBorderValue(value: Border): string {\n return [value.width || '', value.style || '', value.color || ''].join(' ').trim() || 'none';\n}\n"]}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Returns true when the event was fired from a modifier key, otherwise false
3
+ * @param event The keyboard event object
4
+ */
5
+ export declare function isModifierKey(event: KeyboardEvent): boolean;
6
+ /**
7
+ * Returns true when the event was fired from a key that produces a character value, otherwise false
8
+ * This detection is not 100% accurate. event.key is not fully supported by all browsers, and in some browsers (e.g. IE),
9
+ * event.key is longer than 1 for num pad input. But here we just want to improve performance as much as possible.
10
+ * So if we missed some case here it is still acceptable.
11
+ * @param event The keyboard event object
12
+ */
13
+ export declare function isCharacterValue(event: KeyboardEvent): boolean;
@@ -0,0 +1,31 @@
1
+ define(["require", "exports"], function (require, exports) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.isCharacterValue = exports.isModifierKey = void 0;
5
+ var CTRL_CHAR_CODE = 'Control';
6
+ var ALT_CHAR_CODE = 'Alt';
7
+ var META_CHAR_CODE = 'Meta';
8
+ /**
9
+ * Returns true when the event was fired from a modifier key, otherwise false
10
+ * @param event The keyboard event object
11
+ */
12
+ function isModifierKey(event) {
13
+ var isCtrlKey = event.ctrlKey || event.key === CTRL_CHAR_CODE;
14
+ var isAltKey = event.altKey || event.key === ALT_CHAR_CODE;
15
+ var isMetaKey = event.metaKey || event.key === META_CHAR_CODE;
16
+ return isCtrlKey || isAltKey || isMetaKey;
17
+ }
18
+ exports.isModifierKey = isModifierKey;
19
+ /**
20
+ * Returns true when the event was fired from a key that produces a character value, otherwise false
21
+ * This detection is not 100% accurate. event.key is not fully supported by all browsers, and in some browsers (e.g. IE),
22
+ * event.key is longer than 1 for num pad input. But here we just want to improve performance as much as possible.
23
+ * So if we missed some case here it is still acceptable.
24
+ * @param event The keyboard event object
25
+ */
26
+ function isCharacterValue(event) {
27
+ return !isModifierKey(event) && !!event.key && event.key.length == 1;
28
+ }
29
+ exports.isCharacterValue = isCharacterValue;
30
+ });
31
+ //# sourceMappingURL=eventUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventUtils.js","sourceRoot":"","sources":["../../../../../packages-content-model/roosterjs-content-model-core/lib/publicApi/domUtils/eventUtils.ts"],"names":[],"mappings":";;;;IAAA,IAAM,cAAc,GAAG,SAAS,CAAC;IACjC,IAAM,aAAa,GAAG,KAAK,CAAC;IAC5B,IAAM,cAAc,GAAG,MAAM,CAAC;IAE9B;;;OAGG;IACH,SAAgB,aAAa,CAAC,KAAoB;QAC9C,IAAM,SAAS,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,cAAc,CAAC;QAChE,IAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,aAAa,CAAC;QAC7D,IAAM,SAAS,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,cAAc,CAAC;QAEhE,OAAO,SAAS,IAAI,QAAQ,IAAI,SAAS,CAAC;IAC9C,CAAC;IAND,sCAMC;IAED;;;;;;OAMG;IACH,SAAgB,gBAAgB,CAAC,KAAoB;QACjD,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;IACzE,CAAC;IAFD,4CAEC","sourcesContent":["const CTRL_CHAR_CODE = 'Control';\nconst ALT_CHAR_CODE = 'Alt';\nconst META_CHAR_CODE = 'Meta';\n\n/**\n * Returns true when the event was fired from a modifier key, otherwise false\n * @param event The keyboard event object\n */\nexport function isModifierKey(event: KeyboardEvent): boolean {\n const isCtrlKey = event.ctrlKey || event.key === CTRL_CHAR_CODE;\n const isAltKey = event.altKey || event.key === ALT_CHAR_CODE;\n const isMetaKey = event.metaKey || event.key === META_CHAR_CODE;\n\n return isCtrlKey || isAltKey || isMetaKey;\n}\n\n/**\n * Returns true when the event was fired from a key that produces a character value, otherwise false\n * This detection is not 100% accurate. event.key is not fully supported by all browsers, and in some browsers (e.g. IE),\n * event.key is longer than 1 for num pad input. But here we just want to improve performance as much as possible.\n * So if we missed some case here it is still acceptable.\n * @param event The keyboard event object\n */\nexport function isCharacterValue(event: KeyboardEvent): boolean {\n return !isModifierKey(event) && !!event.key && event.key.length == 1;\n}\n"]}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Check if the given character is punctuation
3
+ * @param char The character to check
4
+ */
5
+ export declare function isPunctuation(char: string): boolean;
6
+ /**
7
+ * Check if the give character is a space. A space can be normal ASCII pace (32) or non-break space (160) or other kinds of spaces
8
+ * such as ZeroWidthSpace, ...
9
+ * @param char The character to check
10
+ */
11
+ export declare function isSpace(char: string): boolean;
12
+ /**
13
+ * Normalize spaces of the given string. After normalization, all leading (for forward) or trailing (for backward) spaces
14
+ * will be replaces with non-break space (160)
15
+ * @param txt The string to normalize
16
+ * @param isForward Whether normalize forward or backward
17
+ */
18
+ export declare function normalizeText(txt: string, isForward: boolean): string;
@@ -0,0 +1,37 @@
1
+ define(["require", "exports"], function (require, exports) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.normalizeText = exports.isSpace = exports.isPunctuation = void 0;
5
+ var SPACES_REGEX = /[\u2000\u2009\u200a​\u200b​\u202f\u205f​\u3000\s\t\r\n]/gm;
6
+ var PUNCTUATIONS = '.,?!:"()[]\\/';
7
+ /**
8
+ * Check if the given character is punctuation
9
+ * @param char The character to check
10
+ */
11
+ function isPunctuation(char) {
12
+ return PUNCTUATIONS.indexOf(char) >= 0;
13
+ }
14
+ exports.isPunctuation = isPunctuation;
15
+ /**
16
+ * Check if the give character is a space. A space can be normal ASCII pace (32) or non-break space (160) or other kinds of spaces
17
+ * such as ZeroWidthSpace, ...
18
+ * @param char The character to check
19
+ */
20
+ function isSpace(char) {
21
+ var _a;
22
+ var code = (_a = char === null || char === void 0 ? void 0 : char.charCodeAt(0)) !== null && _a !== void 0 ? _a : 0;
23
+ return code == 160 || code == 32 || SPACES_REGEX.test(char);
24
+ }
25
+ exports.isSpace = isSpace;
26
+ /**
27
+ * Normalize spaces of the given string. After normalization, all leading (for forward) or trailing (for backward) spaces
28
+ * will be replaces with non-break space (160)
29
+ * @param txt The string to normalize
30
+ * @param isForward Whether normalize forward or backward
31
+ */
32
+ function normalizeText(txt, isForward) {
33
+ return txt.replace(isForward ? /^\u0020+/ : /\u0020+$/, '\u00A0');
34
+ }
35
+ exports.normalizeText = normalizeText;
36
+ });
37
+ //# sourceMappingURL=stringUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringUtil.js","sourceRoot":"","sources":["../../../../../packages-content-model/roosterjs-content-model-core/lib/publicApi/domUtils/stringUtil.ts"],"names":[],"mappings":";;;;IAAA,IAAM,YAAY,GAAG,2DAA2D,CAAC;IACjF,IAAM,YAAY,GAAG,eAAe,CAAC;IAErC;;;OAGG;IACH,SAAgB,aAAa,CAAC,IAAY;QACtC,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAFD,sCAEC;IAED;;;;OAIG;IACH,SAAgB,OAAO,CAAC,IAAY;;QAChC,IAAM,IAAI,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC;QACtC,OAAO,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAHD,0BAGC;IAED;;;;;OAKG;IACH,SAAgB,aAAa,CAAC,GAAW,EAAE,SAAkB;QACzD,OAAO,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACtE,CAAC;IAFD,sCAEC","sourcesContent":["const SPACES_REGEX = /[\\u2000\\u2009\\u200a​\\u200b​\\u202f\\u205f​\\u3000\\s\\t\\r\\n]/gm;\nconst PUNCTUATIONS = '.,?!:\"()[]\\\\/';\n\n/**\n * Check if the given character is punctuation\n * @param char The character to check\n */\nexport function isPunctuation(char: string) {\n return PUNCTUATIONS.indexOf(char) >= 0;\n}\n\n/**\n * Check if the give character is a space. A space can be normal ASCII pace (32) or non-break space (160) or other kinds of spaces\n * such as ZeroWidthSpace, ...\n * @param char The character to check\n */\nexport function isSpace(char: string) {\n const code = char?.charCodeAt(0) ?? 0;\n return code == 160 || code == 32 || SPACES_REGEX.test(char);\n}\n\n/**\n * Normalize spaces of the given string. After normalization, all leading (for forward) or trailing (for backward) spaces\n * will be replaces with non-break space (160)\n * @param txt The string to normalize\n * @param isForward Whether normalize forward or backward\n */\nexport function normalizeText(txt: string, isForward: boolean): string {\n return txt.replace(isForward ? /^\\u0020+/ : /\\u0020+$/, '\\u00A0');\n}\n"]}
@@ -0,0 +1,30 @@
1
+ import type { ContentModelDocument } from 'roosterjs-content-model-types';
2
+ /**
3
+ * Function type used for cloneModel API to specify how to handle cached element when clone a model
4
+ * @param node The cached node
5
+ * @param type Type of the node, it can be
6
+ * - general: DOM element of ContentModelGeneralSegment or ContentModelGeneralBlock
7
+ * - entity: Wrapper element in ContentModelEntity
8
+ * - cache: Cached node in other model element that supports cache
9
+ */
10
+ export declare type CachedElementHandler = (node: HTMLElement, type: 'general' | 'entity' | 'cache') => HTMLElement | undefined;
11
+ /**
12
+ *
13
+ * Options for cloneModel API
14
+ */
15
+ export interface CloneModelOptions {
16
+ /**
17
+ * Specify how to deal with cached element, including cached block element, element in General Model, and wrapper element in Entity
18
+ * - True: Cloned model will have the same reference to the cached element
19
+ * - False/Not passed: For cached block element, cached element will be undefined. For General Model and Entity, the element will have deep clone and assign to the cloned model
20
+ * - A callback: invoke the callback with the source cached element and a string to specify model type, let the callback return the expected value of cached element.
21
+ * For General Model and Entity, the callback must return a valid element, otherwise there will be exception thrown.
22
+ */
23
+ includeCachedElement?: boolean | CachedElementHandler;
24
+ }
25
+ /**
26
+ * Clone a content model
27
+ * @param model The content model to clone
28
+ * @param options @optional Options to specify customize the clone behavior
29
+ */
30
+ export declare function cloneModel(model: ContentModelDocument, options?: CloneModelOptions): ContentModelDocument;
@@ -0,0 +1,208 @@
1
+ define(["require", "exports", "tslib"], function (require, exports, tslib_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.cloneModel = void 0;
5
+ /**
6
+ * Clone a content model
7
+ * @param model The content model to clone
8
+ * @param options @optional Options to specify customize the clone behavior
9
+ */
10
+ function cloneModel(model, options) {
11
+ var newModel = cloneBlockGroupBase(model, options || {});
12
+ if (model.format) {
13
+ newModel.format = Object.assign({}, model.format);
14
+ }
15
+ return newModel;
16
+ }
17
+ exports.cloneModel = cloneModel;
18
+ function cloneBlock(block, options) {
19
+ switch (block.blockType) {
20
+ case 'BlockGroup':
21
+ switch (block.blockGroupType) {
22
+ case 'FormatContainer':
23
+ return cloneFormatContainer(block, options);
24
+ case 'General':
25
+ return cloneGeneralBlock(block, options);
26
+ case 'ListItem':
27
+ return cloneListItem(block, options);
28
+ }
29
+ break;
30
+ case 'Divider':
31
+ return cloneDivider(block, options);
32
+ case 'Entity':
33
+ return cloneEntity(block, options);
34
+ case 'Paragraph':
35
+ return cloneParagraph(block, options);
36
+ case 'Table':
37
+ return cloneTable(block, options);
38
+ }
39
+ }
40
+ function cloneSegment(segment, options) {
41
+ switch (segment.segmentType) {
42
+ case 'Br':
43
+ return cloneSegmentBase(segment);
44
+ case 'Entity':
45
+ return cloneEntity(segment, options);
46
+ case 'General':
47
+ return cloneGeneralSegment(segment, options);
48
+ case 'Image':
49
+ return cloneImage(segment);
50
+ case 'SelectionMarker':
51
+ return cloneSelectionMarker(segment);
52
+ case 'Text':
53
+ return cloneText(segment);
54
+ }
55
+ }
56
+ function cloneModelWithFormat(model) {
57
+ return {
58
+ format: Object.assign({}, model.format),
59
+ };
60
+ }
61
+ function cloneModelWithDataset(model) {
62
+ return {
63
+ dataset: Object.assign({}, model.dataset),
64
+ };
65
+ }
66
+ function cloneBlockBase(block) {
67
+ var blockType = block.blockType;
68
+ return Object.assign({
69
+ blockType: blockType,
70
+ }, cloneModelWithFormat(block));
71
+ }
72
+ function cloneBlockGroupBase(group, options) {
73
+ var blockGroupType = group.blockGroupType, blocks = group.blocks;
74
+ return {
75
+ blockGroupType: blockGroupType,
76
+ blocks: blocks.map(function (block) { return cloneBlock(block, options); }),
77
+ };
78
+ }
79
+ function cloneSegmentBase(segment) {
80
+ var segmentType = segment.segmentType, isSelected = segment.isSelected, code = segment.code, link = segment.link;
81
+ var newSegment = Object.assign({
82
+ segmentType: segmentType,
83
+ isSelected: isSelected,
84
+ }, cloneModelWithFormat(segment));
85
+ if (code) {
86
+ newSegment.code = cloneModelWithFormat(code);
87
+ }
88
+ if (link) {
89
+ newSegment.link = Object.assign(cloneModelWithFormat(link), cloneModelWithDataset(link));
90
+ }
91
+ return newSegment;
92
+ }
93
+ function cloneEntity(entity, options) {
94
+ var wrapper = entity.wrapper, entityFormat = entity.entityFormat;
95
+ return Object.assign({
96
+ wrapper: handleCachedElement(wrapper, 'entity', options),
97
+ entityFormat: (0, tslib_1.__assign)({}, entityFormat),
98
+ }, cloneBlockBase(entity), cloneSegmentBase(entity));
99
+ }
100
+ function cloneParagraph(paragraph, options) {
101
+ var cachedElement = paragraph.cachedElement, segments = paragraph.segments, isImplicit = paragraph.isImplicit, decorator = paragraph.decorator, segmentFormat = paragraph.segmentFormat;
102
+ var newParagraph = Object.assign({
103
+ cachedElement: handleCachedElement(cachedElement, 'cache', options),
104
+ isImplicit: isImplicit,
105
+ segments: segments.map(function (segment) { return cloneSegment(segment, options); }),
106
+ segmentFormat: segmentFormat ? (0, tslib_1.__assign)({}, segmentFormat) : undefined,
107
+ }, cloneBlockBase(paragraph), cloneModelWithFormat(paragraph));
108
+ if (decorator) {
109
+ newParagraph.decorator = Object.assign({
110
+ tagName: decorator.tagName,
111
+ }, cloneModelWithFormat(decorator));
112
+ }
113
+ return newParagraph;
114
+ }
115
+ function cloneTable(table, options) {
116
+ var cachedElement = table.cachedElement, widths = table.widths, rows = table.rows;
117
+ return Object.assign({
118
+ cachedElement: handleCachedElement(cachedElement, 'cache', options),
119
+ widths: Array.from(widths),
120
+ rows: rows.map(function (row) { return cloneTableRow(row, options); }),
121
+ }, cloneBlockBase(table), cloneModelWithDataset(table));
122
+ }
123
+ function cloneTableRow(row, options) {
124
+ var height = row.height, cells = row.cells, cachedElement = row.cachedElement;
125
+ return Object.assign({
126
+ height: height,
127
+ cachedElement: handleCachedElement(cachedElement, 'cache', options),
128
+ cells: cells.map(function (cell) { return cloneTableCell(cell, options); }),
129
+ }, cloneModelWithFormat(row));
130
+ }
131
+ function cloneTableCell(cell, options) {
132
+ var cachedElement = cell.cachedElement, isSelected = cell.isSelected, spanAbove = cell.spanAbove, spanLeft = cell.spanLeft, isHeader = cell.isHeader;
133
+ return Object.assign({
134
+ cachedElement: handleCachedElement(cachedElement, 'cache', options),
135
+ isSelected: isSelected,
136
+ spanAbove: spanAbove,
137
+ spanLeft: spanLeft,
138
+ isHeader: isHeader,
139
+ }, cloneBlockGroupBase(cell, options), cloneModelWithFormat(cell), cloneModelWithDataset(cell));
140
+ }
141
+ function cloneFormatContainer(container, options) {
142
+ var tagName = container.tagName, cachedElement = container.cachedElement;
143
+ var newContainer = Object.assign({ tagName: tagName, cachedElement: handleCachedElement(cachedElement, 'cache', options) }, cloneBlockBase(container), cloneBlockGroupBase(container, options));
144
+ if (container.zeroFontSize) {
145
+ newContainer.zeroFontSize = true;
146
+ }
147
+ return newContainer;
148
+ }
149
+ function cloneListItem(item, options) {
150
+ var formatHolder = item.formatHolder, levels = item.levels;
151
+ return Object.assign({
152
+ formatHolder: cloneSelectionMarker(formatHolder),
153
+ levels: levels.map(cloneListLevel),
154
+ }, cloneBlockBase(item), cloneBlockGroupBase(item, options));
155
+ }
156
+ function cloneListLevel(level) {
157
+ var listType = level.listType;
158
+ return Object.assign({ listType: listType }, cloneModelWithFormat(level), cloneModelWithDataset(level));
159
+ }
160
+ function cloneDivider(divider, options) {
161
+ var tagName = divider.tagName, isSelected = divider.isSelected, cachedElement = divider.cachedElement;
162
+ return Object.assign({
163
+ isSelected: isSelected,
164
+ tagName: tagName,
165
+ cachedElement: handleCachedElement(cachedElement, 'cache', options),
166
+ }, cloneBlockBase(divider));
167
+ }
168
+ function cloneGeneralBlock(general, options) {
169
+ var element = general.element;
170
+ return Object.assign({
171
+ element: handleCachedElement(element, 'general', options),
172
+ }, cloneBlockBase(general), cloneBlockGroupBase(general, options));
173
+ }
174
+ function cloneSelectionMarker(marker) {
175
+ return Object.assign({ isSelected: marker.isSelected }, cloneSegmentBase(marker));
176
+ }
177
+ function cloneImage(image) {
178
+ var src = image.src, alt = image.alt, title = image.title, isSelectedAsImageSelection = image.isSelectedAsImageSelection;
179
+ return Object.assign({ src: src, alt: alt, title: title, isSelectedAsImageSelection: isSelectedAsImageSelection }, cloneSegmentBase(image), cloneModelWithDataset(image));
180
+ }
181
+ function cloneGeneralSegment(general, options) {
182
+ return Object.assign(cloneGeneralBlock(general, options), cloneSegmentBase(general));
183
+ }
184
+ function cloneText(textSegment) {
185
+ var text = textSegment.text;
186
+ return Object.assign({ text: text }, cloneSegmentBase(textSegment));
187
+ }
188
+ function handleCachedElement(node, type, options) {
189
+ var includeCachedElement = options.includeCachedElement;
190
+ if (!node) {
191
+ return undefined;
192
+ }
193
+ else if (!includeCachedElement) {
194
+ return type == 'cache' ? undefined : node.cloneNode(true /*deep*/);
195
+ }
196
+ else if (includeCachedElement === true) {
197
+ return node;
198
+ }
199
+ else {
200
+ var result = includeCachedElement(node, type);
201
+ if ((type == 'general' || type == 'entity') && !result) {
202
+ throw new Error('Entity and General Model must has wrapper element');
203
+ }
204
+ return result;
205
+ }
206
+ }
207
+ });
208
+ //# sourceMappingURL=cloneModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloneModel.js","sourceRoot":"","sources":["../../../../../packages-content-model/roosterjs-content-model-core/lib/publicApi/model/cloneModel.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ContentModelBlock,\n ContentModelBlockBase,\n ContentModelBlockGroupBase,\n ContentModelBlockGroupType,\n ContentModelBlockType,\n ContentModelDivider,\n ContentModelDocument,\n ContentModelEntity,\n ContentModelFormatBase,\n ContentModelFormatContainer,\n ContentModelGeneralBlock,\n ContentModelImage,\n ContentModelListItem,\n ContentModelParagraph,\n ContentModelSegment,\n ContentModelSegmentBase,\n ContentModelSegmentType,\n ContentModelSelectionMarker,\n ContentModelTable,\n ContentModelTableCell,\n ContentModelWithDataset,\n ContentModelWithFormat,\n ContentModelGeneralSegment,\n ContentModelText,\n ContentModelTableRow,\n ContentModelListLevel,\n} from 'roosterjs-content-model-types';\n\n/**\n * Function type used for cloneModel API to specify how to handle cached element when clone a model\n * @param node The cached node\n * @param type Type of the node, it can be\n * - general: DOM element of ContentModelGeneralSegment or ContentModelGeneralBlock\n * - entity: Wrapper element in ContentModelEntity\n * - cache: Cached node in other model element that supports cache\n */\nexport type CachedElementHandler = (\n node: HTMLElement,\n type: 'general' | 'entity' | 'cache'\n) => HTMLElement | undefined;\n\n/**\n *\n * Options for cloneModel API\n */\nexport interface CloneModelOptions {\n /**\n * Specify how to deal with cached element, including cached block element, element in General Model, and wrapper element in Entity\n * - True: Cloned model will have the same reference to the cached element\n * - False/Not passed: For cached block element, cached element will be undefined. For General Model and Entity, the element will have deep clone and assign to the cloned model\n * - A callback: invoke the callback with the source cached element and a string to specify model type, let the callback return the expected value of cached element.\n * For General Model and Entity, the callback must return a valid element, otherwise there will be exception thrown.\n */\n includeCachedElement?: boolean | CachedElementHandler;\n}\n\n/**\n * Clone a content model\n * @param model The content model to clone\n * @param options @optional Options to specify customize the clone behavior\n */\nexport function cloneModel(\n model: ContentModelDocument,\n options?: CloneModelOptions\n): ContentModelDocument {\n const newModel: ContentModelDocument = cloneBlockGroupBase(model, options || {});\n\n if (model.format) {\n newModel.format = Object.assign({}, model.format);\n }\n\n return newModel;\n}\n\nfunction cloneBlock(block: ContentModelBlock, options: CloneModelOptions): ContentModelBlock {\n switch (block.blockType) {\n case 'BlockGroup':\n switch (block.blockGroupType) {\n case 'FormatContainer':\n return cloneFormatContainer(block, options);\n case 'General':\n return cloneGeneralBlock(block, options);\n case 'ListItem':\n return cloneListItem(block, options);\n }\n break;\n case 'Divider':\n return cloneDivider(block, options);\n case 'Entity':\n return cloneEntity(block, options);\n case 'Paragraph':\n return cloneParagraph(block, options);\n case 'Table':\n return cloneTable(block, options);\n }\n}\n\nfunction cloneSegment(\n segment: ContentModelSegment,\n options: CloneModelOptions\n): ContentModelSegment {\n switch (segment.segmentType) {\n case 'Br':\n return cloneSegmentBase(segment);\n case 'Entity':\n return cloneEntity(segment, options);\n case 'General':\n return cloneGeneralSegment(segment, options);\n case 'Image':\n return cloneImage(segment);\n case 'SelectionMarker':\n return cloneSelectionMarker(segment);\n case 'Text':\n return cloneText(segment);\n }\n}\n\nfunction cloneModelWithFormat<T extends ContentModelFormatBase>(\n model: ContentModelWithFormat<T>\n): ContentModelWithFormat<T> {\n return {\n format: Object.assign({}, model.format),\n };\n}\n\nfunction cloneModelWithDataset<T>(model: ContentModelWithDataset<T>): ContentModelWithDataset<T> {\n return {\n dataset: Object.assign({}, model.dataset),\n };\n}\n\nfunction cloneBlockBase<T extends ContentModelBlockType>(\n block: ContentModelBlockBase<T>\n): ContentModelBlockBase<T> {\n const { blockType } = block;\n\n return Object.assign(\n {\n blockType,\n },\n cloneModelWithFormat(block)\n );\n}\n\nfunction cloneBlockGroupBase<T extends ContentModelBlockGroupType>(\n group: ContentModelBlockGroupBase<T>,\n options: CloneModelOptions\n): ContentModelBlockGroupBase<T> {\n const { blockGroupType, blocks } = group;\n\n return {\n blockGroupType: blockGroupType,\n blocks: blocks.map(block => cloneBlock(block, options)),\n };\n}\n\nfunction cloneSegmentBase<T extends ContentModelSegmentType>(\n segment: ContentModelSegmentBase<T>\n): ContentModelSegmentBase<T> {\n const { segmentType, isSelected, code, link } = segment;\n\n const newSegment: ContentModelSegmentBase<T> = Object.assign(\n {\n segmentType,\n isSelected,\n },\n cloneModelWithFormat(segment)\n );\n\n if (code) {\n newSegment.code = cloneModelWithFormat(code);\n }\n if (link) {\n newSegment.link = Object.assign(cloneModelWithFormat(link), cloneModelWithDataset(link));\n }\n\n return newSegment;\n}\n\nfunction cloneEntity(entity: ContentModelEntity, options: CloneModelOptions): ContentModelEntity {\n const { wrapper, entityFormat } = entity;\n\n return Object.assign(\n {\n wrapper: handleCachedElement(wrapper, 'entity', options),\n entityFormat: { ...entityFormat },\n },\n cloneBlockBase(entity),\n cloneSegmentBase(entity)\n );\n}\n\nfunction cloneParagraph(\n paragraph: ContentModelParagraph,\n options: CloneModelOptions\n): ContentModelParagraph {\n const { cachedElement, segments, isImplicit, decorator, segmentFormat } = paragraph;\n\n const newParagraph: ContentModelParagraph = Object.assign(\n {\n cachedElement: handleCachedElement(cachedElement, 'cache', options),\n isImplicit,\n segments: segments.map(segment => cloneSegment(segment, options)),\n segmentFormat: segmentFormat ? { ...segmentFormat } : undefined,\n },\n cloneBlockBase(paragraph),\n cloneModelWithFormat(paragraph)\n );\n\n if (decorator) {\n newParagraph.decorator = Object.assign(\n {\n tagName: decorator.tagName,\n },\n cloneModelWithFormat(decorator)\n );\n }\n\n return newParagraph;\n}\n\nfunction cloneTable(table: ContentModelTable, options: CloneModelOptions): ContentModelTable {\n const { cachedElement, widths, rows } = table;\n\n return Object.assign(\n {\n cachedElement: handleCachedElement(cachedElement, 'cache', options),\n widths: Array.from(widths),\n rows: rows.map(row => cloneTableRow(row, options)),\n },\n cloneBlockBase(table),\n cloneModelWithDataset(table)\n );\n}\n\nfunction cloneTableRow(\n row: ContentModelTableRow,\n options: CloneModelOptions\n): ContentModelTableRow {\n const { height, cells, cachedElement } = row;\n\n return Object.assign(\n {\n height,\n cachedElement: handleCachedElement(cachedElement, 'cache', options),\n cells: cells.map(cell => cloneTableCell(cell, options)),\n },\n cloneModelWithFormat(row)\n );\n}\n\nfunction cloneTableCell(\n cell: ContentModelTableCell,\n options: CloneModelOptions\n): ContentModelTableCell {\n const { cachedElement, isSelected, spanAbove, spanLeft, isHeader } = cell;\n\n return Object.assign(\n {\n cachedElement: handleCachedElement(cachedElement, 'cache', options),\n isSelected,\n spanAbove,\n spanLeft,\n isHeader,\n },\n cloneBlockGroupBase(cell, options),\n cloneModelWithFormat(cell),\n cloneModelWithDataset(cell)\n );\n}\n\nfunction cloneFormatContainer(\n container: ContentModelFormatContainer,\n options: CloneModelOptions\n): ContentModelFormatContainer {\n const { tagName, cachedElement } = container;\n const newContainer: ContentModelFormatContainer = Object.assign(\n { tagName, cachedElement: handleCachedElement(cachedElement, 'cache', options) },\n cloneBlockBase(container),\n cloneBlockGroupBase(container, options)\n );\n\n if (container.zeroFontSize) {\n newContainer.zeroFontSize = true;\n }\n\n return newContainer;\n}\n\nfunction cloneListItem(\n item: ContentModelListItem,\n options: CloneModelOptions\n): ContentModelListItem {\n const { formatHolder, levels } = item;\n\n return Object.assign(\n {\n formatHolder: cloneSelectionMarker(formatHolder),\n levels: levels.map(cloneListLevel),\n },\n cloneBlockBase(item),\n cloneBlockGroupBase(item, options)\n );\n}\n\nfunction cloneListLevel(level: ContentModelListLevel): ContentModelListLevel {\n const { listType } = level;\n\n return Object.assign({ listType }, cloneModelWithFormat(level), cloneModelWithDataset(level));\n}\nfunction cloneDivider(\n divider: ContentModelDivider,\n options: CloneModelOptions\n): ContentModelDivider {\n const { tagName, isSelected, cachedElement } = divider;\n\n return Object.assign(\n {\n isSelected,\n tagName,\n cachedElement: handleCachedElement(cachedElement, 'cache', options),\n },\n cloneBlockBase(divider)\n );\n}\n\nfunction cloneGeneralBlock(\n general: ContentModelGeneralBlock,\n options: CloneModelOptions\n): ContentModelGeneralBlock {\n const { element } = general;\n\n return Object.assign(\n {\n element: handleCachedElement(element, 'general', options),\n },\n cloneBlockBase(general),\n cloneBlockGroupBase(general, options)\n );\n}\n\nfunction cloneSelectionMarker(marker: ContentModelSelectionMarker): ContentModelSelectionMarker {\n return Object.assign({ isSelected: marker.isSelected }, cloneSegmentBase(marker));\n}\n\nfunction cloneImage(image: ContentModelImage): ContentModelImage {\n const { src, alt, title, isSelectedAsImageSelection } = image;\n\n return Object.assign(\n { src, alt, title, isSelectedAsImageSelection },\n cloneSegmentBase(image),\n cloneModelWithDataset(image)\n );\n}\n\nfunction cloneGeneralSegment(\n general: ContentModelGeneralSegment,\n options: CloneModelOptions\n): ContentModelGeneralSegment {\n return Object.assign(cloneGeneralBlock(general, options), cloneSegmentBase(general));\n}\n\nfunction cloneText(textSegment: ContentModelText): ContentModelText {\n const { text } = textSegment;\n return Object.assign({ text }, cloneSegmentBase(textSegment));\n}\n\nfunction handleCachedElement<T extends HTMLElement>(\n node: T,\n type: 'general' | 'entity',\n options: CloneModelOptions\n): T;\n\nfunction handleCachedElement<T extends HTMLElement>(\n node: T | undefined,\n type: 'cache',\n options: CloneModelOptions\n): T | undefined;\n\nfunction handleCachedElement<T extends HTMLElement>(\n node: T | undefined,\n type: 'general' | 'entity' | 'cache',\n options: CloneModelOptions\n): T | undefined {\n const { includeCachedElement } = options;\n\n if (!node) {\n return undefined;\n } else if (!includeCachedElement) {\n return type == 'cache' ? undefined : (node.cloneNode(true /*deep*/) as T);\n } else if (includeCachedElement === true) {\n return node;\n } else {\n const result = includeCachedElement(node, type) as T | undefined;\n\n if ((type == 'general' || type == 'entity') && !result) {\n throw new Error('Entity and General Model must has wrapper element');\n }\n\n return result;\n }\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import type { ContentModelBlockGroup, ContentModelBlockGroupBase, ContentModelBlockGroupType } from 'roosterjs-content-model-types';
2
+ /**
3
+ * Retrieve block group type string from a given block group
4
+ */
5
+ export declare type TypeOfBlockGroup<T extends ContentModelBlockGroup> = T extends ContentModelBlockGroupBase<infer U> ? U : never;
6
+ /**
7
+ * Get index of closest ancestor block group of the expected block group type. If not found, return -1
8
+ * @param path The block group path, from the closest one to root
9
+ * @param blockGroupTypes The expected block group types
10
+ * @param stopTypes @optional Block group types that will cause stop searching
11
+ */
12
+ export declare function getClosestAncestorBlockGroupIndex<T extends ContentModelBlockGroup>(path: ContentModelBlockGroup[], blockGroupTypes: TypeOfBlockGroup<T>[], stopTypes?: ContentModelBlockGroupType[]): number;
@@ -0,0 +1,30 @@
1
+ define(["require", "exports"], function (require, exports) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.getClosestAncestorBlockGroupIndex = void 0;
5
+ /**
6
+ * Get index of closest ancestor block group of the expected block group type. If not found, return -1
7
+ * @param path The block group path, from the closest one to root
8
+ * @param blockGroupTypes The expected block group types
9
+ * @param stopTypes @optional Block group types that will cause stop searching
10
+ */
11
+ function getClosestAncestorBlockGroupIndex(path, blockGroupTypes, stopTypes) {
12
+ if (stopTypes === void 0) { stopTypes = []; }
13
+ for (var i = 0; i < path.length; i++) {
14
+ var group = path[i];
15
+ if (blockGroupTypes.indexOf(group.blockGroupType) >= 0) {
16
+ return i;
17
+ }
18
+ else if (stopTypes.indexOf(group.blockGroupType) >= 0) {
19
+ // Do not go across boundary specified by stopTypes.
20
+ // For example, in most case we will set table as the boundary,
21
+ // in order to allow modify list item under a table when the table itself is in another list item
22
+ // Although this is not very likely to happen in most case, but we still need to handle it
23
+ return -1;
24
+ }
25
+ }
26
+ return -1;
27
+ }
28
+ exports.getClosestAncestorBlockGroupIndex = getClosestAncestorBlockGroupIndex;
29
+ });
30
+ //# sourceMappingURL=getClosestAncestorBlockGroupIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getClosestAncestorBlockGroupIndex.js","sourceRoot":"","sources":["../../../../../packages-content-model/roosterjs-content-model-core/lib/publicApi/model/getClosestAncestorBlockGroupIndex.ts"],"names":[],"mappings":";;;;IAaA;;;;;OAKG;IACH,SAAgB,iCAAiC,CAC7C,IAA8B,EAC9B,eAAsC,EACtC,SAA4C;QAA5C,0BAAA,EAAA,cAA4C;QAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClC,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAEtB,IAAK,eAA4B,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;gBAClE,OAAO,CAAC,CAAC;aACZ;iBAAM,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;gBACrD,oDAAoD;gBACpD,+DAA+D;gBAC/D,iGAAiG;gBACjG,0FAA0F;gBAC1F,OAAO,CAAC,CAAC,CAAC;aACb;SACJ;QAED,OAAO,CAAC,CAAC,CAAC;IACd,CAAC;IApBD,8EAoBC","sourcesContent":["import type {\n ContentModelBlockGroup,\n ContentModelBlockGroupBase,\n ContentModelBlockGroupType,\n} from 'roosterjs-content-model-types';\n\n/**\n * Retrieve block group type string from a given block group\n */\nexport type TypeOfBlockGroup<\n T extends ContentModelBlockGroup\n> = T extends ContentModelBlockGroupBase<infer U> ? U : never;\n\n/**\n * Get index of closest ancestor block group of the expected block group type. If not found, return -1\n * @param path The block group path, from the closest one to root\n * @param blockGroupTypes The expected block group types\n * @param stopTypes @optional Block group types that will cause stop searching\n */\nexport function getClosestAncestorBlockGroupIndex<T extends ContentModelBlockGroup>(\n path: ContentModelBlockGroup[],\n blockGroupTypes: TypeOfBlockGroup<T>[],\n stopTypes: ContentModelBlockGroupType[] = []\n): number {\n for (let i = 0; i < path.length; i++) {\n const group = path[i];\n\n if ((blockGroupTypes as string[]).indexOf(group.blockGroupType) >= 0) {\n return i;\n } else if (stopTypes.indexOf(group.blockGroupType) >= 0) {\n // Do not go across boundary specified by stopTypes.\n // For example, in most case we will set table as the boundary,\n // in order to allow modify list item under a table when the table itself is in another list item\n // Although this is not very likely to happen in most case, but we still need to handle it\n return -1;\n }\n }\n\n return -1;\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import type { ContentModelBlock, ContentModelBlockGroup } from 'roosterjs-content-model-types';
2
+ import type { TypeOfBlockGroup } from './getClosestAncestorBlockGroupIndex';
3
+ /**
4
+ * Check if the given content model block or block group is of the expected block group type
5
+ * @param input The object to check
6
+ * @param type The expected type
7
+ */
8
+ export declare function isBlockGroupOfType<T extends ContentModelBlockGroup>(input: ContentModelBlock | ContentModelBlockGroup | null | undefined, type: TypeOfBlockGroup<T>): input is T;
@@ -0,0 +1,16 @@
1
+ define(["require", "exports"], function (require, exports) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.isBlockGroupOfType = void 0;
5
+ /**
6
+ * Check if the given content model block or block group is of the expected block group type
7
+ * @param input The object to check
8
+ * @param type The expected type
9
+ */
10
+ function isBlockGroupOfType(input, type) {
11
+ var item = input;
12
+ return (item === null || item === void 0 ? void 0 : item.blockGroupType) == type;
13
+ }
14
+ exports.isBlockGroupOfType = isBlockGroupOfType;
15
+ });
16
+ //# sourceMappingURL=isBlockGroupOfType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isBlockGroupOfType.js","sourceRoot":"","sources":["../../../../../packages-content-model/roosterjs-content-model-core/lib/publicApi/model/isBlockGroupOfType.ts"],"names":[],"mappings":";;;;IAGA;;;;OAIG;IACH,SAAgB,kBAAkB,CAC9B,KAAoE,EACpE,IAAyB;QAEzB,IAAM,IAAI,GAAyB,KAAK,CAAC;QAEzC,OAAO,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,KAAI,IAAI,CAAC;IACxC,CAAC;IAPD,gDAOC","sourcesContent":["import type { ContentModelBlock, ContentModelBlockGroup } from 'roosterjs-content-model-types';\nimport type { TypeOfBlockGroup } from './getClosestAncestorBlockGroupIndex';\n\n/**\n * Check if the given content model block or block group is of the expected block group type\n * @param input The object to check\n * @param type The expected type\n */\nexport function isBlockGroupOfType<T extends ContentModelBlockGroup>(\n input: ContentModelBlock | ContentModelBlockGroup | null | undefined,\n type: TypeOfBlockGroup<T>\n): input is T {\n const item = <T | null | undefined>input;\n\n return item?.blockGroupType == type;\n}\n"]}
@@ -0,0 +1,36 @@
1
+ import type { ContentModelDocument, FormatWithContentModelContext, InsertPoint } from 'roosterjs-content-model-types';
2
+ /**
3
+ * Options to specify how to merge models
4
+ */
5
+ export interface MergeModelOption {
6
+ /**
7
+ * When there is only a table to merge, whether merge this table into current table (if any), or just directly insert (nested table).
8
+ * This is usually used when paste table inside a table
9
+ * @default false
10
+ */
11
+ mergeTable?: boolean;
12
+ /**
13
+ * Use this insert position to merge instead of querying selection from target model
14
+ * @default undefined
15
+ */
16
+ insertPosition?: InsertPoint;
17
+ /**
18
+ * Use this to decide whether to change the source model format when doing the merge.
19
+ * 'mergeAll': segment format of the insert position will be merged into the content that is merged into current model.
20
+ * If the source model already has some format, it will not be overwritten.
21
+ * 'keepSourceEmphasisFormat': format of the insert position will be set into the content that is merged into current model.
22
+ * If the source model already has emphasis format, such as, fontWeight, Italic or underline different than the default style, it will not be overwritten.
23
+ * 'none' the source segment format will not be modified.
24
+ * @default undefined
25
+ */
26
+ mergeFormat?: 'mergeAll' | 'keepSourceEmphasisFormat' | 'none';
27
+ }
28
+ /**
29
+ * Merge source model into target mode
30
+ * @param target Target Content Model that will merge content into
31
+ * @param source Source Content Model will be merged to target model
32
+ * @param context Format context. When call this function inside formatContentModel, provide this context so that formatContentModel will do extra handling to the result
33
+ * @param options More options, see MergeModelOption
34
+ * @returns Insert point after merge, or null if there is no insert point
35
+ */
36
+ export declare function mergeModel(target: ContentModelDocument, source: ContentModelDocument, context?: FormatWithContentModelContext, options?: MergeModelOption): InsertPoint | null;