roosterjs-content-model-plugins 0.27.0 → 0.28.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 (428) hide show
  1. package/lib/autoFormat/AutoFormatPlugin.d.ts +9 -0
  2. package/lib/autoFormat/AutoFormatPlugin.js +24 -4
  3. package/lib/autoFormat/AutoFormatPlugin.js.map +1 -1
  4. package/lib/autoFormat/link/createLink.d.ts +5 -0
  5. package/lib/autoFormat/link/createLink.js +26 -0
  6. package/lib/autoFormat/link/createLink.js.map +1 -0
  7. package/lib/autoFormat/link/createLinkAfterSpace.d.ts +5 -0
  8. package/lib/autoFormat/link/createLinkAfterSpace.js +39 -0
  9. package/lib/autoFormat/link/createLinkAfterSpace.js.map +1 -0
  10. package/lib/autoFormat/link/getLinkSegment.d.ts +5 -0
  11. package/lib/autoFormat/link/getLinkSegment.js +27 -0
  12. package/lib/autoFormat/link/getLinkSegment.js.map +1 -0
  13. package/lib/autoFormat/link/unlink.d.ts +5 -0
  14. package/lib/autoFormat/link/unlink.js +20 -0
  15. package/lib/autoFormat/link/unlink.js.map +1 -0
  16. package/lib/autoFormat/list/convertAlphaToDecimals.js.map +1 -0
  17. package/lib/autoFormat/list/getIndex.js.map +1 -0
  18. package/lib/autoFormat/{utils → list}/getListTypeStyle.js +3 -0
  19. package/lib/autoFormat/list/getListTypeStyle.js.map +1 -0
  20. package/lib/autoFormat/list/getNumberingListStyle.js.map +1 -0
  21. package/lib/autoFormat/{keyboardListTrigger.js → list/keyboardListTrigger.js} +17 -15
  22. package/lib/autoFormat/list/keyboardListTrigger.js.map +1 -0
  23. package/lib/contextMenuBase/ContextMenuPluginBase.d.ts +58 -0
  24. package/lib/contextMenuBase/ContextMenuPluginBase.js +84 -0
  25. package/lib/contextMenuBase/ContextMenuPluginBase.js.map +1 -0
  26. package/lib/edit/EditPlugin.js.map +1 -1
  27. package/lib/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
  28. package/lib/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
  29. package/lib/edit/deleteSteps/deleteEmptyQuote.d.ts +5 -0
  30. package/lib/edit/deleteSteps/deleteEmptyQuote.js +60 -0
  31. package/lib/edit/deleteSteps/deleteEmptyQuote.js.map +1 -0
  32. package/lib/edit/deleteSteps/deleteList.js +2 -1
  33. package/lib/edit/deleteSteps/deleteList.js.map +1 -1
  34. package/lib/edit/deleteSteps/deleteWordSelection.js.map +1 -1
  35. package/lib/edit/handleKeyboardEventCommon.js.map +1 -1
  36. package/lib/edit/inputSteps/handleEnterOnList.js +1 -1
  37. package/lib/edit/inputSteps/handleEnterOnList.js.map +1 -1
  38. package/lib/edit/keyboardDelete.js +9 -1
  39. package/lib/edit/keyboardDelete.js.map +1 -1
  40. package/lib/edit/keyboardInput.js +2 -1
  41. package/lib/edit/keyboardInput.js.map +1 -1
  42. package/lib/edit/keyboardTab.js.map +1 -1
  43. package/lib/edit/tabUtils/handleTabOnList.js.map +1 -1
  44. package/lib/edit/tabUtils/handleTabOnParagraph.js.map +1 -1
  45. package/lib/edit/utils/getLeafSiblingBlock.js.map +1 -1
  46. package/lib/index.d.ts +2 -1
  47. package/lib/index.js +5 -1
  48. package/lib/index.js.map +1 -1
  49. package/lib/paste/Excel/processPastedContentFromExcel.js +1 -1
  50. package/lib/paste/Excel/processPastedContentFromExcel.js.map +1 -1
  51. package/lib/paste/PastePlugin.js +6 -6
  52. package/lib/paste/PastePlugin.js.map +1 -1
  53. package/lib/paste/PowerPoint/processPastedContentFromPowerPoint.js.map +1 -1
  54. package/lib/paste/WacComponents/constants.js.map +1 -1
  55. package/lib/paste/WacComponents/processPastedContentWacComponents.js +6 -6
  56. package/lib/paste/WacComponents/processPastedContentWacComponents.js.map +1 -1
  57. package/lib/paste/WordDesktop/WordMetadata.js.map +1 -1
  58. package/lib/paste/WordDesktop/getStyleMetadata.d.ts +1 -1
  59. package/lib/paste/WordDesktop/getStyleMetadata.js +2 -1
  60. package/lib/paste/WordDesktop/getStyleMetadata.js.map +1 -1
  61. package/lib/paste/WordDesktop/processPastedContentFromWordDesktop.js +5 -17
  62. package/lib/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
  63. package/lib/paste/WordDesktop/processWordComments.js.map +1 -1
  64. package/lib/paste/WordDesktop/processWordLists.js.map +1 -1
  65. package/lib/paste/WordDesktop/removeNegativeTextIndentParser.js.map +1 -1
  66. package/lib/paste/pasteSourceValidations/constants.js.map +1 -1
  67. package/lib/paste/pasteSourceValidations/documentContainWacElements.js.map +1 -1
  68. package/lib/paste/pasteSourceValidations/getPasteSource.js.map +1 -1
  69. package/lib/paste/pasteSourceValidations/isExcelDesktopDocument.js.map +1 -1
  70. package/lib/paste/pasteSourceValidations/isExcelOnlineDocument.js.map +1 -1
  71. package/lib/paste/pasteSourceValidations/isGoogleSheetDocument.js.map +1 -1
  72. package/lib/paste/pasteSourceValidations/isPowerPointDesktopDocument.js.map +1 -1
  73. package/lib/paste/pasteSourceValidations/isWordDesktopDocument.js.map +1 -1
  74. package/lib/paste/pasteSourceValidations/shouldConvertToSingleImage.js.map +1 -1
  75. package/lib/paste/utils/addParser.d.ts +1 -1
  76. package/lib/paste/utils/addParser.js +2 -1
  77. package/lib/paste/utils/addParser.js.map +1 -1
  78. package/lib/paste/utils/deprecatedColorParser.js.map +1 -1
  79. package/lib/paste/utils/getStyles.js.map +1 -1
  80. package/lib/paste/utils/linkParser.js.map +1 -1
  81. package/lib/paste/utils/setProcessor.js.map +1 -1
  82. package/lib/pluginUtils/CreateElement/CreateElementData.d.ts +1 -1
  83. package/lib/pluginUtils/CreateElement/CreateElementData.js.map +1 -1
  84. package/lib/pluginUtils/CreateElement/createElement.d.ts +2 -2
  85. package/lib/pluginUtils/CreateElement/createElement.js +2 -1
  86. package/lib/pluginUtils/CreateElement/createElement.js.map +1 -1
  87. package/lib/pluginUtils/Disposable.d.ts +1 -1
  88. package/lib/pluginUtils/Disposable.js.map +1 -1
  89. package/lib/pluginUtils/DragAndDrop/DragAndDropHandler.d.ts +1 -1
  90. package/lib/pluginUtils/DragAndDrop/DragAndDropHandler.js.map +1 -1
  91. package/lib/pluginUtils/DragAndDrop/DragAndDropHelper.d.ts +3 -3
  92. package/lib/pluginUtils/DragAndDrop/DragAndDropHelper.js +2 -1
  93. package/lib/pluginUtils/DragAndDrop/DragAndDropHelper.js.map +1 -1
  94. package/lib/pluginUtils/Rect/getIntersectedRect.d.ts +1 -1
  95. package/lib/pluginUtils/Rect/getIntersectedRect.js +4 -3
  96. package/lib/pluginUtils/Rect/getIntersectedRect.js.map +1 -1
  97. package/lib/shortcut/ShortcutCommand.js.map +1 -1
  98. package/lib/shortcut/ShortcutPlugin.js +2 -0
  99. package/lib/shortcut/ShortcutPlugin.js.map +1 -1
  100. package/lib/shortcut/shortcuts.d.ts +12 -0
  101. package/lib/shortcut/shortcuts.js +34 -1
  102. package/lib/shortcut/shortcuts.js.map +1 -1
  103. package/lib/shortcut/utils/setShortcutIndentationCommand.d.ts +5 -0
  104. package/lib/shortcut/utils/setShortcutIndentationCommand.js +22 -0
  105. package/lib/shortcut/utils/setShortcutIndentationCommand.js.map +1 -0
  106. package/lib/tableEdit/TableEditPlugin.js +5 -5
  107. package/lib/tableEdit/TableEditPlugin.js.map +1 -1
  108. package/lib/tableEdit/editors/TableEditor.d.ts +1 -1
  109. package/lib/tableEdit/editors/TableEditor.js +17 -17
  110. package/lib/tableEdit/editors/TableEditor.js.map +1 -1
  111. package/lib/tableEdit/editors/features/CellResizer.d.ts +2 -2
  112. package/lib/tableEdit/editors/features/CellResizer.js +7 -7
  113. package/lib/tableEdit/editors/features/CellResizer.js.map +1 -1
  114. package/{lib-mjs/tableEdit/editors/features/TableEditorFeature.d.ts → lib/tableEdit/editors/features/TableEditFeature.d.ts} +2 -2
  115. package/lib/tableEdit/editors/features/{TableEditorFeature.js → TableEditFeature.js} +1 -1
  116. package/lib/tableEdit/editors/features/TableEditFeature.js.map +1 -0
  117. package/lib/tableEdit/editors/features/TableInserter.d.ts +2 -2
  118. package/lib/tableEdit/editors/features/TableInserter.js +5 -5
  119. package/lib/tableEdit/editors/features/TableInserter.js.map +1 -1
  120. package/lib/tableEdit/editors/features/TableMover.d.ts +2 -2
  121. package/lib/tableEdit/editors/features/TableMover.js +6 -6
  122. package/lib/tableEdit/editors/features/TableMover.js.map +1 -1
  123. package/lib/tableEdit/editors/features/TableResizer.d.ts +2 -2
  124. package/lib/tableEdit/editors/features/TableResizer.js +11 -8
  125. package/lib/tableEdit/editors/features/TableResizer.js.map +1 -1
  126. package/lib-amd/autoFormat/AutoFormatPlugin.d.ts +9 -0
  127. package/lib-amd/autoFormat/AutoFormatPlugin.js +21 -4
  128. package/lib-amd/autoFormat/AutoFormatPlugin.js.map +1 -1
  129. package/lib-amd/autoFormat/link/createLink.d.ts +5 -0
  130. package/lib-amd/autoFormat/link/createLink.js +26 -0
  131. package/lib-amd/autoFormat/link/createLink.js.map +1 -0
  132. package/lib-amd/autoFormat/link/createLinkAfterSpace.d.ts +5 -0
  133. package/lib-amd/autoFormat/link/createLinkAfterSpace.js +38 -0
  134. package/lib-amd/autoFormat/link/createLinkAfterSpace.js.map +1 -0
  135. package/lib-amd/autoFormat/link/getLinkSegment.d.ts +5 -0
  136. package/lib-amd/autoFormat/link/getLinkSegment.js +27 -0
  137. package/lib-amd/autoFormat/link/getLinkSegment.js.map +1 -0
  138. package/lib-amd/autoFormat/link/unlink.d.ts +5 -0
  139. package/lib-amd/autoFormat/link/unlink.js +21 -0
  140. package/lib-amd/autoFormat/link/unlink.js.map +1 -0
  141. package/lib-amd/autoFormat/list/convertAlphaToDecimals.js.map +1 -0
  142. package/lib-amd/autoFormat/list/getIndex.js.map +1 -0
  143. package/lib-amd/autoFormat/{utils → list}/getListTypeStyle.js +3 -0
  144. package/lib-amd/autoFormat/list/getListTypeStyle.js.map +1 -0
  145. package/lib-amd/autoFormat/list/getNumberingListStyle.js.map +1 -0
  146. package/lib-amd/autoFormat/list/keyboardListTrigger.js +46 -0
  147. package/lib-amd/autoFormat/list/keyboardListTrigger.js.map +1 -0
  148. package/lib-amd/contextMenuBase/ContextMenuPluginBase.d.ts +58 -0
  149. package/lib-amd/contextMenuBase/ContextMenuPluginBase.js +86 -0
  150. package/lib-amd/contextMenuBase/ContextMenuPluginBase.js.map +1 -0
  151. package/lib-amd/edit/EditPlugin.js.map +1 -1
  152. package/lib-amd/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
  153. package/lib-amd/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
  154. package/lib-amd/edit/deleteSteps/deleteEmptyQuote.d.ts +5 -0
  155. package/lib-amd/edit/deleteSteps/deleteEmptyQuote.js +60 -0
  156. package/lib-amd/edit/deleteSteps/deleteEmptyQuote.js.map +1 -0
  157. package/lib-amd/edit/deleteSteps/deleteList.js +2 -1
  158. package/lib-amd/edit/deleteSteps/deleteList.js.map +1 -1
  159. package/lib-amd/edit/deleteSteps/deleteWordSelection.js.map +1 -1
  160. package/lib-amd/edit/handleKeyboardEventCommon.js.map +1 -1
  161. package/lib-amd/edit/inputSteps/handleEnterOnList.js +1 -1
  162. package/lib-amd/edit/inputSteps/handleEnterOnList.js.map +1 -1
  163. package/lib-amd/edit/keyboardDelete.js +9 -2
  164. package/lib-amd/edit/keyboardDelete.js.map +1 -1
  165. package/lib-amd/edit/keyboardInput.js +2 -2
  166. package/lib-amd/edit/keyboardInput.js.map +1 -1
  167. package/lib-amd/edit/keyboardTab.js.map +1 -1
  168. package/lib-amd/edit/tabUtils/handleTabOnList.js.map +1 -1
  169. package/lib-amd/edit/tabUtils/handleTabOnParagraph.js.map +1 -1
  170. package/lib-amd/edit/utils/getLeafSiblingBlock.js.map +1 -1
  171. package/lib-amd/index.d.ts +2 -1
  172. package/lib-amd/index.js +5 -2
  173. package/lib-amd/index.js.map +1 -1
  174. package/lib-amd/paste/Excel/processPastedContentFromExcel.js +1 -1
  175. package/lib-amd/paste/Excel/processPastedContentFromExcel.js.map +1 -1
  176. package/lib-amd/paste/PastePlugin.js +6 -6
  177. package/lib-amd/paste/PastePlugin.js.map +1 -1
  178. package/lib-amd/paste/PowerPoint/processPastedContentFromPowerPoint.js.map +1 -1
  179. package/lib-amd/paste/WacComponents/constants.js.map +1 -1
  180. package/lib-amd/paste/WacComponents/processPastedContentWacComponents.js +6 -6
  181. package/lib-amd/paste/WacComponents/processPastedContentWacComponents.js.map +1 -1
  182. package/lib-amd/paste/WordDesktop/WordMetadata.js.map +1 -1
  183. package/lib-amd/paste/WordDesktop/getStyleMetadata.d.ts +1 -1
  184. package/lib-amd/paste/WordDesktop/getStyleMetadata.js +2 -1
  185. package/lib-amd/paste/WordDesktop/getStyleMetadata.js.map +1 -1
  186. package/lib-amd/paste/WordDesktop/processPastedContentFromWordDesktop.js +5 -17
  187. package/lib-amd/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
  188. package/lib-amd/paste/WordDesktop/processWordComments.js.map +1 -1
  189. package/lib-amd/paste/WordDesktop/processWordLists.js.map +1 -1
  190. package/lib-amd/paste/WordDesktop/removeNegativeTextIndentParser.js.map +1 -1
  191. package/lib-amd/paste/pasteSourceValidations/constants.js.map +1 -1
  192. package/lib-amd/paste/pasteSourceValidations/documentContainWacElements.js.map +1 -1
  193. package/lib-amd/paste/pasteSourceValidations/getPasteSource.js.map +1 -1
  194. package/lib-amd/paste/pasteSourceValidations/isExcelDesktopDocument.js.map +1 -1
  195. package/lib-amd/paste/pasteSourceValidations/isExcelOnlineDocument.js.map +1 -1
  196. package/lib-amd/paste/pasteSourceValidations/isGoogleSheetDocument.js.map +1 -1
  197. package/lib-amd/paste/pasteSourceValidations/isPowerPointDesktopDocument.js.map +1 -1
  198. package/lib-amd/paste/pasteSourceValidations/isWordDesktopDocument.js.map +1 -1
  199. package/lib-amd/paste/pasteSourceValidations/shouldConvertToSingleImage.js.map +1 -1
  200. package/lib-amd/paste/utils/addParser.d.ts +1 -1
  201. package/lib-amd/paste/utils/addParser.js +2 -1
  202. package/lib-amd/paste/utils/addParser.js.map +1 -1
  203. package/lib-amd/paste/utils/deprecatedColorParser.js.map +1 -1
  204. package/lib-amd/paste/utils/getStyles.js.map +1 -1
  205. package/lib-amd/paste/utils/linkParser.js.map +1 -1
  206. package/lib-amd/paste/utils/setProcessor.js.map +1 -1
  207. package/lib-amd/pluginUtils/CreateElement/CreateElementData.d.ts +1 -1
  208. package/lib-amd/pluginUtils/CreateElement/CreateElementData.js.map +1 -1
  209. package/lib-amd/pluginUtils/CreateElement/createElement.d.ts +2 -2
  210. package/lib-amd/pluginUtils/CreateElement/createElement.js +2 -1
  211. package/lib-amd/pluginUtils/CreateElement/createElement.js.map +1 -1
  212. package/lib-amd/pluginUtils/Disposable.d.ts +1 -1
  213. package/lib-amd/pluginUtils/Disposable.js.map +1 -1
  214. package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHandler.d.ts +1 -1
  215. package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHandler.js.map +1 -1
  216. package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHelper.d.ts +3 -3
  217. package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHelper.js +2 -1
  218. package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHelper.js.map +1 -1
  219. package/lib-amd/pluginUtils/Rect/getIntersectedRect.d.ts +1 -1
  220. package/lib-amd/pluginUtils/Rect/getIntersectedRect.js +4 -3
  221. package/lib-amd/pluginUtils/Rect/getIntersectedRect.js.map +1 -1
  222. package/lib-amd/shortcut/ShortcutCommand.js.map +1 -1
  223. package/lib-amd/shortcut/ShortcutPlugin.js +2 -0
  224. package/lib-amd/shortcut/ShortcutPlugin.js.map +1 -1
  225. package/lib-amd/shortcut/shortcuts.d.ts +12 -0
  226. package/lib-amd/shortcut/shortcuts.js +34 -2
  227. package/lib-amd/shortcut/shortcuts.js.map +1 -1
  228. package/lib-amd/shortcut/utils/setShortcutIndentationCommand.d.ts +5 -0
  229. package/lib-amd/shortcut/utils/setShortcutIndentationCommand.js +22 -0
  230. package/lib-amd/shortcut/utils/setShortcutIndentationCommand.js.map +1 -0
  231. package/lib-amd/tableEdit/TableEditPlugin.js +5 -4
  232. package/lib-amd/tableEdit/TableEditPlugin.js.map +1 -1
  233. package/lib-amd/tableEdit/editors/TableEditor.d.ts +1 -1
  234. package/lib-amd/tableEdit/editors/TableEditor.js +17 -16
  235. package/lib-amd/tableEdit/editors/TableEditor.js.map +1 -1
  236. package/lib-amd/tableEdit/editors/features/CellResizer.d.ts +2 -2
  237. package/lib-amd/tableEdit/editors/features/CellResizer.js +8 -7
  238. package/lib-amd/tableEdit/editors/features/CellResizer.js.map +1 -1
  239. package/lib-amd/tableEdit/editors/features/{TableEditorFeature.d.ts → TableEditFeature.d.ts} +2 -2
  240. package/lib-amd/tableEdit/editors/features/{TableEditorFeature.js → TableEditFeature.js} +1 -1
  241. package/lib-amd/tableEdit/editors/features/TableEditFeature.js.map +1 -0
  242. package/lib-amd/tableEdit/editors/features/TableInserter.d.ts +2 -2
  243. package/lib-amd/tableEdit/editors/features/TableInserter.js +6 -5
  244. package/lib-amd/tableEdit/editors/features/TableInserter.js.map +1 -1
  245. package/lib-amd/tableEdit/editors/features/TableMover.d.ts +2 -2
  246. package/lib-amd/tableEdit/editors/features/TableMover.js +7 -6
  247. package/lib-amd/tableEdit/editors/features/TableMover.js.map +1 -1
  248. package/lib-amd/tableEdit/editors/features/TableResizer.d.ts +2 -2
  249. package/lib-amd/tableEdit/editors/features/TableResizer.js +12 -8
  250. package/lib-amd/tableEdit/editors/features/TableResizer.js.map +1 -1
  251. package/lib-mjs/autoFormat/AutoFormatPlugin.d.ts +9 -0
  252. package/lib-mjs/autoFormat/AutoFormatPlugin.js +24 -4
  253. package/lib-mjs/autoFormat/AutoFormatPlugin.js.map +1 -1
  254. package/lib-mjs/autoFormat/link/createLink.d.ts +5 -0
  255. package/lib-mjs/autoFormat/link/createLink.js +22 -0
  256. package/lib-mjs/autoFormat/link/createLink.js.map +1 -0
  257. package/lib-mjs/autoFormat/link/createLinkAfterSpace.d.ts +5 -0
  258. package/lib-mjs/autoFormat/link/createLinkAfterSpace.js +35 -0
  259. package/lib-mjs/autoFormat/link/createLinkAfterSpace.js.map +1 -0
  260. package/lib-mjs/autoFormat/link/getLinkSegment.d.ts +5 -0
  261. package/lib-mjs/autoFormat/link/getLinkSegment.js +23 -0
  262. package/lib-mjs/autoFormat/link/getLinkSegment.js.map +1 -0
  263. package/lib-mjs/autoFormat/link/unlink.d.ts +5 -0
  264. package/lib-mjs/autoFormat/link/unlink.js +16 -0
  265. package/lib-mjs/autoFormat/link/unlink.js.map +1 -0
  266. package/lib-mjs/autoFormat/list/convertAlphaToDecimals.js.map +1 -0
  267. package/lib-mjs/autoFormat/list/getIndex.js.map +1 -0
  268. package/lib-mjs/autoFormat/{utils → list}/getListTypeStyle.js +3 -0
  269. package/lib-mjs/autoFormat/list/getListTypeStyle.js.map +1 -0
  270. package/lib-mjs/autoFormat/list/getNumberingListStyle.js.map +1 -0
  271. package/lib-mjs/autoFormat/{keyboardListTrigger.js → list/keyboardListTrigger.js} +17 -15
  272. package/lib-mjs/autoFormat/list/keyboardListTrigger.js.map +1 -0
  273. package/lib-mjs/contextMenuBase/ContextMenuPluginBase.d.ts +58 -0
  274. package/lib-mjs/contextMenuBase/ContextMenuPluginBase.js +81 -0
  275. package/lib-mjs/contextMenuBase/ContextMenuPluginBase.js.map +1 -0
  276. package/lib-mjs/edit/EditPlugin.js.map +1 -1
  277. package/lib-mjs/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
  278. package/lib-mjs/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
  279. package/lib-mjs/edit/deleteSteps/deleteEmptyQuote.d.ts +5 -0
  280. package/lib-mjs/edit/deleteSteps/deleteEmptyQuote.js +56 -0
  281. package/lib-mjs/edit/deleteSteps/deleteEmptyQuote.js.map +1 -0
  282. package/lib-mjs/edit/deleteSteps/deleteList.js +2 -1
  283. package/lib-mjs/edit/deleteSteps/deleteList.js.map +1 -1
  284. package/lib-mjs/edit/deleteSteps/deleteWordSelection.js.map +1 -1
  285. package/lib-mjs/edit/handleKeyboardEventCommon.js.map +1 -1
  286. package/lib-mjs/edit/inputSteps/handleEnterOnList.js +1 -1
  287. package/lib-mjs/edit/inputSteps/handleEnterOnList.js.map +1 -1
  288. package/lib-mjs/edit/keyboardDelete.js +9 -1
  289. package/lib-mjs/edit/keyboardDelete.js.map +1 -1
  290. package/lib-mjs/edit/keyboardInput.js +2 -1
  291. package/lib-mjs/edit/keyboardInput.js.map +1 -1
  292. package/lib-mjs/edit/keyboardTab.js.map +1 -1
  293. package/lib-mjs/edit/tabUtils/handleTabOnList.js.map +1 -1
  294. package/lib-mjs/edit/tabUtils/handleTabOnParagraph.js.map +1 -1
  295. package/lib-mjs/edit/utils/getLeafSiblingBlock.js.map +1 -1
  296. package/lib-mjs/index.d.ts +2 -1
  297. package/lib-mjs/index.js +2 -1
  298. package/lib-mjs/index.js.map +1 -1
  299. package/lib-mjs/paste/Excel/processPastedContentFromExcel.js +1 -1
  300. package/lib-mjs/paste/Excel/processPastedContentFromExcel.js.map +1 -1
  301. package/lib-mjs/paste/PastePlugin.js +1 -1
  302. package/lib-mjs/paste/PastePlugin.js.map +1 -1
  303. package/lib-mjs/paste/PowerPoint/processPastedContentFromPowerPoint.js.map +1 -1
  304. package/lib-mjs/paste/WacComponents/constants.js.map +1 -1
  305. package/lib-mjs/paste/WacComponents/processPastedContentWacComponents.js +1 -1
  306. package/lib-mjs/paste/WacComponents/processPastedContentWacComponents.js.map +1 -1
  307. package/lib-mjs/paste/WordDesktop/WordMetadata.js.map +1 -1
  308. package/lib-mjs/paste/WordDesktop/getStyleMetadata.d.ts +1 -1
  309. package/lib-mjs/paste/WordDesktop/getStyleMetadata.js +1 -1
  310. package/lib-mjs/paste/WordDesktop/getStyleMetadata.js.map +1 -1
  311. package/lib-mjs/paste/WordDesktop/processPastedContentFromWordDesktop.js +2 -14
  312. package/lib-mjs/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
  313. package/lib-mjs/paste/WordDesktop/processWordComments.js.map +1 -1
  314. package/lib-mjs/paste/WordDesktop/processWordLists.js.map +1 -1
  315. package/lib-mjs/paste/WordDesktop/removeNegativeTextIndentParser.js.map +1 -1
  316. package/lib-mjs/paste/pasteSourceValidations/constants.js.map +1 -1
  317. package/lib-mjs/paste/pasteSourceValidations/documentContainWacElements.js.map +1 -1
  318. package/lib-mjs/paste/pasteSourceValidations/getPasteSource.js.map +1 -1
  319. package/lib-mjs/paste/pasteSourceValidations/isExcelDesktopDocument.js.map +1 -1
  320. package/lib-mjs/paste/pasteSourceValidations/isExcelOnlineDocument.js.map +1 -1
  321. package/lib-mjs/paste/pasteSourceValidations/isGoogleSheetDocument.js.map +1 -1
  322. package/lib-mjs/paste/pasteSourceValidations/isPowerPointDesktopDocument.js.map +1 -1
  323. package/lib-mjs/paste/pasteSourceValidations/isWordDesktopDocument.js.map +1 -1
  324. package/lib-mjs/paste/pasteSourceValidations/shouldConvertToSingleImage.js.map +1 -1
  325. package/lib-mjs/paste/utils/addParser.d.ts +1 -1
  326. package/lib-mjs/paste/utils/addParser.js +1 -1
  327. package/lib-mjs/paste/utils/addParser.js.map +1 -1
  328. package/lib-mjs/paste/utils/deprecatedColorParser.js.map +1 -1
  329. package/lib-mjs/paste/utils/getStyles.js.map +1 -1
  330. package/lib-mjs/paste/utils/linkParser.js.map +1 -1
  331. package/lib-mjs/paste/utils/setProcessor.js.map +1 -1
  332. package/lib-mjs/pluginUtils/CreateElement/CreateElementData.d.ts +1 -1
  333. package/lib-mjs/pluginUtils/CreateElement/CreateElementData.js.map +1 -1
  334. package/lib-mjs/pluginUtils/CreateElement/createElement.d.ts +2 -2
  335. package/lib-mjs/pluginUtils/CreateElement/createElement.js +1 -1
  336. package/lib-mjs/pluginUtils/CreateElement/createElement.js.map +1 -1
  337. package/lib-mjs/pluginUtils/Disposable.d.ts +1 -1
  338. package/lib-mjs/pluginUtils/Disposable.js.map +1 -1
  339. package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHandler.d.ts +1 -1
  340. package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHandler.js.map +1 -1
  341. package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHelper.d.ts +3 -3
  342. package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHelper.js +1 -1
  343. package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHelper.js.map +1 -1
  344. package/lib-mjs/pluginUtils/Rect/getIntersectedRect.d.ts +1 -1
  345. package/lib-mjs/pluginUtils/Rect/getIntersectedRect.js +2 -2
  346. package/lib-mjs/pluginUtils/Rect/getIntersectedRect.js.map +1 -1
  347. package/lib-mjs/shortcut/ShortcutCommand.js.map +1 -1
  348. package/lib-mjs/shortcut/ShortcutPlugin.js +3 -1
  349. package/lib-mjs/shortcut/ShortcutPlugin.js.map +1 -1
  350. package/lib-mjs/shortcut/shortcuts.d.ts +12 -0
  351. package/lib-mjs/shortcut/shortcuts.js +33 -0
  352. package/lib-mjs/shortcut/shortcuts.js.map +1 -1
  353. package/lib-mjs/shortcut/utils/setShortcutIndentationCommand.d.ts +5 -0
  354. package/lib-mjs/shortcut/utils/setShortcutIndentationCommand.js +18 -0
  355. package/lib-mjs/shortcut/utils/setShortcutIndentationCommand.js.map +1 -0
  356. package/lib-mjs/tableEdit/TableEditPlugin.js +4 -4
  357. package/lib-mjs/tableEdit/TableEditPlugin.js.map +1 -1
  358. package/lib-mjs/tableEdit/editors/TableEditor.d.ts +1 -1
  359. package/lib-mjs/tableEdit/editors/TableEditor.js +7 -8
  360. package/lib-mjs/tableEdit/editors/TableEditor.js.map +1 -1
  361. package/lib-mjs/tableEdit/editors/features/CellResizer.d.ts +2 -2
  362. package/lib-mjs/tableEdit/editors/features/CellResizer.js +4 -5
  363. package/lib-mjs/tableEdit/editors/features/CellResizer.js.map +1 -1
  364. package/{lib/tableEdit/editors/features/TableEditorFeature.d.ts → lib-mjs/tableEdit/editors/features/TableEditFeature.d.ts} +2 -2
  365. package/lib-mjs/tableEdit/editors/features/{TableEditorFeature.js → TableEditFeature.js} +1 -1
  366. package/lib-mjs/tableEdit/editors/features/TableEditFeature.js.map +1 -0
  367. package/lib-mjs/tableEdit/editors/features/TableInserter.d.ts +2 -2
  368. package/lib-mjs/tableEdit/editors/features/TableInserter.js +4 -5
  369. package/lib-mjs/tableEdit/editors/features/TableInserter.js.map +1 -1
  370. package/lib-mjs/tableEdit/editors/features/TableMover.d.ts +2 -2
  371. package/lib-mjs/tableEdit/editors/features/TableMover.js +4 -5
  372. package/lib-mjs/tableEdit/editors/features/TableMover.js.map +1 -1
  373. package/lib-mjs/tableEdit/editors/features/TableResizer.d.ts +2 -2
  374. package/lib-mjs/tableEdit/editors/features/TableResizer.js +7 -5
  375. package/lib-mjs/tableEdit/editors/features/TableResizer.js.map +1 -1
  376. package/package.json +5 -5
  377. package/lib/autoFormat/keyboardListTrigger.js.map +0 -1
  378. package/lib/autoFormat/utils/convertAlphaToDecimals.js.map +0 -1
  379. package/lib/autoFormat/utils/getIndex.js.map +0 -1
  380. package/lib/autoFormat/utils/getListTypeStyle.js.map +0 -1
  381. package/lib/autoFormat/utils/getNumberingListStyle.js.map +0 -1
  382. package/lib/pluginUtils/Rect/normalizeRect.d.ts +0 -7
  383. package/lib/pluginUtils/Rect/normalizeRect.js +0 -20
  384. package/lib/pluginUtils/Rect/normalizeRect.js.map +0 -1
  385. package/lib/tableEdit/editors/features/TableEditorFeature.js.map +0 -1
  386. package/lib-amd/autoFormat/keyboardListTrigger.js +0 -44
  387. package/lib-amd/autoFormat/keyboardListTrigger.js.map +0 -1
  388. package/lib-amd/autoFormat/utils/convertAlphaToDecimals.js.map +0 -1
  389. package/lib-amd/autoFormat/utils/getIndex.js.map +0 -1
  390. package/lib-amd/autoFormat/utils/getListTypeStyle.js.map +0 -1
  391. package/lib-amd/autoFormat/utils/getNumberingListStyle.js.map +0 -1
  392. package/lib-amd/pluginUtils/Rect/normalizeRect.d.ts +0 -7
  393. package/lib-amd/pluginUtils/Rect/normalizeRect.js +0 -22
  394. package/lib-amd/pluginUtils/Rect/normalizeRect.js.map +0 -1
  395. package/lib-amd/tableEdit/editors/features/TableEditorFeature.js.map +0 -1
  396. package/lib-mjs/autoFormat/keyboardListTrigger.js.map +0 -1
  397. package/lib-mjs/autoFormat/utils/convertAlphaToDecimals.js.map +0 -1
  398. package/lib-mjs/autoFormat/utils/getIndex.js.map +0 -1
  399. package/lib-mjs/autoFormat/utils/getListTypeStyle.js.map +0 -1
  400. package/lib-mjs/autoFormat/utils/getNumberingListStyle.js.map +0 -1
  401. package/lib-mjs/pluginUtils/Rect/normalizeRect.d.ts +0 -7
  402. package/lib-mjs/pluginUtils/Rect/normalizeRect.js +0 -17
  403. package/lib-mjs/pluginUtils/Rect/normalizeRect.js.map +0 -1
  404. package/lib-mjs/tableEdit/editors/features/TableEditorFeature.js.map +0 -1
  405. /package/lib/autoFormat/{utils → list}/convertAlphaToDecimals.d.ts +0 -0
  406. /package/lib/autoFormat/{utils → list}/convertAlphaToDecimals.js +0 -0
  407. /package/lib/autoFormat/{utils → list}/getIndex.d.ts +0 -0
  408. /package/lib/autoFormat/{utils → list}/getIndex.js +0 -0
  409. /package/lib/autoFormat/{utils → list}/getListTypeStyle.d.ts +0 -0
  410. /package/lib/autoFormat/{utils → list}/getNumberingListStyle.d.ts +0 -0
  411. /package/lib/autoFormat/{utils → list}/getNumberingListStyle.js +0 -0
  412. /package/lib/autoFormat/{keyboardListTrigger.d.ts → list/keyboardListTrigger.d.ts} +0 -0
  413. /package/lib-amd/autoFormat/{utils → list}/convertAlphaToDecimals.d.ts +0 -0
  414. /package/lib-amd/autoFormat/{utils → list}/convertAlphaToDecimals.js +0 -0
  415. /package/lib-amd/autoFormat/{utils → list}/getIndex.d.ts +0 -0
  416. /package/lib-amd/autoFormat/{utils → list}/getIndex.js +0 -0
  417. /package/lib-amd/autoFormat/{utils → list}/getListTypeStyle.d.ts +0 -0
  418. /package/lib-amd/autoFormat/{utils → list}/getNumberingListStyle.d.ts +0 -0
  419. /package/lib-amd/autoFormat/{utils → list}/getNumberingListStyle.js +0 -0
  420. /package/lib-amd/autoFormat/{keyboardListTrigger.d.ts → list/keyboardListTrigger.d.ts} +0 -0
  421. /package/lib-mjs/autoFormat/{utils → list}/convertAlphaToDecimals.d.ts +0 -0
  422. /package/lib-mjs/autoFormat/{utils → list}/convertAlphaToDecimals.js +0 -0
  423. /package/lib-mjs/autoFormat/{utils → list}/getIndex.d.ts +0 -0
  424. /package/lib-mjs/autoFormat/{utils → list}/getIndex.js +0 -0
  425. /package/lib-mjs/autoFormat/{utils → list}/getListTypeStyle.d.ts +0 -0
  426. /package/lib-mjs/autoFormat/{utils → list}/getNumberingListStyle.d.ts +0 -0
  427. /package/lib-mjs/autoFormat/{utils → list}/getNumberingListStyle.js +0 -0
  428. /package/lib-mjs/autoFormat/{keyboardListTrigger.d.ts → list/keyboardListTrigger.d.ts} +0 -0
@@ -0,0 +1,5 @@
1
+ import type { IEditor } from 'roosterjs-content-model-types';
2
+ /**
3
+ * @internal
4
+ */
5
+ export declare function createLinkAfterSpace(editor: IEditor): void;
@@ -0,0 +1,35 @@
1
+ import { createText } from 'roosterjs-content-model-dom';
2
+ import { getSelectedSegmentsAndParagraphs } from 'roosterjs-content-model-core';
3
+ import { matchLink } from 'roosterjs-content-model-api';
4
+ /**
5
+ * @internal
6
+ */
7
+ export function createLinkAfterSpace(editor) {
8
+ editor.formatContentModel(function (model) {
9
+ var selectedSegmentsAndParagraphs = getSelectedSegmentsAndParagraphs(model, false /* includingFormatHolder */);
10
+ if (selectedSegmentsAndParagraphs[0] && selectedSegmentsAndParagraphs[0][1]) {
11
+ var length_1 = selectedSegmentsAndParagraphs[0][1].segments.length;
12
+ var marker = selectedSegmentsAndParagraphs[0][1].segments[length_1 - 1];
13
+ var textSegment = selectedSegmentsAndParagraphs[0][1].segments[length_1 - 2];
14
+ if (marker.segmentType == 'SelectionMarker' &&
15
+ textSegment.segmentType == 'Text' &&
16
+ !textSegment.link) {
17
+ var link = textSegment.text.split(' ').pop();
18
+ if (link && matchLink(link)) {
19
+ textSegment.text = textSegment.text.replace(link, '');
20
+ var linkSegment = createText(link, marker.format, {
21
+ format: {
22
+ href: link,
23
+ underline: true,
24
+ },
25
+ dataset: {},
26
+ });
27
+ selectedSegmentsAndParagraphs[0][1].segments.splice(length_1 - 1, 0, linkSegment);
28
+ return true;
29
+ }
30
+ }
31
+ }
32
+ return false;
33
+ });
34
+ }
35
+ //# sourceMappingURL=createLinkAfterSpace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createLinkAfterSpace.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/autoFormat/link/createLinkAfterSpace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,gCAAgC,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAGxD;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAe;IAChD,MAAM,CAAC,kBAAkB,CAAC,UAAA,KAAK;QAC3B,IAAM,6BAA6B,GAAG,gCAAgC,CAClE,KAAK,EACL,KAAK,CAAC,2BAA2B,CACpC,CAAC;QACF,IAAI,6BAA6B,CAAC,CAAC,CAAC,IAAI,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;YACzE,IAAM,QAAM,GAAG,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YACnE,IAAM,MAAM,GAAG,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAM,GAAG,CAAC,CAAC,CAAC;YACxE,IAAM,WAAW,GAAG,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAM,GAAG,CAAC,CAAC,CAAC;YAC7E,IACI,MAAM,CAAC,WAAW,IAAI,iBAAiB;gBACvC,WAAW,CAAC,WAAW,IAAI,MAAM;gBACjC,CAAC,WAAW,CAAC,IAAI,EACnB;gBACE,IAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBAC/C,IAAI,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;oBACzB,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACtD,IAAM,WAAW,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE;wBAChD,MAAM,EAAE;4BACJ,IAAI,EAAE,IAAI;4BACV,SAAS,EAAE,IAAI;yBAClB;wBACD,OAAO,EAAE,EAAE;qBACd,CAAC,CAAC;oBACH,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAM,GAAG,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;oBAChF,OAAO,IAAI,CAAC;iBACf;aACJ;SACJ;QAED,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import { createText } from 'roosterjs-content-model-dom';\nimport { getSelectedSegmentsAndParagraphs } from 'roosterjs-content-model-core';\nimport { matchLink } from 'roosterjs-content-model-api';\nimport type { IEditor } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function createLinkAfterSpace(editor: IEditor) {\n editor.formatContentModel(model => {\n const selectedSegmentsAndParagraphs = getSelectedSegmentsAndParagraphs(\n model,\n false /* includingFormatHolder */\n );\n if (selectedSegmentsAndParagraphs[0] && selectedSegmentsAndParagraphs[0][1]) {\n const length = selectedSegmentsAndParagraphs[0][1].segments.length;\n const marker = selectedSegmentsAndParagraphs[0][1].segments[length - 1];\n const textSegment = selectedSegmentsAndParagraphs[0][1].segments[length - 2];\n if (\n marker.segmentType == 'SelectionMarker' &&\n textSegment.segmentType == 'Text' &&\n !textSegment.link\n ) {\n const link = textSegment.text.split(' ').pop();\n if (link && matchLink(link)) {\n textSegment.text = textSegment.text.replace(link, '');\n const linkSegment = createText(link, marker.format, {\n format: {\n href: link,\n underline: true,\n },\n dataset: {},\n });\n selectedSegmentsAndParagraphs[0][1].segments.splice(length - 1, 0, linkSegment);\n return true;\n }\n }\n }\n\n return false;\n });\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import type { ContentModelDocument } from 'roosterjs-content-model-types';
2
+ /**
3
+ * @internal
4
+ */
5
+ export declare function getLinkSegment(model: ContentModelDocument): import("roosterjs-content-model-types").ContentModelText | undefined;
@@ -0,0 +1,23 @@
1
+ import { getSelectedSegmentsAndParagraphs } from 'roosterjs-content-model-core';
2
+ import { matchLink } from 'roosterjs-content-model-api';
3
+ /**
4
+ * @internal
5
+ */
6
+ export function getLinkSegment(model) {
7
+ var selectedSegmentsAndParagraphs = getSelectedSegmentsAndParagraphs(model, false /* includingFormatHolder */);
8
+ if (selectedSegmentsAndParagraphs.length == 1 && selectedSegmentsAndParagraphs[0][1]) {
9
+ var selectedParagraph = selectedSegmentsAndParagraphs[0][1];
10
+ var marker = selectedParagraph.segments[selectedParagraph.segments.length - 1];
11
+ var link = selectedParagraph.segments[selectedParagraph.segments.length - 2];
12
+ if (marker &&
13
+ link &&
14
+ marker.segmentType === 'SelectionMarker' &&
15
+ marker.isSelected &&
16
+ link.segmentType === 'Text' &&
17
+ (matchLink(link.text) || link.link)) {
18
+ return link;
19
+ }
20
+ }
21
+ return undefined;
22
+ }
23
+ //# sourceMappingURL=getLinkSegment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getLinkSegment.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/autoFormat/link/getLinkSegment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAGxD;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAA2B;IACtD,IAAM,6BAA6B,GAAG,gCAAgC,CAClE,KAAK,EACL,KAAK,CAAC,2BAA2B,CACpC,CAAC;IACF,IAAI,6BAA6B,CAAC,MAAM,IAAI,CAAC,IAAI,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QAClF,IAAM,iBAAiB,GAAG,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjF,IAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/E,IACI,MAAM;YACN,IAAI;YACJ,MAAM,CAAC,WAAW,KAAK,iBAAiB;YACxC,MAAM,CAAC,UAAU;YACjB,IAAI,CAAC,WAAW,KAAK,MAAM;YAC3B,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EACrC;YACE,OAAO,IAAI,CAAC;SACf;KACJ;IACD,OAAO,SAAS,CAAC;AACrB,CAAC","sourcesContent":["import { getSelectedSegmentsAndParagraphs } from 'roosterjs-content-model-core';\nimport { matchLink } from 'roosterjs-content-model-api';\nimport type { ContentModelDocument } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function getLinkSegment(model: ContentModelDocument) {\n const selectedSegmentsAndParagraphs = getSelectedSegmentsAndParagraphs(\n model,\n false /* includingFormatHolder */\n );\n if (selectedSegmentsAndParagraphs.length == 1 && selectedSegmentsAndParagraphs[0][1]) {\n const selectedParagraph = selectedSegmentsAndParagraphs[0][1];\n const marker = selectedParagraph.segments[selectedParagraph.segments.length - 1];\n const link = selectedParagraph.segments[selectedParagraph.segments.length - 2];\n if (\n marker &&\n link &&\n marker.segmentType === 'SelectionMarker' &&\n marker.isSelected &&\n link.segmentType === 'Text' &&\n (matchLink(link.text) || link.link)\n ) {\n return link;\n }\n }\n return undefined;\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import type { IEditor } from 'roosterjs-content-model-types';
2
+ /**
3
+ * @internal
4
+ */
5
+ export declare function unlink(editor: IEditor, rawEvent: KeyboardEvent): void;
@@ -0,0 +1,16 @@
1
+ import { getLinkSegment } from './getLinkSegment';
2
+ /**
3
+ * @internal
4
+ */
5
+ export function unlink(editor, rawEvent) {
6
+ editor.formatContentModel(function (model) {
7
+ var link = getLinkSegment(model);
8
+ if (link === null || link === void 0 ? void 0 : link.link) {
9
+ link.link = undefined;
10
+ rawEvent.preventDefault();
11
+ return true;
12
+ }
13
+ return false;
14
+ });
15
+ }
16
+ //# sourceMappingURL=unlink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unlink.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/autoFormat/link/unlink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,MAAe,EAAE,QAAuB;IAC3D,MAAM,CAAC,kBAAkB,CAAC,UAAA,KAAK;QAC3B,IAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,EAAE;YACZ,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;YACtB,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import { getLinkSegment } from './getLinkSegment';\nimport type { IEditor } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function unlink(editor: IEditor, rawEvent: KeyboardEvent) {\n editor.formatContentModel(model => {\n const link = getLinkSegment(model);\n if (link?.link) {\n link.link = undefined;\n rawEvent.preventDefault();\n return true;\n }\n\n return false;\n });\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertAlphaToDecimals.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/autoFormat/list/convertAlphaToDecimals.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACjD,IAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,KAAK,EAAE;QACP,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,IAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,QAAQ,CAAC;SACnC;QAED,OAAO,MAAM,CAAC;KACjB;IACD,OAAO,SAAS,CAAC;AACrB,CAAC","sourcesContent":["/**\n * @internal\n * Convert english alphabet numbers into decimal numbers\n * @param letter The letter that needs to be converted\n * @returns\n */\nexport function convertAlphaToDecimals(letter: string): number | undefined {\n const alpha = letter.toUpperCase();\n if (alpha) {\n let result = 0;\n for (let i = 0; i < alpha.length; i++) {\n const charCode = alpha.charCodeAt(i) - 65 + 1;\n result = result * 26 + charCode;\n }\n\n return result;\n }\n return undefined;\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getIndex.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/autoFormat/list/getIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,SAAiB;IACtC,IAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IACtD,IAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC","sourcesContent":["import { convertAlphaToDecimals } from './convertAlphaToDecimals';\n\n/**\n * @internal\n */\nexport function getIndex(listIndex: string) {\n const index = listIndex.replace(/[^a-zA-Z0-9 ]/g, '');\n const indexNumber = parseInt(index);\n return !isNaN(indexNumber) ? indexNumber : convertAlphaToDecimals(index);\n}\n"]}
@@ -8,6 +8,9 @@ export function getListTypeStyle(model, shouldSearchForBullet, shouldSearchForNu
8
8
  if (shouldSearchForBullet === void 0) { shouldSearchForBullet = true; }
9
9
  if (shouldSearchForNumbering === void 0) { shouldSearchForNumbering = true; }
10
10
  var selectedSegmentsAndParagraphs = getSelectedSegmentsAndParagraphs(model, true);
11
+ if (!selectedSegmentsAndParagraphs[0]) {
12
+ return undefined;
13
+ }
11
14
  var marker = selectedSegmentsAndParagraphs[0][0];
12
15
  var paragraph = selectedSegmentsAndParagraphs[0][1];
13
16
  var listMarkerSegment = paragraph === null || paragraph === void 0 ? void 0 : paragraph.segments[0];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getListTypeStyle.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/autoFormat/list/getListTypeStyle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAMhE,OAAO,EACH,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,gCAAgC,GACnC,MAAM,8BAA8B,CAAC;AAWtC;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC5B,KAA2B,EAC3B,qBAAqC,EACrC,wBAAwC;IADxC,sCAAA,EAAA,4BAAqC;IACrC,yCAAA,EAAA,+BAAwC;IAExC,IAAM,6BAA6B,GAAG,gCAAgC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpF,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC,EAAE;QACnC,OAAO,SAAS,CAAC;KACpB;IACD,IAAM,MAAM,GAAG,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,IAAM,SAAS,GAAG,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,IAAM,iBAAiB,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEjD,IACI,MAAM;QACN,MAAM,CAAC,WAAW,IAAI,iBAAiB;QACvC,iBAAiB;QACjB,iBAAiB,CAAC,WAAW,IAAI,MAAM,EACzC;QACE,IAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC;QAC1C,IAAM,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;QAE9C,IAAI,UAAU,IAAI,qBAAqB,EAAE;YACrC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;SACpD;aAAM,IAAI,wBAAwB,EAAE;YACjC,IAAM,YAAY,GAAG,oBAAoB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC5D,IAAM,aAAa,GAAG,oBAAoB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YAChE,IAAM,iBAAiB,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;YAC7D,IAAM,aAAa,GAAG,qBAAqB,CACvC,UAAU,EACV,aAAa,EACb,iBAAiB,CACpB,CAAC;YACF,IAAI,aAAa,EAAE;gBACf,OAAO;oBACH,QAAQ,EAAE,IAAI;oBACd,SAAS,EAAE,aAAa;oBACxB,KAAK,EACD,CAAC,SAAS,CAAC,UAAU,CAAC;wBACtB,iBAAiB,KAAK,aAAa;wBACnC,aAAa;wBACT,CAAC,CAAC,aAAa,GAAG,CAAC;wBACnB,CAAC,CAAC,SAAS;iBACtB,CAAC;aACL;SACJ;KACJ;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,IAAM,oBAAoB,GAAG,UACzB,KAA2B,EAC3B,gBAAuC;IAEvC,OAAO,gBAAgB,CAAC,CAAC,CAAC,yBAAyB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACpG,CAAC,CAAC;AAEF,IAAM,oBAAoB,GAAG,UAAC,KAA2B,EAAE,SAAgC;IACvF,IAAM,MAAM,GAAG,oBAAoB,CAC/B,KAAK,EACL,CAAC,UAAU,CAAC,EACZ,CAAC,WAAW,CAAC,CAChB,CAAC,CAAC,CAAC,CAAC;IACL,IAAI,QAAQ,GAAqC,SAAS,CAAC;IAC3D,IAAI,MAAM,EAAE;QACR,IAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE/D,IAAI,cAAc,GAAG,CAAC,CAAC,EAAE;YACrB,KAAK,IAAI,CAAC,GAAG,cAAc,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACrC,IAAI,kBAAkB,CAAuB,IAAI,EAAE,UAAU,CAAC,EAAE;oBAC5D,QAAQ,GAAG,IAAI,CAAC;oBAChB,MAAM;iBACT;aACJ;SACJ;KACJ;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,IAAM,oBAAoB,GAAG,UAAC,IAA2B;;IACrD,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE;QACzB,OAAO,MAAA,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,0CAAE,gBAAgB,CAAC;KAC/D;AACL,CAAC,CAAC;AAEF,IAAM,cAAc,GAA2B;IAC3C,GAAG,EAAE,cAAc,CAAC,IAAI;IACxB,GAAG,EAAE,cAAc,CAAC,IAAI;IACxB,IAAI,EAAE,cAAc,CAAC,MAAM;IAC3B,IAAI,EAAE,cAAc,CAAC,SAAS;IAC9B,KAAK,EAAE,cAAc,CAAC,eAAe;IACrC,IAAI,EAAE,cAAc,CAAC,aAAa;IAClC,GAAG,EAAE,cAAc,CAAC,UAAU;IAC9B,GAAG,EAAE,cAAc,CAAC,MAAM;CAC7B,CAAC;AAEF,IAAM,SAAS,GAAG,UAAC,UAAkB;IACjC,IAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAClD,IAAM,OAAO,GAAG,WAAW,CAAC;IAC5B,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC,CAAC","sourcesContent":["import { findListItemsInSameThread } from 'roosterjs-content-model-api';\nimport { getNumberingListStyle } from './getNumberingListStyle';\nimport type {\n ContentModelDocument,\n ContentModelListItem,\n ContentModelParagraph,\n} from 'roosterjs-content-model-types';\nimport {\n BulletListType,\n isBlockGroupOfType,\n updateListMetadata,\n getOperationalBlocks,\n getSelectedSegmentsAndParagraphs,\n} from 'roosterjs-content-model-core';\n\n/**\n * @internal\n */\ninterface ListTypeStyle {\n listType: 'UL' | 'OL';\n styleType: number;\n index?: number;\n}\n\n/**\n * @internal\n */\nexport function getListTypeStyle(\n model: ContentModelDocument,\n shouldSearchForBullet: boolean = true,\n shouldSearchForNumbering: boolean = true\n): ListTypeStyle | undefined {\n const selectedSegmentsAndParagraphs = getSelectedSegmentsAndParagraphs(model, true);\n if (!selectedSegmentsAndParagraphs[0]) {\n return undefined;\n }\n const marker = selectedSegmentsAndParagraphs[0][0];\n const paragraph = selectedSegmentsAndParagraphs[0][1];\n const listMarkerSegment = paragraph?.segments[0];\n\n if (\n marker &&\n marker.segmentType == 'SelectionMarker' &&\n listMarkerSegment &&\n listMarkerSegment.segmentType == 'Text'\n ) {\n const listMarker = listMarkerSegment.text;\n const bulletType = bulletListType[listMarker];\n\n if (bulletType && shouldSearchForBullet) {\n return { listType: 'UL', styleType: bulletType };\n } else if (shouldSearchForNumbering) {\n const previousList = getPreviousListLevel(model, paragraph);\n const previousIndex = getPreviousListIndex(model, previousList);\n const previousListStyle = getPreviousListStyle(previousList);\n const numberingType = getNumberingListStyle(\n listMarker,\n previousIndex,\n previousListStyle\n );\n if (numberingType) {\n return {\n listType: 'OL',\n styleType: numberingType,\n index:\n !isNewList(listMarker) &&\n previousListStyle === numberingType &&\n previousIndex\n ? previousIndex + 1\n : undefined,\n };\n }\n }\n }\n return undefined;\n}\n\nconst getPreviousListIndex = (\n model: ContentModelDocument,\n previousListItem?: ContentModelListItem\n) => {\n return previousListItem ? findListItemsInSameThread(model, previousListItem).length : undefined;\n};\n\nconst getPreviousListLevel = (model: ContentModelDocument, paragraph: ContentModelParagraph) => {\n const blocks = getOperationalBlocks<ContentModelListItem>(\n model,\n ['ListItem'],\n ['TableCell']\n )[0];\n let listItem: ContentModelListItem | undefined = undefined;\n if (blocks) {\n const listBlockIndex = blocks.parent.blocks.indexOf(paragraph);\n\n if (listBlockIndex > -1) {\n for (let i = listBlockIndex - 1; i > -1; i--) {\n const item = blocks.parent.blocks[i];\n if (isBlockGroupOfType<ContentModelListItem>(item, 'ListItem')) {\n listItem = item;\n break;\n }\n }\n }\n }\n\n return listItem;\n};\n\nconst getPreviousListStyle = (list?: ContentModelListItem) => {\n if (list?.levels[0].dataset) {\n return updateListMetadata(list.levels[0])?.orderedStyleType;\n }\n};\n\nconst bulletListType: Record<string, number> = {\n '*': BulletListType.Disc,\n '-': BulletListType.Dash,\n '--': BulletListType.Square,\n '->': BulletListType.LongArrow,\n '-->': BulletListType.DoubleLongArrow,\n '=>': BulletListType.UnfilledArrow,\n '>': BulletListType.ShortArrow,\n '—': BulletListType.Hyphen,\n};\n\nconst isNewList = (listMarker: string) => {\n const marker = listMarker.replace(/[^\\w\\s]/g, '');\n const pattern = /^[1aAiI]$/;\n return pattern.test(marker);\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getNumberingListStyle.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/autoFormat/list/getNumberingListStyle.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,IAAW,cAMV;AAND,WAAW,cAAc;IACrB,yDAAW,CAAA;IACX,+DAAc,CAAA;IACd,+DAAc,CAAA;IACd,+DAAc,CAAA;IACd,+DAAc,CAAA;AAClB,CAAC,EANU,cAAc,KAAd,cAAc,QAMxB;AAED,IAAW,SAKV;AALD,WAAW,SAAS;IAChB,uCAAO,CAAA;IACP,yCAAQ,CAAA;IACR,uDAAe,CAAA;IACf,mEAAqB,CAAA;AACzB,CAAC,EALU,SAAS,KAAT,SAAS,QAKnB;AAED,IAAM,UAAU,GAA2B;IACvC,GAAG,aAAe;IAClB,GAAG,cAAgB;IACnB,GAAG,qBAAuB;CAC7B,CAAC;AAEF,IAAM,eAAe,GAAG;IACpB,iBAAiB,CAAC,UAAU;IAC5B,iBAAiB,CAAC,cAAc;IAChC,iBAAiB,CAAC,2BAA2B;IAC7C,iBAAiB,CAAC,qBAAqB;CAC1C,CAAC;AACF,IAAM,eAAe,GAAG;IACpB,iBAAiB,CAAC,UAAU;IAC5B,iBAAiB,CAAC,cAAc;IAChC,iBAAiB,CAAC,2BAA2B;IAC7C,iBAAiB,CAAC,qBAAqB;CAC1C,CAAC;AACF,IAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACpD,IAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC9D,IAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAE9D,IAAM,qBAAqB,GAAG,UAAC,IAAY,EAAE,iBAA0B;IACnE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;QACxB,uBAA8B;KACjC;SAAM,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC7B,IACI,CAAC,iBAAiB,uBAA8B;YAC5C,eAAe,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAC/C,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,CAAC,CAAC,iBAAiB,IAAI,IAAI,KAAK,GAAG,CAAC,EACtC;YACE,0BAAiC;SACpC;aAAM,IACH,iBAAiB,uBAA8B;YAC/C,CAAC,CAAC,iBAAiB,IAAI,IAAI,KAAK,GAAG,CAAC,EACtC;YACE,0BAAiC;SACpC;KACJ;SAAM,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC7B,IACI,CAAC,iBAAiB,sBAA6B;YAC3C,eAAe,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAC/C,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,CAAC,CAAC,iBAAiB,IAAI,IAAI,KAAK,GAAG,CAAC,EACtC;YACE,0BAAiC;SACpC;aAAM,IACH,iBAAiB,sBAA6B;YAC9C,CAAC,CAAC,iBAAiB,IAAI,IAAI,KAAK,GAAG,CAAC,EACtC;YACE,0BAAiC;SACpC;KACJ;AACL,CAAC,CAAC;AAEF,IAAM,kBAAkB;IACpB,sBAA0B,UAAA,IAAI,IAAI,OAAA,aAAa,CAAC,IAAI,CAAC,IAAI,SAAS,EAAhC,CAAgC;IAClE,yBAA6B,UAAA,IAAI,IAAI,OAAA,eAAe,CAAC,IAAI,CAAC,IAAI,SAAS,EAAlC,CAAkC;IACvE,yBAA6B,UAAA,IAAI,IAAI,OAAA,eAAe,CAAC,IAAI,CAAC,IAAI,SAAS,EAAlC,CAAkC;IACvE,yBAA6B,UAAA,IAAI,IAAI,OAAA,eAAe,CAAC,IAAI,CAAC,IAAI,SAAS,EAAlC,CAAkC;IACvE,yBAA6B,UAAA,IAAI,IAAI,OAAA,eAAe,CAAC,IAAI,CAAC,IAAI,SAAS,EAAlC,CAAkC;OAC1E,CAAC;AAEF,IAAM,eAAe;IACjB,kBAAiB,iBAAiB,CAAC,UAAU;IAC7C,mBAAkB,iBAAiB,CAAC,cAAc;IAClD,0BAAyB,iBAAiB,CAAC,qBAAqB;IAChE,gCAA+B,iBAAiB,CAAC,2BAA2B;OAC/E,CAAC;AAEF,IAAM,eAAe;IACjB,kBAAiB,iBAAiB,CAAC,UAAU;IAC7C,mBAAkB,iBAAiB,CAAC,cAAc;IAClD,0BAAyB,iBAAiB,CAAC,qBAAqB;IAChE,gCAA+B,iBAAiB,CAAC,2BAA2B;OAC/E,CAAC;AAEF,IAAM,eAAe;IACjB,kBAAiB,iBAAiB,CAAC,UAAU;IAC7C,mBAAkB,iBAAiB,CAAC,cAAc;IAClD,0BAAyB,iBAAiB,CAAC,qBAAqB;IAChE,gCAA+B,iBAAiB,CAAC,2BAA2B;OAC/E,CAAC;AAEF,IAAM,eAAe;IACjB,kBAAiB,iBAAiB,CAAC,UAAU;IAC7C,mBAAkB,iBAAiB,CAAC,cAAc;IAClD,0BAAyB,iBAAiB,CAAC,qBAAqB;IAChE,gCAA+B,iBAAiB,CAAC,2BAA2B;OAC/E,CAAC;AAEF,IAAM,aAAa;IACf,kBAAiB,iBAAiB,CAAC,OAAO;IAC1C,mBAAkB,iBAAiB,CAAC,WAAW;IAC/C,0BAAyB,iBAAiB,CAAC,kBAAkB;IAC7D,gCAA+B,iBAAiB,CAAC,wBAAwB;OAC5E,CAAC;AAEF,IAAM,yBAAyB,GAAG,UAC9B,SAAiB,EACjB,mBAA4B,EAC5B,iBAA0B;IAE1B,IAAM,kBAAkB,GAAG,mBAAmB;QAC1C,CAAC;QACD,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAClD,sEAAsE;IACtE,IAAI,kBAAkB,EAAE;QACpB,IAAM,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrF,IAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACvE,OAAO,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;KAC5F;IACD,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACjC,gBAAwB,EACxB,iBAA0B,EAC1B,iBAA0B;IAE1B,IAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC;IACxC,IAAM,mBAAmB,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;IACtF,kIAAkI;IAClI,8DAA8D;IAC9D,IAAM,SAAS,GAAG,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpF,IAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClC,IAAM,eAAe,GAAG,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAEjE,IACI,CAAC,KAAK;QACN,KAAK,GAAG,CAAC;QACT,CAAC,CAAC,iBAAiB,IAAI,eAAe,CAAC;QACvC,CAAC,iBAAiB,IAAI,eAAe,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,EACpF;QACE,OAAO,SAAS,CAAC;KACpB;IAED,IAAM,aAAa,GAAG,gBAAgB,CAAC,SAAS,CAAC;QAC7C,CAAC,CAAC,yBAAyB,CACrB,OAAO,EACP,mBAAmB,EACnB,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAClD;QACH,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,aAAa,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,KAAa;IACnC,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,iBAA0B;IAC7D,OAAO,iBAAiB,IAAI,KAAK,IAAI,iBAAiB,GAAG,CAAC,KAAK,KAAK,CAAC;AACzE,CAAC","sourcesContent":["import { getIndex } from './getIndex';\nimport { NumberingListType } from 'roosterjs-content-model-core';\n\nconst enum NumberingTypes {\n Decimal = 1,\n LowerAlpha = 2,\n UpperAlpha = 3,\n LowerRoman = 4,\n UpperRoman = 5,\n}\n\nconst enum Character {\n Dot = 1,\n Dash = 2,\n Parenthesis = 3,\n DoubleParenthesis = 4,\n}\n\nconst characters: Record<string, number> = {\n '.': Character.Dot,\n '-': Character.Dash,\n ')': Character.Parenthesis,\n};\n\nconst lowerRomanTypes = [\n NumberingListType.LowerRoman,\n NumberingListType.LowerRomanDash,\n NumberingListType.LowerRomanDoubleParenthesis,\n NumberingListType.LowerRomanParenthesis,\n];\nconst upperRomanTypes = [\n NumberingListType.UpperRoman,\n NumberingListType.UpperRomanDash,\n NumberingListType.UpperRomanDoubleParenthesis,\n NumberingListType.UpperRomanParenthesis,\n];\nconst numberingTriggers = ['1', 'a', 'A', 'I', 'i'];\nconst lowerRomanNumbers = ['i', 'v', 'x', 'l', 'c', 'd', 'm'];\nconst upperRomanNumbers = ['I', 'V', 'X', 'L', 'C', 'D', 'M'];\n\nconst identifyNumberingType = (text: string, previousListStyle?: number) => {\n if (!isNaN(parseInt(text))) {\n return NumberingTypes.Decimal;\n } else if (/[a-z]+/g.test(text)) {\n if (\n (previousListStyle === NumberingTypes.LowerRoman &&\n lowerRomanTypes.indexOf(previousListStyle) > -1 &&\n lowerRomanNumbers.indexOf(text[0]) > -1) ||\n (!previousListStyle && text === 'i')\n ) {\n return NumberingTypes.LowerRoman;\n } else if (\n previousListStyle === NumberingTypes.LowerAlpha ||\n (!previousListStyle && text === 'a')\n ) {\n return NumberingTypes.LowerAlpha;\n }\n } else if (/[A-Z]+/g.test(text)) {\n if (\n (previousListStyle == NumberingTypes.UpperRoman &&\n upperRomanTypes.indexOf(previousListStyle) > -1 &&\n upperRomanNumbers.indexOf(text[0]) > -1) ||\n (!previousListStyle && text === 'I')\n ) {\n return NumberingTypes.UpperRoman;\n } else if (\n previousListStyle == NumberingTypes.UpperAlpha ||\n (!previousListStyle && text === 'A')\n ) {\n return NumberingTypes.UpperAlpha;\n }\n }\n};\n\nconst numberingListTypes: Record<number, (char: number) => number | undefined> = {\n [NumberingTypes.Decimal]: char => DecimalsTypes[char] || undefined,\n [NumberingTypes.LowerAlpha]: char => LowerAlphaTypes[char] || undefined,\n [NumberingTypes.UpperAlpha]: char => UpperAlphaTypes[char] || undefined,\n [NumberingTypes.LowerRoman]: char => LowerRomanTypes[char] || undefined,\n [NumberingTypes.UpperRoman]: char => UpperRomanTypes[char] || undefined,\n};\n\nconst UpperRomanTypes: Record<number, number> = {\n [Character.Dot]: NumberingListType.UpperRoman,\n [Character.Dash]: NumberingListType.UpperRomanDash,\n [Character.Parenthesis]: NumberingListType.UpperRomanParenthesis,\n [Character.DoubleParenthesis]: NumberingListType.UpperRomanDoubleParenthesis,\n};\n\nconst LowerRomanTypes: Record<number, number> = {\n [Character.Dot]: NumberingListType.LowerRoman,\n [Character.Dash]: NumberingListType.LowerRomanDash,\n [Character.Parenthesis]: NumberingListType.LowerRomanParenthesis,\n [Character.DoubleParenthesis]: NumberingListType.LowerRomanDoubleParenthesis,\n};\n\nconst UpperAlphaTypes: Record<number, number> = {\n [Character.Dot]: NumberingListType.UpperAlpha,\n [Character.Dash]: NumberingListType.UpperAlphaDash,\n [Character.Parenthesis]: NumberingListType.UpperAlphaParenthesis,\n [Character.DoubleParenthesis]: NumberingListType.UpperAlphaDoubleParenthesis,\n};\n\nconst LowerAlphaTypes: Record<number, number> = {\n [Character.Dot]: NumberingListType.LowerAlpha,\n [Character.Dash]: NumberingListType.LowerAlphaDash,\n [Character.Parenthesis]: NumberingListType.LowerAlphaParenthesis,\n [Character.DoubleParenthesis]: NumberingListType.LowerAlphaDoubleParenthesis,\n};\n\nconst DecimalsTypes: Record<number, number> = {\n [Character.Dot]: NumberingListType.Decimal,\n [Character.Dash]: NumberingListType.DecimalDash,\n [Character.Parenthesis]: NumberingListType.DecimalParenthesis,\n [Character.DoubleParenthesis]: NumberingListType.DecimalDoubleParenthesis,\n};\n\nconst identifyNumberingListType = (\n numbering: string,\n isDoubleParenthesis: boolean,\n previousListStyle?: number\n): number | undefined => {\n const separatorCharacter = isDoubleParenthesis\n ? Character.DoubleParenthesis\n : characters[numbering[numbering.length - 1]];\n // if separator is not valid, no need to check if the number is valid.\n if (separatorCharacter) {\n const number = isDoubleParenthesis ? numbering.slice(1, -1) : numbering.slice(0, -1);\n const numberingType = identifyNumberingType(number, previousListStyle);\n return numberingType ? numberingListTypes[numberingType](separatorCharacter) : undefined;\n }\n return undefined;\n};\n\n/**\n * @internal\n */\nexport function getNumberingListStyle(\n textBeforeCursor: string,\n previousListIndex?: number,\n previousListStyle?: number\n): number | undefined {\n const trigger = textBeforeCursor.trim();\n const isDoubleParenthesis = trigger[0] === '(' && trigger[trigger.length - 1] === ')';\n //Only the staring items ['1', 'a', 'A', 'I', 'i'] must trigger a new list. All the other triggers is used to keep the list chain.\n //The index is always the characters before the last character\n const listIndex = isDoubleParenthesis ? trigger.slice(1, -1) : trigger.slice(0, -1);\n const index = getIndex(listIndex);\n const isContinuosList = numberingTriggers.indexOf(listIndex) < 0;\n\n if (\n !index ||\n index < 1 ||\n (!previousListIndex && isContinuosList) ||\n (previousListIndex && isContinuosList && !canAppendList(index, previousListIndex))\n ) {\n return undefined;\n }\n\n const numberingType = isValidNumbering(listIndex)\n ? identifyNumberingListType(\n trigger,\n isDoubleParenthesis,\n isContinuosList ? previousListStyle : undefined\n )\n : undefined;\n return numberingType;\n}\n\n/**\n * Check if index has only numbers or only letters to avoid sequence of character such 1:1. trigger a list.\n * @param index\n * @returns\n */\nfunction isValidNumbering(index: string) {\n return Number(index) || /^[A-Za-z\\s]*$/.test(index);\n}\n\nfunction canAppendList(index?: number, previousListIndex?: number) {\n return previousListIndex && index && previousListIndex + 1 === index;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { getListTypeStyle } from './utils/getListTypeStyle';
1
+ import { getListTypeStyle } from './getListTypeStyle';
2
2
  import { getSelectedSegmentsAndParagraphs } from 'roosterjs-content-model-core';
3
3
  import { normalizeContentModel } from 'roosterjs-content-model-dom';
4
4
  import { setListStartNumber, setListStyle, setListType } from 'roosterjs-content-model-api';
@@ -8,21 +8,23 @@ import { setListStartNumber, setListStyle, setListType } from 'roosterjs-content
8
8
  export function keyboardListTrigger(editor, rawEvent, shouldSearchForBullet, shouldSearchForNumbering) {
9
9
  if (shouldSearchForBullet === void 0) { shouldSearchForBullet = true; }
10
10
  if (shouldSearchForNumbering === void 0) { shouldSearchForNumbering = true; }
11
- editor.formatContentModel(function (model, _context) {
12
- var listStyleType = getListTypeStyle(model, shouldSearchForBullet, shouldSearchForNumbering);
13
- if (listStyleType) {
14
- var segmentsAndParagraphs = getSelectedSegmentsAndParagraphs(model, false);
15
- if (segmentsAndParagraphs[0] && segmentsAndParagraphs[0][1]) {
16
- segmentsAndParagraphs[0][1].segments.splice(0, 1);
11
+ if (shouldSearchForBullet || shouldSearchForNumbering) {
12
+ editor.formatContentModel(function (model, _context) {
13
+ var listStyleType = getListTypeStyle(model, shouldSearchForBullet, shouldSearchForNumbering);
14
+ if (listStyleType) {
15
+ var segmentsAndParagraphs = getSelectedSegmentsAndParagraphs(model, false);
16
+ if (segmentsAndParagraphs[0] && segmentsAndParagraphs[0][1]) {
17
+ segmentsAndParagraphs[0][1].segments.splice(0, 1);
18
+ }
19
+ var listType = listStyleType.listType, styleType = listStyleType.styleType, index = listStyleType.index;
20
+ triggerList(editor, model, listType, styleType, index);
21
+ rawEvent.preventDefault();
22
+ normalizeContentModel(model);
23
+ return true;
17
24
  }
18
- var listType = listStyleType.listType, styleType = listStyleType.styleType, index = listStyleType.index;
19
- triggerList(editor, model, listType, styleType, index);
20
- rawEvent.preventDefault();
21
- normalizeContentModel(model);
22
- return true;
23
- }
24
- return false;
25
- });
25
+ return false;
26
+ });
27
+ }
26
28
  }
27
29
  var triggerList = function (editor, model, listType, styleType, index) {
28
30
  setListType(model, listType);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboardListTrigger.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/autoFormat/list/keyboardListTrigger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gCAAgC,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG5F;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAC/B,MAAe,EACf,QAAuB,EACvB,qBAAqC,EACrC,wBAAwC;IADxC,sCAAA,EAAA,4BAAqC;IACrC,yCAAA,EAAA,+BAAwC;IAExC,IAAI,qBAAqB,IAAI,wBAAwB,EAAE;QACnD,MAAM,CAAC,kBAAkB,CAAC,UAAC,KAAK,EAAE,QAAQ;YACtC,IAAM,aAAa,GAAG,gBAAgB,CAClC,KAAK,EACL,qBAAqB,EACrB,wBAAwB,CAC3B,CAAC;YACF,IAAI,aAAa,EAAE;gBACf,IAAM,qBAAqB,GAAG,gCAAgC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAC7E,IAAI,qBAAqB,CAAC,CAAC,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;oBACzD,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iBACrD;gBACO,IAAA,QAAQ,GAAuB,aAAa,SAApC,EAAE,SAAS,GAAY,aAAa,UAAzB,EAAE,KAAK,GAAK,aAAa,MAAlB,CAAmB;gBACrD,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;gBACvD,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAC1B,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAE7B,OAAO,IAAI,CAAC;aACf;YACD,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC,CAAC;KACN;AACL,CAAC;AAED,IAAM,WAAW,GAAG,UAChB,MAAe,EACf,KAA2B,EAC3B,QAAqB,EACrB,SAAiB,EACjB,KAAc;IAEd,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7B,IAAM,aAAa,GAAG,QAAQ,IAAI,IAAI,CAAC;IACvC,mGAAmG;IACnG,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC,IAAI,aAAa,EAAE;QACrC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KACrC;IACD,YAAY,CACR,MAAM,EACN,aAAa;QACT,CAAC,CAAC;YACI,gBAAgB,EAAE,SAAS;SAC9B;QACH,CAAC,CAAC;YACI,kBAAkB,EAAE,SAAS;SAChC,CACV,CAAC;AACN,CAAC,CAAC","sourcesContent":["import { getListTypeStyle } from './getListTypeStyle';\nimport { getSelectedSegmentsAndParagraphs } from 'roosterjs-content-model-core';\nimport { normalizeContentModel } from 'roosterjs-content-model-dom';\nimport { setListStartNumber, setListStyle, setListType } from 'roosterjs-content-model-api';\nimport type { ContentModelDocument, IEditor } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function keyboardListTrigger(\n editor: IEditor,\n rawEvent: KeyboardEvent,\n shouldSearchForBullet: boolean = true,\n shouldSearchForNumbering: boolean = true\n) {\n if (shouldSearchForBullet || shouldSearchForNumbering) {\n editor.formatContentModel((model, _context) => {\n const listStyleType = getListTypeStyle(\n model,\n shouldSearchForBullet,\n shouldSearchForNumbering\n );\n if (listStyleType) {\n const segmentsAndParagraphs = getSelectedSegmentsAndParagraphs(model, false);\n if (segmentsAndParagraphs[0] && segmentsAndParagraphs[0][1]) {\n segmentsAndParagraphs[0][1].segments.splice(0, 1);\n }\n const { listType, styleType, index } = listStyleType;\n triggerList(editor, model, listType, styleType, index);\n rawEvent.preventDefault();\n normalizeContentModel(model);\n\n return true;\n }\n return false;\n });\n }\n}\n\nconst triggerList = (\n editor: IEditor,\n model: ContentModelDocument,\n listType: 'OL' | 'UL',\n styleType: number,\n index?: number\n) => {\n setListType(model, listType);\n const isOrderedList = listType == 'OL';\n // If the index < 1, it is a new list, so it will be starting by 1, then no need to set startNumber\n if (index && index > 1 && isOrderedList) {\n setListStartNumber(editor, index);\n }\n setListStyle(\n editor,\n isOrderedList\n ? {\n orderedStyleType: styleType,\n }\n : {\n unorderedStyleType: styleType,\n }\n );\n};\n"]}
@@ -0,0 +1,58 @@
1
+ import type { EditorPlugin, IEditor, PluginEvent } from 'roosterjs-content-model-types';
2
+ /**
3
+ * Context Menu options for ContextMenu plugin
4
+ */
5
+ export interface ContextMenuOptions<T> {
6
+ /**
7
+ * Render function for the context menu
8
+ * @param container The container HTML element, it will be located at the mouse click position,
9
+ * so the callback just need to render menu content into this container
10
+ * @param onDismiss The onDismiss callback, some menu render need to know this callback so that
11
+ * it can handle the dismiss event
12
+ */
13
+ render: (container: HTMLElement, items: (T | null)[], onDismiss: () => void) => void;
14
+ /**
15
+ * Dismiss function for the context menu, it will be called when user wants to dismiss this context menu
16
+ * e.g. user click away so the menu should be dismissed
17
+ * @param container The container HTML element
18
+ */
19
+ dismiss?: (container: HTMLElement) => void;
20
+ /**
21
+ * Whether the default context menu is allowed. @default false
22
+ */
23
+ allowDefaultMenu?: boolean;
24
+ }
25
+ /**
26
+ * An editor plugin that support showing a context menu using render() function from options parameter
27
+ */
28
+ export declare class ContextMenuPluginBase<T> implements EditorPlugin {
29
+ private options;
30
+ private container;
31
+ private editor;
32
+ private isMenuShowing;
33
+ /**
34
+ * Create a new instance of ContextMenu class
35
+ * @param options An options object to determine how to show/hide the context menu
36
+ */
37
+ constructor(options: ContextMenuOptions<T>);
38
+ /**
39
+ * Get a friendly name of this plugin
40
+ */
41
+ getName(): string;
42
+ /**
43
+ * Initialize this plugin
44
+ * @param editor The editor instance
45
+ */
46
+ initialize(editor: IEditor): void;
47
+ /**
48
+ * Dispose this plugin
49
+ */
50
+ dispose(): void;
51
+ /**
52
+ * Handle events triggered from editor
53
+ * @param event PluginEvent object
54
+ */
55
+ onPluginEvent(event: PluginEvent): void;
56
+ private initContainer;
57
+ private onDismiss;
58
+ }
@@ -0,0 +1,81 @@
1
+ /**
2
+ * An editor plugin that support showing a context menu using render() function from options parameter
3
+ */
4
+ var ContextMenuPluginBase = /** @class */ (function () {
5
+ /**
6
+ * Create a new instance of ContextMenu class
7
+ * @param options An options object to determine how to show/hide the context menu
8
+ */
9
+ function ContextMenuPluginBase(options) {
10
+ var _this = this;
11
+ this.options = options;
12
+ this.container = null;
13
+ this.editor = null;
14
+ this.isMenuShowing = false;
15
+ this.onDismiss = function () {
16
+ var _a, _b;
17
+ if (_this.container && _this.isMenuShowing) {
18
+ (_b = (_a = _this.options).dismiss) === null || _b === void 0 ? void 0 : _b.call(_a, _this.container);
19
+ _this.isMenuShowing = false;
20
+ }
21
+ };
22
+ }
23
+ /**
24
+ * Get a friendly name of this plugin
25
+ */
26
+ ContextMenuPluginBase.prototype.getName = function () {
27
+ return 'ContextMenu';
28
+ };
29
+ /**
30
+ * Initialize this plugin
31
+ * @param editor The editor instance
32
+ */
33
+ ContextMenuPluginBase.prototype.initialize = function (editor) {
34
+ this.editor = editor;
35
+ };
36
+ /**
37
+ * Dispose this plugin
38
+ */
39
+ ContextMenuPluginBase.prototype.dispose = function () {
40
+ var _a;
41
+ this.onDismiss();
42
+ if ((_a = this.container) === null || _a === void 0 ? void 0 : _a.parentNode) {
43
+ this.container.parentNode.removeChild(this.container);
44
+ this.container = null;
45
+ }
46
+ this.editor = null;
47
+ };
48
+ /**
49
+ * Handle events triggered from editor
50
+ * @param event PluginEvent object
51
+ */
52
+ ContextMenuPluginBase.prototype.onPluginEvent = function (event) {
53
+ if (event.eventType == 'contextMenu' && event.items.length > 0) {
54
+ var rawEvent = event.rawEvent, items = event.items;
55
+ this.onDismiss();
56
+ if (!this.options.allowDefaultMenu) {
57
+ rawEvent.preventDefault();
58
+ }
59
+ if (this.initContainer(rawEvent.pageX, rawEvent.pageY)) {
60
+ this.options.render(this.container, items, this.onDismiss);
61
+ this.isMenuShowing = true;
62
+ }
63
+ }
64
+ };
65
+ ContextMenuPluginBase.prototype.initContainer = function (x, y) {
66
+ var _a, _b;
67
+ if (!this.container && this.editor) {
68
+ this.container = this.editor.getDocument().createElement('div');
69
+ this.container.style.position = 'fixed';
70
+ this.container.style.width = '0';
71
+ this.container.style.height = '0';
72
+ this.editor.getDocument().body.appendChild(this.container);
73
+ }
74
+ (_a = this.container) === null || _a === void 0 ? void 0 : _a.style.setProperty('left', x + 'px');
75
+ (_b = this.container) === null || _b === void 0 ? void 0 : _b.style.setProperty('top', y + 'px');
76
+ return !!this.container;
77
+ };
78
+ return ContextMenuPluginBase;
79
+ }());
80
+ export { ContextMenuPluginBase };
81
+ //# sourceMappingURL=ContextMenuPluginBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextMenuPluginBase.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/contextMenuBase/ContextMenuPluginBase.ts"],"names":[],"mappings":"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","sourcesContent":["import type { EditorPlugin, IEditor, PluginEvent } from 'roosterjs-content-model-types';\n\n/**\n * Context Menu options for ContextMenu plugin\n */\nexport interface ContextMenuOptions<T> {\n /**\n * Render function for the context menu\n * @param container The container HTML element, it will be located at the mouse click position,\n * so the callback just need to render menu content into this container\n * @param onDismiss The onDismiss callback, some menu render need to know this callback so that\n * it can handle the dismiss event\n */\n render: (container: HTMLElement, items: (T | null)[], onDismiss: () => void) => void;\n\n /**\n * Dismiss function for the context menu, it will be called when user wants to dismiss this context menu\n * e.g. user click away so the menu should be dismissed\n * @param container The container HTML element\n */\n dismiss?: (container: HTMLElement) => void;\n\n /**\n * Whether the default context menu is allowed. @default false\n */\n allowDefaultMenu?: boolean;\n}\n\n/**\n * An editor plugin that support showing a context menu using render() function from options parameter\n */\nexport class ContextMenuPluginBase<T> implements EditorPlugin {\n private container: HTMLElement | null = null;\n private editor: IEditor | null = null;\n private isMenuShowing: boolean = false;\n\n /**\n * Create a new instance of ContextMenu class\n * @param options An options object to determine how to show/hide the context menu\n */\n constructor(private options: ContextMenuOptions<T>) {}\n\n /**\n * Get a friendly name of this plugin\n */\n getName() {\n return 'ContextMenu';\n }\n\n /**\n * Initialize this plugin\n * @param editor The editor instance\n */\n initialize(editor: IEditor) {\n this.editor = editor;\n }\n\n /**\n * Dispose this plugin\n */\n dispose() {\n this.onDismiss();\n\n if (this.container?.parentNode) {\n this.container.parentNode.removeChild(this.container);\n this.container = null;\n }\n this.editor = null;\n }\n\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n onPluginEvent(event: PluginEvent) {\n if (event.eventType == 'contextMenu' && event.items.length > 0) {\n const { rawEvent, items } = event;\n\n this.onDismiss();\n\n if (!this.options.allowDefaultMenu) {\n rawEvent.preventDefault();\n }\n\n if (this.initContainer(rawEvent.pageX, rawEvent.pageY)) {\n this.options.render(this.container!, items as T[], this.onDismiss);\n this.isMenuShowing = true;\n }\n }\n }\n\n private initContainer(x: number, y: number) {\n if (!this.container && this.editor) {\n this.container = this.editor.getDocument().createElement('div');\n\n this.container.style.position = 'fixed';\n this.container.style.width = '0';\n this.container.style.height = '0';\n this.editor.getDocument().body.appendChild(this.container);\n }\n this.container?.style.setProperty('left', x + 'px');\n this.container?.style.setProperty('top', y + 'px');\n return !!this.container;\n }\n\n private onDismiss = () => {\n if (this.container && this.isMenuShowing) {\n this.options.dismiss?.(this.container);\n this.isMenuShowing = false;\n }\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"EditPlugin.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-plugins/lib/edit/EditPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { keyboardDelete } from './keyboardDelete';\nimport { keyboardInput } from './keyboardInput';\nimport { keyboardTab } from './keyboardTab';\nimport type {\n EditorPlugin,\n IEditor,\n KeyDownEvent,\n PluginEvent,\n} from 'roosterjs-content-model-types';\n\nconst BACKSPACE_KEY = 8;\nconst DELETE_KEY = 46;\n\n/**\n * Edit plugins helps editor to do editing operation on top of content model.\n * This includes:\n * 1. Delete Key\n * 2. Backspace Key\n * 3. Tab Key\n */\nexport class EditPlugin implements EditorPlugin {\n private editor: IEditor | null = null;\n private disposer: (() => void) | null = null;\n private shouldHandleNextInputEvent = false;\n\n /**\n * Get name of this plugin\n */\n getName() {\n return 'Edit';\n }\n\n /**\n * The first method that editor will call to a plugin when editor is initializing.\n * It will pass in the editor instance, plugin should take this chance to save the\n * editor reference so that it can call to any editor method or format API later.\n * @param editor The editor object\n */\n initialize(editor: IEditor) {\n this.editor = editor;\n if (editor.getEnvironment().isAndroid) {\n this.disposer = this.editor.attachDomEvent({\n beforeinput: {\n beforeDispatch: e => this.handleBeforeInputEvent(editor, e),\n },\n });\n }\n }\n\n /**\n * The last method that editor will call to a plugin before it is disposed.\n * Plugin can take this chance to clear the reference to editor. After this method is\n * called, plugin should not call to any editor method since it will result in error.\n */\n dispose() {\n this.editor = null;\n this.disposer?.();\n this.disposer = null;\n }\n\n /**\n * Core method for a plugin. Once an event happens in editor, editor will call this\n * method of each plugin to handle the event as long as the event is not handled\n * exclusively by another plugin.\n * @param event The event to handle:\n */\n onPluginEvent(event: PluginEvent) {\n if (this.editor) {\n switch (event.eventType) {\n case 'keyDown':\n this.handleKeyDownEvent(this.editor, event);\n break;\n }\n }\n }\n\n private handleKeyDownEvent(editor: IEditor, event: KeyDownEvent) {\n const rawEvent = event.rawEvent;\n\n if (!rawEvent.defaultPrevented && !event.handledByEditFeature) {\n switch (rawEvent.key) {\n case 'Backspace':\n case 'Delete':\n // Use our API to handle BACKSPACE/DELETE key.\n // No need to clear cache here since if we rely on browser's behavior, there will be Input event and its handler will reconcile cache\n keyboardDelete(editor, rawEvent);\n break;\n\n case 'Tab':\n keyboardTab(editor, rawEvent);\n break;\n case 'Unidentified':\n if (editor.getEnvironment().isAndroid) {\n this.shouldHandleNextInputEvent = true;\n }\n break;\n\n case 'Enter':\n default:\n keyboardInput(editor, rawEvent);\n break;\n }\n }\n }\n\n private handleBeforeInputEvent(editor: IEditor, rawEvent: Event) {\n // Some Android IMEs doesn't fire correct keydown event for BACKSPACE/DELETE key\n // Here we translate input event to BACKSPACE/DELETE keydown event to be compatible with existing logic\n if (\n !this.shouldHandleNextInputEvent ||\n !(rawEvent instanceof InputEvent) ||\n rawEvent.defaultPrevented\n ) {\n return;\n }\n this.shouldHandleNextInputEvent = false;\n\n let handled = false;\n switch (rawEvent.inputType) {\n case 'deleteContentBackward':\n handled = keyboardDelete(\n editor,\n new KeyboardEvent('keydown', {\n key: 'Backspace',\n keyCode: BACKSPACE_KEY,\n which: BACKSPACE_KEY,\n })\n );\n break;\n case 'deleteContentForward':\n handled = keyboardDelete(\n editor,\n new KeyboardEvent('keydown', {\n key: 'Delete',\n keyCode: DELETE_KEY,\n which: DELETE_KEY,\n })\n );\n break;\n }\n\n if (handled) {\n rawEvent.preventDefault();\n }\n }\n}\n"]}
1
+ {"version":3,"file":"EditPlugin.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/edit/EditPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { keyboardDelete } from './keyboardDelete';\nimport { keyboardInput } from './keyboardInput';\nimport { keyboardTab } from './keyboardTab';\nimport type {\n EditorPlugin,\n IEditor,\n KeyDownEvent,\n PluginEvent,\n} from 'roosterjs-content-model-types';\n\nconst BACKSPACE_KEY = 8;\nconst DELETE_KEY = 46;\n\n/**\n * Edit plugins helps editor to do editing operation on top of content model.\n * This includes:\n * 1. Delete Key\n * 2. Backspace Key\n * 3. Tab Key\n */\nexport class EditPlugin implements EditorPlugin {\n private editor: IEditor | null = null;\n private disposer: (() => void) | null = null;\n private shouldHandleNextInputEvent = false;\n\n /**\n * Get name of this plugin\n */\n getName() {\n return 'Edit';\n }\n\n /**\n * The first method that editor will call to a plugin when editor is initializing.\n * It will pass in the editor instance, plugin should take this chance to save the\n * editor reference so that it can call to any editor method or format API later.\n * @param editor The editor object\n */\n initialize(editor: IEditor) {\n this.editor = editor;\n if (editor.getEnvironment().isAndroid) {\n this.disposer = this.editor.attachDomEvent({\n beforeinput: {\n beforeDispatch: e => this.handleBeforeInputEvent(editor, e),\n },\n });\n }\n }\n\n /**\n * The last method that editor will call to a plugin before it is disposed.\n * Plugin can take this chance to clear the reference to editor. After this method is\n * called, plugin should not call to any editor method since it will result in error.\n */\n dispose() {\n this.editor = null;\n this.disposer?.();\n this.disposer = null;\n }\n\n /**\n * Core method for a plugin. Once an event happens in editor, editor will call this\n * method of each plugin to handle the event as long as the event is not handled\n * exclusively by another plugin.\n * @param event The event to handle:\n */\n onPluginEvent(event: PluginEvent) {\n if (this.editor) {\n switch (event.eventType) {\n case 'keyDown':\n this.handleKeyDownEvent(this.editor, event);\n break;\n }\n }\n }\n\n private handleKeyDownEvent(editor: IEditor, event: KeyDownEvent) {\n const rawEvent = event.rawEvent;\n\n if (!rawEvent.defaultPrevented && !event.handledByEditFeature) {\n switch (rawEvent.key) {\n case 'Backspace':\n case 'Delete':\n // Use our API to handle BACKSPACE/DELETE key.\n // No need to clear cache here since if we rely on browser's behavior, there will be Input event and its handler will reconcile cache\n keyboardDelete(editor, rawEvent);\n break;\n\n case 'Tab':\n keyboardTab(editor, rawEvent);\n break;\n case 'Unidentified':\n if (editor.getEnvironment().isAndroid) {\n this.shouldHandleNextInputEvent = true;\n }\n break;\n\n case 'Enter':\n default:\n keyboardInput(editor, rawEvent);\n break;\n }\n }\n }\n\n private handleBeforeInputEvent(editor: IEditor, rawEvent: Event) {\n // Some Android IMEs doesn't fire correct keydown event for BACKSPACE/DELETE key\n // Here we translate input event to BACKSPACE/DELETE keydown event to be compatible with existing logic\n if (\n !this.shouldHandleNextInputEvent ||\n !(rawEvent instanceof InputEvent) ||\n rawEvent.defaultPrevented\n ) {\n return;\n }\n this.shouldHandleNextInputEvent = false;\n\n let handled = false;\n switch (rawEvent.inputType) {\n case 'deleteContentBackward':\n handled = keyboardDelete(\n editor,\n new KeyboardEvent('keydown', {\n key: 'Backspace',\n keyCode: BACKSPACE_KEY,\n which: BACKSPACE_KEY,\n })\n );\n break;\n case 'deleteContentForward':\n handled = keyboardDelete(\n editor,\n new KeyboardEvent('keydown', {\n key: 'Delete',\n keyCode: DELETE_KEY,\n which: DELETE_KEY,\n })\n );\n break;\n }\n\n if (handled) {\n rawEvent.preventDefault();\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"deleteAllSegmentBefore.js","sourceRoot":"","sources":["../../../../../packages-content-model/roosterjs-content-model-plugins/lib/edit/deleteSteps/deleteAllSegmentBefore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAG7D;;GAEG;AACH,MAAM,CAAC,IAAM,sBAAsB,GAAwB,UAAA,OAAO;IAC9D,IAAI,OAAO,CAAC,YAAY,IAAI,YAAY,EAAE;QACtC,OAAO;KACV;IAEK,IAAA,KAAwB,OAAO,CAAC,WAAW,EAAzC,SAAS,eAAA,EAAE,MAAM,YAAwB,CAAC;IAClD,IAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEjD,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QACjC,IAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEtC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;QAE1B,IAAI,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE;YAC1D,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;SAClC;KACJ;AACL,CAAC,CAAC","sourcesContent":["import { deleteSegment } from 'roosterjs-content-model-core';\nimport type { DeleteSelectionStep } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const deleteAllSegmentBefore: DeleteSelectionStep = context => {\n if (context.deleteResult != 'notDeleted') {\n return;\n }\n\n const { paragraph, marker } = context.insertPoint;\n const index = paragraph.segments.indexOf(marker);\n\n for (let i = index - 1; i >= 0; i--) {\n const segment = paragraph.segments[i];\n\n segment.isSelected = true;\n\n if (deleteSegment(paragraph, segment, context.formatContext)) {\n context.deleteResult = 'range';\n }\n }\n};\n"]}
1
+ {"version":3,"file":"deleteAllSegmentBefore.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/deleteSteps/deleteAllSegmentBefore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAG7D;;GAEG;AACH,MAAM,CAAC,IAAM,sBAAsB,GAAwB,UAAA,OAAO;IAC9D,IAAI,OAAO,CAAC,YAAY,IAAI,YAAY,EAAE;QACtC,OAAO;KACV;IAEK,IAAA,KAAwB,OAAO,CAAC,WAAW,EAAzC,SAAS,eAAA,EAAE,MAAM,YAAwB,CAAC;IAClD,IAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEjD,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QACjC,IAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEtC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;QAE1B,IAAI,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE;YAC1D,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;SAClC;KACJ;AACL,CAAC,CAAC","sourcesContent":["import { deleteSegment } from 'roosterjs-content-model-core';\nimport type { DeleteSelectionStep } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const deleteAllSegmentBefore: DeleteSelectionStep = context => {\n if (context.deleteResult != 'notDeleted') {\n return;\n }\n\n const { paragraph, marker } = context.insertPoint;\n const index = paragraph.segments.indexOf(marker);\n\n for (let i = index - 1; i >= 0; i--) {\n const segment = paragraph.segments[i];\n\n segment.isSelected = true;\n\n if (deleteSegment(paragraph, segment, context.formatContext)) {\n context.deleteResult = 'range';\n }\n }\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"deleteCollapsedSelection.js","sourceRoot":"","sources":["../../../../../packages-content-model/roosterjs-content-model-plugins/lib/edit/deleteSteps/deleteCollapsedSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EACH,WAAW,EACX,aAAa,EACb,iCAAiC,GACpC,MAAM,8BAA8B,CAAC;AAUtC,SAAS,2BAA2B,CAAC,SAAiC;IAClE,OAAO,UAAA,OAAO;;QACV,IAAI,OAAO,CAAC,YAAY,IAAI,YAAY,EAAE;YACtC,OAAO;SACV;QAED,IAAM,SAAS,GAAG,SAAS,IAAI,SAAS,CAAC;QACnC,IAAA,KAA4C,OAAO,CAAC,WAAW,EAA7D,SAAS,eAAA,EAAE,MAAM,YAAA,EAAE,IAAI,UAAA,EAAE,YAAY,kBAAwB,CAAC;QACtE,IAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QAEpC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAElB,IAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,aAAkC,CAAC;QACvC,IAAI,IAAiC,CAAC;QAEtC,IAAI,eAAe,EAAE;YACjB,IAAI,aAAa,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,EAAE;gBAC7E,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC;gBAEpC,4GAA4G;gBAC5G,qFAAqF;gBACrF,uBAAuB,CAAC,SAAS,CAAC,CAAC;aACtC;SACJ;aAAM,IACH,sBAAsB,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC;YAC5D,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EACxB;YACE,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACrC,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;SAClC;aAAM,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE;YAClE,IAAA,KAAK,GAA2B,aAAa,MAAxC,EAAE,MAAI,GAAqB,aAAa,KAAlC,EAAE,cAAc,GAAK,aAAa,eAAlB,CAAmB;YAEtD,IAAI,KAAK,CAAC,SAAS,IAAI,WAAW,EAAE;gBAChC,IAAI,cAAc,EAAE;oBAChB,yGAAyG;oBACzG,IAAI,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,EAAE;wBACxE,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;qBAClC;iBACJ;qBAAM;oBACH,IAAI,SAAS,EAAE;wBACX,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC;qBACjC;yBAAM;wBACH,IAAI,CAAA,MAAA,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,WAAW,KAAI,IAAI,EAAE;4BAChE,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;yBACxB;wBAED,OAAO,CAAC,WAAW,GAAG;4BAClB,MAAM,QAAA;4BACN,SAAS,EAAE,KAAK;4BAChB,IAAI,QAAA;4BACJ,YAAY,cAAA;yBACf,CAAC;wBACF,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;wBAClC,OAAO,KAAK,CAAC,aAAa,CAAC;qBAC9B;oBAED,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;iBAClC;gBAED,qHAAqH;gBACrH,OAAO,CAAC,gBAAgB,GAAG,YAAY,CAAC;aAC3C;iBAAM;gBACH,IACI,WAAW,CACP,MAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EACd,KAAK,EACL,SAAS,CAAC,eAAe,EACzB,OAAO,CAAC,aAAa,EACrB,SAAS,CACZ,EACH;oBACE,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;iBAClC;aACJ;SACJ;aAAM;YACH,mFAAmF;YACnF,yGAAyG;YACzG,uFAAuF;YACvF,OAAO,CAAC,YAAY,GAAG,iBAAiB,CAAC;SAC5C;IACL,CAAC,CAAC;AACN,CAAC;AAED,SAAS,OAAO,CAAC,IAA8B;IAC3C,IAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzC,OAAO,UAAU,CAAC,cAAc,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AACvE,CAAC;AAED,SAAS,sBAAsB,CAC3B,SAAkB,EAClB,QAA+B,EAC/B,SAAgC,EAChC,IAA8B;IAE9B,OAAO,CACH,CAAC,SAAS;QACV,QAAQ,CAAC,MAAM,IAAI,CAAC;QACpB,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,iBAAiB;QAC5C,SAAS,CAAC,MAAM,CAAC,UAAU;QAC3B,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC;QACrC,iCAAiC,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CACxF,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,SAAS,OAAO,CAAC,QAA+B;;IAC5C,IAAI,CAAA,MAAA,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,WAAW,KAAI,IAAI,EAAE;QACpD,IAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,IAAI,iBAAiB,EAAlC,CAAkC,CAAC,CAAC;QAEnF,IAAI,CAAA,MAAA,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,WAAW,KAAI,IAAI,EAAE;YACtE,QAAQ,CAAC,GAAG,EAAE,CAAC;SAClB;KACJ;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,IAAM,+BAA+B,GAAG,2BAA2B,CAAC,SAAS,CAAC,CAAC;AAEtF;;GAEG;AACH,MAAM,CAAC,IAAM,gCAAgC,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAC","sourcesContent":["import { getLeafSiblingBlock } from '../utils/getLeafSiblingBlock';\nimport { setModelIndentation } from 'roosterjs-content-model-api';\nimport { setParagraphNotImplicit } from 'roosterjs-content-model-dom';\nimport {\n deleteBlock,\n deleteSegment,\n getClosestAncestorBlockGroupIndex,\n} from 'roosterjs-content-model-core';\nimport type { BlockAndPath } from '../utils/getLeafSiblingBlock';\nimport type {\n ContentModelBlockGroup,\n ContentModelDocument,\n ContentModelParagraph,\n ContentModelSegment,\n DeleteSelectionStep,\n} from 'roosterjs-content-model-types';\n\nfunction getDeleteCollapsedSelection(direction: 'forward' | 'backward'): DeleteSelectionStep {\n return context => {\n if (context.deleteResult != 'notDeleted') {\n return;\n }\n\n const isForward = direction == 'forward';\n const { paragraph, marker, path, tableContext } = context.insertPoint;\n const segments = paragraph.segments;\n\n fixupBr(segments);\n\n const index = segments.indexOf(marker) + (isForward ? 1 : -1);\n const segmentToDelete = segments[index];\n let blockToDelete: BlockAndPath | null;\n let root: ContentModelDocument | null;\n\n if (segmentToDelete) {\n if (deleteSegment(paragraph, segmentToDelete, context.formatContext, direction)) {\n context.deleteResult = 'singleChar';\n\n // It is possible that we have deleted everything from this paragraph, so we need to mark it as not implicit\n // to avoid losing its format. See https://github.com/microsoft/roosterjs/issues/1953\n setParagraphNotImplicit(paragraph);\n }\n } else if (\n shouldOutdentParagraph(isForward, segments, paragraph, path) &&\n (root = getRoot(path))\n ) {\n setModelIndentation(root, 'outdent');\n context.deleteResult = 'range';\n } else if ((blockToDelete = getLeafSiblingBlock(path, paragraph, isForward))) {\n const { block, path, siblingSegment } = blockToDelete;\n\n if (block.blockType == 'Paragraph') {\n if (siblingSegment) {\n // When selection is under general segment, need to check if it has a sibling sibling, and delete from it\n if (deleteSegment(block, siblingSegment, context.formatContext, direction)) {\n context.deleteResult = 'range';\n }\n } else {\n if (isForward) {\n context.lastParagraph = block;\n } else {\n if (block.segments[block.segments.length - 1]?.segmentType == 'Br') {\n block.segments.pop();\n }\n\n context.insertPoint = {\n marker,\n paragraph: block,\n path,\n tableContext,\n };\n context.lastParagraph = paragraph;\n delete block.cachedElement;\n }\n\n context.deleteResult = 'range';\n }\n\n // When go across table, getLeafSiblingBlock will return null, when we are here, we must be in the same table context\n context.lastTableContext = tableContext;\n } else {\n if (\n deleteBlock(\n path[0].blocks,\n block,\n undefined /*replacement*/,\n context.formatContext,\n direction\n )\n ) {\n context.deleteResult = 'range';\n }\n }\n } else {\n // We have nothing to delete, in this case we don't want browser handle it as well.\n // Because when Backspace on an empty document, it will also delete the only DIV and SPAN element, causes\n // editor is really empty. We don't want that happen. So the handling should stop here.\n context.deleteResult = 'nothingToDelete';\n }\n };\n}\n\nfunction getRoot(path: ContentModelBlockGroup[]): ContentModelDocument | null {\n const lastInPath = path[path.length - 1];\n return lastInPath.blockGroupType == 'Document' ? lastInPath : null;\n}\n\nfunction shouldOutdentParagraph(\n isForward: boolean,\n segments: ContentModelSegment[],\n paragraph: ContentModelParagraph,\n path: ContentModelBlockGroup[]\n) {\n return (\n !isForward &&\n segments.length == 1 &&\n segments[0].segmentType == 'SelectionMarker' &&\n paragraph.format.marginLeft &&\n parseInt(paragraph.format.marginLeft) &&\n getClosestAncestorBlockGroupIndex(path, ['Document', 'TableCell'], ['ListItem']) > -1\n );\n}\n\n/**\n * If the last segment is BR, remove it for now. We may add it back later when normalize model.\n * So that if this is an empty paragraph, it will start to delete next block\n */\nfunction fixupBr(segments: ContentModelSegment[]) {\n if (segments[segments.length - 1]?.segmentType == 'Br') {\n const segmentsWithoutBr = segments.filter(x => x.segmentType != 'SelectionMarker');\n\n if (segmentsWithoutBr[segmentsWithoutBr.length - 2]?.segmentType != 'Br') {\n segments.pop();\n }\n }\n}\n\n/**\n * @internal if we didn't delete anything, and we want to delete forward, now perform it\n */\nexport const forwardDeleteCollapsedSelection = getDeleteCollapsedSelection('forward');\n\n/**\n * @internal if we didn't delete anything, and we want to delete backward, now perform it\n */\nexport const backwardDeleteCollapsedSelection = getDeleteCollapsedSelection('backward');\n"]}
1
+ {"version":3,"file":"deleteCollapsedSelection.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/deleteSteps/deleteCollapsedSelection.ts"],"names":[],"mappings":"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","sourcesContent":["import { getLeafSiblingBlock } from '../utils/getLeafSiblingBlock';\nimport { setModelIndentation } from 'roosterjs-content-model-api';\nimport { setParagraphNotImplicit } from 'roosterjs-content-model-dom';\nimport {\n deleteBlock,\n deleteSegment,\n getClosestAncestorBlockGroupIndex,\n} from 'roosterjs-content-model-core';\nimport type { BlockAndPath } from '../utils/getLeafSiblingBlock';\nimport type {\n ContentModelBlockGroup,\n ContentModelDocument,\n ContentModelParagraph,\n ContentModelSegment,\n DeleteSelectionStep,\n} from 'roosterjs-content-model-types';\n\nfunction getDeleteCollapsedSelection(direction: 'forward' | 'backward'): DeleteSelectionStep {\n return context => {\n if (context.deleteResult != 'notDeleted') {\n return;\n }\n\n const isForward = direction == 'forward';\n const { paragraph, marker, path, tableContext } = context.insertPoint;\n const segments = paragraph.segments;\n\n fixupBr(segments);\n\n const index = segments.indexOf(marker) + (isForward ? 1 : -1);\n const segmentToDelete = segments[index];\n let blockToDelete: BlockAndPath | null;\n let root: ContentModelDocument | null;\n\n if (segmentToDelete) {\n if (deleteSegment(paragraph, segmentToDelete, context.formatContext, direction)) {\n context.deleteResult = 'singleChar';\n\n // It is possible that we have deleted everything from this paragraph, so we need to mark it as not implicit\n // to avoid losing its format. See https://github.com/microsoft/roosterjs/issues/1953\n setParagraphNotImplicit(paragraph);\n }\n } else if (\n shouldOutdentParagraph(isForward, segments, paragraph, path) &&\n (root = getRoot(path))\n ) {\n setModelIndentation(root, 'outdent');\n context.deleteResult = 'range';\n } else if ((blockToDelete = getLeafSiblingBlock(path, paragraph, isForward))) {\n const { block, path, siblingSegment } = blockToDelete;\n\n if (block.blockType == 'Paragraph') {\n if (siblingSegment) {\n // When selection is under general segment, need to check if it has a sibling sibling, and delete from it\n if (deleteSegment(block, siblingSegment, context.formatContext, direction)) {\n context.deleteResult = 'range';\n }\n } else {\n if (isForward) {\n context.lastParagraph = block;\n } else {\n if (block.segments[block.segments.length - 1]?.segmentType == 'Br') {\n block.segments.pop();\n }\n\n context.insertPoint = {\n marker,\n paragraph: block,\n path,\n tableContext,\n };\n context.lastParagraph = paragraph;\n delete block.cachedElement;\n }\n\n context.deleteResult = 'range';\n }\n\n // When go across table, getLeafSiblingBlock will return null, when we are here, we must be in the same table context\n context.lastTableContext = tableContext;\n } else {\n if (\n deleteBlock(\n path[0].blocks,\n block,\n undefined /*replacement*/,\n context.formatContext,\n direction\n )\n ) {\n context.deleteResult = 'range';\n }\n }\n } else {\n // We have nothing to delete, in this case we don't want browser handle it as well.\n // Because when Backspace on an empty document, it will also delete the only DIV and SPAN element, causes\n // editor is really empty. We don't want that happen. So the handling should stop here.\n context.deleteResult = 'nothingToDelete';\n }\n };\n}\n\nfunction getRoot(path: ContentModelBlockGroup[]): ContentModelDocument | null {\n const lastInPath = path[path.length - 1];\n return lastInPath.blockGroupType == 'Document' ? lastInPath : null;\n}\n\nfunction shouldOutdentParagraph(\n isForward: boolean,\n segments: ContentModelSegment[],\n paragraph: ContentModelParagraph,\n path: ContentModelBlockGroup[]\n) {\n return (\n !isForward &&\n segments.length == 1 &&\n segments[0].segmentType == 'SelectionMarker' &&\n paragraph.format.marginLeft &&\n parseInt(paragraph.format.marginLeft) &&\n getClosestAncestorBlockGroupIndex(path, ['Document', 'TableCell'], ['ListItem']) > -1\n );\n}\n\n/**\n * If the last segment is BR, remove it for now. We may add it back later when normalize model.\n * So that if this is an empty paragraph, it will start to delete next block\n */\nfunction fixupBr(segments: ContentModelSegment[]) {\n if (segments[segments.length - 1]?.segmentType == 'Br') {\n const segmentsWithoutBr = segments.filter(x => x.segmentType != 'SelectionMarker');\n\n if (segmentsWithoutBr[segmentsWithoutBr.length - 2]?.segmentType != 'Br') {\n segments.pop();\n }\n }\n}\n\n/**\n * @internal if we didn't delete anything, and we want to delete forward, now perform it\n */\nexport const forwardDeleteCollapsedSelection = getDeleteCollapsedSelection('forward');\n\n/**\n * @internal if we didn't delete anything, and we want to delete backward, now perform it\n */\nexport const backwardDeleteCollapsedSelection = getDeleteCollapsedSelection('backward');\n"]}
@@ -0,0 +1,5 @@
1
+ import type { DeleteSelectionStep } from 'roosterjs-content-model-types';
2
+ /**
3
+ * @internal
4
+ */
5
+ export declare const deleteEmptyQuote: DeleteSelectionStep;
@@ -0,0 +1,56 @@
1
+ import { createParagraph, createSelectionMarker, unwrapBlock } from 'roosterjs-content-model-dom';
2
+ import { getClosestAncestorBlockGroupIndex, isBlockGroupOfType, } from 'roosterjs-content-model-core';
3
+ /**
4
+ * @internal
5
+ */
6
+ export var deleteEmptyQuote = function (context) {
7
+ var deleteResult = context.deleteResult;
8
+ if (deleteResult == 'nothingToDelete' ||
9
+ deleteResult == 'notDeleted' ||
10
+ deleteResult == 'range') {
11
+ var insertPoint = context.insertPoint, formatContext = context.formatContext;
12
+ var path = insertPoint.path;
13
+ var rawEvent = formatContext === null || formatContext === void 0 ? void 0 : formatContext.rawEvent;
14
+ var index = getClosestAncestorBlockGroupIndex(path, ['FormatContainer', 'ListItem'], ['TableCell']);
15
+ var quote = path[index];
16
+ if (quote && quote.blockGroupType === 'FormatContainer' && quote.tagName == 'blockquote') {
17
+ var parent_1 = path[index + 1];
18
+ var quoteBlockIndex = parent_1.blocks.indexOf(quote);
19
+ var blockQuote = parent_1.blocks[quoteBlockIndex];
20
+ if (isBlockGroupOfType(blockQuote, 'FormatContainer') &&
21
+ blockQuote.tagName === 'blockquote') {
22
+ if (isEmptyQuote(blockQuote)) {
23
+ unwrapBlock(parent_1, blockQuote);
24
+ rawEvent === null || rawEvent === void 0 ? void 0 : rawEvent.preventDefault();
25
+ context.deleteResult = 'range';
26
+ }
27
+ else if (isSelectionOnEmptyLine(blockQuote) && (rawEvent === null || rawEvent === void 0 ? void 0 : rawEvent.key) === 'Enter') {
28
+ insertNewLine(blockQuote, parent_1, quoteBlockIndex);
29
+ rawEvent === null || rawEvent === void 0 ? void 0 : rawEvent.preventDefault();
30
+ context.deleteResult = 'range';
31
+ }
32
+ }
33
+ }
34
+ }
35
+ };
36
+ var isEmptyQuote = function (quote) {
37
+ return (quote.blocks.length === 1 &&
38
+ quote.blocks[0].blockType === 'Paragraph' &&
39
+ quote.blocks[0].segments.every(function (s) { return s.segmentType === 'SelectionMarker' || s.segmentType === 'Br'; }));
40
+ };
41
+ var isSelectionOnEmptyLine = function (quote) {
42
+ var quoteLength = quote.blocks.length;
43
+ var lastParagraph = quote.blocks[quoteLength - 1];
44
+ if (lastParagraph && lastParagraph.blockType === 'Paragraph') {
45
+ return lastParagraph.segments.every(function (s) { return s.segmentType === 'SelectionMarker' || s.segmentType === 'Br'; });
46
+ }
47
+ };
48
+ var insertNewLine = function (quote, parent, index) {
49
+ var quoteLength = quote.blocks.length;
50
+ quote.blocks.splice(quoteLength - 1, 1);
51
+ var marker = createSelectionMarker();
52
+ var newParagraph = createParagraph(false /* isImplicit */);
53
+ newParagraph.segments.push(marker);
54
+ parent.blocks.splice(index + 1, 0, newParagraph);
55
+ };
56
+ //# sourceMappingURL=deleteEmptyQuote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteEmptyQuote.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/deleteSteps/deleteEmptyQuote.ts"],"names":[],"mappings":"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","sourcesContent":["import { createParagraph, createSelectionMarker, unwrapBlock } from 'roosterjs-content-model-dom';\nimport {\n getClosestAncestorBlockGroupIndex,\n isBlockGroupOfType,\n} from 'roosterjs-content-model-core';\nimport type {\n ContentModelBlockGroup,\n ContentModelFormatContainer,\n DeleteSelectionStep,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const deleteEmptyQuote: DeleteSelectionStep = context => {\n const { deleteResult } = context;\n if (\n deleteResult == 'nothingToDelete' ||\n deleteResult == 'notDeleted' ||\n deleteResult == 'range'\n ) {\n const { insertPoint, formatContext } = context;\n const { path } = insertPoint;\n const rawEvent = formatContext?.rawEvent as KeyboardEvent;\n const index = getClosestAncestorBlockGroupIndex(\n path,\n ['FormatContainer', 'ListItem'],\n ['TableCell']\n );\n const quote = path[index];\n\n if (quote && quote.blockGroupType === 'FormatContainer' && quote.tagName == 'blockquote') {\n const parent = path[index + 1];\n const quoteBlockIndex = parent.blocks.indexOf(quote);\n const blockQuote = parent.blocks[quoteBlockIndex];\n if (\n isBlockGroupOfType<ContentModelFormatContainer>(blockQuote, 'FormatContainer') &&\n blockQuote.tagName === 'blockquote'\n ) {\n if (isEmptyQuote(blockQuote)) {\n unwrapBlock(parent, blockQuote);\n rawEvent?.preventDefault();\n context.deleteResult = 'range';\n } else if (isSelectionOnEmptyLine(blockQuote) && rawEvent?.key === 'Enter') {\n insertNewLine(blockQuote, parent, quoteBlockIndex);\n rawEvent?.preventDefault();\n context.deleteResult = 'range';\n }\n }\n }\n }\n};\n\nconst isEmptyQuote = (quote: ContentModelFormatContainer) => {\n return (\n quote.blocks.length === 1 &&\n quote.blocks[0].blockType === 'Paragraph' &&\n quote.blocks[0].segments.every(\n s => s.segmentType === 'SelectionMarker' || s.segmentType === 'Br'\n )\n );\n};\n\nconst isSelectionOnEmptyLine = (quote: ContentModelFormatContainer) => {\n const quoteLength = quote.blocks.length;\n const lastParagraph = quote.blocks[quoteLength - 1];\n if (lastParagraph && lastParagraph.blockType === 'Paragraph') {\n return lastParagraph.segments.every(\n s => s.segmentType === 'SelectionMarker' || s.segmentType === 'Br'\n );\n }\n};\n\nconst insertNewLine = (\n quote: ContentModelFormatContainer,\n parent: ContentModelBlockGroup,\n index: number\n) => {\n const quoteLength = quote.blocks.length;\n quote.blocks.splice(quoteLength - 1, 1);\n const marker = createSelectionMarker();\n const newParagraph = createParagraph(false /* isImplicit */);\n newParagraph.segments.push(marker);\n parent.blocks.splice(index + 1, 0, newParagraph);\n};\n"]}
@@ -7,7 +7,8 @@ export var deleteList = function (context) {
7
7
  if (context.deleteResult == 'nothingToDelete' || context.deleteResult == 'notDeleted') {
8
8
  var index = getClosestAncestorBlockGroupIndex(path, ['ListItem', 'TableCell']);
9
9
  var item = path[index];
10
- if (index >= 0 &&
10
+ if (item &&
11
+ index >= 0 &&
11
12
  paragraph.segments[0] == marker &&
12
13
  item.blockGroupType == 'ListItem' &&
13
14
  (paragraph.segments.length == 1 ||
@@ -1 +1 @@
1
- {"version":3,"file":"deleteList.js","sourceRoot":"","sources":["../../../../../packages-content-model/roosterjs-content-model-plugins/lib/edit/deleteSteps/deleteList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iCAAiC,EAAE,MAAM,8BAA8B,CAAC;AAGjF;;GAEG;AACH,MAAM,CAAC,IAAM,UAAU,GAAwB,UAAA,OAAO;IAC5C,IAAA,KAA8B,OAAO,CAAC,WAAW,EAA/C,SAAS,eAAA,EAAE,MAAM,YAAA,EAAE,IAAI,UAAwB,CAAC;IAExD,IAAI,OAAO,CAAC,YAAY,IAAI,iBAAiB,IAAI,OAAO,CAAC,YAAY,IAAI,YAAY,EAAE;QACnF,IAAM,KAAK,GAAG,iCAAiC,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;QACjF,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IACI,KAAK,IAAI,CAAC;YACV,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM;YAC/B,IAAI,CAAC,cAAc,IAAI,UAAU;YACjC,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC;gBAC3B,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,EACpF;YACE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YACjB,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;SAClC;KACJ;AACL,CAAC,CAAC","sourcesContent":["import { getClosestAncestorBlockGroupIndex } from 'roosterjs-content-model-core';\nimport type { DeleteSelectionStep } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const deleteList: DeleteSelectionStep = context => {\n const { paragraph, marker, path } = context.insertPoint;\n\n if (context.deleteResult == 'nothingToDelete' || context.deleteResult == 'notDeleted') {\n const index = getClosestAncestorBlockGroupIndex(path, ['ListItem', 'TableCell']);\n const item = path[index];\n if (\n index >= 0 &&\n paragraph.segments[0] == marker &&\n item.blockGroupType == 'ListItem' &&\n (paragraph.segments.length == 1 ||\n (paragraph.segments.length == 2 && paragraph.segments[1].segmentType == 'Br'))\n ) {\n item.levels = [];\n context.deleteResult = 'range';\n }\n }\n};\n"]}
1
+ {"version":3,"file":"deleteList.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/deleteSteps/deleteList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iCAAiC,EAAE,MAAM,8BAA8B,CAAC;AAGjF;;GAEG;AACH,MAAM,CAAC,IAAM,UAAU,GAAwB,UAAA,OAAO;IAC5C,IAAA,KAA8B,OAAO,CAAC,WAAW,EAA/C,SAAS,eAAA,EAAE,MAAM,YAAA,EAAE,IAAI,UAAwB,CAAC;IAExD,IAAI,OAAO,CAAC,YAAY,IAAI,iBAAiB,IAAI,OAAO,CAAC,YAAY,IAAI,YAAY,EAAE;QACnF,IAAM,KAAK,GAAG,iCAAiC,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;QACjF,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IACI,IAAI;YACJ,KAAK,IAAI,CAAC;YACV,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM;YAC/B,IAAI,CAAC,cAAc,IAAI,UAAU;YACjC,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC;gBAC3B,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,EACpF;YACE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YACjB,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;SAClC;KACJ;AACL,CAAC,CAAC","sourcesContent":["import { getClosestAncestorBlockGroupIndex } from 'roosterjs-content-model-core';\nimport type { DeleteSelectionStep } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const deleteList: DeleteSelectionStep = context => {\n const { paragraph, marker, path } = context.insertPoint;\n\n if (context.deleteResult == 'nothingToDelete' || context.deleteResult == 'notDeleted') {\n const index = getClosestAncestorBlockGroupIndex(path, ['ListItem', 'TableCell']);\n const item = path[index];\n if (\n item &&\n index >= 0 &&\n paragraph.segments[0] == marker &&\n item.blockGroupType == 'ListItem' &&\n (paragraph.segments.length == 1 ||\n (paragraph.segments.length == 2 && paragraph.segments[1].segmentType == 'Br'))\n ) {\n item.levels = [];\n context.deleteResult = 'range';\n }\n }\n};\n"]}