@worktile/theia 16.1.2 → 16.1.3

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 (368) hide show
  1. package/components/contextmenu/contextmenu.component.d.ts +1 -1
  2. package/components/conversion-hint/conversion-hint.component.d.ts +1 -1
  3. package/components/inline-toolbar/inline-toolbar.component.d.ts +1 -1
  4. package/components/listbox/listbox.d.ts +3 -3
  5. package/components/plugin-menu/plugin-menu.component.d.ts +1 -1
  6. package/components/table-select/table-select.component.d.ts +1 -1
  7. package/components/toolbar/toolbar.component.d.ts +1 -1
  8. package/components/toolbar-group/toolbar-group.component.d.ts +1 -1
  9. package/core/toolbar-item/base-toolbar-item.d.ts +2 -2
  10. package/editor.component.d.ts +1 -1
  11. package/editor.module.d.ts +1 -1
  12. package/{esm2022 → esm2020}/components/action/prevent-default.mjs +4 -4
  13. package/{esm2022 → esm2020}/components/column-resize/column-resize-notifier.mjs +4 -4
  14. package/{esm2022 → esm2020}/components/column-resize/column-resize.directive.mjs +4 -4
  15. package/{esm2022 → esm2020}/components/column-resize/column-resize.module.mjs +9 -9
  16. package/{esm2022 → esm2020}/components/column-resize/event-dispatcher.mjs +4 -4
  17. package/{esm2022 → esm2020}/components/column-resize/overlay-handle.component.mjs +4 -4
  18. package/{esm2022 → esm2020}/components/column-resize/resizing.store.mjs +4 -4
  19. package/{esm2022 → esm2020}/components/contextmenu/contextmenu.component.mjs +4 -4
  20. package/{esm2022 → esm2020}/components/conversion-hint/conversion-hint.component.mjs +4 -4
  21. package/{esm2022 → esm2020}/components/element/element.component.mjs +4 -4
  22. package/{esm2022 → esm2020}/components/inline-toolbar/inline-toolbar.component.mjs +6 -6
  23. package/esm2020/components/listbox/listbox.mjs +375 -0
  24. package/{esm2022 → esm2020}/components/plugin-menu/plugin-menu.component.mjs +4 -4
  25. package/{esm2022 → esm2020}/components/table-select/table-select.component.mjs +4 -4
  26. package/{esm2022 → esm2020}/components/template/template.component.mjs +4 -4
  27. package/{esm2022 → esm2020}/components/text/text.component.mjs +4 -4
  28. package/{esm2022 → esm2020}/components/toolbar/toolbar.component.mjs +4 -4
  29. package/{esm2022 → esm2020}/components/toolbar-dropdown/toolbar-dropdown.component.mjs +4 -4
  30. package/{esm2022 → esm2020}/components/toolbar-group/toolbar-group.component.mjs +4 -4
  31. package/{esm2022 → esm2020}/components/toolbar-item/toolbar-item.component.mjs +6 -6
  32. package/esm2020/constants/plugin-menu.mjs +309 -0
  33. package/{esm2022 → esm2020}/core/toolbar-item/base-toolbar-item.mjs +7 -7
  34. package/{esm2022 → esm2020}/editor.component.mjs +11 -11
  35. package/esm2020/editor.module.mjs +254 -0
  36. package/{esm2022 → esm2020}/interfaces/view-base.mjs +4 -4
  37. package/{esm2022 → esm2020}/pipes.mjs +10 -10
  38. package/{esm2022 → esm2020}/plugins/blockquote/blockquote.component.mjs +4 -4
  39. package/{esm2022 → esm2020}/plugins/code/code.component.mjs +4 -4
  40. package/{esm2022 → esm2020}/plugins/color/toolbar-item.component.mjs +4 -4
  41. package/{esm2022 → esm2020}/plugins/hr/hr.component.mjs +6 -6
  42. package/{esm2022 → esm2020}/plugins/image/image.component.mjs +4 -4
  43. package/{esm2022 → esm2020}/plugins/inline-code/inline-code.component.mjs +6 -6
  44. package/{esm2022 → esm2020}/plugins/link/edit/link-edit.component.mjs +4 -4
  45. package/{esm2022 → esm2020}/plugins/link/hover/link-hover.component.mjs +4 -4
  46. package/{esm2022 → esm2020}/plugins/link/link.component.mjs +9 -9
  47. package/{esm2022 → esm2020}/plugins/list/components/bulleted-list.component.mjs +4 -4
  48. package/{esm2022 → esm2020}/plugins/list/components/list-item.component.mjs +4 -4
  49. package/{esm2022 → esm2020}/plugins/list/components/numbered-list.component.mjs +4 -4
  50. package/{esm2022 → esm2020}/plugins/mention/suggestion.component.mjs +4 -4
  51. package/{esm2022 → esm2020}/plugins/quick-insert/components/quick-insert.component.mjs +4 -4
  52. package/{esm2022 → esm2020}/plugins/table/components/insert-mark/insert-mark.component.mjs +4 -4
  53. package/{esm2022 → esm2020}/plugins/table/components/row/row.component.mjs +6 -6
  54. package/{esm2022 → esm2020}/plugins/table/components/table.component.mjs +16 -16
  55. package/{esm2022 → esm2020}/plugins/table/components/td/td.component.mjs +4 -4
  56. package/{esm2022 → esm2020}/plugins/table/components/toolbar/table-options.component.mjs +6 -6
  57. package/{esm2022 → esm2020}/plugins/table/components/toolbar/table-toolbar.component.mjs +4 -4
  58. package/{esm2022 → esm2020}/plugins/table/table.pipe.mjs +7 -7
  59. package/{esm2022 → esm2020}/plugins/table/table.service.mjs +4 -4
  60. package/{esm2022 → esm2020}/plugins/table/table.store.mjs +4 -4
  61. package/{esm2022 → esm2020}/plugins/table/toolbar-item.component.mjs +6 -6
  62. package/{esm2022 → esm2020}/plugins/todo-item/todo-item.component.mjs +6 -6
  63. package/{esm2022 → esm2020}/plugins/vertical-align/toolbar-item.component.mjs +4 -4
  64. package/{esm2022 → esm2020}/services/context.service.mjs +4 -4
  65. package/{esm2022 → esm2020}/services/table-contextmenu.service.mjs +4 -4
  66. package/{esm2022 → esm2020}/services/toolbar.service.mjs +4 -4
  67. package/fesm2015/worktile-theia.mjs +16707 -0
  68. package/fesm2015/worktile-theia.mjs.map +1 -0
  69. package/{fesm2022 → fesm2020}/worktile-theia.mjs +430 -446
  70. package/fesm2020/worktile-theia.mjs.map +1 -0
  71. package/interfaces/editor.d.ts +2 -4
  72. package/package.json +11 -5
  73. package/plugins/link/edit/link-edit.component.d.ts +1 -1
  74. package/plugins/link/hover/link-hover.component.d.ts +1 -1
  75. package/plugins/mention/suggestion.component.d.ts +1 -1
  76. package/plugins/quick-insert/components/quick-insert.component.d.ts +1 -1
  77. package/plugins/table/components/insert-mark/insert-mark.component.d.ts +1 -1
  78. package/plugins/table/components/table.component.d.ts +1 -1
  79. package/plugins/table/components/toolbar/table-options.component.d.ts +1 -1
  80. package/plugins/table/components/toolbar/table-toolbar.component.d.ts +1 -1
  81. package/queries/is-range-across-blocks.d.ts +1 -1
  82. package/esm2022/components/listbox/listbox.mjs +0 -375
  83. package/esm2022/constants/plugin-menu.mjs +0 -325
  84. package/esm2022/editor.module.mjs +0 -254
  85. package/fesm2022/worktile-theia.mjs.map +0 -1
  86. /package/{esm2022 → esm2020}/components/column-resize/resize-ref.mjs +0 -0
  87. /package/{esm2022 → esm2020}/components/column-resize/selectors.mjs +0 -0
  88. /package/{esm2022 → esm2020}/components/index.mjs +0 -0
  89. /package/{esm2022 → esm2020}/components/listbox/listbox.type.mjs +0 -0
  90. /package/{esm2022 → esm2020}/constants/auto-format-rules.mjs +0 -0
  91. /package/{esm2022 → esm2020}/constants/code.mjs +0 -0
  92. /package/{esm2022 → esm2020}/constants/color-select.mjs +0 -0
  93. /package/{esm2022 → esm2020}/constants/default.mjs +0 -0
  94. /package/{esm2022 → esm2020}/constants/error.mjs +0 -0
  95. /package/{esm2022 → esm2020}/constants/index.mjs +0 -0
  96. /package/{esm2022 → esm2020}/constants/node-types.mjs +0 -0
  97. /package/{esm2022 → esm2020}/constants/selector.mjs +0 -0
  98. /package/{esm2022 → esm2020}/constants/toolbar.mjs +0 -0
  99. /package/{esm2022 → esm2020}/core/create-plugin.mjs +0 -0
  100. /package/{esm2022 → esm2020}/core/create-toolbar.mjs +0 -0
  101. /package/{esm2022 → esm2020}/core/index.mjs +0 -0
  102. /package/{esm2022 → esm2020}/core/utils/combine-plugins.mjs +0 -0
  103. /package/{esm2022 → esm2020}/core/utils/flatten-deep-plugins.mjs +0 -0
  104. /package/{esm2022 → esm2020}/core/utils/get-plugin-options.mjs +0 -0
  105. /package/{esm2022 → esm2020}/core/utils/get-plugin.mjs +0 -0
  106. /package/{esm2022 → esm2020}/core/utils/get-plugins.mjs +0 -0
  107. /package/{esm2022 → esm2020}/core/utils/index.mjs +0 -0
  108. /package/{esm2022 → esm2020}/core/utils/merge-array.mjs +0 -0
  109. /package/{esm2022 → esm2020}/core/utils/merge-deep-plugins.mjs +0 -0
  110. /package/{esm2022 → esm2020}/core/utils/merge-options.mjs +0 -0
  111. /package/{esm2022 → esm2020}/core/utils/nested-structure-by-key.mjs +0 -0
  112. /package/{esm2022 → esm2020}/core/utils/plugin-menu.mjs +0 -0
  113. /package/{esm2022 → esm2020}/core/utils/plugins-by-key.mjs +0 -0
  114. /package/{esm2022 → esm2020}/core/with-theia.mjs +0 -0
  115. /package/{esm2022 → esm2020}/custom-types.mjs +0 -0
  116. /package/{esm2022 → esm2020}/interfaces/auto-format.mjs +0 -0
  117. /package/{esm2022 → esm2020}/interfaces/editor.mjs +0 -0
  118. /package/{esm2022 → esm2020}/interfaces/element.mjs +0 -0
  119. /package/{esm2022 → esm2020}/interfaces/image.mjs +0 -0
  120. /package/{esm2022 → esm2020}/interfaces/index.mjs +0 -0
  121. /package/{esm2022 → esm2020}/interfaces/plugins/index.mjs +0 -0
  122. /package/{esm2022 → esm2020}/interfaces/plugins/no-infer.mjs +0 -0
  123. /package/{esm2022 → esm2020}/interfaces/plugins/plugin-key.mjs +0 -0
  124. /package/{esm2022 → esm2020}/interfaces/plugins/plugin-menu.mjs +0 -0
  125. /package/{esm2022 → esm2020}/interfaces/plugins/plugins.mjs +0 -0
  126. /package/{esm2022 → esm2020}/interfaces/plugins/with-override.mjs +0 -0
  127. /package/{esm2022 → esm2020}/interfaces/reset-block-type-plugin-options.mjs +0 -0
  128. /package/{esm2022 → esm2020}/interfaces/toolbar.mjs +0 -0
  129. /package/{esm2022 → esm2020}/interfaces/upload.mjs +0 -0
  130. /package/{esm2022 → esm2020}/interfaces/utility/index.mjs +0 -0
  131. /package/{esm2022 → esm2020}/interfaces/utility/nested-structure-by-key.mjs +0 -0
  132. /package/{esm2022 → esm2020}/interfaces/utility/override-by-key.mjs +0 -0
  133. /package/{esm2022 → esm2020}/interfaces/utility/types.mjs +0 -0
  134. /package/{esm2022 → esm2020}/interfaces/valid-children-types.mjs +0 -0
  135. /package/{esm2022 → esm2020}/plugins/align/align.editor.mjs +0 -0
  136. /package/{esm2022 → esm2020}/plugins/align/align.plugin.mjs +0 -0
  137. /package/{esm2022 → esm2020}/plugins/autoformat/autoformat.plugin.mjs +0 -0
  138. /package/{esm2022 → esm2020}/plugins/autoformat/transforms/auto-format-block.mjs +0 -0
  139. /package/{esm2022 → esm2020}/plugins/autoformat/transforms/auto-format-inline.mjs +0 -0
  140. /package/{esm2022 → esm2020}/plugins/blockquote/blockquote.editor.mjs +0 -0
  141. /package/{esm2022 → esm2020}/plugins/blockquote/blockquote.plugin.mjs +0 -0
  142. /package/{esm2022 → esm2020}/plugins/code/code.editor.mjs +0 -0
  143. /package/{esm2022 → esm2020}/plugins/code/code.plugin.mjs +0 -0
  144. /package/{esm2022 → esm2020}/plugins/color/color.editor.mjs +0 -0
  145. /package/{esm2022 → esm2020}/plugins/color/color.plugin.mjs +0 -0
  146. /package/{esm2022 → esm2020}/plugins/common/block-card.plugin.mjs +0 -0
  147. /package/{esm2022 → esm2020}/plugins/common/common.plugin.mjs +0 -0
  148. /package/{esm2022 → esm2020}/plugins/common/get-fragment.plugin.mjs +0 -0
  149. /package/{esm2022 → esm2020}/plugins/common/history.plugin.mjs +0 -0
  150. /package/{esm2022 → esm2020}/plugins/common/insert-data-by-invalid-type.mjs +0 -0
  151. /package/{esm2022 → esm2020}/plugins/common/move-selection.plugin.mjs +0 -0
  152. /package/{esm2022 → esm2020}/plugins/common/remove-empty.plugin.mjs +0 -0
  153. /package/{esm2022 → esm2020}/plugins/common/remove-void.plugin.mjs +0 -0
  154. /package/{esm2022 → esm2020}/plugins/common/reset-type.plugin.mjs +0 -0
  155. /package/{esm2022 → esm2020}/plugins/common/transforms.plugin.mjs +0 -0
  156. /package/{esm2022 → esm2020}/plugins/deserialize/deserialize-html.plugin.mjs +0 -0
  157. /package/{esm2022 → esm2020}/plugins/deserialize/deserialize-md.plugin.mjs +0 -0
  158. /package/{esm2022 → esm2020}/plugins/font-size/font-size.editor.mjs +0 -0
  159. /package/{esm2022 → esm2020}/plugins/heading/heading.editor.mjs +0 -0
  160. /package/{esm2022 → esm2020}/plugins/heading/heading.plugin.mjs +0 -0
  161. /package/{esm2022 → esm2020}/plugins/hr/hr.editor.mjs +0 -0
  162. /package/{esm2022 → esm2020}/plugins/hr/hr.plugin.mjs +0 -0
  163. /package/{esm2022 → esm2020}/plugins/image/image.editor.mjs +0 -0
  164. /package/{esm2022 → esm2020}/plugins/image/image.plugin.mjs +0 -0
  165. /package/{esm2022 → esm2020}/plugins/indent/indent.editor.mjs +0 -0
  166. /package/{esm2022 → esm2020}/plugins/indent/indent.plugin.mjs +0 -0
  167. /package/{esm2022 → esm2020}/plugins/indent/on-keydown-indent.mjs +0 -0
  168. /package/{esm2022 → esm2020}/plugins/index.mjs +0 -0
  169. /package/{esm2022 → esm2020}/plugins/inline-code/inline-code.editor.mjs +0 -0
  170. /package/{esm2022 → esm2020}/plugins/inline-code/inline-code.plugin.mjs +0 -0
  171. /package/{esm2022 → esm2020}/plugins/link/link.editor.mjs +0 -0
  172. /package/{esm2022 → esm2020}/plugins/link/link.plugin.mjs +0 -0
  173. /package/{esm2022 → esm2020}/plugins/link/link.types.mjs +0 -0
  174. /package/{esm2022 → esm2020}/plugins/list/list.editor.mjs +0 -0
  175. /package/{esm2022 → esm2020}/plugins/list/list.plugin.mjs +0 -0
  176. /package/{esm2022 → esm2020}/plugins/list/normalizers/get-list-normalizer.mjs +0 -0
  177. /package/{esm2022 → esm2020}/plugins/list/normalizers/normalize-list-item.mjs +0 -0
  178. /package/{esm2022 → esm2020}/plugins/list/normalizers/normalize-no.mjs +0 -0
  179. /package/{esm2022 → esm2020}/plugins/list/on-key-down-list.mjs +0 -0
  180. /package/{esm2022 → esm2020}/plugins/list/queries/get-list-item-entry.mjs +0 -0
  181. /package/{esm2022 → esm2020}/plugins/list/queries/get-list-item-sublist.mjs +0 -0
  182. /package/{esm2022 → esm2020}/plugins/list/queries/get-list-types.mjs +0 -0
  183. /package/{esm2022 → esm2020}/plugins/list/queries/get-start-list-item.mjs +0 -0
  184. /package/{esm2022 → esm2020}/plugins/list/queries/has-list-in-list-item.mjs +0 -0
  185. /package/{esm2022 → esm2020}/plugins/list/queries/is-in-list.mjs +0 -0
  186. /package/{esm2022 → esm2020}/plugins/list/queries/is-list-nested.mjs +0 -0
  187. /package/{esm2022 → esm2020}/plugins/list/queries/is-list.mjs +0 -0
  188. /package/{esm2022 → esm2020}/plugins/list/queries/is-node-type-list.mjs +0 -0
  189. /package/{esm2022 → esm2020}/plugins/list/queries/is-selection-at-list-item-start.mjs +0 -0
  190. /package/{esm2022 → esm2020}/plugins/list/queries/is-selection-in-same-list-item.mjs +0 -0
  191. /package/{esm2022 → esm2020}/plugins/list/queries/is-single-list-item.mjs +0 -0
  192. /package/{esm2022 → esm2020}/plugins/list/transforms/insert-list-data.mjs +0 -0
  193. /package/{esm2022 → esm2020}/plugins/list/transforms/insert-list-item.mjs +0 -0
  194. /package/{esm2022 → esm2020}/plugins/list/transforms/move-list-item-down.mjs +0 -0
  195. /package/{esm2022 → esm2020}/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.mjs +0 -0
  196. /package/{esm2022 → esm2020}/plugins/list/transforms/move-list-item-sublist-items-to-list.mjs +0 -0
  197. /package/{esm2022 → esm2020}/plugins/list/transforms/move-list-item-up.mjs +0 -0
  198. /package/{esm2022 → esm2020}/plugins/list/transforms/unwrap-list.mjs +0 -0
  199. /package/{esm2022 → esm2020}/plugins/list/types.mjs +0 -0
  200. /package/{esm2022 → esm2020}/plugins/mark/mark.editor.mjs +0 -0
  201. /package/{esm2022 → esm2020}/plugins/mark/mark.plugin.mjs +0 -0
  202. /package/{esm2022 → esm2020}/plugins/mention/index.mjs +0 -0
  203. /package/{esm2022 → esm2020}/plugins/mention/mention.editor.mjs +0 -0
  204. /package/{esm2022 → esm2020}/plugins/mention/mention.plugin.mjs +0 -0
  205. /package/{esm2022 → esm2020}/plugins/mention/mention.type.mjs +0 -0
  206. /package/{esm2022 → esm2020}/plugins/node-id/node-id.plugin.mjs +0 -0
  207. /package/{esm2022 → esm2020}/plugins/normalizers/insert-paragraph-nodes.mjs +0 -0
  208. /package/{esm2022 → esm2020}/plugins/normalizers/remove-empty-nodes.mjs +0 -0
  209. /package/{esm2022 → esm2020}/plugins/normalizers/trailing-node.plugin.mjs +0 -0
  210. /package/{esm2022 → esm2020}/plugins/paint-format/paint-format.editor.mjs +0 -0
  211. /package/{esm2022 → esm2020}/plugins/public-api.mjs +0 -0
  212. /package/{esm2022 → esm2020}/plugins/quick-insert/quick-insert.editor.mjs +0 -0
  213. /package/{esm2022 → esm2020}/plugins/quick-insert/quick-insert.plugin.mjs +0 -0
  214. /package/{esm2022 → esm2020}/plugins/soft-break/soft-break.plugin.mjs +0 -0
  215. /package/{esm2022 → esm2020}/plugins/soft-break/soft-break.types.mjs +0 -0
  216. /package/{esm2022 → esm2020}/plugins/table/table.editor.mjs +0 -0
  217. /package/{esm2022 → esm2020}/plugins/table/table.plugin.mjs +0 -0
  218. /package/{esm2022 → esm2020}/plugins/table/table.types.mjs +0 -0
  219. /package/{esm2022 → esm2020}/plugins/table/transforms/clear-cell.mjs +0 -0
  220. /package/{esm2022 → esm2020}/plugins/table/transforms/clear-table-node.mjs +0 -0
  221. /package/{esm2022 → esm2020}/plugins/table/transforms/index.mjs +0 -0
  222. /package/{esm2022 → esm2020}/plugins/table/transforms/insert-column.mjs +0 -0
  223. /package/{esm2022 → esm2020}/plugins/table/transforms/insert-row.mjs +0 -0
  224. /package/{esm2022 → esm2020}/plugins/table/transforms/insert-table.mjs +0 -0
  225. /package/{esm2022 → esm2020}/plugins/table/transforms/remove-column.mjs +0 -0
  226. /package/{esm2022 → esm2020}/plugins/table/transforms/remove-row.mjs +0 -0
  227. /package/{esm2022 → esm2020}/plugins/table/transforms/remove-table.mjs +0 -0
  228. /package/{esm2022 → esm2020}/plugins/table/utils/add-columns.mjs +0 -0
  229. /package/{esm2022 → esm2020}/plugins/table/utils/calc-anchor-position.mjs +0 -0
  230. /package/{esm2022 → esm2020}/plugins/table/utils/calc-span.mjs +0 -0
  231. /package/{esm2022 → esm2020}/plugins/table/utils/calculate-table.mjs +0 -0
  232. /package/{esm2022 → esm2020}/plugins/table/utils/cell-position.mjs +0 -0
  233. /package/{esm2022 → esm2020}/plugins/table/utils/create-cell.mjs +0 -0
  234. /package/{esm2022 → esm2020}/plugins/table/utils/create-row.mjs +0 -0
  235. /package/{esm2022 → esm2020}/plugins/table/utils/create-table-position.mjs +0 -0
  236. /package/{esm2022 → esm2020}/plugins/table/utils/create-table.mjs +0 -0
  237. /package/{esm2022 → esm2020}/plugins/table/utils/get-grid-columns.mjs +0 -0
  238. /package/{esm2022 → esm2020}/plugins/table/utils/get-min-max-cell-index.mjs +0 -0
  239. /package/{esm2022 → esm2020}/plugins/table/utils/get-select-cell-node.mjs +0 -0
  240. /package/{esm2022 → esm2020}/plugins/table/utils/handle-cell.mjs +0 -0
  241. /package/{esm2022 → esm2020}/plugins/table/utils/index.mjs +0 -0
  242. /package/{esm2022 → esm2020}/plugins/table/utils/is-header-row.mjs +0 -0
  243. /package/{esm2022 → esm2020}/plugins/table/utils/is-legal-table.mjs +0 -0
  244. /package/{esm2022 → esm2020}/plugins/table/utils/is-range-in-table.mjs +0 -0
  245. /package/{esm2022 → esm2020}/plugins/table/utils/is-selection-in-table.mjs +0 -0
  246. /package/{esm2022 → esm2020}/plugins/table/utils/is-virtual-key.mjs +0 -0
  247. /package/{esm2022 → esm2020}/plugins/table/utils/merge-cell.mjs +0 -0
  248. /package/{esm2022 → esm2020}/plugins/table/utils/next-path.mjs +0 -0
  249. /package/{esm2022 → esm2020}/plugins/table/utils/normalize-table.mjs +0 -0
  250. /package/{esm2022 → esm2020}/plugins/table/utils/remove-columns.mjs +0 -0
  251. /package/{esm2022 → esm2020}/plugins/table/utils/remove-row-column.mjs +0 -0
  252. /package/{esm2022 → esm2020}/plugins/table/utils/set-cells-background-color.mjs +0 -0
  253. /package/{esm2022 → esm2020}/plugins/table/utils/set-menu-cell-invisibility.mjs +0 -0
  254. /package/{esm2022 → esm2020}/plugins/table/utils/set-node-options.mjs +0 -0
  255. /package/{esm2022 → esm2020}/plugins/table/utils/split-cell.mjs +0 -0
  256. /package/{esm2022 → esm2020}/plugins/table/utils/table-entry.mjs +0 -0
  257. /package/{esm2022 → esm2020}/plugins/table/utils/table-position.mjs +0 -0
  258. /package/{esm2022 → esm2020}/plugins/todo-item/todo-item.editor.mjs +0 -0
  259. /package/{esm2022 → esm2020}/plugins/todo-item/todo-item.plugin.mjs +0 -0
  260. /package/{esm2022 → esm2020}/plugins/vertical-align/vertical-align.editor.mjs +0 -0
  261. /package/{esm2022 → esm2020}/public-api.mjs +0 -0
  262. /package/{esm2022 → esm2020}/queries/anchor-block-entry.mjs +0 -0
  263. /package/{esm2022 → esm2020}/queries/anchor-block.mjs +0 -0
  264. /package/{esm2022 → esm2020}/queries/anchor-inline-entry.mjs +0 -0
  265. /package/{esm2022 → esm2020}/queries/find-descendant.mjs +0 -0
  266. /package/{esm2022 → esm2020}/queries/find-node.mjs +0 -0
  267. /package/{esm2022 → esm2020}/queries/find-path.mjs +0 -0
  268. /package/{esm2022 → esm2020}/queries/get-above-by-type.mjs +0 -0
  269. /package/{esm2022 → esm2020}/queries/get-above.mjs +0 -0
  270. /package/{esm2022 → esm2020}/queries/get-anchor-block-entry.mjs +0 -0
  271. /package/{esm2022 → esm2020}/queries/get-block-above.mjs +0 -0
  272. /package/{esm2022 → esm2020}/queries/get-block-card-above.mjs +0 -0
  273. /package/{esm2022 → esm2020}/queries/get-block-card-cursor.mjs +0 -0
  274. /package/{esm2022 → esm2020}/queries/get-container-blocks.mjs +0 -0
  275. /package/{esm2022 → esm2020}/queries/get-directly-parent.mjs +0 -0
  276. /package/{esm2022 → esm2020}/queries/get-insert-elements-path.mjs +0 -0
  277. /package/{esm2022 → esm2020}/queries/get-last-child-path.mjs +0 -0
  278. /package/{esm2022 → esm2020}/queries/get-last-node.mjs +0 -0
  279. /package/{esm2022 → esm2020}/queries/get-next-sibling-nodes.mjs +0 -0
  280. /package/{esm2022 → esm2020}/queries/get-node.mjs +0 -0
  281. /package/{esm2022 → esm2020}/queries/get-nodes-by-type.mjs +0 -0
  282. /package/{esm2022 → esm2020}/queries/get-nodes.mjs +0 -0
  283. /package/{esm2022 → esm2020}/queries/get-parent.mjs +0 -0
  284. /package/{esm2022 → esm2020}/queries/get-plain-text.mjs +0 -0
  285. /package/{esm2022 → esm2020}/queries/get-plugin-by-toolbar.mjs +0 -0
  286. /package/{esm2022 → esm2020}/queries/get-point-before.mjs +0 -0
  287. /package/{esm2022 → esm2020}/queries/get-point-from-location.mjs +0 -0
  288. /package/{esm2022 → esm2020}/queries/get-previous-path.mjs +0 -0
  289. /package/{esm2022 → esm2020}/queries/get-rang-from-block-start.mjs +0 -0
  290. /package/{esm2022 → esm2020}/queries/get-range-before.mjs +0 -0
  291. /package/{esm2022 → esm2020}/queries/get-selection-marks.mjs +0 -0
  292. /package/{esm2022 → esm2020}/queries/get-selection-nodes-by-type.mjs +0 -0
  293. /package/{esm2022 → esm2020}/queries/get-text.mjs +0 -0
  294. /package/{esm2022 → esm2020}/queries/get-toolbar-disabled.mjs +0 -0
  295. /package/{esm2022 → esm2020}/queries/index.mjs +0 -0
  296. /package/{esm2022 → esm2020}/queries/is-across-blocks.mjs +0 -0
  297. /package/{esm2022 → esm2020}/queries/is-ancestor-empty.mjs +0 -0
  298. /package/{esm2022 → esm2020}/queries/is-ancestor.mjs +0 -0
  299. /package/{esm2022 → esm2020}/queries/is-block-above-empty.mjs +0 -0
  300. /package/{esm2022 → esm2020}/queries/is-block-active.mjs +0 -0
  301. /package/{esm2022 → esm2020}/queries/is-block-card-cursor.mjs +0 -0
  302. /package/{esm2022 → esm2020}/queries/is-block-text-empty-after-selection.mjs +0 -0
  303. /package/{esm2022 → esm2020}/queries/is-collapsed.mjs +0 -0
  304. /package/{esm2022 → esm2020}/queries/is-contain-nested-type.mjs +0 -0
  305. /package/{esm2022 → esm2020}/queries/is-container-type.mjs +0 -0
  306. /package/{esm2022 → esm2020}/queries/is-descendant.mjs +0 -0
  307. /package/{esm2022 → esm2020}/queries/is-empty-content-filter.mjs +0 -0
  308. /package/{esm2022 → esm2020}/queries/is-empty-content.mjs +0 -0
  309. /package/{esm2022 → esm2020}/queries/is-empty-paragraph-by-path.mjs +0 -0
  310. /package/{esm2022 → esm2020}/queries/is-empty-paragraph.mjs +0 -0
  311. /package/{esm2022 → esm2020}/queries/is-first-child.mjs +0 -0
  312. /package/{esm2022 → esm2020}/queries/is-global-collapsed.mjs +0 -0
  313. /package/{esm2022 → esm2020}/queries/is-include-types.mjs +0 -0
  314. /package/{esm2022 → esm2020}/queries/is-node-type-in.mjs +0 -0
  315. /package/{esm2022 → esm2020}/queries/is-node-type.mjs +0 -0
  316. /package/{esm2022 → esm2020}/queries/is-paragraph.mjs +0 -0
  317. /package/{esm2022 → esm2020}/queries/is-point-at-root.mjs +0 -0
  318. /package/{esm2022 → esm2020}/queries/is-range-across-blocks.mjs +0 -0
  319. /package/{esm2022 → esm2020}/queries/is-range-at-root.mjs +0 -0
  320. /package/{esm2022 → esm2020}/queries/is-start.mjs +0 -0
  321. /package/{esm2022 → esm2020}/queries/some-node.mjs +0 -0
  322. /package/{esm2022 → esm2020}/shortcuts/index.mjs +0 -0
  323. /package/{esm2022 → esm2020}/shortcuts/mark.mjs +0 -0
  324. /package/{esm2022 → esm2020}/test/index.mjs +0 -0
  325. /package/{esm2022 → esm2020}/test/utils/with-plugin.mjs +0 -0
  326. /package/{esm2022 → esm2020}/transforms/apply-deep-to-nodes.mjs +0 -0
  327. /package/{esm2022 → esm2020}/transforms/clear-marks.mjs +0 -0
  328. /package/{esm2022 → esm2020}/transforms/close-conversion-hint.mjs +0 -0
  329. /package/{esm2022 → esm2020}/transforms/delete-element.mjs +0 -0
  330. /package/{esm2022 → esm2020}/transforms/handle-continual-delete-backward.mjs +0 -0
  331. /package/{esm2022 → esm2020}/transforms/handle-continual-insert-break.mjs +0 -0
  332. /package/{esm2022 → esm2020}/transforms/index.mjs +0 -0
  333. /package/{esm2022 → esm2020}/transforms/insert-elements.mjs +0 -0
  334. /package/{esm2022 → esm2020}/transforms/insert-paragraph.mjs +0 -0
  335. /package/{esm2022 → esm2020}/transforms/merge-deep-to-nodes.mjs +0 -0
  336. /package/{esm2022 → esm2020}/transforms/move-children.mjs +0 -0
  337. /package/{esm2022 → esm2020}/transforms/on-keydown-reset-block-type.mjs +0 -0
  338. /package/{esm2022 → esm2020}/transforms/set-end-selection.mjs +0 -0
  339. /package/{esm2022 → esm2020}/transforms/set-marks.mjs +0 -0
  340. /package/{esm2022 → esm2020}/transforms/set-node.mjs +0 -0
  341. /package/{esm2022 → esm2020}/transforms/un-hang-range.mjs +0 -0
  342. /package/{esm2022 → esm2020}/transforms/un-wrap.mjs +0 -0
  343. /package/{esm2022 → esm2020}/transforms/unwrap-nodes-by-type.mjs +0 -0
  344. /package/{esm2022 → esm2020}/utils/auto-focus.mjs +0 -0
  345. /package/{esm2022 → esm2020}/utils/blob.mjs +0 -0
  346. /package/{esm2022 → esm2020}/utils/cast-array.mjs +0 -0
  347. /package/{esm2022 → esm2020}/utils/color-picker.mjs +0 -0
  348. /package/{esm2022 → esm2020}/utils/common.mjs +0 -0
  349. /package/{esm2022 → esm2020}/utils/copy-node.mjs +0 -0
  350. /package/{esm2022 → esm2020}/utils/create-empty-paragraph.mjs +0 -0
  351. /package/{esm2022 → esm2020}/utils/data-transform.mjs +0 -0
  352. /package/{esm2022 → esm2020}/utils/dom.mjs +0 -0
  353. /package/{esm2022 → esm2020}/utils/editor-uuid.mjs +0 -0
  354. /package/{esm2022 → esm2020}/utils/fragment.mjs +0 -0
  355. /package/{esm2022 → esm2020}/utils/get-editable-element-height.mjs +0 -0
  356. /package/{esm2022 → esm2020}/utils/get-toolbar-class.mjs +0 -0
  357. /package/{esm2022 → esm2020}/utils/id-creator.mjs +0 -0
  358. /package/{esm2022 → esm2020}/utils/index.mjs +0 -0
  359. /package/{esm2022 → esm2020}/utils/insert-data-by-invalid-type.mjs +0 -0
  360. /package/{esm2022 → esm2020}/utils/is-clean-empty-paragraph.mjs +0 -0
  361. /package/{esm2022 → esm2020}/utils/is-inline.mjs +0 -0
  362. /package/{esm2022 → esm2020}/utils/lodash.mjs +0 -0
  363. /package/{esm2022 → esm2020}/utils/match.mjs +0 -0
  364. /package/{esm2022 → esm2020}/utils/merge-element-options.mjs +0 -0
  365. /package/{esm2022 → esm2020}/utils/refocus.mjs +0 -0
  366. /package/{esm2022 → esm2020}/utils/scroll-into-view.mjs +0 -0
  367. /package/{esm2022 → esm2020}/utils/weak-maps.mjs +0 -0
  368. /package/{esm2022 → esm2020}/worktile-theia.mjs +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"worktile-theia.mjs","sources":["../../../packages/src/queries/is-global-collapsed.ts","../../../packages/src/interfaces/view-base.ts","../../../packages/src/components/element/element.component.ts","../../../packages/src/constants/default.ts","../../../packages/src/constants/node-types.ts","../../../packages/src/constants/error.ts","../../../packages/src/constants/code.ts","../../../packages/src/constants/toolbar.ts","../../../packages/src/constants/plugin-menu.ts","../../../packages/src/constants/color-select.ts","../../../packages/src/pipes.ts","../../../packages/src/components/template/template.component.ts","../../../packages/src/components/template/template.component.html","../../../packages/src/components/text/text.component.ts","../../../packages/src/queries/is-ancestor.ts","../../../packages/src/queries/get-last-node.ts","../../../packages/src/queries/is-collapsed.ts","../../../packages/src/queries/get-anchor-block-entry.ts","../../../packages/src/queries/is-ancestor-empty.ts","../../../packages/src/queries/is-empty-paragraph.ts","../../../packages/src/queries/is-paragraph.ts","../../../packages/src/queries/is-block-active.ts","../../../packages/src/queries/get-above-by-type.ts","../../../packages/src/queries/is-include-types.ts","../../../packages/src/queries/get-block-card-cursor.ts","../../../packages/src/queries/is-block-card-cursor.ts","../../../packages/src/queries/anchor-block-entry.ts","../../../packages/src/transforms/un-hang-range.ts","../../../packages/src/queries/get-nodes.ts","../../../packages/src/queries/get-nodes-by-type.ts","../../../packages/src/queries/anchor-block.ts","../../../packages/src/queries/get-block-above.ts","../../../packages/src/queries/is-block-above-empty.ts","../../../packages/src/queries/is-node-type-in.ts","../../../packages/src/queries/is-first-child.ts","../../../packages/src/queries/get-previous-path.ts","../../../packages/src/queries/get-node.ts","../../../packages/src/queries/get-parent.ts","../../../packages/src/queries/find-path.ts","../../../packages/src/utils/cast-array.ts","../../../packages/src/utils/match.ts","../../../packages/src/queries/find-node.ts","../../../packages/src/queries/find-descendant.ts","../../../packages/src/queries/get-last-child-path.ts","../../../packages/src/queries/is-point-at-root.ts","../../../packages/src/queries/is-range-at-root.ts","../../../packages/src/queries/get-next-sibling-nodes.ts","../../../packages/src/queries/is-block-text-empty-after-selection.ts","../../../packages/src/queries/get-above.ts","../../../packages/src/queries/is-start.ts","../../../packages/src/queries/is-range-across-blocks.ts","../../../packages/src/queries/some-node.ts","../../../packages/src/queries/is-descendant.ts","../../../packages/src/queries/is-node-type.ts","../../../packages/src/queries/anchor-inline-entry.ts","../../../packages/src/queries/get-point-before.ts","../../../packages/src/queries/get-selection-nodes-by-type.ts","../../../packages/src/utils/fragment.ts","../../../packages/src/queries/is-across-blocks.ts","../../../packages/src/queries/get-text.ts","../../../packages/src/queries/get-point-from-location.ts","../../../packages/src/queries/get-rang-from-block-start.ts","../../../packages/src/queries/get-range-before.ts","../../../packages/src/queries/get-block-card-above.ts","../../../packages/src/queries/get-plain-text.ts","../../../packages/src/queries/is-empty-paragraph-by-path.ts","../../../packages/src/queries/get-selection-marks.ts","../../../packages/src/queries/is-container-type.ts","../../../packages/src/queries/get-container-blocks.ts","../../../packages/src/queries/get-directly-parent.ts","../../../packages/src/queries/get-insert-elements-path.ts","../../../packages/src/queries/is-contain-nested-type.ts","../../../packages/src/core/utils/flatten-deep-plugins.ts","../../../packages/src/core/utils/get-plugins.ts","../../../packages/src/core/utils/get-plugin.ts","../../../packages/src/core/utils/get-plugin-options.ts","../../../packages/src/core/utils/merge-array.ts","../../../packages/src/core/utils/merge-options.ts","../../../packages/src/core/utils/combine-plugins.ts","../../../packages/src/core/utils/merge-deep-plugins.ts","../../../packages/src/core/utils/nested-structure-by-key.ts","../../../packages/src/core/utils/plugins-by-key.ts","../../../packages/src/interfaces/plugins/plugin-menu.ts","../../../packages/src/core/utils/plugin-menu.ts","../../../packages/src/core/with-theia.ts","../../../packages/src/core/create-plugin.ts","../../../packages/src/interfaces/editor.ts","../../../packages/src/interfaces/toolbar.ts","../../../packages/src/interfaces/image.ts","../../../packages/src/interfaces/valid-children-types.ts","../../../packages/src/interfaces/plugins/plugin-key.ts","../../../packages/src/utils/id-creator.ts","../../../packages/src/utils/create-empty-paragraph.ts","../../../packages/src/utils/data-transform.ts","../../../packages/src/utils/weak-maps.ts","../../../packages/src/utils/editor-uuid.ts","../../../packages/src/utils/get-toolbar-class.ts","../../../packages/src/utils/common.ts","../../../packages/src/utils/is-clean-empty-paragraph.ts","../../../packages/src/utils/merge-element-options.ts","../../../packages/src/utils/dom.ts","../../../packages/src/utils/auto-focus.ts","../../../packages/src/utils/get-editable-element-height.ts","../../../packages/src/utils/scroll-into-view.ts","../../../packages/src/utils/blob.ts","../../../packages/src/utils/copy-node.ts","../../../packages/src/utils/refocus.ts","../../../packages/src/utils/insert-data-by-invalid-type.ts","../../../packages/src/utils/color-picker.ts","../../../packages/src/core/create-toolbar.ts","../../../packages/src/queries/get-toolbar-disabled.ts","../../../packages/src/queries/get-plugin-by-toolbar.ts","../../../packages/src/queries/is-empty-content.ts","../../../packages/src/queries/is-empty-content-filter.ts","../../../packages/src/core/toolbar-item/base-toolbar-item.ts","../../../packages/src/components/toolbar-dropdown/toolbar-dropdown.component.ts","../../../packages/src/components/toolbar-dropdown/toolbar-dropdown.component.html","../../../packages/src/components/toolbar-item/toolbar-item.component.ts","../../../packages/src/components/toolbar/toolbar.component.ts","../../../packages/src/components/toolbar/toolbar.component.html","../../../packages/src/services/context.service.ts","../../../packages/src/plugins/table/table.types.ts","../../../packages/src/plugins/table/utils/create-cell.ts","../../../packages/src/plugins/table/utils/create-row.ts","../../../packages/src/plugins/table/utils/create-table.ts","../../../packages/src/plugins/table/utils/table-position.ts","../../../packages/src/plugins/table/utils/create-table-position.ts","../../../packages/src/plugins/table/utils/is-range-in-table.ts","../../../packages/src/plugins/table/utils/is-selection-in-table.ts","../../../packages/src/plugins/table/utils/calc-span.ts","../../../packages/src/plugins/table/utils/is-virtual-key.ts","../../../packages/src/plugins/table/utils/get-grid-columns.ts","../../../packages/src/plugins/table/utils/cell-position.ts","../../../packages/src/plugins/table/utils/calculate-table.ts","../../../packages/src/plugins/table/utils/is-header-row.ts","../../../packages/src/plugins/table/utils/get-select-cell-node.ts","../../../packages/src/transforms/set-marks.ts","../../../packages/src/transforms/clear-marks.ts","../../../packages/src/transforms/insert-elements.ts","../../../packages/src/transforms/set-node.ts","../../../packages/src/transforms/unwrap-nodes-by-type.ts","../../../packages/src/transforms/on-keydown-reset-block-type.ts","../../../packages/src/transforms/move-children.ts","../../../packages/src/transforms/insert-paragraph.ts","../../../packages/src/transforms/apply-deep-to-nodes.ts","../../../packages/src/transforms/merge-deep-to-nodes.ts","../../../packages/src/transforms/un-wrap.ts","../../../packages/src/transforms/delete-element.ts","../../../packages/src/transforms/set-end-selection.ts","../../../packages/src/transforms/close-conversion-hint.ts","../../../packages/src/transforms/handle-continual-delete-backward.ts","../../../packages/src/transforms/handle-continual-insert-break.ts","../../../packages/src/plugins/table/transforms/insert-table.ts","../../../packages/src/plugins/table/transforms/insert-row.ts","../../../packages/src/plugins/table/utils/add-columns.ts","../../../packages/src/plugins/table/transforms/insert-column.ts","../../../packages/src/plugins/table/transforms/clear-cell.ts","../../../packages/src/plugins/table/transforms/remove-row.ts","../../../packages/src/plugins/table/utils/remove-columns.ts","../../../packages/src/plugins/table/transforms/remove-column.ts","../../../packages/src/plugins/table/utils/next-path.ts","../../../packages/src/plugins/table/transforms/remove-table.ts","../../../packages/src/plugins/blockquote/blockquote.editor.ts","../../../packages/src/plugins/code/code.editor.ts","../../../packages/src/plugins/color/color.editor.ts","../../../packages/src/plugins/heading/heading.editor.ts","../../../packages/src/plugins/hr/hr.editor.ts","../../../packages/src/plugins/image/image.editor.ts","../../../packages/src/plugins/indent/indent.editor.ts","../../../packages/src/plugins/link/link.types.ts","../../../packages/src/plugins/link/link.editor.ts","../../../packages/src/plugins/list/queries/is-node-type-list.ts","../../../packages/src/plugins/list/list.editor.ts","../../../packages/src/plugins/mark/mark.editor.ts","../../../packages/src/plugins/mention/mention.editor.ts","../../../packages/src/plugins/mention/mention.plugin.ts","../../../packages/src/plugins/mention/suggestion.component.ts","../../../packages/src/components/table-select/table-select.component.ts","../../../packages/src/components/table-select/table-select.component.html","../../../packages/src/components/listbox/listbox.type.ts","../../../packages/src/components/listbox/listbox.ts","../../../packages/src/components/action/prevent-default.ts","../../../packages/src/components/plugin-menu/plugin-menu.component.ts","../../../packages/src/components/plugin-menu/plugin-menu.component.html","../../../packages/src/plugins/quick-insert/quick-insert.editor.ts","../../../packages/src/plugins/todo-item/todo-item.editor.ts","../../../packages/src/plugins/vertical-align/toolbar-item.component.ts","../../../packages/src/plugins/vertical-align/toolbar-item.component.html","../../../packages/src/plugins/vertical-align/vertical-align.editor.ts","../../../packages/src/plugins/inline-code/inline-code.editor.ts","../../../packages/src/plugins/table/utils/handle-cell.ts","../../../packages/src/plugins/table/table.editor.ts","../../../packages/src/plugins/align/align.editor.ts","../../../packages/src/plugins/align/align.plugin.ts","../../../packages/src/plugins/autoformat/transforms/auto-format-block.ts","../../../packages/src/plugins/autoformat/transforms/auto-format-inline.ts","../../../packages/src/constants/auto-format-rules.ts","../../../packages/src/plugins/autoformat/autoformat.plugin.ts","../../../packages/src/plugins/blockquote/blockquote.component.ts","../../../packages/src/plugins/blockquote/blockquote.plugin.ts","../../../packages/src/plugins/code/code.component.ts","../../../packages/src/plugins/code/code.component.html","../../../packages/src/plugins/code/code.plugin.ts","../../../packages/src/plugins/color/toolbar-item.component.ts","../../../packages/src/plugins/color/toolbar-item.component.html","../../../packages/src/plugins/color/color.plugin.ts","../../../packages/src/plugins/common/insert-data-by-invalid-type.ts","../../../packages/src/plugins/common/block-card.plugin.ts","../../../packages/src/plugins/common/common.plugin.ts","../../../packages/src/plugins/common/get-fragment.plugin.ts","../../../packages/src/plugins/common/history.plugin.ts","../../../packages/src/utils/is-inline.ts","../../../packages/src/plugins/common/move-selection.plugin.ts","../../../packages/src/plugins/common/remove-empty.plugin.ts","../../../packages/src/plugins/common/remove-void.plugin.ts","../../../packages/src/plugins/common/reset-type.plugin.ts","../../../packages/src/plugins/common/transforms.plugin.ts","../../../packages/src/plugins/deserialize/deserialize-html.plugin.ts","../../../packages/src/components/conversion-hint/conversion-hint.component.ts","../../../packages/src/components/conversion-hint/conversion-hint.component.html","../../../packages/src/plugins/deserialize/deserialize-md.plugin.ts","../../../packages/src/plugins/font-size/font-size.editor.ts","../../../packages/src/plugins/heading/heading.plugin.ts","../../../packages/src/plugins/hr/hr.component.ts","../../../packages/src/plugins/hr/hr.plugin.ts","../../../packages/src/plugins/image/image.component.ts","../../../packages/src/plugins/image/image.component.html","../../../packages/src/plugins/image/image.plugin.ts","../../../packages/src/plugins/indent/on-keydown-indent.ts","../../../packages/src/plugins/indent/indent.plugin.ts","../../../packages/src/plugins/inline-code/inline-code.component.ts","../../../packages/src/plugins/normalizers/remove-empty-nodes.ts","../../../packages/src/plugins/inline-code/inline-code.plugin.ts","../../../packages/src/plugins/link/hover/link-hover.component.ts","../../../packages/src/plugins/link/hover/link-hover.component.html","../../../packages/src/plugins/link/edit/link-edit.component.ts","../../../packages/src/plugins/link/edit/link-edit.component.html","../../../packages/src/plugins/link/link.component.ts","../../../packages/src/plugins/link/link.plugin.ts","../../../packages/src/plugins/list/queries/is-list.ts","../../../packages/src/plugins/list/queries/is-in-list.ts","../../../packages/src/plugins/list/queries/is-list-nested.ts","../../../packages/src/plugins/list/queries/get-list-types.ts","../../../packages/src/plugins/list/queries/get-start-list-item.ts","../../../packages/src/plugins/list/queries/has-list-in-list-item.ts","../../../packages/src/plugins/list/queries/is-single-list-item.ts","../../../packages/src/plugins/list/queries/get-list-item-entry.ts","../../../packages/src/plugins/list/queries/is-selection-at-list-item-start.ts","../../../packages/src/plugins/list/transforms/insert-list-data.ts","../../../packages/src/plugins/list/transforms/move-list-item-up.ts","../../../packages/src/plugins/list/transforms/insert-list-item.ts","../../../packages/src/plugins/list/transforms/unwrap-list.ts","../../../packages/src/plugins/list/queries/get-list-item-sublist.ts","../../../packages/src/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.ts","../../../packages/src/plugins/list/normalizers/normalize-list-item.ts","../../../packages/src/plugins/list/normalizers/normalize-no.ts","../../../packages/src/plugins/list/normalizers/get-list-normalizer.ts","../../../packages/src/plugins/list/transforms/move-list-item-sublist-items-to-list.ts","../../../packages/src/plugins/list/transforms/move-list-item-down.ts","../../../packages/src/plugins/list/on-key-down-list.ts","../../../packages/src/plugins/list/components/numbered-list.component.ts","../../../packages/src/plugins/list/components/bulleted-list.component.ts","../../../packages/src/plugins/list/components/list-item.component.ts","../../../packages/src/plugins/list/queries/is-selection-in-same-list-item.ts","../../../packages/src/plugins/list/list.plugin.ts","../../../packages/src/plugins/mark/mark.plugin.ts","../../../packages/src/plugins/node-id/node-id.plugin.ts","../../../packages/src/plugins/normalizers/insert-paragraph-nodes.ts","../../../packages/src/plugins/normalizers/trailing-node.plugin.ts","../../../packages/src/plugins/paint-format/paint-format.editor.ts","../../../packages/src/plugins/quick-insert/quick-insert.plugin.ts","../../../packages/src/plugins/soft-break/soft-break.plugin.ts","../../../packages/src/constants/selector.ts","../../../packages/src/components/toolbar-group/toolbar-group.component.ts","../../../packages/src/components/toolbar-group/toolbar-group.component.html","../../../packages/src/components/column-resize/column-resize-notifier.ts","../../../packages/src/components/column-resize/event-dispatcher.ts","../../../packages/src/plugins/table/utils/split-cell.ts","../../../packages/src/plugins/table/utils/merge-cell.ts","../../../packages/src/plugins/table/utils/set-menu-cell-invisibility.ts","../../../packages/src/components/contextmenu/contextmenu.component.ts","../../../packages/src/components/contextmenu/contextmenu.component.html","../../../packages/src/plugins/table/utils/table-entry.ts","../../../packages/src/plugins/table/utils/set-cells-background-color.ts","../../../packages/src/plugins/table/utils/set-node-options.ts","../../../packages/src/plugins/table/utils/remove-row-column.ts","../../../packages/src/plugins/table/utils/get-min-max-cell-index.ts","../../../packages/src/plugins/table/table.store.ts","../../../packages/src/services/table-contextmenu.service.ts","../../../packages/src/plugins/table/components/toolbar/table-options.component.ts","../../../packages/src/plugins/table/components/toolbar/table-toolbar.component.ts","../../../packages/src/plugins/table/components/toolbar/table-toolbar.component.html","../../../packages/src/plugins/table/table.service.ts","../../../packages/src/plugins/table/table.pipe.ts","../../../packages/src/components/column-resize/selectors.ts","../../../packages/src/components/column-resize/column-resize.directive.ts","../../../packages/src/plugins/table/components/insert-mark/insert-mark.component.ts","../../../packages/src/plugins/table/components/insert-mark/insert-mark.component.html","../../../packages/src/plugins/table/components/table.component.ts","../../../packages/src/plugins/table/components/table.component.html","../../../packages/src/plugins/table/transforms/clear-table-node.ts","../../../packages/src/plugins/table/utils/calc-anchor-position.ts","../../../packages/src/plugins/table/components/row/row.component.ts","../../../packages/src/components/column-resize/resizing.store.ts","../../../packages/src/components/column-resize/resize-ref.ts","../../../packages/src/components/column-resize/overlay-handle.component.ts","../../../packages/src/plugins/table/components/td/td.component.ts","../../../packages/src/plugins/table/components/td/td.component.html","../../../packages/src/plugins/table/utils/normalize-table.ts","../../../packages/src/plugins/table/toolbar-item.component.ts","../../../packages/src/plugins/table/utils/is-legal-table.ts","../../../packages/src/plugins/table/table.plugin.ts","../../../packages/src/plugins/todo-item/todo-item.component.ts","../../../packages/src/plugins/todo-item/todo-item.plugin.ts","../../../packages/src/plugins/index.ts","../../../packages/src/shortcuts/mark.ts","../../../packages/src/shortcuts/index.ts","../../../packages/src/components/inline-toolbar/inline-toolbar.component.ts","../../../packages/src/plugins/quick-insert/components/quick-insert.component.ts","../../../packages/src/plugins/quick-insert/components/quick-insert.component.html","../../../packages/src/editor.component.ts","../../../packages/src/editor.component.html","../../../packages/src/components/column-resize/column-resize.module.ts","../../../packages/src/editor.module.ts","../../../packages/src/services/toolbar.service.ts","../../../packages/src/test/utils/with-plugin.ts","../../../packages/src/public-api.ts","../../../packages/src/worktile-theia.ts"],"sourcesContent":["import { Editor, Range } from 'slate';\n\nexport const isGlobalCollapsed = (editor: Editor) => {\n return editor && editor.selection && Range.isCollapsed(editor.selection);\n};\n","import { Component, OnInit } from '@angular/core';\nimport { BaseElementComponent } from 'slate-angular';\nimport { Editor, Element } from 'slate';\nimport { isGlobalCollapsed } from '../queries/is-global-collapsed';\n\n@Component({\n selector: 'TheBaseElementComponent',\n template: ''\n})\nexport class TheBaseElementComponent<T extends Element = Element, K extends Editor = Editor>\n extends BaseElementComponent<T, K>\n implements OnInit\n{\n onContextChange() {\n super.onContextChange();\n if (this.selection && this.editor && this.editor.isVoid(this.element)) {\n this.nativeElement.classList.add(`slate-selected-element`);\n if (this.isCollapsed && isGlobalCollapsed(this.editor)) {\n this.nativeElement.classList.add(`slate-focus-element`);\n } else {\n this.nativeElement.classList.remove(`slate-focus-element`);\n }\n } else {\n this.nativeElement.classList.remove(`slate-selected-element`);\n this.nativeElement.classList.remove(`slate-focus-element`);\n }\n }\n\n ngOnInit() {\n this.context.attributes['data-slate-key'] = this.context.element.key as string;\n super.ngOnInit();\n const blockClass = this.editor.isInline(this.element) ? 'slate-inline-block' : 'slate-block';\n this.nativeElement.classList.add(`slate-element-${this.element.type}`, blockClass);\n }\n}\n","import { Component, ChangeDetectionStrategy, HostBinding } from '@angular/core';\nimport { TheBaseElementComponent } from '../../interfaces/view-base';\n\n@Component({\n selector: '[theDefaultElement]',\n template: '<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheDefaultElementComponent extends TheBaseElementComponent {\n @HostBinding('attr.the-indent')\n get indent() {\n return this.element?.indent;\n }\n}\n","export const PICTURE_ACCEPTED_UPLOAD_MIME = ['image/png', 'image/jpeg', 'image/gif', 'image/bmp'];\nexport const PICTURE_ACCEPTED_UPLOAD_SIZE = 50;\nexport const A_TAG_REL_ATTR = 'noopener noreferrer nofollow external ugc';\nexport const LINK_DEFAULT_TEXT = '链接';\nexport const TAB_SPACE = ' ';\nexport const CLIPBOARD_FORMAT_KEY = 'x-theia-fragment';\nexport const DEFAULT_SCROLL_CONTAINER = '.the-editable-container';\nexport const ELEMENT_UNIQUE_ID = 'key';\nexport const ZERO_WIDTH_CHAR = '\\u200B';\n","import { CustomElementKinds } from '../custom-types';\n\nexport enum ElementKinds {\n image = 'image',\n paragraph = 'paragraph',\n headingList = 'heading-list',\n heading_1 = 'heading-one',\n heading_2 = 'heading-two',\n heading_3 = 'heading-three',\n heading_4 = 'heading-four',\n heading_5 = 'heading-five',\n heading_6 = 'heading-six',\n numberedList = 'numbered-list',\n bulletedList = 'bulleted-list',\n listItem = 'list-item',\n checkItem = 'check-item',\n table = 'table',\n tableRow = 'table-row',\n tableCell = 'table-cell',\n tableContent = 'paragraph',\n code = 'code',\n blockquote = 'block-quote',\n hr = 'hr',\n link = 'link',\n default = 'paragraph',\n inlineCode = 'inline-code',\n indent = 'indent'\n}\n\nexport enum Alignment {\n left = 'left',\n center = 'center',\n right = 'right'\n}\n\nexport enum VerticalAlignment {\n top = 'top',\n middle = 'middle',\n bottom = 'bottom'\n}\n\nexport enum LayoutTypes {\n wrapLeft = 'wrap-left',\n wrapRight = 'wrap-right'\n}\n\nexport enum FontSizes {\n 'fontSize12' = '12',\n 'fontSize13' = '13',\n 'fontSize14' = '14',\n 'fontSize15' = '15',\n 'fontSize16' = '16',\n 'fontSize18' = '18',\n 'fontSize20' = '20',\n 'fontSize24' = '24',\n 'fontSize28' = '28',\n 'fontSize32' = '32',\n 'fontSize40' = '40',\n 'fontSize48' = '48'\n}\n\nexport const FontSizeTypes = [\n FontSizes.fontSize12,\n FontSizes.fontSize13,\n FontSizes.fontSize14,\n FontSizes.fontSize15,\n FontSizes.fontSize16,\n FontSizes.fontSize20,\n FontSizes.fontSize24,\n FontSizes.fontSize28,\n FontSizes.fontSize32,\n FontSizes.fontSize40,\n FontSizes.fontSize48\n];\n\nexport enum Indents {\n indentRight = 'indent-right',\n indentLeft = 'indent-left'\n}\n\nexport enum ScrollDirection {\n X,\n Y\n}\n\nexport enum MarkTypes {\n bold = 'bold',\n italic = 'italic',\n underline = 'underlined',\n strike = 'strike',\n color = 'color',\n backgroundColor = 'background-color',\n fontSize = 'font-size'\n}\n\nexport enum ToolbarActionTypes {\n split = 'split',\n undo = 'undo',\n redo = 'redo',\n paintformat = 'paintformat',\n clean = 'clean',\n alignType = 'align-type',\n alignLeft = 'align-left',\n alignCenter = 'align-center',\n alignRight = 'align-right',\n verticalAlign = 'vertical-align',\n verticalAlignTop = 'vertical-align-top',\n verticalAlignMiddle = 'vertical-align-middle',\n verticalAlignBottom = 'vertical-align-bottom',\n headingList = 'heading-list',\n tableRemove = 'table-remove',\n tableDeleteRows = 'table-delete-rows',\n tableDeleteColumns = 'table-delete-columns',\n group = 'group'\n}\n\nexport const MarkProps: Array<MarkTypes> = [\n MarkTypes.backgroundColor,\n MarkTypes.bold,\n MarkTypes.color,\n MarkTypes.italic,\n MarkTypes.strike,\n MarkTypes.underline,\n MarkTypes.fontSize\n];\n\nexport const THE_INLINE_TOOLBAR_TYPES: Array<ElementKinds> = [ElementKinds.default, ElementKinds.listItem, ElementKinds.checkItem];\n\nexport const STANDARD_HEADING_TYPES: CustomElementKinds[] = [\n ElementKinds.heading_1,\n ElementKinds.heading_2,\n ElementKinds.heading_3,\n ElementKinds.heading_4\n];\n\nexport const HEADING_TYPES: CustomElementKinds[] = [...STANDARD_HEADING_TYPES, ElementKinds.heading_5, ElementKinds.heading_6];\n\nexport const ALIGN_BLOCK_TYPES: CustomElementKinds[] = [ElementKinds.default, ElementKinds.listItem, ElementKinds.image, ...HEADING_TYPES];\n\nexport const CONTAINER_BLOCKS: CustomElementKinds[] = [ElementKinds.blockquote, ElementKinds.tableCell];\n\nexport const LIST_BLOCK_TYPES: CustomElementKinds[] = [ElementKinds.numberedList, ElementKinds.bulletedList];\n\nexport const VOID_BLOCK_TYPES: CustomElementKinds[] = [ElementKinds.image, ElementKinds.hr];\n\nexport const BLOCK_DELETE_BACKWARD_TYPES: CustomElementKinds[] = [ElementKinds.tableCell];\n\nexport const DISABLED_OPERATE_TYPES: CustomElementKinds[] = [ElementKinds.code, ElementKinds.hr];\n","export enum ErrorCodes {\n UNKNOW_ERROR = 1000,\n IMAGE_ERR_MIME_FORMAT = 1001,\n IMAGE_ERR_SIZE_LIMIT = 1002\n}\n","export const DEFAULT_LANGUAGE = {\n showName: 'JavaScript',\n value: 'javascript'\n};\n\nexport const CODE_MODES = [\n {\n showName: 'Plain Text',\n value: ''\n },\n {\n showName: 'C',\n value: 'text/x-csrc'\n },\n {\n showName: 'C#',\n value: 'text/x-csharp'\n },\n {\n showName: 'C++',\n value: 'text/x-c++src'\n },\n {\n showName: 'C-like',\n value: 'clike'\n },\n {\n showName: 'CSS',\n value: 'css'\n },\n {\n showName: 'Dart',\n value: 'dart'\n },\n {\n showName: 'Django',\n value: 'django'\n },\n {\n showName: 'Dockerfile',\n value: 'dockerfile'\n },\n {\n showName: 'Go',\n value: 'go'\n },\n {\n showName: 'HTML',\n value: 'htmlmixed'\n },\n {\n showName: 'Java',\n value: 'text/x-java'\n },\n DEFAULT_LANGUAGE,\n {\n showName: 'Markdown',\n value: 'markdown'\n },\n {\n showName: 'Nginx',\n value: 'nginx'\n },\n {\n showName: 'Python',\n value: 'python'\n },\n {\n showName: 'PHP',\n value: 'php'\n },\n {\n showName: 'Shell',\n value: 'shell'\n },\n {\n showName: 'SQL',\n value: 'sql'\n },\n {\n showName: 'Swift',\n value: 'swift'\n },\n {\n showName: 'TypeScript',\n value: 'text/typescript'\n }\n];\n\nexport const CODEMIRROR_PADDING_TOP = 10;\n","import { ComponentType } from 'slate-angular';\nimport { InjectionToken } from '@angular/core';\nimport { ElementKinds, MarkTypes } from './node-types';\nimport { ToolbarItem, ToolbarKey } from '../interfaces';\nimport { ToolbarActionTypes, STANDARD_HEADING_TYPES } from '../constants/node-types';\nimport type { TheToolbarGroupComponent } from '../components/toolbar-group/toolbar-group.component';\n\nexport const TheToolbarGroupToken = new InjectionToken<ComponentType<TheToolbarGroupComponent>>('the-toolbar-group-token');\n\nexport enum DropdownMode {\n icon = 'icon-mode',\n text = 'text-mode'\n}\n\nexport const DefaultGlobalToolbarDefinition: ToolbarKey[] = [\n ElementKinds.headingList,\n ToolbarActionTypes.split,\n MarkTypes.bold,\n MarkTypes.italic,\n ToolbarActionTypes.group,\n ToolbarActionTypes.split,\n MarkTypes.color,\n MarkTypes.backgroundColor,\n ToolbarActionTypes.split,\n ElementKinds.indent,\n ToolbarActionTypes.alignType,\n ToolbarActionTypes.verticalAlign,\n ToolbarActionTypes.split,\n ElementKinds.numberedList,\n ElementKinds.bulletedList,\n ToolbarActionTypes.split,\n ElementKinds.link,\n ElementKinds.image,\n ElementKinds.table,\n ElementKinds.blockquote,\n ElementKinds.hr,\n ElementKinds.code\n];\n\nexport const DefaultInlineToolbarDefinition: ToolbarKey[] = [\n ToolbarActionTypes.clean,\n ToolbarActionTypes.split,\n MarkTypes.bold,\n MarkTypes.italic,\n MarkTypes.underline,\n MarkTypes.strike,\n ElementKinds.inlineCode,\n MarkTypes.color,\n MarkTypes.backgroundColor,\n ToolbarActionTypes.split,\n ToolbarActionTypes.alignType,\n ToolbarActionTypes.split,\n ElementKinds.link\n];\n\nexport const ToolbarMoreGroup: ToolbarItem = {\n key: 'more',\n icon: 'more'\n};\n","import { ThyIconRegistry } from 'ngx-tethys/icon';\nimport { ThePluginMenuItemConfig } from '../interfaces/plugins/plugin-menu';\nimport { ElementKinds, STANDARD_HEADING_TYPES } from './node-types';\n\nexport const DefaultPluginMenu: ThePluginMenuItemConfig[] = [\n ...STANDARD_HEADING_TYPES,\n ElementKinds.numberedList,\n ElementKinds.bulletedList,\n ElementKinds.link,\n { groupName: '基础' },\n ElementKinds.image,\n ElementKinds.table,\n ElementKinds.blockquote,\n ElementKinds.hr,\n ElementKinds.code\n];\n\nexport enum ThePluginMenuItemType {\n icon = 'iconMenu',\n group = 'groupMenu'\n}\n\nexport enum PluginMenuIcons {\n heading_1 = `the-icon-heading-one`,\n heading_2 = `the-icon-heading-two`,\n heading_3 = `the-icon-heading-three`,\n heading_4 = `the-icon-heading-four`,\n numberedList = 'the-icon-numbered-list',\n bulletedList = 'the-icon-bulleted-list',\n link = 'the-icon-link',\n image = `the-icon-image`,\n blockquote = `the-icon-block-quote`,\n code = `the-icon-code`,\n table = `the-icon-table`,\n hr = `the-icon-hr`,\n checkItem = `the-icon-check-item`\n}\n\nexport const PluginMenuSvgs = [\n {\n key: PluginMenuIcons.image,\n svg: `\n <svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>图片</title>\n <g id=\"图片\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"icon\">\n <rect id=\"矩形\" fill=\"#FFFFFF\" x=\"0\" y=\"0\" width=\"28\" height=\"28\" rx=\"4\"></rect>\n <path d=\"M24,0 C26.209139,0 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 0,26.209139 0,24 L0,4 C0,1.790861 1.790861,0 4,0 L24,0 Z M24,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,24 C1,25.6568542 2.34314575,27 4,27 L24,27 C25.6568542,27 27,25.6568542 27,24 L27,4 C27,2.34314575 25.6568542,1 24,1 Z\" id=\"矩形\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n <g id=\"编组\" transform=\"translate(6.611111, 7.777778)\">\n <path d=\"M0,0.777777778 C0,0.348222778 0.348222778,0 0.777777778,0 L14,0 C14.4295667,0 14.7777778,0.348222778 14.7777778,0.777777778 L14.7777778,11.6666667 C14.7777778,12.0962333 14.4295667,12.4444444 14,12.4444444 L0.777777778,12.4444444 C0.348222778,12.4444444 0,12.0962333 0,11.6666667 L0,0.777777778 Z\" id=\"路径\" fill=\"#EEEEEE\"></path>\n <path d=\"M3.5,5.44444444 C4.35908148,5.44444444 5.05555556,4.74797037 5.05555556,3.88888889 C5.05555556,3.02980741 4.35908148,2.33333333 3.5,2.33333333 C2.64091852,2.33333333 1.94444444,3.02980741 1.94444444,3.88888889 C1.94444444,4.74797037 2.64091852,5.44444444 3.5,5.44444444 Z\" id=\"路径\" fill=\"#F6C659\"></path>\n <path d=\"M3.88888889,7 L5.83333333,8.55555556 L8.16666667,5.83333333 L14.7777778,10.1111111 L14.7777778,11.6666667 C14.7777778,12.0962333 14.4295667,12.4444444 14,12.4444444 L0.777777778,12.4444444 C0.348222778,12.4444444 0,12.0962333 0,11.6666667 L0,10.1111111 L3.88888889,7 Z\" id=\"路径\" fill=\"#6698FF\"></path>\n <path d=\"M3.88888889,7 L5.824,8.548 L2.462,12.444 L0.777777778,12.4444444 C0.348222778,12.4444444 0,12.0962333 0,11.6666667 L0,10.1111111 L3.88888889,7 Z\" id=\"形状结合\" fill=\"#CAD9F8\"></path>\n </g>\n </g>\n </g>\n </svg>\n `\n },\n {\n key: PluginMenuIcons.blockquote,\n svg: `\n <svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>引用</title>\n <g id=\"引用\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"矩形\">\n <rect id=\"蒙版\" fill=\"#FFFFFF\" x=\"0\" y=\"0\" width=\"28\" height=\"28\" rx=\"4\"></rect>\n <path d=\"M24,0 C26.209139,0 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 0,26.209139 0,24 L0,4 C0,1.790861 1.790861,0 4,0 L24,0 Z M24,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,24 C1,25.6568542 2.34314575,27 4,27 L24,27 C25.6568542,27 27,25.6568542 27,24 L27,4 C27,2.34314575 25.6568542,1 24,1 Z\" id=\"蒙版\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n <g id=\"编组-34\" transform=\"translate(5.444444, 5.911111)\">\n <path d=\"M-7.23333333,7.7 L8.16666667,7.7 C8.42439955,7.7 8.63333333,7.90893378 8.63333333,8.16666667 C8.63333333,8.42439955 8.42439955,8.63333333 8.16666667,8.63333333 L-7.23333333,8.63333333 C-7.49106622,8.63333333 -7.7,8.42439955 -7.7,8.16666667 C-7.7,7.90893378 -7.49106622,7.7 -7.23333333,7.7 Z\" id=\"矩形备份-86\" fill=\"#AAAAAA\" transform=\"translate(0.466667, 8.166667) rotate(-270.000000) translate(-0.466667, -8.166667) \"></path>\n <path d=\"M9.3776274,0.0835189584 C7.04153911,1.62598565 5.74374227,3.42129833 5.48422757,5.46943466 C5.08022197,8.6579087 7.85358308,10.2185773 9.25881591,8.81632614 C10.6640487,7.414075 9.82169699,5.63423091 8.80416808,5.14771999 C7.78663917,4.66117718 7.16438337,4.83062994 7.27292682,4.18047096 C7.38147027,3.53034388 8.82910918,1.72775937 10.1009195,0.888277673 C10.1852974,0.814506875 10.2174044,0.671366649 10.1361597,0.562767615 C10.08271,0.491356972 9.97788912,0.351294516 9.82169699,0.14257068 C9.6851103,-0.0399490543 9.55426256,-0.0331173617 9.3776274,0.0835189584 Z M15.5277817,0.0835189584 C13.1917244,1.62598565 11.8939183,3.42129833 11.6343943,5.46943466 C11.2304042,8.6579087 14.0037684,10.2185773 15.4090012,8.81632614 C16.8142341,7.414075 15.9718823,5.63423091 14.9543534,5.14771999 C13.9368245,4.66117718 13.3145377,4.83062994 13.4231122,4.18047096 C13.5316556,3.53034388 14.9792945,1.72775937 16.2511048,0.888277673 C16.3354827,0.814506875 16.3675897,0.671366649 16.286314,0.562767615 C16.2328953,0.491356972 16.1280745,0.351294516 15.9718823,0.14257068 C15.8352956,-0.0399490543 15.7044479,-0.0331173617 15.5277817,0.0835189584 Z\" id=\"形状结合\" fill=\"#CACACA\" transform=\"translate(10.888889, 4.666667) rotate(-180.000000) translate(-10.888889, -4.666667) \"></path>\n <path d=\"M5.13333333,15.8666667 L12.25134,15.8666667 C12.5090729,15.8666667 12.7180066,16.0756005 12.7180066,16.3333333 C12.7180066,16.5910662 12.5090729,16.8 12.25134,16.8 L5.13333333,16.8 C4.87560045,16.8 4.66666667,16.5910662 4.66666667,16.3333333 C4.66666667,16.0756005 4.87560045,15.8666667 5.13333333,15.8666667 Z\" id=\"矩形备份-88\" fill=\"#CACACA\"></path>\n <rect id=\"矩形备份-87\" fill=\"#CACACA\" x=\"4.66666667\" y=\"11.9777778\" width=\"12.4444444\" height=\"1\" rx=\"0.5\"></rect>\n </g>\n </g>\n </g>\n </svg>\n `\n },\n {\n key: PluginMenuIcons.code,\n svg: `\n <svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>代码块</title>\n <defs>\n <rect id=\"path-1\" x=\"1\" y=\"1\" width=\"26\" height=\"26\" rx=\"4\"></rect>\n </defs>\n <g id=\"代码块\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"icon\">\n <rect id=\"蒙版\" fill=\"#FFFFFF\" x=\"0\" y=\"0\" width=\"28\" height=\"28\" rx=\"3.2\"></rect>\n <path d=\"M24.8,0 C26.5673112,0 28,1.4326888 28,3.2 L28,24.8 C28,26.5673112 26.5673112,28 24.8,28 L3.2,28 C1.4326888,28 0,26.5673112 0,24.8 L0,3.2 C0,1.4326888 1.4326888,0 3.2,0 L24.8,0 Z M24.8,1 L3.2,1 C1.98497355,1 1,1.98497355 1,3.2 L1,24.8 C1,26.0150264 1.98497355,27 3.2,27 L24.8,27 C26.0150264,27 27,26.0150264 27,24.8 L27,3.2 C27,1.98497355 26.0150264,1 24.8,1 Z\" id=\"蒙版\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n <mask id=\"mask-2\" fill=\"white\">\n <use xlink:href=\"#path-1\"></use>\n </mask>\n <use id=\"蒙版\" fill=\"#FFFFFF\" xlink:href=\"#path-1\"></use>\n <g id=\"编组-24\" mask=\"url(#mask-2)\">\n <g transform=\"translate(4.666667, 4.666667)\">\n <rect id=\"矩形备份-60\" fill=\"#F5F5F5\" x=\"0\" y=\"0\" width=\"33.4444444\" height=\"18.6666667\" rx=\"1.6\"></rect>\n <path d=\"M1.6,0 L4.66666667,0 L4.66666667,0 L4.66666667,18.6666667 L1.6,18.6666667 C0.7163444,18.6666667 1.082166e-16,17.9503223 0,17.0666667 L0,1.6 C1.13828005e-16,0.7163444 0.7163444,-2.8176431e-16 1.6,0 Z\" id=\"矩形备份-60\" fill=\"#EEEEEE\"></path>\n <path d=\"M2.02222222,3.11111111 L2.64444444,3.11111111 C2.90217733,3.11111111 3.11111111,3.32004489 3.11111111,3.57777778 C3.11111111,3.83551066 2.90217733,4.04444444 2.64444444,4.04444444 L2.02222222,4.04444444 C1.76448934,4.04444444 1.55555556,3.83551066 1.55555556,3.57777778 C1.55555556,3.32004489 1.76448934,3.11111111 2.02222222,3.11111111 Z M2.02222222,7 L2.64444444,7 C2.90217733,7 3.11111111,7.20893378 3.11111111,7.46666667 C3.11111111,7.72439955 2.90217733,7.93333333 2.64444444,7.93333333 L2.02222222,7.93333333 C1.76448934,7.93333333 1.55555556,7.72439955 1.55555556,7.46666667 C1.55555556,7.20893378 1.76448934,7 2.02222222,7 Z M2.02222222,10.8888889 L2.64444444,10.8888889 C2.90217733,10.8888889 3.11111111,11.0978227 3.11111111,11.3555556 C3.11111111,11.6132884 2.90217733,11.8222222 2.64444444,11.8222222 L2.02222222,11.8222222 C1.76448934,11.8222222 1.55555556,11.6132884 1.55555556,11.3555556 C1.55555556,11.0978227 1.76448934,10.8888889 2.02222222,10.8888889 Z M2.02222222,14.7777778 L2.64444444,14.7777778 C2.90217733,14.7777778 3.11111111,14.9867116 3.11111111,15.2444444 C3.11111111,15.5021773 2.90217733,15.7111111 2.64444444,15.7111111 L2.02222222,15.7111111 C1.76448934,15.7111111 1.55555556,15.5021773 1.55555556,15.2444444 C1.55555556,14.9867116 1.76448934,14.7777778 2.02222222,14.7777778 Z\" id=\"形状结合\" fill=\"#CACACA\"></path>\n <path d=\"M8.24444444,3.11111111 L18.5279071,3.11111111 C18.7856399,3.11111111 18.9945737,3.32004489 18.9945737,3.57777778 C18.9945737,3.83551066 18.7856399,4.04444444 18.5279071,4.04444444 L8.24444444,4.04444444 C7.98671156,4.04444444 7.77777778,3.83551066 7.77777778,3.57777778 C7.77777778,3.32004489 7.98671156,3.11111111 8.24444444,3.11111111 Z\" id=\"矩形备份-61\" fill=\"#CACACA\"></path>\n <path d=\"M12.1333333,7 L18.626887,7 C18.8846199,7 19.0935537,7.20893378 19.0935537,7.46666667 C19.0935537,7.72439955 18.8846199,7.93333333 18.626887,7.93333333 L12.1333333,7.93333333 C11.8756005,7.93333333 11.6666667,7.72439955 11.6666667,7.46666667 C11.6666667,7.20893378 11.8756005,7 12.1333333,7 Z\" id=\"矩形备份-63\" fill=\"#FF7575\"></path>\n <path d=\"M8.24444444,10.8888889 L16.8888488,10.8888889 C17.1465817,10.8888889 17.3555155,11.0978227 17.3555155,11.3555556 C17.3555155,11.6132884 17.1465817,11.8222222 16.8888488,11.8222222 L8.24444444,11.8222222 C7.98671156,11.8222222 7.77777778,11.6132884 7.77777778,11.3555556 C7.77777778,11.0978227 7.98671156,10.8888889 8.24444444,10.8888889 Z\" id=\"矩形备份-65\" fill=\"#CACACA\"></path>\n <path d=\"M10.5777778,14.7777778 L22.6368137,14.7777778 C22.8945466,14.7777778 23.1034804,14.9867116 23.1034804,15.2444444 C23.1034804,15.5021773 22.8945466,15.7111111 22.6368137,15.7111111 L10.5777778,15.7111111 C10.3200449,15.7111111 10.1111111,15.5021773 10.1111111,15.2444444 C10.1111111,14.9867116 10.3200449,14.7777778 10.5777778,14.7777778 Z\" id=\"矩形备份-66\" fill=\"#6698FF\"></path>\n </g>\n </g>\n </g>\n </g>\n </svg>\n `\n },\n {\n key: PluginMenuIcons.table,\n svg: `\n <svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>表格</title>\n <g id=\"表格\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"icon\">\n <rect id=\"矩形\" fill=\"#FFFFFF\" x=\"0\" y=\"0\" width=\"28\" height=\"28\" rx=\"4\"></rect>\n <path d=\"M24,0 C26.209139,0 28,1.790861 28,4 L28,24 C28,26.209139 26.209139,28 24,28 L4,28 C1.790861,28 0,26.209139 0,24 L0,4 C0,1.790861 1.790861,0 4,0 L24,0 Z M24,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,24 C1,25.6568542 2.34314575,27 4,27 L24,27 C25.6568542,27 27,25.6568542 27,24 L27,4 C27,2.34314575 25.6568542,1 24,1 Z\" id=\"矩形\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n <g id=\"编组-36\" transform=\"translate(5.288889, 6.844444)\">\n <path d=\"M15.7111111,0 L1.71111111,0 C0.766090539,0 0,0.766090539 0,1.71111111 L0,12.6 C0,13.5450206 0.766090539,14.3111111 1.71111111,14.3111111 L15.7111111,14.3111111 C16.6561317,14.3111111 17.4222222,13.5450206 17.4222222,12.6 L17.4222222,1.71111111 C17.4222222,0.766090539 16.6561317,0 15.7111111,0 Z M15.7111111,0.933333333 C16.1406659,0.933333333 16.4888889,1.28155631 16.4888889,1.71111111 L16.4888889,12.6 C16.4888889,13.0295548 16.1406659,13.3777778 15.7111111,13.3777778 L1.71111111,13.3777778 C1.28155631,13.3777778 0.933333333,13.0295548 0.933333333,12.6 L0.933333333,1.71111111 C0.933333333,1.28155631 1.28155631,0.933333333 1.71111111,0.933333333 L15.7111111,0.933333333 Z\" id=\"矩形\" fill=\"#D8D8D8\" fill-rule=\"nonzero\"></path>\n <path d=\"M1.73333333,0.933333333 L15.6888889,0.933333333 C16.1307167,0.933333333 16.4888889,1.29150553 16.4888889,1.73333333 L16.4888889,4.43333333 L16.4888889,4.43333333 L0.933333333,4.43333333 L0.933333333,1.73333333 C0.933333333,1.29150553 1.29150553,0.933333333 1.73333333,0.933333333 Z\" id=\"矩形\" fill=\"#EEEEEE\"></path>\n <path d=\"M16.4888889,4.04444444 L16.4888889,4.97777778 L11.8993333,4.97744444 L11.8993333,8.71044444 L16.4888889,8.71111111 L16.4888889,9.64444444 L11.8993333,9.64344444 L11.9,13.4555556 L10.9666667,13.4555556 L10.9663333,9.64344444 L6.45533333,9.64344444 L6.45555556,13.4555556 L5.52222222,13.4555556 L5.52133333,9.64344444 L0.933333333,9.64444444 L0.933333333,8.71111111 L5.52133333,8.71044444 L5.52133333,4.97744444 L0.933333333,4.97777778 L0.933333333,4.04444444 L16.4888889,4.04444444 Z M10.9663333,4.97744444 L6.45533333,4.97744444 L6.45533333,8.71044444 L10.9663333,8.71044444 L10.9663333,4.97744444 Z\" id=\"形状结合\" fill=\"#D8D8D8\"></path>\n <path d=\"M7.62222222,6.30931634 L9.8,6.30931634 C10.0577329,6.30931634 10.2666667,6.51825012 10.2666667,6.77598301 C10.2666667,7.03371589 10.0577329,7.24264967 9.8,7.24264967 L7.62222222,7.24264967 C7.36448934,7.24264967 7.15555556,7.03371589 7.15555556,6.77598301 C7.15555556,6.51825012 7.36448934,6.30931634 7.62222222,6.30931634 Z\" id=\"矩形\" fill=\"#6698FF\"></path>\n <path d=\"M13.0666667,10.977142 L15.2444444,10.977142 C15.5021773,10.977142 15.7111111,11.1860758 15.7111111,11.4438086 C15.7111111,11.7015415 15.5021773,11.9104753 15.2444444,11.9104753 L13.0666667,11.9104753 C12.8089338,11.9104753 12.6,11.7015415 12.6,11.4438086 C12.6,11.1860758 12.8089338,10.977142 13.0666667,10.977142 Z\" id=\"矩形备份-71\" fill=\"#FF7575\"></path>\n </g>\n </g>\n </g>\n </svg>\n `\n },\n {\n key: PluginMenuIcons.hr,\n svg: `\n <svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>分割线</title>\n <g id=\"分割线\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"矩形备份-60\">\n <rect id=\"蒙版\" fill=\"#FFFFFF\" x=\"0\" y=\"0\" width=\"28\" height=\"28\" rx=\"3.2\"></rect>\n <path d=\"M24.8,0 C26.5673112,0 28,1.4326888 28,3.2 L28,24.8 C28,26.5673112 26.5673112,28 24.8,28 L3.2,28 C1.4326888,28 0,26.5673112 0,24.8 L0,3.2 C0,1.4326888 1.4326888,0 3.2,0 L24.8,0 Z M24.8,1 L3.2,1 C1.98497355,1 1,1.98497355 1,3.2 L1,24.8 C1,26.0150264 1.98497355,27 3.2,27 L24.8,27 C26.0150264,27 27,26.0150264 27,24.8 L27,3.2 C27,1.98497355 26.0150264,1 24.8,1 Z\" id=\"蒙版\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n <g id=\"编组-33\" transform=\"translate(5.444444, 5.833333)\">\n <path d=\"M2.8,0 L13.6296746,0 C13.8874075,-9.63561613e-16 14.0963413,0.208933783 14.0963413,0.466666667 C14.0963413,0.72439955 13.8874075,0.933333333 13.6296746,0.933333333 L2.8,0.933333333 C2.54226712,0.933333333 2.33333333,0.72439955 2.33333333,0.466666667 C2.33333333,0.208933783 2.54226712,4.73447626e-17 2.8,0 Z\" id=\"矩形备份-81\" fill=\"#CACACA\"></path>\n <path d=\"M5.03699206,11.6666667 L15.8666667,11.6666667 C16.1243995,11.6666667 16.3333333,11.8756005 16.3333333,12.1333333 C16.3333333,12.3910662 16.1243995,12.6 15.8666667,12.6 L5.03699206,12.6 C4.77925918,12.6 4.5703254,12.3910662 4.5703254,12.1333333 C4.5703254,11.8756005 4.77925918,11.6666667 5.03699206,11.6666667 Z\" id=\"矩形备份-84\" fill=\"#CACACA\"></path>\n <path d=\"M4.27527116,3.88888889 L11.3932778,3.88888889 C11.6510107,3.88888889 11.8599445,4.09782267 11.8599445,4.35555556 C11.8599445,4.61328844 11.6510107,4.82222222 11.3932778,4.82222222 L4.27527116,4.82222222 C4.01753828,4.82222222 3.8086045,4.61328844 3.8086045,4.35555556 C3.8086045,4.09782267 4.01753828,3.88888889 4.27527116,3.88888889 Z\" id=\"矩形备份-82\" fill=\"#CACACA\"></path>\n <path d=\"M1.99010847,15.5555556 L9.10811511,15.5555556 C9.36584799,15.5555556 9.57478178,15.7644893 9.57478178,16.0222222 C9.57478178,16.2799551 9.36584799,16.4888889 9.10811511,16.4888889 L1.99010847,16.4888889 C1.73237558,16.4888889 1.5234418,16.2799551 1.5234418,16.0222222 C1.5234418,15.7644893 1.73237558,15.5555556 1.99010847,15.5555556 Z\" id=\"矩形备份-85\" fill=\"#CACACA\"></path>\n <path d=\"M0.466666667,7.77777778 L15.8666667,7.77777778 C16.1243995,7.77777778 16.3333333,7.98671156 16.3333333,8.24444444 C16.3333333,8.50217733 16.1243995,8.71111111 15.8666667,8.71111111 L0.466666667,8.71111111 C0.208933783,8.71111111 3.15631751e-17,8.50217733 0,8.24444444 C-3.15631751e-17,7.98671156 0.208933783,7.77777778 0.466666667,7.77777778 Z\" id=\"矩形备份-83\" fill=\"#AAAAAA\"></path>\n </g>\n </g>\n </g>\n </svg>\n `\n },\n {\n key: PluginMenuIcons.heading_1,\n svg: `\n <svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>H1</title>\n <g id=\"H1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"icon\">\n <rect id=\"矩形\" fill=\"#FFFFFF\" x=\"0\" y=\"0\" width=\"29\" height=\"29\" rx=\"4\"></rect>\n <path d=\"M25,0 C27.209139,0 29,1.790861 29,4 L29,25 C29,27.209139 27.209139,29 25,29 L4,29 C1.790861,29 0,27.209139 0,25 L0,4 C0,1.790861 1.790861,0 4,0 L25,0 Z M25,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,25 C1,26.6568542 2.34314575,28 4,28 L25,28 C26.6568542,28 28,26.6568542 28,25 L28,4 C28,2.34314575 26.6568542,1 25,1 Z\" id=\"矩形\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n <g id=\"1.Base基础/1.icon图标/11.editor/header-1\" transform=\"translate(7.250000, 5.638889)\" fill=\"#666666\">\n <path d=\"M0.486666667,8.8817842e-16 C0.751763347,9.50503252e-16 0.966666667,0.21490332 0.966666667,0.48 L0.966,4.188 L5.638,4.188 L5.63888889,0.48 C5.63888889,0.21490332 5.85379221,4.37275529e-16 6.11888889,8.8817842e-16 C6.39065224,8.3948095e-16 6.60555556,0.21490332 6.60555556,0.48 L6.60555556,9.18666667 C6.60555556,9.45176335 6.39065224,9.66666667 6.12555556,9.66666667 C5.85379221,9.66666667 5.63888889,9.45176335 5.63888889,9.18666667 L5.638,5.155 L0.966,5.155 L0.966666667,9.18666667 C0.966666667,9.45176335 0.751763347,9.66666667 0.486666667,9.66666667 C0.21490332,9.66666667 -8.5571344e-16,9.45176335 -8.8817842e-16,9.18666667 L-8.8817842e-16,0.48 C-9.206434e-16,0.21490332 0.21490332,5.48297831e-16 0.48,8.8817842e-16 Z M10.1533333,3.25323092 C10.41843,3.25323092 10.6333333,3.46813424 10.6333333,3.73323092 L10.6332222,8.69923092 L11.5222222,8.7 C11.7431361,8.7 11.9222222,8.8790861 11.9222222,9.1 L11.9222222,9.26666667 C11.9222222,9.48758057 11.7431361,9.66666667 11.5222222,9.66666667 L8.69722222,9.66666667 C8.47630832,9.66666667 8.29722222,9.48758057 8.29722222,9.26666667 L8.29722222,9.1 C8.29722222,8.8790861 8.47630832,8.7 8.69722222,8.7 L9.66622222,8.69923092 L9.66661166,4.83023092 L9.22952121,5.2392987 C9.05879467,5.39859668 8.80335832,5.41040234 8.62020432,5.28015221 L8.54649699,5.21554647 C8.36443045,5.02030401 8.37506666,4.7144468 8.57025613,4.53232345 L9.78398904,3.39983871 C9.81813435,3.36797911 9.85566805,3.3420192 9.8953342,3.3219155 C9.96893129,3.27904764 10.0547841,3.25323092 10.1466667,3.25323092 Z\" id=\"形状结合\"></path>\n </g>\n <path d=\"M6.92777778,22.5555556 L14.8222222,22.5555556 C15.0891599,22.5555556 15.3055556,22.7719513 15.3055556,23.0388889 C15.3055556,23.3058265 15.0891599,23.5222222 14.8222222,23.5222222 L6.92777778,23.5222222 C6.66084015,23.5222222 6.44444444,23.3058265 6.44444444,23.0388889 C6.44444444,22.7719513 6.66084015,22.5555556 6.92777778,22.5555556 Z M6.92777778,19.3333333 L22.0722222,19.3333333 C22.3391599,19.3333333 22.5555556,19.549729 22.5555556,19.8166667 C22.5555556,20.0836043 22.3391599,20.3 22.0722222,20.3 L6.92777778,20.3 C6.66084015,20.3 6.44444444,20.0836043 6.44444444,19.8166667 C6.44444444,19.549729 6.66084015,19.3333333 6.92777778,19.3333333 Z\" id=\"形状结合\" fill=\"#CACACA\"></path>\n </g>\n </g>\n </svg>\n `\n },\n {\n key: PluginMenuIcons.heading_2,\n svg: `\n <svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>H2</title>\n <g id=\"H2\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"icon\">\n <rect id=\"矩形\" fill=\"#FFFFFF\" x=\"0\" y=\"0\" width=\"29\" height=\"29\" rx=\"4\"></rect>\n <path d=\"M25,0 C27.209139,0 29,1.790861 29,4 L29,25 C29,27.209139 27.209139,29 25,29 L4,29 C1.790861,29 0,27.209139 0,25 L0,4 C0,1.790861 1.790861,0 4,0 L25,0 Z M25,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,25 C1,26.6568542 2.34314575,28 4,28 L25,28 C26.6568542,28 28,26.6568542 28,25 L28,4 C28,2.34314575 26.6568542,1 25,1 Z\" id=\"矩形\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n <g id=\"1.Base基础/1.icon图标/11.editor/header-1\" transform=\"translate(6.444444, 4.027778)\" fill=\"#666666\">\n <path d=\"M1.29222222,1.61111111 C1.5573189,1.61111111 1.77222222,1.82601443 1.77222222,2.09111111 L1.77155556,5.79911111 L6.44355556,5.79911111 L6.44444444,2.09111111 C6.44444444,1.82601443 6.65934776,1.61111111 6.92444444,1.61111111 C7.19620779,1.61111111 7.41111111,1.82601443 7.41111111,2.09111111 L7.41111111,10.7977778 C7.41111111,11.0628745 7.19620779,11.2777778 6.93111111,11.2777778 C6.65934776,11.2777778 6.44444444,11.0628745 6.44444444,10.7977778 L6.44355556,6.76611111 L1.77155556,6.76611111 L1.77222222,10.7977778 C1.77222222,11.0628745 1.5573189,11.2777778 1.29222222,11.2777778 C1.02045888,11.2777778 0.805555556,11.0628745 0.805555556,10.7977778 L0.805555556,2.09111111 C0.805555556,1.82601443 1.02045888,1.61111111 1.28555556,1.61111111 Z M8.54294866,10.4032326 C8.46549728,10.9453191 8.88653734,11.2093734 9.4040306,11.163087 L11.8695555,11.1650088 C12.1364932,11.1650088 12.3528889,10.9486131 12.3528889,10.6816755 C12.3528889,10.4147378 12.1364932,10.1983421 11.8695555,10.1983421 L9.55217211,10.1983421 C9.60918772,9.92829744 9.70569542,9.74900596 9.9446738,9.49220573 C9.97197905,9.46286418 10.0006812,9.4338407 10.0308266,9.40514925 C10.0679212,9.3698437 10.1057089,9.33674814 10.1448148,9.30516195 C10.2581667,9.2136064 10.3681121,9.14331129 10.5709549,9.02767503 C11.2068418,8.66516981 11.4676596,8.47753842 11.8884967,7.99593234 C12.6911804,7.07734092 12.3931352,5.55838894 11.128364,5.0741833 C10.5598979,4.85655145 9.85150899,4.9436238 9.27174711,5.27959293 C9.01795716,5.42666295 8.80133283,5.6322987 8.62349658,5.89139752 C8.47243845,6.11148191 8.52839529,6.41235237 8.74847967,6.5634105 C8.96856406,6.71446863 9.26943452,6.6585118 9.42049266,6.43842741 C9.51915996,6.29467392 9.63059666,6.18889 9.7564252,6.11597299 C10.0954248,5.91952439 10.5021542,5.86953083 10.7827471,5.97695316 C11.3954703,6.21152839 11.5364026,6.92977344 11.1605804,7.35986444 C10.8276846,7.74083056 10.6416645,7.87465269 10.0922091,8.18788523 C9.84765548,8.32729991 9.70077752,8.42120842 9.53741414,8.55315866 C9.47812108,8.60105026 9.42063041,8.65140227 9.36438446,8.70493545 C9.32009556,8.74708828 9.2776503,8.79000875 9.23702309,8.83366574 C8.95040764,9.14165557 8.76259006,9.47514822 8.65373667,9.8216451 C8.61323435,9.95057013 8.58575819,10.0744594 8.56723778,10.1981068 C8.55807029,10.2593115 8.54386212,10.3912347 8.54294866,10.4032326 Z\" id=\"形状结合\"></path>\n </g>\n <path d=\"M6.92777778,22.5555556 L14.8222222,22.5555556 C15.0891599,22.5555556 15.3055556,22.7719513 15.3055556,23.0388889 C15.3055556,23.3058265 15.0891599,23.5222222 14.8222222,23.5222222 L6.92777778,23.5222222 C6.66084015,23.5222222 6.44444444,23.3058265 6.44444444,23.0388889 C6.44444444,22.7719513 6.66084015,22.5555556 6.92777778,22.5555556 Z M6.92777778,19.3333333 L22.0722222,19.3333333 C22.3391599,19.3333333 22.5555556,19.549729 22.5555556,19.8166667 C22.5555556,20.0836043 22.3391599,20.3 22.0722222,20.3 L6.92777778,20.3 C6.66084015,20.3 6.44444444,20.0836043 6.44444444,19.8166667 C6.44444444,19.549729 6.66084015,19.3333333 6.92777778,19.3333333 Z\" id=\"形状结合\" fill=\"#CACACA\"></path>\n </g>\n </g>\n </svg>\n `\n },\n {\n key: PluginMenuIcons.heading_3,\n svg: `\n <svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>H3</title>\n <g id=\"H3\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"icon\">\n <rect id=\"矩形\" fill=\"#FFFFFF\" x=\"0\" y=\"0\" width=\"29\" height=\"29\" rx=\"4\"></rect>\n <path d=\"M25,0 C27.209139,0 29,1.790861 29,4 L29,25 C29,27.209139 27.209139,29 25,29 L4,29 C1.790861,29 0,27.209139 0,25 L0,4 C0,1.790861 1.790861,0 4,0 L25,0 Z M25,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,25 C1,26.6568542 2.34314575,28 4,28 L25,28 C26.6568542,28 28,26.6568542 28,25 L28,4 C28,2.34314575 26.6568542,1 25,1 Z\" id=\"矩形\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n <g id=\"1.Base基础/1.icon图标/11.editor/header-1\" transform=\"translate(6.444444, 4.027778)\" fill=\"#666666\">\n <path d=\"M1.29222222,1.61111111 C1.5573189,1.61111111 1.77222222,1.82601443 1.77222222,2.09111111 L1.77155556,5.79911111 L6.44355556,5.79911111 L6.44444444,2.09111111 C6.44444444,1.82601443 6.65934776,1.61111111 6.92444444,1.61111111 C7.19620779,1.61111111 7.41111111,1.82601443 7.41111111,2.09111111 L7.41111111,10.7977778 C7.41111111,11.0628745 7.19620779,11.2777778 6.93111111,11.2777778 C6.65934776,11.2777778 6.44444444,11.0628745 6.44444444,10.7977778 L6.44355556,6.76611111 L1.77155556,6.76611111 L1.77222222,10.7977778 C1.77222222,11.0628745 1.5573189,11.2777778 1.29222222,11.2777778 C1.02045888,11.2777778 0.805555556,11.0628745 0.805555556,10.7977778 L0.805555556,2.09111111 C0.805555556,1.82601443 1.02045888,1.61111111 1.28555556,1.61111111 Z M11.948143,5.79180879 C12.192703,5.47396858 11.9661194,5.01373083 11.5650807,5.01373083 L8.88060052,5.01373083 C8.61366289,5.01373083 8.39726719,5.23012653 8.39726719,5.49706416 C8.39726719,5.76400179 8.61366289,5.98039749 8.88060052,5.98039749 L10.5833317,5.98039749 L9.54636273,7.32808515 C9.48134505,7.4125848 9.44609168,7.51621136 9.44609168,7.62282979 L9.44609168,7.91799037 C9.44609168,8.18980116 9.670148,8.40816141 9.94186869,8.4011635 C10.2134677,8.39416871 10.4585479,8.42132967 10.6774338,8.48206912 C11.0681589,8.59049288 11.2956745,9.04295787 11.144216,9.57106622 C11.0337145,9.95636505 10.6647495,10.1691949 10.1647748,10.1691949 C9.70164909,10.1691949 9.23540718,9.99918387 8.75794251,9.65224072 C8.54199506,9.49532547 8.23973012,9.54318053 8.08281487,9.75912798 C7.92589961,9.97507543 7.97375467,10.2773404 8.18970212,10.4342556 C8.83030566,10.8997414 9.49159006,11.1358616 10.1647748,11.1358616 C11.0993241,11.1358616 11.830095,10.6860003 12.0734236,9.83755774 C12.3756837,8.78363144 11.8418254,7.80198592 10.9359105,7.55060026 C10.8414661,7.52439254 10.7445514,7.50259363 10.6451818,7.48519091 L11.948143,5.79180879 Z\" id=\"形状结合\"></path>\n </g>\n <path d=\"M6.92777778,22.5555556 L14.8222222,22.5555556 C15.0891599,22.5555556 15.3055556,22.7719513 15.3055556,23.0388889 C15.3055556,23.3058265 15.0891599,23.5222222 14.8222222,23.5222222 L6.92777778,23.5222222 C6.66084015,23.5222222 6.44444444,23.3058265 6.44444444,23.0388889 C6.44444444,22.7719513 6.66084015,22.5555556 6.92777778,22.5555556 Z M6.92777778,19.3333333 L22.0722222,19.3333333 C22.3391599,19.3333333 22.5555556,19.549729 22.5555556,19.8166667 C22.5555556,20.0836043 22.3391599,20.3 22.0722222,20.3 L6.92777778,20.3 C6.66084015,20.3 6.44444444,20.0836043 6.44444444,19.8166667 C6.44444444,19.549729 6.66084015,19.3333333 6.92777778,19.3333333 Z\" id=\"形状结合\" fill=\"#CACACA\"></path>\n </g>\n </g>\n </svg>\n `\n },\n {\n key: PluginMenuIcons.heading_4,\n svg: `\n <svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>H4</title>\n <g id=\"H4\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"icon\">\n <rect id=\"矩形\" fill=\"#FFFFFF\" x=\"0\" y=\"0\" width=\"29\" height=\"29\" rx=\"4\"></rect>\n <path d=\"M25,0 C27.209139,0 29,1.790861 29,4 L29,25 C29,27.209139 27.209139,29 25,29 L4,29 C1.790861,29 0,27.209139 0,25 L0,4 C0,1.790861 1.790861,0 4,0 L25,0 Z M25,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,25 C1,26.6568542 2.34314575,28 4,28 L25,28 C26.6568542,28 28,26.6568542 28,25 L28,4 C28,2.34314575 26.6568542,1 25,1 Z\" id=\"矩形\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n <g id=\"1.Base基础/1.icon图标/11.editor/header-1\" transform=\"translate(6.444444, 4.027778)\" fill=\"#666666\">\n <path d=\"M1.29222222,1.61111111 C1.5573189,1.61111111 1.77222222,1.82601443 1.77222222,2.09111111 L1.77155556,5.79911111 L6.44355556,5.79911111 L6.44444444,2.09111111 C6.44444444,1.82601443 6.65934776,1.61111111 6.92444444,1.61111111 C7.19620779,1.61111111 7.41111111,1.82601443 7.41111111,2.09111111 L7.41111111,10.7977778 C7.41111111,11.0628745 7.19620779,11.2777778 6.93111111,11.2777778 C6.65934776,11.2777778 6.44444444,11.0628745 6.44444444,10.7977778 L6.44355556,6.76611111 L1.77155556,6.76611111 L1.77222222,10.7977778 C1.77222222,11.0628745 1.5573189,11.2777778 1.29222222,11.2777778 C1.02045888,11.2777778 0.805555556,11.0628745 0.805555556,10.7977778 L0.805555556,2.09111111 C0.805555556,1.82601443 1.02045888,1.61111111 1.28555556,1.61111111 Z M10.8019545,4.76358802 C11.0688522,4.76820431 11.2814733,4.98830989 11.276857,5.2552076 L11.227722,8.04846189 L11.9367156,8.04858418 C12.1739935,8.04858418 12.371337,8.2195635 12.4122617,8.44503773 L12.4200489,8.53191751 C12.4200489,8.79885514 12.2036532,9.01525084 11.9367156,9.01525084 L11.210722,9.01446189 L11.1806618,10.8168794 C11.1765584,11.0541218 11.0021919,11.248479 10.7760437,11.2854984 L10.6890422,11.2917819 C10.4221445,11.2871657 10.2095234,11.0670601 10.2141397,10.8001624 L10.244722,9.01446189 L8.53186071,9.01525084 C8.17452736,9.01525084 7.95025766,8.64635821 8.08952304,8.3363514 L8.12821939,8.26605139 L10.2919929,4.98098295 C10.3949928,4.82460722 10.5732365,4.74757228 10.7474255,4.7661967 Z M10.260722,8.04846189 L10.283722,6.75046189 L9.42897666,8.04858418 L10.260722,8.04846189 Z\" id=\"形状结合\"></path>\n </g>\n <path d=\"M6.92777778,22.5555556 L14.8222222,22.5555556 C15.0891599,22.5555556 15.3055556,22.7719513 15.3055556,23.0388889 C15.3055556,23.3058265 15.0891599,23.5222222 14.8222222,23.5222222 L6.92777778,23.5222222 C6.66084015,23.5222222 6.44444444,23.3058265 6.44444444,23.0388889 C6.44444444,22.7719513 6.66084015,22.5555556 6.92777778,22.5555556 Z M6.92777778,19.3333333 L22.0722222,19.3333333 C22.3391599,19.3333333 22.5555556,19.549729 22.5555556,19.8166667 C22.5555556,20.0836043 22.3391599,20.3 22.0722222,20.3 L6.92777778,20.3 C6.66084015,20.3 6.44444444,20.0836043 6.44444444,19.8166667 C6.44444444,19.549729 6.66084015,19.3333333 6.92777778,19.3333333 Z\" id=\"形状结合\" fill=\"#CACACA\"></path>\n </g>\n </g>\n </svg>\n `\n },\n {\n key: PluginMenuIcons.bulletedList,\n svg: `\n <svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>无序列表</title>\n <g id=\"无序列表\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"icon\">\n <rect id=\"矩形\" fill=\"#FFFFFF\" x=\"0\" y=\"0\" width=\"29\" height=\"29\" rx=\"4\"></rect>\n <path d=\"M25,0 C27.209139,0 29,1.790861 29,4 L29,25 C29,27.209139 27.209139,29 25,29 L4,29 C1.790861,29 0,27.209139 0,25 L0,4 C0,1.790861 1.790861,0 4,0 L25,0 Z M25,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,25 C1,26.6568542 2.34314575,28 4,28 L25,28 C26.6568542,28 28,26.6568542 28,25 L28,4 C28,2.34314575 26.6568542,1 25,1 Z\" id=\"矩形\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n <g id=\"1.icon图标/11.editor/-save备份-32\" transform=\"translate(6.444444, 7.250000)\">\n <circle id=\"椭圆形\" fill=\"#666666\" cx=\"1.20833333\" cy=\"1.20833333\" r=\"1.20833333\"></circle>\n <circle id=\"椭圆形备份\" fill=\"#666666\" cx=\"1.20833333\" cy=\"7.25\" r=\"1.20833333\"></circle>\n <circle id=\"椭圆形备份-2\" fill=\"#666666\" cx=\"1.20833333\" cy=\"13.2916667\" r=\"1.20833333\"></circle>\n <g id=\"编组-2\" transform=\"translate(5.638889, 0.805556)\" fill=\"#CACACA\">\n <path d=\"M0.483185877,6.0896638 L6.76681412,6.0896638 C7.03367031,6.0896638 7.25,6.30599348 7.25,6.57284968 C7.25,6.83970587 7.03367031,7.05603555 6.76681412,7.05603555 L0.483185877,7.05603555 C0.216329686,7.05603555 3.2680458e-17,6.83970587 0,6.57284968 C-3.2680458e-17,6.30599348 0.216329686,6.0896638 0.483185877,6.0896638 Z\" id=\"矩形备份-74\"></path>\n <path d=\"M0.483185877,0 L9.98903635,0 C10.2558925,5.01716756e-16 10.4722222,0.216329686 10.4722222,0.483185877 C10.4722222,0.750042068 10.2558925,0.966371753 9.98903635,0.966371753 L0.483185877,0.966371753 C0.216329686,0.966371753 3.2680458e-17,0.750042068 0,0.483185877 C-3.2680458e-17,0.216329686 0.216329686,1.04531838e-16 0.483185877,0 Z\" id=\"矩形备份-75\"></path>\n <path d=\"M0.483185877,12.0833333 L9.98903635,12.0833333 C10.2558925,12.0833333 10.4722222,12.299663 10.4722222,12.5665192 C10.4722222,12.8333754 10.2558925,13.0497051 9.98903635,13.0497051 L0.483185877,13.0497051 C0.216329686,13.0497051 3.2680458e-17,12.8333754 0,12.5665192 C-3.2680458e-17,12.299663 0.216329686,12.0833333 0.483185877,12.0833333 Z\" id=\"矩形备份-77\"></path>\n </g>\n </g>\n </g>\n </g>\n </svg>\n `\n },\n {\n key: PluginMenuIcons.numberedList,\n svg: `\n <svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>有序列表</title>\n <g id=\"有序列表\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"icon\">\n <rect id=\"矩形\" fill=\"#FFFFFF\" x=\"0\" y=\"0\" width=\"29\" height=\"29\" rx=\"4\"></rect>\n <path d=\"M25,0 C27.209139,0 29,1.790861 29,4 L29,25 C29,27.209139 27.209139,29 25,29 L4,29 C1.790861,29 0,27.209139 0,25 L0,4 C0,1.790861 1.790861,0 4,0 L25,0 Z M25,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,25 C1,26.6568542 2.34314575,28 4,28 L25,28 C26.6568542,28 28,26.6568542 28,25 L28,4 C28,2.34314575 26.6568542,1 25,1 Z\" id=\"矩形\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n <g id=\"1.icon图标/11.editor/-save备份-32\" transform=\"translate(6.444444, 6.444444)\">\n <path d=\"M1.04017606,1.15763283 L1.04017606,3.82018834 L2.08035212,3.82018834 L2.08035212,0 L1.27132629,0 L0,0.810342981 L0.462300471,1.62068596 L1.04017606,1.15763283 Z M0.115575118,6.83003369 L0.809025824,7.40885011 C0.924600942,7.17732354 1.15575118,7.06156026 1.27132629,7.06156026 C1.38690141,7.06156026 1.38690141,7.06156026 1.50247653,7.17732354 C1.61805165,7.29308683 1.61805165,7.29308683 1.61805165,7.40885011 C1.61805165,7.52461339 1.61805165,7.64037668 1.50247653,7.75613996 C1.38690141,7.87190324 1.27132629,7.98766652 1.15575118,8.21919309 L0.115575118,9.37682592 L0.115575118,10.0714056 L2.65822771,10.0714056 L2.65822771,9.14529935 L1.50247653,9.14529935 L1.964777,8.68224622 C2.31150235,8.33495637 2.54265259,8.10342981 2.54265259,7.87190324 C2.65822771,7.64037668 2.65822771,7.52461339 2.65822771,7.29308683 C2.65822771,6.94579698 2.54265259,6.71427041 2.31150235,6.48274385 C2.08035212,6.25121728 1.73362677,6.135454 1.38690141,6.135454 C0.809025824,6.135454 0.346725353,6.36698056 0.115575118,6.83003369 Z M2.19592724,14.2388838 C2.54265259,14.0073572 2.65822771,13.7758307 2.65822771,13.3127775 C2.65822771,12.9654877 2.54265259,12.7339611 2.31150235,12.5024346 C2.08035212,12.270908 1.73362677,12.270908 1.38690141,12.270908 C1.15575118,12.270908 0.809025824,12.3866713 0.577875589,12.5024346 C0.346725353,12.6181978 0.231150235,12.8497244 0.115575118,13.081251 L0.924600942,13.5443041 C1.04017606,13.3127775 1.15575118,13.1970143 1.38690141,13.1970143 C1.50247653,13.1970143 1.61805165,13.1970143 1.61805165,13.3127775 C1.73362677,13.3127775 1.73362677,13.4285408 1.73362677,13.5443041 C1.73362677,13.6600674 1.73362677,13.6600674 1.61805165,13.7758307 C1.50247653,13.7758307 1.50247653,13.891594 1.38690141,13.891594 L1.04017606,13.891594 L1.04017606,14.7019369 L1.27132629,14.7019369 C1.38690141,14.7019369 1.50247653,14.7019369 1.61805165,14.8177002 C1.73362677,14.9334635 1.73362677,14.9334635 1.73362677,15.0492268 C1.73362677,15.1649901 1.73362677,15.2807534 1.61805165,15.2807534 C1.50247653,15.3965166 1.50247653,15.3965166 1.38690141,15.3965166 C1.15575118,15.3965166 1.04017606,15.2807534 0.924600942,15.0492268 L0,15.2807534 C0.115575118,15.5122799 0.231150235,15.7438065 0.577875589,15.975333 C0.809025824,16.0910963 1.15575118,16.2068596 1.50247653,16.2068596 C1.84920188,16.2068596 2.19592724,16.0910963 2.42707747,15.8595698 C2.65822771,15.6280432 2.77380283,15.3965166 2.77380283,15.0492268 C2.77380283,14.7019369 2.54265259,14.3546471 2.19592724,14.2388838 Z\" id=\"合并形状\" fill=\"#666666\" fill-rule=\"nonzero\"></path>\n <g id=\"编组-2\" transform=\"translate(5.638889, 1.611111)\" fill=\"#CACACA\">\n <path d=\"M0.483185877,6.0896638 L6.76681412,6.0896638 C7.03367031,6.0896638 7.25,6.30599348 7.25,6.57284968 C7.25,6.83970587 7.03367031,7.05603555 6.76681412,7.05603555 L0.483185877,7.05603555 C0.216329686,7.05603555 3.2680458e-17,6.83970587 0,6.57284968 C-3.2680458e-17,6.30599348 0.216329686,6.0896638 0.483185877,6.0896638 Z\" id=\"矩形备份-74\"></path>\n <path d=\"M0.483185877,0 L9.98903635,0 C10.2558925,5.01716756e-16 10.4722222,0.216329686 10.4722222,0.483185877 C10.4722222,0.750042068 10.2558925,0.966371753 9.98903635,0.966371753 L0.483185877,0.966371753 C0.216329686,0.966371753 3.2680458e-17,0.750042068 0,0.483185877 C-3.2680458e-17,0.216329686 0.216329686,1.04531838e-16 0.483185877,0 Z\" id=\"矩形备份-75\"></path>\n <path d=\"M0.483185877,12.0833333 L9.98903635,12.0833333 C10.2558925,12.0833333 10.4722222,12.299663 10.4722222,12.5665192 C10.4722222,12.8333754 10.2558925,13.0497051 9.98903635,13.0497051 L0.483185877,13.0497051 C0.216329686,13.0497051 3.2680458e-17,12.8333754 0,12.5665192 C-3.2680458e-17,12.299663 0.216329686,12.0833333 0.483185877,12.0833333 Z\" id=\"矩形备份-77\"></path>\n </g>\n </g>\n </g>\n </g>\n </svg>\n `\n },\n {\n key: PluginMenuIcons.link,\n svg: `\n <svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>链接</title>\n <g id=\"链接\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"icon\">\n <rect id=\"矩形\" fill=\"#FFFFFF\" x=\"0\" y=\"0\" width=\"29\" height=\"29\" rx=\"4\"></rect>\n <path d=\"M25,0 C27.209139,0 29,1.790861 29,4 L29,25 C29,27.209139 27.209139,29 25,29 L4,29 C1.790861,29 0,27.209139 0,25 L0,4 C0,1.790861 1.790861,0 4,0 L25,0 Z M25,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,25 C1,26.6568542 2.34314575,28 4,28 L25,28 C26.6568542,28 28,26.6568542 28,25 L28,4 C28,2.34314575 26.6568542,1 25,1 Z\" id=\"矩形\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n <g id=\"编组-5\" transform=\"translate(4.027778, 8.055556)\">\n <path d=\"M15.0350681,6.34736082 L17.4060977,6.34736082 C17.6730353,6.34736082 17.889431,6.56375652 17.889431,6.83069415 C17.889431,7.09763178 17.6730353,7.31402748 17.4060977,7.31402748 L15.0350681,7.31402748 C14.7681305,7.31402748 14.5517348,7.09763178 14.5517348,6.83069415 C14.5517348,6.56375652 14.7681305,6.34736082 15.0350681,6.34736082 Z\" id=\"矩形备份-76\" fill=\"#73D897\"></path>\n <path d=\"M15.0350681,1.84691117 L19.6555556,1.84691117 C19.9224932,1.84691117 20.1388889,2.06330687 20.1388889,2.3302445 C20.1388889,2.59718213 19.9224932,2.81357784 19.6555556,2.81357784 L15.0350681,2.81357784 C14.7681305,2.81357784 14.5517348,2.59718213 14.5517348,2.3302445 C14.5517348,2.06330687 14.7681305,1.84691117 15.0350681,1.84691117 Z\" id=\"矩形备份-89\" fill=\"#6698FF\"></path>\n <path d=\"M15.0350681,10.8478105 L19.6555556,10.8478105 C19.9224932,10.8478105 20.1388889,11.0642062 20.1388889,11.3311438 C20.1388889,11.5980814 19.9224932,11.8144771 19.6555556,11.8144771 L15.0350681,11.8144771 C14.7681305,11.8144771 14.5517348,11.5980814 14.5517348,11.3311438 C14.5517348,11.0642062 14.7681305,10.8478105 15.0350681,10.8478105 Z\" id=\"矩形备份-91\" fill=\"#FF7575\"></path>\n <g id=\"1.Base基础/1.icon图标/11.editor/link-insert\" transform=\"translate(-0.805556, -0.805556)\" fill=\"#DDDDDD\">\n <path d=\"M7.45355719,4.93747921 C9.23314138,4.93747921 10.6757794,6.38011724 10.6757794,8.15970143 L10.6757794,11.3819237 C10.6757794,13.1615078 9.23314138,14.6041459 7.45355719,14.6041459 C5.673973,14.6041459 4.23133497,13.1615078 4.23133497,11.3819237 L4.23177941,10.5771459 L5.19877941,10.5771459 L5.19800164,11.3819237 C5.19800164,12.6276326 6.20784825,13.6374792 7.45355719,13.6374792 C8.69926613,13.6374792 9.70911275,12.6276326 9.70911275,11.3819237 L9.70911275,8.15970143 C9.70911275,6.9139925 8.69926613,5.90414588 7.45355719,5.90414588 L7.45355719,4.93747921 Z M7.45355719,0.104145876 C9.23314138,0.104145876 10.6757794,1.5467839 10.6757794,3.3263681 L10.675335,4.13114588 L9.70833497,4.13114588 L9.70911275,3.3263681 C9.70911275,2.08065916 8.69926613,1.07081254 7.45355719,1.07081254 C6.20784825,1.07081254 5.19800164,2.08065916 5.19800164,3.3263681 L5.19800164,6.54859032 C5.19800164,7.79429926 6.20784825,8.80414588 7.45355719,8.80414588 L7.45355719,9.77081254 C5.673973,9.77081254 4.23133497,8.32817451 4.23133497,6.54859032 L4.23133497,3.3263681 C4.23133497,1.5467839 5.673973,0.104145876 7.45355719,0.104145876 Z\" id=\"形状结合\" transform=\"translate(7.453557, 7.354146) rotate(46.000000) translate(-7.453557, -7.354146) \"></path>\n </g>\n </g>\n </g>\n </g>\n </svg>\n `\n },\n {\n key: PluginMenuIcons.checkItem,\n svg: `\n <svg width=\"28px\" height=\"28px\" viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>待办事项</title>\n <g id=\"待办事项\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"icon备份-2\">\n <rect id=\"矩形\" fill=\"#FFFFFF\" x=\"0\" y=\"0\" width=\"29\" height=\"29\" rx=\"4\"></rect>\n <path d=\"M25,0 C27.209139,0 29,1.790861 29,4 L29,25 C29,27.209139 27.209139,29 25,29 L4,29 C1.790861,29 0,27.209139 0,25 L0,4 C0,1.790861 1.790861,0 4,0 L25,0 Z M25,1 L4,1 C2.34314575,1 1,2.34314575 1,4 L1,25 C1,26.6568542 2.34314575,28 4,28 L25,28 C26.6568542,28 28,26.6568542 28,25 L28,4 C28,2.34314575 26.6568542,1 25,1 Z\" id=\"矩形\" fill=\"#EEEEEE\" fill-rule=\"nonzero\"></path>\n <g id=\"编组-4\" transform=\"translate(4.027778, 9.666667)\">\n <g id=\"编组-3\" transform=\"translate(12.808333, 0.000000)\" fill=\"#CACACA\">\n <path d=\"M0.483333333,4.50044965 L2.85436291,4.50044965 C3.12130054,4.50044965 3.33769625,4.71684535 3.33769625,4.98378298 C3.33769625,5.25072061 3.12130054,5.46711632 2.85436291,5.46711632 L0.483333333,5.46711632 C0.216395704,5.46711632 1.46532971e-12,5.25072061 1.46529702e-12,4.98378298 C1.46526433e-12,4.71684535 0.216395704,4.50044965 0.483333333,4.50044965 Z\" id=\"矩形备份-74\"></path>\n <path d=\"M0.483333333,0 L5.1038208,0 C5.37075843,3.6496629e-16 5.58715414,0.216395704 5.58715414,0.483333333 C5.58715414,0.750270962 5.37075843,0.966666667 5.1038208,0.966666667 L0.483333333,0.966666667 C0.216395704,0.966666667 3.26904313e-17,0.750270962 0,0.483333333 C-3.26904313e-17,0.216395704 0.216395704,4.9035647e-17 0.483333333,0 Z\" id=\"矩形备份-75\"></path>\n <path d=\"M0.483333333,9.0008993 L5.1038208,9.0008993 C5.37075843,9.0008993 5.58715414,9.217295 5.58715414,9.48423263 C5.58715414,9.75117026 5.37075843,9.96756596 5.1038208,9.96756596 L0.483333333,9.96756596 C0.216395704,9.96756596 3.26904313e-17,9.75117026 0,9.48423263 C-3.26904313e-17,9.217295 0.216395704,9.0008993 0.483333333,9.0008993 Z\" id=\"矩形备份-77\"></path>\n </g>\n <g id=\"3.Data-Input-数据输入/-3.Checkbox-多选框-/-3.Select\" stroke=\"#6698FF\">\n <path d=\"M8.45833575,0.4 C8.68155193,0.4 8.88363194,0.49047157 9.02990764,0.636748731 C9.17618616,0.783028715 9.266657,0.985114583 9.266657,1.20833333 L9.266657,8.4583575 C9.266657,8.68157335 9.17618423,8.88365952 9.02990467,9.02994054 C8.88362938,9.17621729 8.68155079,9.26669083 8.45833575,9.26669083 L1.20831037,9.26669083 C0.985115594,9.26669083 0.783038483,9.17620636 0.63675948,9.02992458 C0.490483285,8.88364561 0.4,8.68156715 0.4,8.4583575 L0.4,1.20833333 C0.4,0.985120782 0.490481351,0.783042629 0.63675651,0.636764691 C0.783035922,0.4904825 0.985114455,0.4 1.20831037,0.4 L8.45833575,0.4 Z\" id=\"圆角矩形-12-拷贝-12\" stroke-width=\"0.8\" fill=\"#6698FF\" opacity=\"0.300000012\"></path>\n <polyline id=\"路径\" stroke-width=\"1.2\" points=\"2.41667271 4.30160205 4.22917271 6.11410205 7.12315464 3.02084542\"></polyline>\n </g>\n </g>\n </g>\n </g>\n </svg>\n `\n }\n];\n\nlet THE_DEFAULT_MENU_ICONS_HAS_INITIALIZED = false;\nexport const initializeDefaultMenuIcons = (iconRegistry: ThyIconRegistry) => {\n if (!THE_DEFAULT_MENU_ICONS_HAS_INITIALIZED) {\n THE_DEFAULT_MENU_ICONS_HAS_INITIALIZED = true;\n PluginMenuSvgs.forEach(menuItem => {\n iconRegistry.addSvgIconLiteral(menuItem.key, menuItem.svg);\n });\n }\n};\n","export type ColorType = string;\n\nexport const SpecialBackgroundColor = '#FFFFFF';\n\nexport const TableHeaderBackgroundColor = '#F3F3F3';\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Element } from 'slate';\nimport { Alignment } from './constants/node-types';\n\n@Pipe({\n name: 'elementStyle'\n})\nexport class ElementStylePipe implements PipeTransform {\n transform(element: Element, align?: Alignment) {\n const style: { [key: string]: string } = {};\n if (element.align || align) {\n style.textAlign = (element.align as string) || align || Alignment.left;\n }\n if (element.textIndent) {\n style.textIndent = element.textIndent + 'em';\n }\n return style;\n }\n}\n\n@Pipe({\n name: 'elementClass'\n})\nexport class ElementClassPipe implements PipeTransform {\n transform(element: Element) {\n let classStr = '';\n const prefix = 'indent';\n if (element.textIndent) {\n classStr += `${prefix}-${element.textIndent}`;\n }\n return classStr;\n }\n}\n\n@Pipe({\n name: 'getMenuIcon'\n})\nexport class PluginMenuPipe implements PipeTransform {\n transform(icon: string | ((sceneKey?: string) => string), sceneKey?: string) {\n if (typeof icon === 'function') {\n return icon(sceneKey);\n }\n return icon;\n }\n}\n","import { Component, ChangeDetectionStrategy, ViewChild, TemplateRef } from '@angular/core';\nimport { Element } from 'slate';\nimport { ElementKinds } from '../../constants';\n\n@Component({\n selector: 'the-template,[theTemplate]',\n templateUrl: 'template.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheTemplateComponent {\n @ViewChild('paragraph', { read: TemplateRef, static: true })\n paragraphTemplate: TemplateRef<any>;\n\n @ViewChild('headingOne', { read: TemplateRef, static: true })\n headingOneTemplate: TemplateRef<any>;\n\n @ViewChild('headingTwo', { read: TemplateRef, static: true })\n headingTwoTemplate: TemplateRef<any>;\n\n @ViewChild('headingThree', { read: TemplateRef, static: true })\n headingThreeTemplate: TemplateRef<any>;\n\n @ViewChild('headingFour', { read: TemplateRef, static: true })\n headingFourTemplate: TemplateRef<any>;\n\n @ViewChild('headingFive', { read: TemplateRef, static: true })\n headingFiveTemplate: TemplateRef<any>;\n\n @ViewChild('headingSix', { read: TemplateRef, static: true })\n headingSixTemplate: TemplateRef<any>;\n\n public renderElement = (element: Element) => {\n if (element.type === ElementKinds.default) {\n return this.paragraphTemplate;\n }\n if (element.type === ElementKinds.heading_1) {\n return this.headingOneTemplate;\n }\n if (element.type === ElementKinds.heading_2) {\n return this.headingTwoTemplate;\n }\n if (element.type === ElementKinds.heading_3) {\n return this.headingThreeTemplate;\n }\n if (element.type === ElementKinds.heading_4) {\n return this.headingFourTemplate;\n }\n if (element.type === ElementKinds.heading_5) {\n return this.headingFiveTemplate;\n }\n if (element.type === ElementKinds.heading_6) {\n return this.headingSixTemplate;\n }\n return null;\n };\n}\n","<ng-template #paragraph let-context=\"context\" let-viewContext=\"viewContext\">\n <div theDefaultElement [context]=\"context\" [viewContext]=\"viewContext\" [ngStyle]=\"context.element | elementStyle\"></div>\n</ng-template>\n<ng-template #headingOne let-context=\"context\" let-viewContext=\"viewContext\">\n <h1\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h1>\n</ng-template>\n<ng-template #headingTwo let-context=\"context\" let-viewContext=\"viewContext\">\n <h2\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h2>\n</ng-template>\n<ng-template #headingThree let-context=\"context\" let-viewContext=\"viewContext\">\n <h3\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h3>\n</ng-template>\n<ng-template #headingFour let-context=\"context\" let-viewContext=\"viewContext\">\n <h4\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h4>\n</ng-template>\n<ng-template #headingFive let-context=\"context\" let-viewContext=\"viewContext\">\n <h5\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h5>\n</ng-template>\n<ng-template #headingSix let-context=\"context\" let-viewContext=\"viewContext\">\n <h6\n theDefaultElement\n [context]=\"context\"\n [viewContext]=\"viewContext\"\n [attr.id]=\"context.element.key\"\n [ngStyle]=\"context.element | elementStyle\"\n ></h6>\n</ng-template>\n","import { ChangeDetectorRef, Component, ElementRef, Renderer2 } from '@angular/core';\nimport { BaseTextComponent } from 'slate-angular';\nimport { MarkTypes } from '../../constants';\n\n@Component({\n selector: 'span[theText]',\n template: `<slate-leaves [context]=\"context\" [viewContext]=\"viewContext\"></slate-leaves>`,\n host: {\n 'data-slate-node': 'text'\n }\n})\nexport class TheTextComponent extends BaseTextComponent {\n constructor(public elementRef: ElementRef, public renderer2: Renderer2, cdr: ChangeDetectorRef) {\n super(elementRef, cdr);\n }\n\n excludes = ['color', 'font-size', 'background-color', 'text'];\n attributes = [];\n\n applyTextMark() {\n this.attributes.forEach(attr => {\n this.renderer2.removeAttribute(this.elementRef.nativeElement, attr);\n });\n this.attributes = [];\n for (const key in this.text) {\n if (Object.prototype.hasOwnProperty.call(this.text, key) && !this.excludes.includes(key) && !!this.text[key]) {\n const attr = `the-${key}`;\n this.renderer2.setAttribute(this.elementRef.nativeElement, attr, 'true');\n this.attributes.push(attr);\n }\n }\n\n const fontSize = this.text[MarkTypes.fontSize];\n this.renderer2.setAttribute(this.elementRef.nativeElement, `the-${MarkTypes.fontSize}`, fontSize ? fontSize : null);\n\n if (this.text[MarkTypes.color]) {\n this.renderer2.setStyle(this.elementRef.nativeElement, 'color', this.text[MarkTypes.color]);\n } else {\n this.renderer2.removeStyle(this.elementRef.nativeElement, 'color');\n }\n\n if (this.text[MarkTypes.backgroundColor]) {\n this.renderer2.setStyle(this.elementRef.nativeElement, 'background-color', this.text[MarkTypes.backgroundColor]);\n } else {\n this.renderer2.removeStyle(this.elementRef.nativeElement, 'background-color');\n }\n }\n\n onContextChange() {\n super.onContextChange();\n this.applyTextMark();\n }\n}\n","import { Ancestor, Editor, Element, Node } from 'slate';\n\nexport const isAncestor = (node: Node): node is Ancestor => Element.isElement(node) || Editor.isEditor(node);\n","import { Editor, Node, NodeEntry } from 'slate';\nimport { isAncestor } from './is-ancestor';\n\nconst getLastChild = (node: Node, level: number): Node => {\n if (!(level + 1) || !isAncestor(node)) {\n return node;\n }\n\n const { children } = node;\n const lastNode = children[children.length - 1];\n\n return getLastChild(lastNode, level - 1);\n};\n\nexport const getLastNode = (editor: Editor, level: number): NodeEntry => {\n const { children } = editor;\n const lastNode = children[children.length - 1];\n const [, lastPath] = Editor.last(editor, []);\n\n return [getLastChild(lastNode, level - 1), lastPath.slice(0, level + 1)];\n};\n","import { Range } from 'slate';\n\n/**\n * See {@link Range.isCollapsed}.\n * Return false if `range` is not defined.\n */\nexport const isCollapsed = (range?: Range | null) => !!range && Range.isCollapsed(range);\n","import { Editor, NodeEntry, Path, Point, Element } from 'slate';\n\nexport const getAnchorBlockEntry = (editor: Editor, at?: Path | Point): NodeEntry<Element> => {\n return Editor.above<Element>(editor, {\n match: n => Editor.isBlock(editor, n),\n at\n });\n};\n","import { Ancestor, Editor, Node } from 'slate';\n\n/**\n * Is an ancestor empty (empty text and no inline children).\n */\nexport const isAncestorEmpty = (editor: Editor, node: Ancestor) =>\n !Node.string(node) && !node.children.some(n => Editor.isInline(editor, n));\n","import { Editor, Path, Point, Element, Node } from 'slate';\nimport { ElementKinds } from '../constants/node-types';\nimport { getAnchorBlockEntry } from './get-anchor-block-entry';\nimport { isAncestorEmpty } from './is-ancestor-empty';\n\nexport const isEmptyParagraph = (editor: Editor, at?: Path | Point) => {\n const entry = getAnchorBlockEntry(editor, at);\n if (!entry) {\n return false;\n }\n const [block] = entry;\n return Editor.isEmpty(editor, block) && block.type === ElementKinds.paragraph;\n};\n\nexport const isEmptyParagraphElement = (editor: Editor, element: Element) => {\n const isParagraph = element.type === ElementKinds.paragraph;\n const isEmpty = isAncestorEmpty(editor, element);\n return isParagraph && isEmpty;\n};\n\n/**\n * 判断元素是否是空段落,仅仅包含空格或者\\n算空段落\n * @param editor\n * @param element\n * @returns\n */\nexport const isLogicEmptyParagraphElement = (editor: Editor, element: Element) => {\n const text = Node.string(element).replace(/(\\s|\\n)*$/g, '');\n return text.length === 0 && !element.children.some(n => Editor.isInline(editor, n));\n};\n","import { Editor, Element } from 'slate';\nimport { ElementKinds } from '../constants/node-types';\n\nexport const isParagraph = (editor: Editor) => {\n const [match] = Editor.nodes(editor, {\n match: n => Element.isElement(n) && n.type === ElementKinds.paragraph\n });\n return !!match;\n};\n","import { Editor, Element } from 'slate';\nimport { CustomElementKinds } from '../custom-types';\n\nexport const isBlockActive = (editor: Editor, format: CustomElementKinds) => {\n const [match] = Editor.nodes(editor, {\n match: n => Element.isElement(n) && n.type === format\n });\n return !!match;\n};\n","import { Editor, Element } from 'slate';\nimport { EditorAboveOptions } from '../interfaces';\n\n/**\n * Get the block above a location (default: selection) by type.\n */\nexport const getAboveByType = (editor: Editor, types: string[] | string, options: Omit<EditorAboveOptions, 'match'> = {}) => {\n if (!Array.isArray(types)) {\n types = [types];\n }\n\n return Editor.above(editor, {\n match: n => Element.isElement(n) && types.includes(n.type),\n ...options\n });\n};\n","import { Editor, Element } from 'slate';\nimport { CustomElementKinds } from '../custom-types';\nimport { getAboveByType } from './get-above-by-type';\n\nexport const isIncludeTypes = (editor: Editor, types: CustomElementKinds[]) => {\n const parentType = [];\n types.map((item: string) => {\n const entry = getAboveByType(editor, item);\n if (entry) {\n parentType.push((entry[0] as Element).type);\n }\n });\n return parentType.length > 0;\n};\n","import { Editor } from 'slate';\n\nexport const getBlockCardCenterCursor = (editor: Editor) => {\n return Editor.start(editor, editor.selection.anchor.path);\n};\n","import { Editor } from 'slate';\n\nexport const isBlockCardCursor = (editor: Editor) => {\n return editor.selection.anchor.offset < 0;\n};\n","import { Editor, NodeEntry, Path, Point, Element } from 'slate';\nimport { getBlockCardCenterCursor } from './get-block-card-cursor';\nimport { isBlockCardCursor } from './is-block-card-cursor';\n\nexport const anchorBlockEntry = (editor: Editor, at?: Path | Point): NodeEntry<Element> | undefined => {\n if (!at && isBlockCardCursor(editor)) {\n at = getBlockCardCenterCursor(editor);\n }\n\n return Editor.above<Element>(editor, {\n match: n => Editor.isBlock(editor, n),\n at\n });\n};\n","import { Editor, Path, Point, Range, Span } from 'slate';\n\nexport interface UnhangRangeOptions {\n at?: Range | Path | Point | Span;\n voids?: boolean;\n unhang?: boolean;\n}\n\n/**\n * Return {@link Editor.unhangRange} if `unhang` is true and if `at` (default: selection) is a range.\n */\nexport const unhangRange = (editor: Editor, options: UnhangRangeOptions = {}) => {\n const { at = editor.selection, voids, unhang = true } = options;\n\n if (Range.isRange(at) && unhang) {\n options.at = Editor.unhangRange(editor, at, { voids });\n }\n};\n","import { Editor } from 'slate';\nimport { EditorNodesOptions } from '../interfaces';\nimport { unhangRange, UnhangRangeOptions } from '../transforms/un-hang-range';\n\nexport const getNodes = (editor: Editor, options: EditorNodesOptions & UnhangRangeOptions = {}) => {\n unhangRange(editor, options);\n\n return Editor.nodes(editor, options);\n};\n","import { Editor, Element } from 'slate';\nimport { EditorNodesOptions } from '../interfaces';\nimport { getNodes } from './get-nodes';\n\n/**\n * Get the nodes with a type included in `types` at a location (default: selection).\n */\nexport const getNodesByType = (editor: Editor, types: string[] | string, options: Omit<EditorNodesOptions, 'match'> = {}) => {\n if (!Array.isArray(types)) {\n types = [types];\n }\n\n return getNodes(editor, {\n match: n => Element.isElement(n) && types.includes(n.type as string),\n ...options\n });\n};\n","import { Editor, Element } from 'slate';\nimport { anchorBlockEntry } from './anchor-block-entry';\n\nexport const anchorBlock = (editor: Editor): Element => {\n const entry = anchorBlockEntry(editor, editor.selection.anchor);\n return entry ? entry[0] : null;\n};\n","import { Ancestor, Editor, NodeEntry } from 'slate';\nimport { EditorAboveOptions } from '../interfaces';\n\n/**\n * Get the block above a location (default: selection).\n * If not found, return the editor entry.\n */\nexport const getBlockAbove = (editor: Editor, options: Omit<EditorAboveOptions, 'match'> = {}): NodeEntry<Ancestor> =>\n Editor.above(editor, {\n match: n => Editor.isBlock(editor, n),\n ...options\n }) || [editor, []];\n","import { Editor } from 'slate';\nimport { getBlockAbove } from './get-block-above';\nimport { isAncestorEmpty } from './is-ancestor-empty';\n\n/**\n * Is the block above the selection empty.\n */\nexport const isBlockAboveEmpty = (editor: Editor) => {\n const blockEntry = getBlockAbove(editor);\n const [block] = blockEntry;\n return isAncestorEmpty(editor, block);\n};\n","import { Editor } from 'slate';\nimport { EditorNodesOptions } from '../interfaces';\nimport { getNodesByType } from './get-nodes-by-type';\n\n/**\n * Is there a node with a type included in `types` at a location (default: selection).\n */\nexport const isNodeTypeIn = (editor: Editor, types: string[] | string, options: Omit<EditorNodesOptions, 'match'> = {}) => {\n const [match] = getNodesByType(editor, types, options);\n return !!match;\n};\n","import { Path } from 'slate';\n\n/**\n * Is it the first child of the parent\n */\nexport const isFirstChild = (path: Path) => path[path.length - 1] === 0;\n","import { Path } from 'slate';\n\nexport const getPreviousPath = (path: Path): Path | undefined => {\n if (path.length === 0) return;\n\n const last = path[path.length - 1];\n\n if (last <= 0) return;\n\n return path.slice(0, -1).concat(last - 1);\n};\n","import { Editor, Node, Path } from 'slate';\n\nexport const getNode = (editor: Editor, path: Path) => {\n try {\n return Node.get(editor, path);\n } catch (err) {\n return null;\n }\n};\n","import { Ancestor, Editor, Location, NodeEntry } from 'slate';\nimport { EditorParentOptions } from '../interfaces';\n\n/**\n * See {@link Editor.parent}.\n * Returns undefined if there is no parent.\n */\nexport const getParent = (editor: Editor, at: Location, options?: EditorParentOptions): NodeEntry<Ancestor> | undefined => {\n try {\n return Editor.parent(editor, at, options);\n } catch (error) {}\n};\n","import { AngularEditor, NODE_TO_INDEX, NODE_TO_PARENT } from 'slate-angular';\nimport { Editor, Node, Path } from 'slate';\n\n/**\n * Find the path of Slate node.\n */\nexport const findPath = (editor: AngularEditor, node: Node): Path => {\n const path: Path = [];\n let child = node;\n\n while (true) {\n const parent = NODE_TO_PARENT.get(child);\n\n if (parent == null) {\n if (Editor.isEditor(child)) {\n return path;\n } else {\n break;\n }\n }\n\n const i = NODE_TO_INDEX.get(child);\n\n if (i == null) {\n break;\n }\n\n path.unshift(i);\n child = parent;\n }\n throw new Error(`Unable to find the path for Slate node: ${JSON.stringify(node)}`);\n};\n","export function castArray(data?: any) {\n if (!data) {\n return [];\n }\n return Array.isArray(data) ? data : [data];\n}\n","import { Editor } from 'slate';\nimport { castArray } from './cast-array';\n\nexport type PredicateObj<T> = Partial<Record<keyof T, any | any[]>>;\nexport type PredicateFn<T> = (obj: T) => boolean;\nexport type Predicate<T> = PredicateObj<T> | PredicateFn<T>;\n\n/**\n * Match the object with a predicate object or function.\n * If predicate is:\n * - object: every predicate key/value should be in obj.\n * - function: it should return true.\n */\nexport const match = <T>(obj: T, predicate?: Predicate<T>): boolean => {\n if (!predicate) return true;\n\n if (typeof predicate === 'object') {\n return Object.entries(predicate).every(([key, value]) => {\n const values = castArray(value);\n\n return values.includes(obj[key]);\n });\n }\n\n return predicate(obj);\n};\n\nexport const matchPredicate =\n <T>(predicate?: Predicate<T>) =>\n (obj: T) =>\n match(obj, predicate);\n\n/**\n * Extended query options for slate queries:\n * - `match` can be an object predicate where one of the values should include the node value.\n * Example: { type: ['1', '2'] } will match the nodes having one of these 2 types.\n */\nexport const getQueryOptions = <T>(editor: Editor, options: any) => {\n return {\n ...options,\n match: (n: T) => match<T>(n, options.match) && (!options?.block || Editor.isBlock(editor, n))\n };\n};\n","/**\n * Iterate through all of the nodes in the editor and return the first match. If\n * no match is found, return undefined.\n */\nimport { Editor, Location, Node, NodeEntry, Path, Range, Span } from 'slate';\nimport { MatchOptions } from '../interfaces';\nimport { match } from '../utils/match';\n\nexport type FindNodeOptions<T extends Node = Node> = {\n at?: Location | Span;\n reverse?: boolean;\n voids?: boolean;\n} & MatchOptions<T>;\n\n/**\n * Find node matching the condition.\n */\nexport const findNode = <T extends Node = Node>(editor: Editor, options: FindNodeOptions<T>): NodeEntry<T> | undefined => {\n // Slate throws when things aren't found so we wrap in a try catch and return undefined on throw.\n try {\n const { match: _match = () => true, at = editor.selection || [], reverse = false, voids = false } = options;\n\n let from;\n let to;\n if (Span.isSpan(at)) {\n [from, to] = at;\n } else if (Range.isRange(at)) {\n const first = Editor.path(editor, at, { edge: 'start' });\n const last = Editor.path(editor, at, { edge: 'end' });\n from = reverse ? last : first;\n to = reverse ? first : last;\n }\n\n let root: NodeEntry = [editor, []];\n if (Path.isPath(at)) {\n root = Editor.node(editor, at);\n }\n\n const nodeEntries = Node.nodes(root[0], {\n reverse,\n from,\n to,\n pass: ([n]) => (voids ? false : Editor.isVoid(editor, n))\n });\n\n for (const [node, path] of nodeEntries) {\n if (match<Node>(node, _match)) {\n return [node as any, path];\n }\n }\n } catch (error) {\n return undefined;\n }\n};\n","/**\n * Iterate through all of the nodes in the editor and return the first match. If\n * no match is found, return undefined.\n */\nimport { Editor, Node, NodeEntry, Path, Range, Span } from 'slate';\nimport { match } from '../utils/match';\nimport { FindNodeOptions } from './find-node';\n\n/**\n * Get the first descendant node matching the condition.\n */\nexport const findDescendant = <T extends Node = Node>(editor: Editor, options: FindNodeOptions<T>): NodeEntry<T> | undefined => {\n // Slate throws when things aren't found so we wrap in a try catch and return undefined on throw.\n try {\n const { match: _match, at = editor.selection, reverse = false, voids = false } = options;\n\n if (!at) return;\n\n let from;\n let to;\n if (Span.isSpan(at)) {\n [from, to] = at;\n } else if (Range.isRange(at)) {\n const first = Editor.path(editor, at, { edge: 'start' });\n const last = Editor.path(editor, at, { edge: 'end' });\n from = reverse ? last : first;\n to = reverse ? first : last;\n }\n\n let root: NodeEntry = [editor, []];\n if (Path.isPath(at)) {\n root = Editor.node(editor, at);\n }\n\n const nodeEntries = Node.descendants(root[0], {\n reverse,\n from,\n to,\n pass: ([n]) => (voids ? false : Editor.isVoid(editor, n))\n });\n\n for (const [node, path] of nodeEntries) {\n if (match<Node>(node, _match)) {\n return [node as any, (at as Path).concat(path)];\n }\n }\n } catch (error) {\n return undefined;\n }\n};\n","import { Ancestor, Descendant, NodeEntry, Path } from 'slate';\n\n/**\n * Get the last child of a node\n */\nexport const getLastChild = (nodeEntry: NodeEntry<Ancestor>): NodeEntry<Descendant> => {\n const [node, path] = nodeEntry;\n\n return [node.children[node.children.length - 1], path.concat([node.children.length - 1])];\n};\n\nexport const getLastChildPath = (nodeEntry: NodeEntry<Ancestor>): Path => getLastChild(nodeEntry)[1];\n","import { Point } from 'slate';\n\nexport const isPointAtRoot = (point: Point) => point.path.length === 2;\n","import { Range } from 'slate';\nimport { isPointAtRoot } from './is-point-at-root';\n\nexport const isRangeAtRoot = (range: Range) => isPointAtRoot(range.anchor) || isPointAtRoot(range.focus);\n","import { Ancestor, Descendant, NodeEntry, Path } from 'slate';\n\n/**\n * Get the next sibling nodes after a path.\n * @param ancestorEntry Ancestor of the sibling nodes\n * @param path Path of the reference node\n */\nexport const getNextSiblingNodes = (ancestorEntry: NodeEntry<Ancestor>, path: Path) => {\n const [ancestor, ancestorPath] = ancestorEntry;\n\n const leafIndex = path[ancestorPath.length];\n\n const siblings: Descendant[] = [];\n\n if (leafIndex + 1 < ancestor.children.length) {\n for (let i = leafIndex + 1; i < ancestor.children.length; i++) {\n siblings.push(ancestor.children[i]);\n }\n }\n\n return siblings;\n};\n","import { Editor, Text } from 'slate';\nimport { getBlockAbove } from './get-block-above';\nimport { getNextSiblingNodes } from './get-next-sibling-nodes';\n\n/**\n * Is there empty text after the selection.\n * If there is no leaf after the selected leaf, return {@link Editor.isEnd}.\n * Else, check if the next leaves are empty.\n */\nexport const isBlockTextEmptyAfterSelection = (editor: Editor) => {\n if (!editor.selection) {\n return false;\n }\n\n const blockAbove = getBlockAbove(editor);\n\n const cursor = editor.selection.focus;\n\n if (!Editor.isEnd(editor, cursor, Editor.parent(editor, editor.selection)[1])) {\n return false;\n }\n\n const siblingNodes = getNextSiblingNodes(blockAbove, cursor.path);\n\n if (siblingNodes.length) {\n for (const siblingNode of siblingNodes) {\n if ((siblingNode as Text).text) {\n return false;\n }\n }\n } else {\n return Editor.isEnd(editor, cursor, blockAbove[1]);\n }\n\n return true;\n};\n","import { Ancestor, Editor } from 'slate';\nimport { EditorAboveOptions } from '../interfaces';\nimport { getQueryOptions } from '../utils/match';\n\n/**\n * Get node above a location (default: selection).\n */\nexport const getAbove = <T = Ancestor>(editor: Editor, options: EditorAboveOptions<T> = {}) => {\n return Editor.above(editor, getQueryOptions(editor, options));\n};\n","import { Editor, Location, Point } from 'slate';\n\n/**\n * {@link Editor.isStart}. If point is null, return false.\n */\nexport const isStart = (editor: Editor, point: Point | null | undefined, at: Location): boolean =>\n !!point && Editor.isStart(editor, point, at);\n","import { Editor, Path, Range } from 'slate';\nimport { EditorAboveOptions } from '../interfaces';\nimport { getBlockAbove } from './get-block-above';\n\n/**\n * Is the range (default: selection) across blocks.\n */\nexport const isRangeAcrossBlocks = (\n editor: Editor,\n { at, ...options }: Omit<EditorAboveOptions, 'at' | 'match'> & { at?: Range | null } = {}\n) => {\n if (!at) at = editor.selection;\n if (!at) return false;\n\n const [start, end] = Range.edges(at);\n const startBlock = getBlockAbove(editor, {\n at: start,\n ...options\n });\n const endBlock = Editor.above(editor, {\n at: end,\n ...options\n });\n\n return startBlock && endBlock && !Path.equals(startBlock[1], endBlock[1]);\n};\n","import { Editor, Node } from 'slate';\nimport { findNode, FindNodeOptions } from './find-node';\n\n/**\n * Iterate through all of the nodes in the editor and break early for the first truthy match. Otherwise\n * returns false.\n */\nexport const someNode = <T extends Node = Node>(editor: Editor, options: FindNodeOptions<T>) => {\n return !!findNode<T>(editor, options);\n};\n","import { Descendant, Element, Text } from 'slate';\n\nexport const isDescendant = (node: any): node is Descendant => Element.isElement(node) || Text.isText(node);\n","import { Node, NodeEntry, Element } from 'slate';\nimport { QueryOptions } from '../interfaces';\n\n/**\n * Is the node entry filling a condition.\n */\nexport const isNodeType = (entry?: NodeEntry<Node>, { filter = () => true, allow = [], exclude = [] }: QueryOptions = {}) => {\n let filterAllow: typeof filter = () => true;\n if (allow.length) {\n filterAllow = ([n]) => allow.includes((n as Element).type as string);\n }\n\n let filterExclude: typeof filter = () => true;\n if (exclude.length) {\n filterExclude = ([n]) => !exclude.includes((n as Element).type as string);\n }\n\n return !!entry && filter(entry) && filterAllow(entry) && filterExclude(entry);\n};\n","import { Editor, Element } from 'slate';\n\nexport const anchorInlineEntry = (editor: Editor) => {\n const match = Editor.above<Element>(editor, {\n match: n => Editor.isInline(editor, n)\n });\n if (match) {\n return match;\n }\n};\n","import { Editor, Location, Path, Point } from 'slate';\nimport { castArray } from '../utils/cast-array';\nimport { map } from '../utils/lodash';\n\nexport interface BeforeOptions {\n distance?: number | undefined;\n unit?: 'character' | 'word' | 'line' | 'block' | 'offset' | undefined;\n}\n\nexport interface PointBeforeOptions extends BeforeOptions {\n /**\n * Lookup before the location for `matchString`.\n */\n matchString?: string | string[];\n\n /**\n * Lookup before the location until this predicate is true\n */\n match?: (value: { beforeString: string; beforePoint: Point; at: Location }) => boolean;\n\n /**\n * If true, get the point after the matching point.\n * If false, get the matching point.\n */\n afterMatch?: boolean;\n\n /**\n * If true, lookup until the start of the editor value.\n * If false, lookup until the first invalid character.\n */\n skipInvalid?: boolean;\n\n /**\n * Allow lookup across multiple node paths.\n */\n multiPaths?: boolean;\n}\n\n/**\n * {@link Editor.before} with additional options.\n * TODO: support for sequence of any characters.\n */\nexport const getPointBefore = (editor: Editor, at: Location, options?: PointBeforeOptions) => {\n if (!options || (!options.match && !options.matchString)) {\n return Editor.before(editor, at, options);\n }\n\n let beforeAt = at;\n let previousBeforePoint = Editor.point(editor, at, { edge: 'end' });\n\n const stackLength = (options.matchString ? options.matchString.length : 0) + 1;\n const stack = Array(stackLength);\n\n const unitOffset = !options.unit || options.unit === 'offset';\n\n let count = 0;\n while (true) {\n const beforePoint = Editor.before(editor, beforeAt, options);\n\n // not found\n if (!beforePoint) {\n return;\n }\n\n // different path\n if (!options.multiPaths && !Path.equals(beforePoint.path, previousBeforePoint.path)) {\n return;\n }\n\n const beforeString = Editor.string(editor, {\n anchor: beforePoint,\n focus: previousBeforePoint\n });\n\n const matchString: string[] = castArray(options.matchString);\n\n let beforeStringToMatch = beforeString;\n\n if (unitOffset && stackLength) {\n stack.unshift({\n point: beforePoint,\n text: beforeString\n });\n stack.pop();\n\n beforeStringToMatch = map(stack.slice(0, -1), 'text').join('');\n }\n\n if (\n matchString.includes(beforeStringToMatch) ||\n (options.match ? options.match({ beforeString: beforeStringToMatch, beforePoint, at }) : '')\n ) {\n if (options.afterMatch) {\n if (stackLength && unitOffset) {\n return stack[stack.length - 1] ? stack[stack.length - 1].point : '';\n }\n return previousBeforePoint;\n }\n return beforePoint;\n }\n\n previousBeforePoint = beforePoint;\n beforeAt = beforePoint;\n\n count += 1;\n\n if (!options.skipInvalid) {\n if (!matchString || count >= options.matchString.length) {\n return;\n }\n }\n }\n};\n","import { Node, Descendant, NodeEntry, Editor, Element } from 'slate';\nimport { CustomElementKinds } from '../custom-types';\nimport { getAboveByType } from './get-above-by-type';\n\nexport const getSelectionNodesByType = (editor: Editor, fragmentData: Descendant[], types: CustomElementKinds[] = []): Node => {\n try {\n const { selection } = editor;\n const nodes = Editor.node(editor, selection);\n const nodeType = (nodes[0] as Element).type;\n if (types.length > 0) {\n if (types.includes(nodeType)) {\n return Node.get(fragmentData[0], new Array(nodes[1].length - 1).fill(0));\n } else {\n let parentNode: NodeEntry;\n for (let i = 0; i < types.length; i++) {\n parentNode = getAboveByType(editor, types[i], { mode: 'lowest' });\n if (parentNode) {\n break;\n }\n }\n if (parentNode) {\n return Node.get(fragmentData[0], new Array(parentNode[1].length - 1).fill(0));\n }\n }\n }\n } catch (err) {\n return null;\n }\n};\n","import { Editor, Element, Text, Node } from 'slate';\nimport { CLIPBOARD_FORMAT_KEY, ELEMENT_UNIQUE_ID } from '../constants/default';\n\nexport const getStartBlock = (editor: Editor, fragment: Element) => {\n const firstChild = fragment.children && fragment.children[0];\n if (firstChild && !Editor.isInline(editor, firstChild) && !Text.isText(firstChild) && Element.isElement(firstChild)) {\n return getStartBlock(editor, firstChild);\n }\n return fragment;\n};\n\nexport const getEndBlock = (editor: Editor, fragment: Element) => {\n const lastChild = fragment.children && fragment.children[fragment.children.length - 1];\n if (lastChild && !Editor.isInline(editor, lastChild) && !Text.isText(lastChild) && Element.isElement(lastChild)) {\n return getEndBlock(editor, lastChild);\n }\n return fragment;\n};\n\nexport const extractFragment = (data: DataTransfer, deleteKey = ELEMENT_UNIQUE_ID) => {\n const fragment = data.getData(`application/${CLIPBOARD_FORMAT_KEY}`);\n if (fragment) {\n const decoded = decodeURIComponent(window.atob(fragment));\n let nodes = JSON.parse(decoded) as Element[];\n if (!Array.isArray(nodes)) {\n nodes = [nodes];\n }\n // delete key to avoid duplicate keys\n if (deleteKey) {\n deleteElementKey(nodes, deleteKey);\n }\n return nodes;\n }\n return null;\n};\n\nexport function deleteElementKey(nodes: Node[], key: string) {\n nodes.forEach(node => {\n if (node[key]) {\n delete node[key];\n }\n if (Element.isElement(node) && node.children) {\n deleteElementKey(node.children, key);\n }\n });\n return nodes;\n}\n\n/**\n * 过滤文本格式:颜色/背景色/字体大小\n * @param node\n */\nexport function filterTextFormat(node: Element) {\n node.children.forEach(child => {\n if (Text.isText(child)) {\n if (child['color']) {\n delete child['color'];\n }\n if (child['background-color']) {\n delete child['background-color'];\n }\n if (child['font-size']) {\n delete child['font-size'];\n }\n } else {\n filterTextFormat(child);\n }\n });\n}\n\nexport function recursionNodes(nodes: Node[], callback: (node: Node) => void) {\n nodes.forEach(element => {\n if (Element.isElement(element)) {\n recursionNodes(element.children, callback);\n }\n callback(element);\n });\n}\n","import { Editor, Element } from 'slate';\nimport { getStartBlock, getEndBlock } from '../utils/fragment';\n\nexport const isAcrossBlocks = (editor: Editor, fragment: Element[]) => {\n const startBlock = getStartBlock(editor, fragment[0]);\n const endBlock = getEndBlock(editor, fragment[fragment.length - 1]);\n return startBlock && endBlock && startBlock !== endBlock;\n};\n","import { Editor, Location } from 'slate';\n\n/**\n * See {@link Editor.string}.\n * If `at` is not defined, return an empty string.\n */\nexport const getText = (editor: Editor, at?: Location | null) => {\n return at && Editor.string(editor, at);\n};\n","import { Editor, Location, Path, Point, Range } from 'slate';\n\nexport const getPointFromLocation = (\n editor: Editor,\n {\n at = editor.selection,\n focus\n }: {\n at?: Location | null;\n focus?: boolean;\n } = {}\n) => {\n let point: Point | undefined;\n if (Range.isRange(at)) {\n point = !focus ? at.anchor : at.focus;\n }\n if (Point.isPoint(at)) {\n point = at;\n }\n if (Path.isPath(at)) {\n point = { path: at, offset: 0 };\n }\n\n return point;\n};\n","import { Editor } from 'slate';\nimport { EditorAboveOptions } from '../interfaces';\nimport { getBlockAbove } from './get-block-above';\nimport { getPointFromLocation } from './get-point-from-location';\n\n/**\n * Get the range from the start of the block above a location (default: selection) to the location.\n */\nexport const getRangeFromBlockStart = (editor: Editor, options: Omit<EditorAboveOptions, 'match'> = {}) => {\n const [, path] = getBlockAbove(editor, options);\n\n const start = Editor.start(editor, path);\n\n const focus = getPointFromLocation(editor, options);\n\n if (!focus) {\n return false;\n }\n\n return { anchor: start, focus };\n};\n","import { Editor, Location, Range } from 'slate';\nimport { getPointBefore, PointBeforeOptions } from './get-point-before';\n\nexport type RangeBeforeOptions = PointBeforeOptions;\n\n/**\n * Get range from {@link getPointBefore} to the end point of `at`.\n */\nexport const getRangeBefore = (editor: Editor, at: Location, options?: RangeBeforeOptions): Range | undefined => {\n const anchor = getPointBefore(editor, at, options);\n if (!anchor) {\n return;\n }\n\n const focus = Editor.point(editor, at, { edge: 'end' });\n\n return {\n anchor,\n focus\n };\n};\n","import { Ancestor, Editor, NodeEntry } from 'slate';\nimport { EditorAboveOptions } from '../interfaces/editor';\n\n/**\n * Get the block above a location (default: selection).\n * If not found, return the editor entry.\n */\nexport const getBlockCardAbove = (editor: Editor, options: Omit<EditorAboveOptions, 'match'> = {}): NodeEntry<Ancestor> =>\n Editor.above(editor, {\n match: n => editor.isBlockCard(n),\n ...options\n });\n","import { Editor, Node } from 'slate';\n\n/**\n * get plain text\n * can specify node text interval, the default is \\n\n */\nexport const getPlainText = (editor: Editor, format = '\\n') => {\n let text = '';\n if (editor && editor?.children) {\n for (let i = 0; i < editor?.children.length; i++) {\n const node = editor?.children[i];\n text += `${i === 0 ? '' : format}${Node.string(node)}`;\n }\n }\n return text;\n};\n","import { Editor, Node, Path, Element } from 'slate';\nimport { ElementKinds } from '../constants/node-types';\n\nexport const isEmptyParagraphByPath = (editor: Editor, at: Path) => {\n const block = Node.get(editor, at) as Element;\n return Editor.isEmpty(editor, block) && block.type === ElementKinds.paragraph;\n};\n","import { Editor, NodeEntry, Text } from 'slate';\nimport { MarkTypes, MarkProps } from '../constants';\n\nexport const getSelectionMarks = (editor: Editor): { [key in MarkTypes]?: any } => {\n const matchs = Editor.nodes(editor, { match: Text.isText });\n const marks = {};\n for (const match of matchs) {\n const [node] = match as NodeEntry<Text>;\n const { text, ...rest } = node;\n Object.assign(marks, rest);\n }\n for (const key in marks) {\n if (!MarkProps.includes(key as MarkTypes)) {\n delete marks[key];\n }\n }\n return marks;\n};\n","import { Element, Editor } from 'slate';\n\nexport const isContainer = (editor: Editor, value: Element) => Element.isElement(value) && editor.isContainer && editor.isContainer(value);\n","import { CONTAINER_BLOCKS } from '../constants/node-types';\nimport { Editor, Element } from 'slate';\nimport { isContainer } from './is-container-type';\n\nexport const getContainerBlocks = (editor: Editor) => {\n const containerNode = Editor.above<Element>(editor, {\n match: (node: Element) => {\n return Element.isElement(node) && isContainer(editor, node) && !CONTAINER_BLOCKS.includes(node.type);\n }\n });\n return !containerNode ? CONTAINER_BLOCKS : [...CONTAINER_BLOCKS, containerNode[0].type];\n};\n","import { TheEditor } from '../interfaces/editor';\nimport { getBlockAbove } from './get-block-above';\nimport { getParent } from './get-parent';\n\nexport const getDirectlyParent = (editor: TheEditor) => {\n const [, anchorPath] = getBlockAbove(editor);\n if (!anchorPath) return;\n\n const parentEntry = getParent(editor, anchorPath);\n if (!parentEntry) return;\n\n return parentEntry;\n};\n","import { Editor, Element, Path } from 'slate';\nimport { TheEditor } from '../interfaces/editor';\nimport { getBlockAbove } from './get-block-above';\nimport * as _lodash from 'lodash';\nimport { anchorBlockEntry } from './anchor-block-entry';\nimport { CustomElementKinds } from '../custom-types';\n\nexport const getInsertElementsPath = (editor: TheEditor, allowParentTypes: CustomElementKinds[]) => {\n const [, anchorPath] = getBlockAbove(editor);\n if (!anchorPath) return false;\n let parentEntry = Editor.above(editor, { match: n => Editor.isBlock(editor, n) && allowParentTypes.includes((n as any).type) });\n if (!parentEntry) return false;\n\n const [, anchorBlockPath] = anchorBlockEntry(editor);\n let currentNodePath = anchorBlockPath.slice(0, parentEntry[1].length + 1);\n\n const illegalParentEntry = Editor.above(editor, {\n mode: 'highest',\n at: parentEntry[1],\n match: (n: Element) => n.type && !isAllowParentTypes(editor, n.type, allowParentTypes)\n });\n\n // 获取不可插入节点的根层节点\n if (illegalParentEntry) {\n currentNodePath = illegalParentEntry && illegalParentEntry[1];\n }\n\n return currentNodePath && Path.next(currentNodePath);\n};\n\nexport const isAllowParentTypes = (editor: TheEditor, targetType: CustomElementKinds, allowParentTypes: CustomElementKinds[]) => {\n const existChildType = isNestedStructureParentType(editor, targetType);\n const leafType = existChildType && findNestedStructureLeafType(editor, targetType);\n return allowParentTypes.includes(targetType) || allowParentTypes.includes(leafType);\n};\n\nexport const isNestedStructureParentType = (editor: TheEditor, type: string): boolean => {\n for (const key in editor.nestedStructureByKey) {\n if (key === type) {\n return true;\n }\n }\n return false;\n};\n\nexport const findNestedStructureLeafType = (editor: TheEditor, target: CustomElementKinds) => {\n let leafType = editor.nestedStructureByKey[target];\n while (leafType && editor.nestedStructureByKey[leafType]) {\n leafType = editor.nestedStructureByKey[leafType];\n }\n return leafType;\n};\n","import { Editor, Element } from 'slate';\nimport { getBlockAbove } from './get-block-above';\n\nexport const isContainNestedType = (editor: Editor, types: string[] | string) => {\n if (!Array.isArray(types)) {\n types = [types];\n }\n const [, anchorPath] = getBlockAbove(editor);\n if (!anchorPath) return false;\n\n const parentEntry = Editor.above(editor, { match: n => Element.isElement(n) && types.includes(n.type) });\n if (!parentEntry) return false;\n\n const [, parentPath] = parentEntry;\n const entry = Editor.above(editor, {\n at: parentPath,\n match: n => {\n if (!Element.isElement(n)) return false;\n const isNestedStructure = editor.nestedStructureByKey[n.type];\n if (isNestedStructure) return true;\n return types.includes(n.type);\n }\n });\n if (entry) return true;\n\n return false;\n};\n","import { cloneDeep } from '../../utils/lodash';\nimport { TheEditor, ThePlugin, WithThePlugin } from '../../interfaces';\n\n/**\n * 循环 plugins 到 editor.plugins 和 editor.pluginsByKey\n * 如果有 key 重复则进行覆盖\n */\nexport const flattenDeepPlugins = <T = {}>(editor: TheEditor, plugins?: ThePlugin<T>[]) => {\n if (!plugins) return;\n\n plugins.forEach((plugin: WithThePlugin) => {\n let p = cloneDeep(plugin);\n if (!p.options) p.options = {} as any;\n if (!p.nestedStructureByKey) p.nestedStructureByKey = {};\n\n editor.plugins.push(p);\n flattenDeepPlugins<T>(editor, p.plugins!);\n });\n};\n","import { TheEditor, ThePlugin } from '../../interfaces';\n\nexport const getPlugins = <T = {}>(editor: TheEditor): ThePlugin<T>[] => {\n return editor?.plugins ?? [];\n};\n","import { PluginKey, TheEditor, WithThePlugin } from '../../interfaces';\n\nexport const getPlugin = <P = {}, T = {}>(editor: TheEditor, key: PluginKey): WithThePlugin<T, P> =>\n editor.pluginsByKey[key] as WithThePlugin<T, P>;\n","import { PluginKey, TheEditor, ThePluginOption } from '../../interfaces';\nimport { getPlugin } from './get-plugin';\n\nexport const getPluginOptions = <P = {}, T = {}>(editor: TheEditor, key: PluginKey): ThePluginOption<P> =>\n getPlugin<P, T>(editor, key)?.options ?? ({} as ThePluginOption<P>);\n","import { isObject } from 'ngx-tethys/util';\nimport { OptionItem } from '../../interfaces/plugins';\n\nexport const mergeArray = <T>(origin: T[], source: T[]) => {\n if (!Array.isArray(source)) return source;\n\n for (let i = 0; i < source.length; i++) {\n const value = source[i] as OptionItem;\n if (isObject(value) && value?.key && origin.some((item: OptionItem) => item?.key === value?.key)) {\n let index = origin.findIndex((item: OptionItem) => item?.key === value?.key);\n origin[index] = { ...origin[index], ...value };\n continue;\n }\n if (origin.includes(source[i])) continue;\n origin.push(source[i]);\n }\n return origin;\n};\n","import { isObject } from 'ngx-tethys/util';\nimport { assign } from '../../utils/lodash';\nimport { NoInfer, OverrideByKey, ThePlugin } from '../../interfaces';\nimport { mergeArray } from './merge-array';\n\nexport const mergeOptions = <T = {}, P = {}>(plugin: ThePlugin<T, NoInfer<P>>, override: OverrideByKey) => {\n const { options } = plugin;\n const newOptions = options as unknown as P;\n for (let option in override.options) {\n if (Array.isArray(override.options[option]) && newOptions[option]) {\n newOptions[option] = mergeArray(newOptions[option], override.options[option]);\n continue;\n }\n if (isObject(override.options[option]) && newOptions[option]) {\n if (typeof newOptions[option] === 'function') {\n newOptions[option] = override.options[option];\n } else {\n newOptions[option] = assign(newOptions[option], override.options[option]);\n }\n continue;\n }\n newOptions[option] = override.options[option];\n }\n plugin.options = newOptions;\n};\n","import { TheEditor, WithThePlugin } from '../../interfaces';\n\nexport const combinePlugins = (editor: TheEditor): TheEditor => {\n // withOverrides\n editor.plugins.forEach((plugin: WithThePlugin) => {\n if (plugin.withOverrides && !plugin.options.disabled) {\n editor = plugin.withOverrides(editor, plugin);\n }\n });\n return editor;\n};\n","import { OverrideByKey, TheEditor, ThePlugin } from '../../interfaces';\nimport { mergeOptions } from './merge-options';\n\nexport const mergeDeepPlugins = <T = {}, P extends ThePlugin<T>[] = ThePlugin<T>[]>(editor: TheEditor, _plugins: P) => {\n _plugins.forEach(plugin => {\n if (plugin.overrideByKey) {\n const newPlugins = _plugins.filter(p => plugin.overrideByKey[p.key]);\n\n newPlugins.forEach(p => {\n if (editor.pluginsByKey[p.key]) {\n mergeOptions(p, plugin.overrideByKey[p.key] as OverrideByKey);\n }\n });\n }\n });\n};\n","import { TheEditor, ThePlugin, WithThePlugin } from '../../interfaces';\n\nexport const nestedStructureByKey = <T = {}>(editor: TheEditor, plugins?: ThePlugin<T>[]) => {\n // 如果有 key 重复则进行覆盖\n plugins.forEach((p: WithThePlugin) => {\n for (const key in p.nestedStructureByKey) {\n if (!editor.nestedStructureByKey[key]) {\n editor.nestedStructureByKey[key] = p.nestedStructureByKey[key];\n }\n }\n });\n};\n","import { TheEditor, ThePlugin, WithThePlugin } from '../../interfaces';\n\nexport const pluginsByKey = <T = {}>(editor: TheEditor, plugins?: ThePlugin<T>[]) => {\n if (!plugins) return;\n\n plugins.forEach((p: WithThePlugin) => {\n if (!editor.pluginsByKey[p.key]) {\n editor.pluginsByKey[p.key] = p;\n }\n });\n};\n","import { Editor } from 'slate';\nimport { ThePluginMenuItemType } from '../../constants';\n\nexport type ThePluginMenuItemKey = string;\n\nexport interface ThePluginMenuItem {\n key: ThePluginMenuItemKey;\n name: string;\n type: ThePluginMenuItemType;\n description?: string;\n icon?: string;\n menuIcon?: string | ((sceneKey?: string) => string);\n keywords?: string;\n children?: Array<ThePluginMenuItem | 'divider'>;\n displayKey?: string;\n execute?: (editor: Editor) => void;\n active?: (editor: Editor) => boolean | string;\n isDisabled?: (editor: Editor) => boolean;\n isHidden?: (editor: Editor) => boolean;\n}\n\nexport interface ThePluginMenuGroup {\n groupName: string;\n}\n\nexport type ThePluginMenuItemConfig = ThePluginMenuGroup | ThePluginMenuItemKey;\n\nexport type ThePluginMenu = (ThePluginMenuGroup | ThePluginMenuItem)[];\n\nexport type ThePluginMenuItemWrap = ThePluginMenuItem & { disabled?: boolean; isMenuItem?: boolean };\n\nexport const ThePluginMenu = {\n isMenuGroup(value: any): value is ThePluginMenuGroup {\n if (value instanceof Object && !value.key) {\n return true;\n } else {\n return false;\n }\n },\n isMenuItem(value: any): value is ThePluginMenuItem {\n if (value.key) {\n return true;\n } else {\n return false;\n }\n }\n};\n","import { Editor } from 'slate';\nimport { ThePluginMenu, ThePluginMenuItem, ThePluginMenuItemConfig, ThePluginMenuItemKey } from '../../interfaces/plugins/plugin-menu';\n\n/**\n * 构建插入菜单,用于绑定界面\n * @param editor\n * @param items\n * @returns\n */\nexport const buildPluginMenu = (\n menuItemMap: Map<ThePluginMenuItemKey, ThePluginMenuItem>,\n items: ThePluginMenuItemConfig[]\n): ThePluginMenu => {\n return items\n .map(item => {\n if (ThePluginMenu.isMenuGroup(item)) {\n return item;\n } else {\n return menuItemMap.get(item);\n }\n })\n .filter(item => !!item);\n};\n\nexport const buildPluginMenuItemMap = (editor: Editor) => {\n const map = new Map<ThePluginMenuItemKey, ThePluginMenuItem>();\n const pluginMenuItems: ThePluginMenuItem[] = editor?.plugins.reduce((ret, current) => {\n ret.push(...(current?.menuItems ?? []));\n return ret;\n }, []);\n pluginMenuItems.forEach(menuItem => {\n if (menuItem) {\n map.set(menuItem.key, menuItem);\n }\n });\n return map;\n};\n","import { Element, Text } from 'slate';\nimport { AngularEditor, ViewType } from 'slate-angular';\nimport { HistoryEditor } from 'slate-history';\nimport { combinePlugins, flattenDeepPlugins, mergeDeepPlugins, nestedStructureByKey, pluginsByKey } from './utils';\nimport { TheEditor, ThePlugin } from '../interfaces';\n\nexport const withTheia = <T extends AngularEditor & HistoryEditor & TheEditor>(editor: T, plugins: ThePlugin[] = []) => {\n let e = editor as TheEditor;\n\n e.renderElement = (element: Element): ViewType => null;\n e.renderLeaf = (text: Text): ViewType => null;\n e.isContainer = (value: Element) => false;\n e.globalMousedown = (event: MouseEvent) => null;\n e.extraElementOptions = [];\n e.disabled = false;\n\n e.plugins = [];\n e.pluginsByKey = {};\n e.nestedStructureByKey = {};\n\n // withOverridesByKey\n flattenDeepPlugins(e, plugins);\n\n // mount pluginsByKey\n pluginsByKey(e, e.plugins);\n\n // mount nestedStructureByKey\n nestedStructureByKey(e, e.plugins);\n\n // merge plugin to pluginByKey\n mergeDeepPlugins(e, e.plugins);\n\n e = combinePlugins(e);\n\n return e;\n};\n","import { cloneDeep } from '../utils/lodash';\nimport { NoInfer, OverrideByKey, ThePlugin } from '../interfaces';\n\nexport const createPluginFactory =\n <P = {}>(defaultPlugin: ThePlugin<{}, NoInfer<P>>) =>\n <T = {}>(override?: Partial<ThePlugin<T, NoInfer<P>>>, overrideByKey: OverrideByKey = {}): ThePlugin<T, NoInfer<P>> => {\n return cloneDeep(defaultPlugin);\n };\n","import { InjectionToken } from '@angular/core';\nimport { Ancestor, Range, Path, Point, Node, Span, NodeEntry, Editor, Element, Text } from 'slate';\nimport { AngularEditor, SlatePlaceholder, ViewType } from 'slate-angular';\nimport { HistoryEditor } from 'slate-history';\nimport { ElementOptionsInfo } from './valid-children-types';\nimport { Predicate } from '../utils/match';\nimport { ToolbarOption } from './toolbar';\nimport { CustomElementKinds } from '../custom-types';\nimport { FontSizes } from '../constants';\nimport { ThePlugin } from './plugins';\nimport { OverrideByKey, NestedStructureByKey } from './utility';\nimport { ThePluginMenuItemConfig } from './plugins/plugin-menu';\n\nexport interface TheEditor extends AngularEditor, HistoryEditor {\n [key: string]: any;\n options: TheOptions;\n plugins: ThePlugin[];\n disabled: boolean;\n pluginsByKey: OverrideByKey;\n nestedStructureByKey: NestedStructureByKey;\n extraElementOptions: ElementOptionsInfo[];\n globalMousedown: (event: MouseEvent) => void;\n renderElement: (element: Element) => ViewType;\n renderLeaf: (text: Text) => ViewType;\n isContainer: (element: Element) => boolean;\n}\n\nexport const TheEditor = {\n ...AngularEditor\n};\n\nexport enum TheDataMode {\n json = 'json',\n html = 'html'\n}\n\nexport enum TheMode {\n default = 'default',\n print = 'print'\n}\n\nexport type TheModeType = TheMode | string;\n\nexport class TheModeConfig {\n mode: TheModeType;\n}\n\nexport const THE_MODE_TOKEN = new InjectionToken<TheModeConfig>('the-mode');\n\nexport const THE_MODE_PROVIDER = {\n provide: THE_MODE_TOKEN,\n useValue: {\n mode: TheMode.default\n }\n};\n\nexport interface TheOptions {\n mode?: TheDataMode;\n readonly?: boolean;\n disabled?: boolean;\n autoFocus?: boolean;\n placeholder?: string;\n inlineToolbarVisible?: boolean;\n scrollContainer?: string;\n maxHeight?: number;\n fontSize?: FontSizes;\n richMedia?: boolean;\n toolbar?: ToolbarOption;\n menu?: ThePluginMenuItemConfig[];\n disablePlugins?: string[];\n extraElementOptions?: ElementOptionsInfo[];\n neededScrollIntoView?: (e: Editor) => boolean;\n placeholderDecorate?: (e: Editor) => SlatePlaceholder[];\n}\n\nexport type NodeMatch<T = Node> = Predicate<T>;\n\nexport interface MatchOptions<T = Node> {\n match?: NodeMatch<T>;\n block?: boolean;\n}\n\nexport interface IndentOptions {\n indentTypes?: CustomElementKinds[];\n disabledIndentTypes?: CustomElementKinds[];\n}\n\nexport interface EditorAboveOptions<T = Ancestor> extends MatchOptions<T> {\n at?: Range | Path | Point;\n mode?: 'highest' | 'lowest';\n voids?: boolean;\n}\n\nexport interface EditorNodesOptions {\n at?: Range | Path | Point | Span;\n match?: (node: Node) => boolean;\n mode?: 'highest' | 'lowest' | 'all';\n universal?: boolean;\n reverse?: boolean;\n voids?: boolean;\n}\n\nexport interface WrapOptions {\n at?: Path | Point | Range;\n match?: (node: Node) => boolean;\n mode?: 'highest' | 'lowest' | 'all';\n split?: boolean;\n voids?: boolean;\n}\n\nexport interface EditorParentOptions {\n depth?: number | undefined;\n edge?: 'start' | 'end' | undefined;\n}\n\nexport interface QueryOptions {\n // Condition on the node to be valid.\n filter?: (entry: NodeEntry<Node>) => boolean;\n // List of types that are valid. If empty or undefined - allow all.\n allow?: string[];\n // List of types that are invalid.\n exclude?: string[];\n}\n\nexport interface DomEventDataInfo {\n inputType?: string;\n key?: string;\n text?: string;\n json?: Node[];\n}\n","import { ComponentType } from '@angular/cdk/portal';\nimport { Editor } from 'slate';\nimport { ElementKinds, MarkTypes, DropdownMode } from '../constants';\nimport { PluginKey } from './plugins';\n\nexport type ToolbarKey = MarkTypes | ElementKinds | string;\n\nexport enum ToolbarItemType {\n default = 'default',\n dropdown = 'dropdown'\n}\n\nexport enum ToolbarAlignment {\n left = 'start',\n center = 'center',\n right = 'end'\n}\n\nexport type ToolbarDefinition = {\n global?: string[];\n inline?: string[];\n};\n\ninterface ToolbarItemBase {\n key: ToolbarKey;\n pluginKey?: PluginKey; // 关联的 pluginKey , 用于根据 toolbarItem 精准查询 plugin,进而获取工具栏相关的配置\n execute?: (editor: Editor) => void;\n active?: (editor: Editor) => boolean | string;\n disable?: (editor: Editor) => boolean;\n transformToolbar?: (editor: Editor) => ToolbarDefinition | void;\n styles?: { [key: string]: string };\n includes?: (ToolbarKey | ToolbarItem)[];\n}\n\nexport interface CustomizeToolbarItem extends ToolbarItemBase {\n iconComponent?: ComponentType<any>;\n type?: ToolbarItemType;\n dropdownMode?: DropdownMode;\n dropdownItemKey?: ToolbarKey;\n dropdownFixedIcon?: boolean; // 固定的 icon / 选项无选中状态:缩进插件 | 更多菜单\n isHideDropdownActionIcon?: boolean;\n}\n\nexport interface DefaultToolbarItem extends ToolbarItemBase {\n icon?: string;\n name?: string;\n shortcutKey?: string;\n type?: ToolbarItemType;\n}\n\nexport type ToolbarItem = CustomizeToolbarItem & DefaultToolbarItem;\n\nexport type ToolbarEntity = {\n global?: ToolbarItem[];\n inline?: ToolbarItem[];\n};\n\nexport interface ToolbarInitOption {\n toolbarDefinition: ToolbarDefinition;\n toolbarEntity: ToolbarEntity;\n toolbarOperations: Map<string, ToolbarItem>;\n}\n\nexport interface ToolbarOption extends ToolbarDefinition {\n align?: ToolbarAlignment;\n}\n\nexport interface ToolbarItemsComposeReturn {\n items: ToolbarItem[];\n group: ToolbarItem[];\n}\n","import { Observable } from 'rxjs';\nimport { UploadFileEntity, FileUploadingItem } from './upload';\nimport { InjectionToken } from '@angular/core';\nimport { SafeUrl } from '@angular/platform-browser';\nimport { Alignment, LayoutTypes } from '../constants';\nimport { ToolbarItem } from './toolbar';\nimport { CustomElementKinds, ImageElement } from '../custom-types';\nimport { TheEditor } from './editor';\n\nexport interface ImageEntry {\n file?: File;\n name?: string;\n width?: number;\n height?: number;\n thumbUrl?: SafeUrl | string;\n originUrl?: SafeUrl | string;\n align?: Alignment;\n layout?: LayoutTypes;\n reSized?: boolean;\n size?: number;\n}\n\nexport type ImageInfo = Pick<ImageEntry, 'thumbUrl' | 'originUrl' | 'name' | 'size'>;\n\nexport interface PreviewImageInfo {\n image: ImageInfo;\n index: number;\n imageGroup: ImageInfo[];\n}\n\nexport interface LayoutOption extends ToolbarItem {\n handle?: (e: MouseEvent, key: Alignment | LayoutTypes) => void;\n}\n\nexport interface TheImageUploaderService {\n uploadFileHandle: (files: any) => Observable<UploadFileEntity[]>;\n getUploadingItems$: () => Observable<FileUploadingItem[]>;\n getBaseUrl?: () => string;\n}\n\nexport const THE_UPLOAD_SERVICE_TOKEN = new InjectionToken<TheImageUploaderService>('THE_UPLOAD_SERVICE_TOKEN');\n\nexport interface ImagePluginOptions {\n allowParentTypes?: CustomElementKinds[];\n imageTypes?: string[];\n disablePreview?: ((editor: TheEditor) => boolean) | boolean;\n acceptedUploadSize?: number;\n errorImageUrl?: string | ((editor: TheEditor) => string);\n preview?: (data: { editor: TheEditor; previewImageInfo: PreviewImageInfo }) => void;\n}\n","import { ElementKinds, HEADING_TYPES } from '../constants/node-types';\nimport { CustomElementKinds } from '../custom-types';\n\nexport interface ElementOptionsInfo {\n type: CustomElementKinds;\n invalidChildrenTypes: CustomElementKinds[];\n isSecondaryContainer?: boolean;\n}\nexport const inValidTypes: CustomElementKinds[] = [\n ElementKinds.table,\n ElementKinds.tableCell,\n ElementKinds.blockquote,\n ElementKinds.hr,\n ElementKinds.code\n];\n\nexport const DefaultElementOptions: ElementOptionsInfo[] = [\n {\n type: ElementKinds.bulletedList,\n invalidChildrenTypes: [...inValidTypes, ...HEADING_TYPES]\n },\n {\n type: ElementKinds.numberedList,\n invalidChildrenTypes: [...inValidTypes, ...HEADING_TYPES]\n },\n {\n type: ElementKinds.listItem,\n invalidChildrenTypes: [...inValidTypes, ...HEADING_TYPES]\n },\n {\n type: ElementKinds.blockquote,\n invalidChildrenTypes: inValidTypes\n },\n {\n type: ElementKinds.table,\n invalidChildrenTypes: [ElementKinds.table]\n },\n {\n type: ElementKinds.tableCell,\n isSecondaryContainer: true,\n invalidChildrenTypes: [ElementKinds.table, ElementKinds.tableCell]\n }\n];\n","export enum PluginKeys {\n list = 'list',\n numberedList = 'numbered-list',\n bulletedList = 'bulleted-list',\n checkItem = 'check-item',\n link = 'link',\n blockCard = 'block-card',\n indent = 'indent',\n table = 'table',\n image = 'image',\n code = 'code',\n heading = 'heading',\n blockquote = 'block-quote',\n inlineCode = 'inline-code',\n color = 'select-color',\n fontSize = 'font-size',\n mark = 'mark',\n hr = 'hr',\n align = 'align',\n verticalAlign = 'vertical-align',\n softBreak = 'soft-break',\n nodeID = 'node-id',\n resetType = 'reset-type',\n removeVoid = 'remove-void',\n removeEmpty = 'remove-empty',\n theHistory = 'the-history',\n insertDataByInvalidType = 'insert-data-by-invalid-type',\n autoFormat = 'auto-format',\n transforms = 'transforms',\n moveSelection = 'move-selection',\n trailingNode = 'trailing-node',\n insertParagraphNodes = 'insert-paragraph-nodes',\n getFragment = 'get-fragment',\n deserializeHtml = 'deserialize-html',\n deserializeMd = 'deserialize-md',\n quickInsert = 'quick-insert',\n paintFormat = 'paint-format',\n mention = 'mention',\n internalCommon = 'internalCommon'\n}\n\n/**\n * 通过 key 存储插件的唯一 key。\n */\nexport type PluginKey = PluginKeys | string;\n\nexport interface TheiaPluginKey {\n /**\n * 用于在 `editor.pluginsByKey` 中按键存储插件的属性。\n */\n key?: PluginKey;\n}\n","export function idCreator(length = 5) {\n // remove numeral\n const $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz'; /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/\n const maxPosition = $chars.length;\n let key = '';\n for (let i = 0; i < length; i++) {\n key += $chars.charAt(Math.floor(Math.random() * maxPosition));\n }\n return key;\n}\n","import { Element } from 'slate';\nimport { ElementKinds } from '../constants/node-types';\nimport { idCreator } from './id-creator';\n\nexport const createEmptyParagraph: () => Element = () => {\n return {\n type: ElementKinds.paragraph,\n key: idCreator(),\n children: [\n {\n text: ''\n }\n ]\n };\n};\n","import { Descendant } from 'slate';\nimport { TheiaConverter } from '@atinc/selene';\nimport { ElementKinds } from '../constants';\nimport { TheDataMode } from '../interfaces';\nimport { createEmptyParagraph } from './create-empty-paragraph';\n\nexport function plainToTheia(text: string): Descendant[] {\n if (typeof text !== 'string') {\n return text;\n }\n return text.split('\\n').map(i => {\n return {\n type: ElementKinds.paragraph,\n children: [\n {\n text: i\n }\n ]\n };\n });\n}\n\nexport function htmlToTheia(value: string): Descendant[] {\n if (typeof value === 'string') {\n const htmlDom = new DOMParser().parseFromString(value, 'text/html');\n return TheiaConverter.convertToTheia(Array.from(htmlDom.body.children));\n }\n return value;\n}\n\nexport function dataDeserialize(mode: TheDataMode, value: Descendant[] | string): Descendant[] {\n if (!value) {\n return [createEmptyParagraph()];\n }\n if (mode === TheDataMode.html) {\n if (typeof value !== 'string') {\n return value;\n }\n if (/<[^>]+>/.test(value)) {\n return htmlToTheia(value);\n }\n return plainToTheia(value);\n }\n return (value as Descendant[]) || [createEmptyParagraph()];\n}\n\nexport function dataSerializing(mode: TheDataMode, value: Descendant[]): string | Descendant[] {\n if (mode === TheDataMode.html) {\n return TheiaConverter.convertToHtml(value as any);\n }\n return value;\n}\n","import { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { BaseRange, Editor, Point, RangeRef } from 'slate';\n\nexport const THE_EDITOR_UUID = new WeakMap<Editor, string>();\n\nexport const THE_EDITOR_CONVERSION_HINT_REF: WeakMap<Editor, ThyPopoverRef<any>> = new WeakMap();\n\nexport const THE_PLUGIN_MENU_REF: WeakMap<Editor, ThyPopoverRef<any>> = new WeakMap();\n\nexport const THE_EDITOR_ORIGIN_ANCHOR: WeakMap<Editor, Point> = new WeakMap();\n\nexport const THE_EDITOR_POPOVER_REF: WeakMap<Editor, ThyPopoverRef<any>> = new WeakMap();\n\nexport const THE_EDITOR_PREVIOUS_SELECTION: WeakMap<Editor, { rangeRef: RangeRef; selection: BaseRange }> = new WeakMap();\n","import { Editor } from 'slate';\nimport { THE_EDITOR_UUID } from './weak-maps';\n\nexport const getEditorUUID = (editor: Editor) => {\n return THE_EDITOR_UUID.get(editor);\n};\n\nexport const setEditorUUID = (editor: Editor, uuid: string) => {\n THE_EDITOR_UUID.set(editor, uuid);\n};\n","import { Editor } from 'slate';\nimport { getEditorUUID } from './editor-uuid';\n\nexport const getToolbarClass = (editor: Editor) => {\n const uuid = getEditorUUID(editor);\n return `the-toolbar-${uuid}`;\n};\n","import { hotkeys } from 'slate-angular';\n\nexport const IS_MAC = typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform);\n\nexport const CONTROL_KEY = IS_MAC ? '⌘' : 'Ctrl';\n\nexport const isDirectionKeydown = (event: KeyboardEvent): boolean => {\n const isMoveUp = hotkeys.isMoveUp(event);\n const isMoveDown = hotkeys.isMoveDown(event);\n const isMoveBackward = hotkeys.isMoveBackward(event);\n const isMoveForward = hotkeys.isMoveForward(event);\n return isMoveUp || isMoveDown || isMoveBackward || isMoveForward;\n};\n","import { Editor, Node, Text, Element, Range } from 'slate';\nimport { TheEditor } from '../interfaces';\nimport { Alignment, ElementKinds } from '../constants/node-types';\n\n/**\n * whether the current node is a clean paragraph\n * @param editor\n * @param text\n * @returns boolean\n */\nexport const isCleanEmptyParagraph = (editor: Editor) => {\n const isCollapsedCursor = TheEditor.isFocused(editor) && editor.selection && Range.isCollapsed(editor.selection);\n\n if (!isCollapsedCursor) {\n return false;\n }\n\n const block = Node.ancestor(editor, [editor.selection.anchor.path[0]]) as Element;\n\n return isPureEmptyParagraph(editor, block);\n};\n\nexport const isPureEmptyParagraph = (editor: Editor, block: Node) => {\n const textIndent = 'textIndent';\n const align = 'align';\n const hasTextIndent = block[textIndent];\n const alignValue = block[align];\n const hasIndent = block[ElementKinds.indent];\n\n if (\n Node.string(block) === '' &&\n Element.isElement(block) &&\n block.type === ElementKinds.paragraph &&\n block.children.length === 1 &&\n Text.isText(block.children[0]) &&\n !Editor.isVoid(editor, block) &&\n !hasIndent &&\n !hasTextIndent &&\n (!alignValue || alignValue === Alignment.left)\n ) {\n return true;\n }\n\n return false;\n};\n","import { DefaultElementOptions, ElementOptionsInfo } from '../interfaces';\n\nexport const mergeElementOptions = (elementOptions: ElementOptionsInfo[]) => {\n elementOptions = elementOptions.filter(item => item.invalidChildrenTypes.length > 0);\n const combinationData = [...DefaultElementOptions, ...elementOptions];\n const dataInfo = {};\n combinationData.forEach(item => {\n const { type, invalidChildrenTypes, isSecondaryContainer } = item;\n if (!dataInfo[type]) {\n dataInfo[type] = {\n type,\n invalidChildrenTypes,\n isSecondaryContainer\n };\n }\n dataInfo[type].invalidChildrenTypes = Array.from(new Set([...invalidChildrenTypes, ...dataInfo[type].invalidChildrenTypes]));\n });\n return dataInfo;\n};\n","import { Element } from 'slate';\nimport { DOMElement } from 'slate-angular';\nimport { Alignment } from '../constants';\n\n/** Converts CSS pixel values to numbers, eg \"123px\" to 123. Returns NaN for non pixel values. */\nexport function coercePixelsFromCssValue(cssValue: string): number {\n const match = cssValue.match(/(\\d+(\\.\\d+)?)px/);\n if (match) {\n return Number(match[1]);\n }\n}\n\nexport function getElementWidth(element: HTMLElement) {\n // Optimization: Check style.width first as we probably set it already before reading\n // offsetWidth which triggers layout.\n return coercePixelsFromCssValue(element.style.width) || element.getBoundingClientRect().width;\n}\n\nexport function getElementHeight(element: HTMLElement) {\n return coercePixelsFromCssValue(element.style.height) || element.getBoundingClientRect().height;\n}\n\nexport function getColsTotalWidth(cols: HTMLTableColElement[]) {\n return cols.reduce((total, col) => {\n return total + getElementWidth(col);\n }, 0);\n}\n\nexport function getRowsTotalHeight(rows: HTMLTableRowElement[]) {\n return rows.reduce((total, row) => {\n return total + getElementHeight(row);\n }, 0);\n}\n\nexport function useElementStyle(el: HTMLElement, element: Element) {\n if (element.align) {\n el.style.textAlign = (element.align as string) || Alignment.left;\n } else if (el.style.textAlign) {\n el.style.removeProperty('text-align');\n }\n\n if (element.textIndent) {\n el.style.textIndent = element.textIndent + 'em';\n } else if (el.style.textIndent) {\n el.style.removeProperty('text-indent');\n }\n\n if (element.verticalAlign) {\n el.style.verticalAlign = element.verticalAlign;\n } else if (el.style.verticalAlign) {\n el.style.removeProperty('vertical-align');\n }\n}\n\nexport function getElementClassByPrefix(el: DOMElement, prefix: string) {\n let matchClass = null;\n el.classList.forEach((value, key) => {\n if (value.includes(prefix)) {\n matchClass = value;\n }\n });\n return matchClass;\n}\n","import { Editor, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { HistoryEditor } from 'slate-history';\nimport * as TheQueries from '../queries';\n\nexport const autoFocus = (editor: Editor, isFocus: boolean) => {\n setTimeout(() => {\n if (editor && editor.children.length > 0 && isFocus) {\n HistoryEditor.withoutMerging(editor, () => {\n const path = [0];\n const block = TheQueries.getNode(editor, path);\n const isBlockCard = editor.isBlockCard(block);\n if (isBlockCard) {\n Transforms.select(editor, path);\n AngularEditor.moveBlockCardCursor(editor, path, { direction: 'right' });\n } else {\n Transforms.select(editor, Editor.end(editor, path));\n }\n AngularEditor.focus(editor);\n });\n }\n });\n};\n","import { Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\n\nexport const getEditableElementHeight = (editor: Editor) => {\n const editable = AngularEditor.toDOMNode(editor, editor);\n return editable.clientHeight;\n};\n","import { Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { DEFAULT_SCROLL_CONTAINER } from '../constants';\nimport { getEditableElementHeight } from './get-editable-element-height';\n\nlet previousHeight = 0;\n\n/**\n * reset the sliding distance when the viewport position of the sliding\n * container coincides with the viewport position of the focus element\n */\nexport const scrollIntoView = (editor: Editor, scrollContainer?: string) => {\n const isFocused = AngularEditor.isFocused(editor);\n const nativeSelection = window.getSelection();\n if (!isFocused || !nativeSelection?.focusNode) {\n return;\n }\n\n // fix the page scrolling problem when the associated page card and text status switch in the table\n // the native selection area is abnormal, and the cursor automatically jumps to the left cursor of the block-level element (browser native behavior when switching display)\n // temporary solution: Determine whether the DOM corresponding to the Slate selection area is equal to the DOM corresponding to the browser selection. If they are not equal, it means an abnormal situation, and automatic scrolling will no longer be performed\n const domRange = AngularEditor.toDOMRange(editor, editor.selection);\n if (domRange.startContainer !== nativeSelection.anchorNode) {\n return;\n }\n\n const currentNodeElement = nativeSelection.focusNode.parentElement;\n const scrollContainerElement = currentNodeElement.closest(scrollContainer ?? DEFAULT_SCROLL_CONTAINER);\n\n if (!scrollContainerElement) {\n return;\n }\n const scrollContainerRect = scrollContainerElement.getBoundingClientRect();\n const focusBlockRect = currentNodeElement.getBoundingClientRect();\n const scrollHeight = scrollContainer ? window.innerHeight : scrollContainerRect.bottom;\n const currentHeight = getEditableElementHeight(editor);\n const scrollOffset = scrollHeight - focusBlockRect.bottom;\n if (currentHeight && scrollOffset < 30) {\n // 16 为底部间隔,防止紧贴底部\n scrollContainerElement.scrollTop = scrollContainerElement.scrollTop - scrollOffset + 16;\n }\n\n previousHeight = currentHeight;\n};\n","export const base64toBlob = (b64Data, contentType = '', sliceSize = 512) => {\n const byteCharacters = atob(b64Data);\n const byteArrays = [];\n\n for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {\n const slice = byteCharacters.slice(offset, offset + sliceSize);\n\n const byteNumbers = new Array(slice.length);\n for (let i = 0; i < slice.length; i++) {\n byteNumbers[i] = slice.charCodeAt(i);\n }\n\n const byteArray = new Uint8Array(byteNumbers);\n byteArrays.push(byteArray);\n }\n\n const blob = new Blob(byteArrays, { type: contentType });\n return blob;\n};\n","import { ThyNotifyService } from 'ngx-tethys/notify';\nimport { Editor, Element, Transforms } from 'slate';\nimport { AngularEditor, IS_SAFARI } from 'slate-angular';\n\nexport function copyNode(\n editor: Editor,\n element: Element,\n thyNotifyService?: ThyNotifyService,\n codeMirrorEditor?: CodeMirror.EditorFromTextArea\n) {\n let codePoint: CodeMirror.Position;\n\n if (codeMirrorEditor) {\n codePoint = codeMirrorEditor.getCursor();\n const path = AngularEditor.findPath(editor, element);\n AngularEditor.focus(editor);\n Transforms.select(editor, path);\n }\n\n if (IS_SAFARI) {\n copyNodeForSafari(editor, element);\n }\n\n document.execCommand('copy') ? thyNotifyService.success('复制成功') : thyNotifyService.error('复制失败');\n\n if (IS_SAFARI) {\n window.getSelection().removeAllRanges();\n }\n\n if (codeMirrorEditor) {\n codeMirrorEditor.setCursor(codePoint);\n codeMirrorEditor.focus();\n codeMirrorEditor.refresh();\n }\n}\n\nexport function copyNodeForSafari(editor: Editor, element: Element) {\n const selection = window.getSelection();\n const currentElement = AngularEditor.toDOMNode(editor, element);\n const range = document.createRange();\n\n selection.removeAllRanges();\n range.selectNode(currentElement);\n selection.addRange(range);\n}\n","import { Location, Editor, Transforms, Node, Path } from 'slate';\nimport { HistoryEditor } from 'slate-history';\nimport { AngularEditor } from 'slate-angular';\nimport { TheEditor } from '../interfaces';\nimport { THE_EDITOR_PREVIOUS_SELECTION } from '../utils';\nimport * as TheQueries from '../queries';\n\nexport const reSelection = (editor: TheEditor) => {\n let previousRange = THE_EDITOR_PREVIOUS_SELECTION.get(editor);\n let path: Path = [0];\n let focusNode = TheQueries.getNode(editor, path);\n let focusPath: Location = Editor.start(editor, path);\n if (previousRange) {\n const { selection, rangeRef } = previousRange;\n if (rangeRef.current) {\n path = Editor.path(editor, rangeRef.current);\n focusNode = TheQueries.getNode(editor, path);\n focusPath = rangeRef.unref();\n } else {\n const previousPath = Editor.path(editor, selection);\n path = Path.previous([previousPath[0]]);\n const previousNode = TheQueries.getNode(editor, path);\n if (previousNode) {\n focusPath = Editor.end(editor, path);\n focusNode = previousNode;\n }\n }\n }\n if (focusNode) {\n HistoryEditor.withoutMerging(editor, () => {\n const isBlockCard = editor.isBlockCard(focusNode);\n if (isBlockCard) {\n const path = Editor.path(editor, focusPath).slice(0, 1);\n Transforms.select(editor, path);\n AngularEditor.moveBlockCardCursor(editor, path, { direction: 'left' });\n } else {\n Transforms.select(editor, focusPath);\n }\n });\n }\n};\n\nexport const refocus = (editor: TheEditor) => {\n reSelection(editor);\n AngularEditor.focus(editor);\n};\n","import { Editor, Path, Transforms } from 'slate';\nimport * as TheQueries from '../queries';\nimport { mergeElementOptions } from './merge-element-options';\nimport { DefaultElementOptions } from '../interfaces';\nimport { getPluginOptions } from '../core';\nimport { AngularEditor } from 'slate-angular';\nimport { CustomElementKinds } from '../custom-types';\n\nexport function insertDataByInvalidType(editor, fragment) {\n if (fragment) {\n let allElementOptions = DefaultElementOptions;\n if (editor.extraElementOptions?.length) {\n const extraInfo = mergeElementOptions(editor.extraElementOptions);\n allElementOptions = Object.values(extraInfo);\n }\n if (TheQueries.isAcrossBlocks(editor, fragment) || Editor.isVoid(editor, fragment[0])) {\n const { selection } = editor;\n const [start] = Editor.edges(editor, selection);\n // query whether there is a node to be verified\n const tryVerifyNode = allElementOptions.find(item =>\n TheQueries.getAboveByType(editor, item.type, { at: start, mode: 'lowest' })\n );\n if (tryVerifyNode) {\n // is exist invalid element type in fragment\n const invalidIndex = fragment.findIndex(item => tryVerifyNode.invalidChildrenTypes.includes(item.type));\n if (invalidIndex > -1) {\n const invalidFragmentData = fragment.slice(invalidIndex, fragment.length);\n const allowParentTypes = getPluginOptions(editor, invalidFragmentData[0].type)?.allowParentTypes || [];\n const insertNodePath = TheQueries.getInsertElementsPath(editor, allowParentTypes as CustomElementKinds[]);\n if (insertNodePath) {\n Editor.withoutNormalizing(editor, () => {\n Transforms.insertNodes(editor, fragment, { at: insertNodePath });\n Transforms.select(editor, Editor.start(editor, insertNodePath));\n });\n return false;\n }\n const [, anchorBlockPath] = TheQueries.anchorBlockEntry(editor);\n const nextPath = Path.next([anchorBlockPath[0]]);\n Transforms.insertNodes(editor, fragment, { at: nextPath });\n Transforms.select(editor, Editor.start(editor, nextPath));\n return false;\n }\n }\n Editor.withoutNormalizing(editor, () => {\n const isEmptyParagraph = TheQueries.isEmptyParagraph(editor, editor.selection.anchor);\n const emptyPath = Path.parent(editor.selection.anchor.path);\n Transforms.insertNodes(editor, fragment);\n if (isEmptyParagraph) {\n Transforms.delete(editor, { at: emptyPath });\n const lastPath = emptyPath.pop();\n Transforms.select(editor, [...emptyPath, lastPath + fragment.length - 1]);\n } else {\n const lastPath = emptyPath.pop();\n Transforms.select(editor, [...emptyPath, lastPath + fragment.length]);\n }\n AngularEditor.focus(editor);\n Transforms.collapse(editor, { edge: 'end' });\n });\n return false;\n }\n return true;\n }\n return true;\n}\n","export const isColorPanel = (element: HTMLElement) => {\n const pickerPanel = element.closest('.thy-color-picker-panel');\n const customPickerPanel = element.closest('.thy-color-picker-custom-panel');\n if (pickerPanel || customPickerPanel) {\n return true;\n }\n return false;\n};\n\nexport const isColorIndicator = (element: HTMLElement) => {\n return element.closest('.indicator-hue-alp');\n};\n\nexport const isColorInput = (element: HTMLElement) => {\n return element.closest('.thy-color-inputs');\n};\n","import { TheEditor, ToolbarDefinition, ToolbarEntity, ToolbarInitOption, ToolbarItem, ToolbarKey, ToolbarOption } from '../interfaces';\nimport { getToolbarClass } from '../utils';\nimport { DefaultGlobalToolbarDefinition, DefaultInlineToolbarDefinition } from '../constants/toolbar';\n\nconst toolbarInitialize = (\n toolbarItems: ToolbarItem[],\n global: string[] = DefaultGlobalToolbarDefinition,\n inline: string[] = DefaultInlineToolbarDefinition\n): ToolbarInitOption => {\n const toolbarDefinition = {\n global,\n inline\n };\n\n const toolbarOperations: Map<string, ToolbarItem> = new Map<string, ToolbarItem>();\n toolbarItems.forEach(i => toolbarOperations.set(i.key, i));\n\n const toolbarEntity = nextToolbarEntity(toolbarDefinition, toolbarOperations);\n\n return {\n toolbarDefinition,\n toolbarOperations,\n toolbarEntity\n };\n};\n\nconst nextToolbarEntity = (toolbarDefinition: ToolbarDefinition, toolbarItems: Map<string, ToolbarItem>): ToolbarEntity => {\n const entity: ToolbarEntity = {};\n for (const defKey in toolbarDefinition) {\n entity[defKey] = getToolbarItemByKeys(toolbarDefinition[defKey], toolbarItems);\n }\n return entity;\n};\n\nconst getToolbarItemByKeys = (keys: ToolbarKey[], toolbarItems: Map<string, ToolbarItem>): ToolbarItem[] => {\n const items: ToolbarItem[] = [];\n keys.forEach((key: ToolbarKey) => {\n if (key === `split`) {\n items.push({ key: `split` });\n return;\n }\n const item = toolbarItems.get(key);\n if (item && item.includes) {\n items.push({ ...item, includes: getToolbarItemByKeys(item.includes as ToolbarKey[], toolbarItems) });\n return;\n }\n if (item) {\n items.push(item);\n }\n });\n return items;\n};\n\nexport const createToolbar = (editor: TheEditor, toolbar: ToolbarOption) => {\n const toolbarItems = editor?.plugins.reduce((prevItems, nextPlugin) => {\n prevItems.push(...(nextPlugin?.toolbarItems ?? []));\n return prevItems;\n }, []);\n const toolbarOption = toolbarInitialize(toolbarItems, toolbar?.global, toolbar?.inline);\n const globalToolbarClass = ['the-global-toolbar', getToolbarClass(editor)];\n const toolbarEntity = toolbarOption.toolbarEntity;\n\n return {\n globalToolbarClass,\n toolbarEntity\n };\n};\n","import { Editor } from 'slate';\nimport { PluginKey } from '../interfaces';\nimport { getPluginOptions } from '../core';\nimport { anchorBlock } from './anchor-block';\nimport { CustomElementKinds } from '../custom-types';\n\nexport const getToolbarItemDisabled = (editor: Editor, key: PluginKey, customTypes?: CustomElementKinds[]) => {\n if (editor.selection) {\n let disabledOperateTypes = getPluginOptions(editor, key)?.disabledOperateTypes ?? [];\n if (customTypes?.length) {\n disabledOperateTypes = Array.from(new Set([...disabledOperateTypes, ...customTypes]));\n }\n const anchorNode = anchorBlock(editor);\n return anchorNode && disabledOperateTypes.includes(anchorNode?.type);\n }\n};\n","import { Editor } from 'slate';\nimport { ThePlugin, ToolbarItem } from '../interfaces';\n\nexport const getPluginByToolbarItem = (editor: Editor, toolbarItem: ToolbarItem): ThePlugin => {\n const pluginKey = toolbarItem.pluginKey;\n if (pluginKey) {\n return editor.pluginsByKey[pluginKey];\n }\n for (let key in editor.pluginsByKey) {\n const toolbarItems = editor.pluginsByKey[key].toolbarItems;\n if (toolbarItems && toolbarItems.some(item => item.key === toolbarItem.key)) {\n return editor.pluginsByKey[key];\n }\n }\n};\n","import { Descendant, Node, Element } from 'slate';\nimport { ElementKinds } from '../constants/node-types';\n\nexport const isEmptyContent = (children: Descendant[]) => {\n if (!children || children.length < 1) {\n return true;\n }\n if (children && children.length === 1) {\n const firstNode = children[0] as Element;\n if (firstNode.type === ElementKinds.default && firstNode.children.length === 1 && !Node.string(firstNode)) {\n return true;\n }\n }\n return false;\n};\n","import { Editor, Node } from 'slate';\nimport { ElementKinds } from '../constants';\n\nexport interface FilterRule {\n // 算实际内容的类型\n containTypes?: string[];\n // 是否排除文本的空格\n textSpace?: boolean;\n}\n\nexport const isEmptyContentByFilter = (editor: Editor, rules?: FilterRule) => {\n const { children } = editor;\n if (children.length < 1) {\n return true;\n }\n const defaultTypes = [ElementKinds.code, ElementKinds.table, ElementKinds.image];\n const containTypes = rules?.containTypes ? [...defaultTypes, ...rules.containTypes] : defaultTypes;\n const textSpace = rules?.textSpace !== undefined ? rules.textSpace : true;\n const filterNodes = Array.from(Node.elements(editor));\n\n if (filterNodes.some(n => n[0]?.type && containTypes.includes(n[0].type))) {\n return false;\n }\n\n const nodesEntry = Node.texts(editor);\n const nodes = Array.from(nodesEntry);\n const allText = nodes.reduce((total, text) => (total += text[0].text), '');\n const filterText = textSpace ? allText.replace(/\\s+/g, '') : allText;\n const textLength = filterText?.length ?? 0;\n const isEmptyText = textLength <= 0;\n\n return isEmptyText;\n};\n","import { Directive, HostBinding, Input } from '@angular/core';\nimport { Editor } from 'slate';\nimport { DropdownMode } from '../../constants/toolbar';\nimport { ToolbarItem, ToolbarKey } from '../../interfaces';\nimport * as TheQueries from '../../queries';\n\n@Directive()\nexport abstract class TheBaseToolbarItem {\n @Input()\n set toolbarItem(value: ToolbarItem) {\n this._toolbarItem = value;\n }\n get toolbarItem() {\n return this._toolbarItem;\n }\n\n @Input() editor: Editor;\n\n @Input() itemMousedownHandle: (item: ToolbarItem) => void;\n\n disabled: boolean;\n\n active: string | boolean;\n\n _toolbarItem: ToolbarItem;\n\n @HostBinding('class.disabled') get disabledState() {\n return this.disabled;\n }\n\n @HostBinding('class.active') get activeState() {\n return this.active;\n }\n\n execute(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n selectionChange(editor: Editor = this.editor) {\n if (editor.selection) {\n this.active = this._toolbarItem?.active ? this._toolbarItem?.active(editor) : false;\n if (this._toolbarItem?.disable) {\n this.disabled = this._toolbarItem?.disable ? this._toolbarItem?.disable(editor) : false;\n } else {\n const thePlugin = TheQueries.getPluginByToolbarItem(editor, this._toolbarItem);\n this.disabled = thePlugin && TheQueries.getToolbarItemDisabled(editor, thePlugin.key);\n }\n } else {\n this.active = false;\n }\n }\n}\n\n@Directive()\nexport abstract class TheBaseToolbarDropdown extends TheBaseToolbarItem {\n activeMenuItem: ToolbarItem;\n\n @Input() menus: ToolbarItem[];\n\n @Input() mode: DropdownMode = DropdownMode.text;\n\n @Input() dropdownItemKey: ToolbarKey;\n\n get defaultDropdownItem() {\n const activeItem = this.dropdownItemKey && this.menus.find(item => item.key === this.dropdownItemKey);\n return activeItem ? activeItem : this.menus[0];\n }\n\n selectionChange(editor: Editor) {\n super.selectionChange(editor);\n const activeItem = this.menus.find(i => {\n if (i?.active) {\n return i?.active(editor);\n }\n });\n if (!this.toolbarItem.dropdownFixedIcon) {\n this.activeMenuItem = activeItem ? activeItem : this.defaultDropdownItem;\n }\n }\n}\n","import { Component, OnInit, ElementRef, Input, TemplateRef, ViewChild, ViewContainerRef, HostBinding } from '@angular/core';\nimport { ConnectedPosition, Overlay } from '@angular/cdk/overlay';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor } from 'slate';\nimport { DropdownMode } from '../../constants/toolbar';\nimport { ToolbarItem, ToolbarKey } from '../../interfaces/toolbar';\nimport { TheBaseToolbarDropdown } from '../../core/toolbar-item/base-toolbar-item';\nimport { refocus } from '../../utils';\n\n@Component({\n selector: 'the-toolbar-dropdown',\n templateUrl: './toolbar-dropdown.component.html'\n})\nexport class TheToolbarDropdownComponent extends TheBaseToolbarDropdown implements OnInit {\n @HostBinding('class') className = 'the-toolbar-dropdown-container';\n\n activeKeys: ToolbarKey[] = [];\n\n dropdownMode = DropdownMode;\n\n public dropdownPopoverRef: ThyPopoverRef<any>;\n\n get isOpen() {\n return this.dropdownPopoverRef && this.dropdownPopoverRef.getOverlayRef() && this.dropdownPopoverRef.getOverlayRef().hasAttached();\n }\n\n get activeIcon(): string {\n if (this.toolbarItem.dropdownFixedIcon) {\n return this.toolbarItem.icon;\n }\n return this.activeMenuItem?.icon;\n }\n\n get activeDropdown(): boolean {\n return this.toolbarItem.dropdownFixedIcon && !!this.activeKeys.length;\n }\n\n @ViewChild('iconModeTemplate', { static: true })\n iconModeTemplate: TemplateRef<any>;\n\n @ViewChild('textModeTemplate', { static: true })\n textModeTemplate: TemplateRef<any>;\n\n @ViewChild('dropdownTemplate', { static: true })\n dropdownTemplate: TemplateRef<any>;\n\n constructor(\n public elementRef: ElementRef,\n private thyPopover: ThyPopover,\n private viewContainerRef: ViewContainerRef,\n private overlay: Overlay\n ) {\n super();\n }\n\n ngOnInit() {\n if (!this.activeMenuItem) {\n this.activeMenuItem = this.defaultDropdownItem;\n }\n\n if (this.toolbarItem && this.toolbarItem?.key) {\n this.elementRef.nativeElement?.classList?.add(`${this.toolbarItem?.key}`);\n }\n }\n\n selectionChange(editor: Editor) {\n super.selectionChange(editor);\n this.activeKeys = [];\n for (const menu of this.menus) {\n if (menu?.active && menu?.active(editor)) {\n this.activeKeys.push(menu.key);\n }\n }\n }\n\n toggleDropdown(event: MouseEvent) {\n super.execute(event);\n\n if (this.editor?.disabled || this.disabled) {\n return;\n }\n this.openDropdownPopover(event);\n }\n\n itemMousedown(event: MouseEvent, item: ToolbarItem) {\n super.execute(event);\n\n this.closeDropdownPopover();\n\n if (!this.toolbarItem.dropdownFixedIcon) {\n this.activeMenuItem = item;\n }\n\n if (this.itemMousedownHandle) {\n this.itemMousedownHandle(item);\n return;\n }\n\n if (!this.itemMousedownHandle && !this.editor?.selection) {\n refocus(this.editor);\n }\n\n if (item?.execute) {\n item?.execute(this.editor);\n }\n }\n\n preventDefault(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n openDropdownPopover(event: MouseEvent) {\n this.dropdownPopoverRef = this.thyPopover.open(this.dropdownTemplate, {\n origin: event.currentTarget as HTMLElement,\n panelClass: ['the-toolbar-dropdown-popover', this.toolbarItem?.key],\n originActiveClass: 'active',\n placement: 'bottomLeft',\n insideClosable: false,\n outsideClosable: true,\n backdropClosable: true,\n hasBackdrop: false,\n offset: 4,\n minWidth: 0,\n viewContainerRef: this.viewContainerRef,\n scrollStrategy: this.overlay.scrollStrategies.reposition()\n });\n this.dropdownPopoverRef?.getOverlayRef().updatePositionStrategy(this.createPositionStrategy());\n }\n\n closeDropdownPopover() {\n if (this.dropdownPopoverRef) {\n this.dropdownPopoverRef?.close();\n }\n }\n\n createPositionStrategy() {\n const topPosition: ConnectedPosition = {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetX: 0,\n offsetY: -4\n };\n const bottomPosition: ConnectedPosition = {\n ...topPosition,\n originY: 'bottom',\n overlayY: 'top',\n offsetY: 4\n };\n return this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withFlexibleDimensions(false)\n .withGrowAfterOpen(false)\n .withPush(false)\n .withPositions([bottomPosition, topPosition]);\n }\n}\n","<a\n *ngIf=\"mode === dropdownMode.icon\"\n href=\"javascript:;\"\n class=\"icon-mode\"\n thyAction\n [thyActionIcon]=\"activeIcon\"\n [thyActionActive]=\"activeDropdown\"\n (mousedown)=\"preventDefault($event)\"\n (click)=\"toggleDropdown($event)\"\n>\n <thy-icon *ngIf=\"!toolbarItem.isHideDropdownActionIcon\" class=\"font-size-sm text-desc ml-1\" thyIconName=\"caret-down\"></thy-icon>\n</a>\n<a\n *ngIf=\"mode !== dropdownMode.icon\"\n href=\"javascript:;\"\n class=\"text-mode\"\n thyAction\n (mousedown)=\"preventDefault($event)\"\n (click)=\"toggleDropdown($event)\"\n>\n <span class=\"show-text\">{{ activeMenuItem?.name }}</span>\n <thy-icon class=\"font-size-sm text-desc ml-1\" thyIconName=\"caret-down\"></thy-icon>\n</a>\n\n<ng-template #dropdownTemplate>\n <div class=\"thy-dropdown-menu\">\n <ng-container *ngFor=\"let menu of menus\">\n <a\n *ngIf=\"menu.key !== 'split'\"\n class=\"d-flex justify-content-between text-secondary\"\n href=\"javascript:;\"\n thyDropdownMenuItem\n [ngStyle]=\"menu?.styles\"\n [thyDropdownMenuItemActive]=\"activeKeys.includes(menu.key)\"\n (mousedown)=\"preventDefault($event)\"\n (click)=\"itemMousedown($event, menu)\"\n >\n <div class=\"d-flex align-items-center\">\n <thy-icon\n class=\"text-secondary\"\n *ngIf=\"menu?.icon && mode === dropdownMode.icon\"\n thyDropdownMenuItemIcon\n [thyIconName]=\"menu.icon\"\n ></thy-icon>\n <span class=\"text-body\" *ngIf=\"menu?.name\" thyDropdownMenuItemName>{{ menu.name }}</span>\n </div>\n <div class=\"menu-item-right font-size-sm text-muted\" *ngIf=\"menu?.shortcutKey\">{{ menu.shortcutKey }}</div>\n </a>\n <thy-dropdown-menu-divider *ngIf=\"menu.key === 'split'\"></thy-dropdown-menu-divider>\n </ng-container>\n </div>\n</ng-template>\n","import { Component, HostBinding, HostListener, OnInit } from '@angular/core';\nimport { TheBaseToolbarItem } from '../../core/toolbar-item/base-toolbar-item';\nimport { refocus } from '../../utils';\n\n@Component({\n selector: 'the-toolbar-item',\n template: `\n <a\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"toolbarItem.icon\"\n [thyActionActive]=\"active\"\n [thyTooltip]=\"tooltip\"\n [thyTooltipTemplateContext]=\"{ name: toolbarItem.name, shortcutKey: toolbarItem.shortcutKey }\"\n thyTooltipPlacement=\"top\"\n (mousedown)=\"preventDefault($event)\"\n (click)=\"execute($event)\"\n ></a>\n <ng-template #tooltip let-data> {{ data?.name }} {{ data?.shortcutKey }} </ng-template>\n `\n})\nexport class TheToolbarItemComponent extends TheBaseToolbarItem implements OnInit {\n @HostBinding('class') className = 'the-toolbar-item';\n\n @HostListener('mousedown', ['$event'])\n toggleDropdown(event: MouseEvent) {\n super.execute(event);\n }\n\n constructor() {\n super();\n }\n\n ngOnInit() {}\n\n preventDefault(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n execute(event: MouseEvent) {\n super.execute(event);\n if (this.editor?.disabled || this.disabled || !this.toolbarItem?.execute) {\n return;\n }\n if (!this.itemMousedownHandle && !this.editor?.selection) {\n refocus(this.editor);\n }\n this.toolbarItem?.execute(this.editor);\n }\n}\n","import {\n Component,\n Input,\n OnInit,\n ViewChild,\n ViewContainerRef,\n OnChanges,\n SimpleChanges,\n ComponentRef,\n ElementRef,\n OnDestroy,\n NgZone,\n Inject,\n TemplateRef,\n ChangeDetectorRef,\n HostBinding\n} from '@angular/core';\nimport { ThyDividerComponent } from 'ngx-tethys/divider';\nimport { Editor, Element } from 'slate';\nimport { ComponentType } from 'slate-angular';\nimport { ToolbarAlignment, ToolbarItem, ToolbarItemsComposeReturn, ToolbarItemType } from '../../interfaces/toolbar';\nimport { TheToolbarGroupToken, ToolbarMoreGroup } from '../../constants/toolbar';\nimport { ElementKinds, ToolbarActionTypes } from '../../constants/node-types';\nimport { TheToolbarItemComponent } from '../toolbar-item/toolbar-item.component';\nimport { TheToolbarDropdownComponent } from '../toolbar-dropdown/toolbar-dropdown.component';\nimport type { TheToolbarGroupComponent } from '../toolbar-group/toolbar-group.component';\nimport { TheBaseToolbarItem, TheBaseToolbarDropdown } from '../../core/toolbar-item/base-toolbar-item';\n\n@Component({\n selector: 'the-toolbar',\n templateUrl: 'toolbar.component.html',\n host: {\n class: 'the-toolbar-container d-flex align-items-center'\n }\n})\nexport class TheToolbarComponent implements OnInit, OnChanges, OnDestroy {\n @Input() editor: Editor;\n\n @Input() toolbarItems: ToolbarItem[] = [];\n\n @Input() align: ToolbarAlignment;\n\n @Input() containerClass: string[] = [];\n\n @Input() isMore = true;\n\n @Input() afterTemplate: TemplateRef<any>;\n\n @ViewChild('toolbarContainer', { read: ViewContainerRef, static: true }) toolbarContainer: ViewContainerRef;\n\n @HostBinding('style.justifyContent') get justifyContent() {\n return this.align;\n }\n\n components: Map<string, ComponentRef<any>> = new Map<string, ComponentRef<any>>();\n\n composeToolbarItems: ToolbarItemsComposeReturn;\n\n moreGroupMenu = ToolbarMoreGroup;\n\n resizeObserver: ResizeObserver;\n\n elementWidth = 0;\n\n constructor(\n private cdr: ChangeDetectorRef,\n private elementRef: ElementRef,\n private ngZone: NgZone,\n @Inject(TheToolbarGroupToken) private toolbarGroupComponent: ComponentType<TheToolbarGroupComponent>\n ) {}\n\n ngOnInit() {\n this.setToolbarClass();\n this.renderToolbarView();\n this.selectionChange(this.editor);\n this.isMore && this.resizeElement();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const toolbarItems = changes.toolbarItems;\n if (toolbarItems && !toolbarItems.firstChange) {\n this.renderToolbarView();\n }\n }\n\n ngOnDestroy(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n }\n\n public setToolbarClass() {\n if (this.editor && !!this.containerClass.length) {\n this.elementRef.nativeElement.classList.add(...this.containerClass);\n }\n }\n\n private resizeElement() {\n const editableElement = this.elementRef.nativeElement;\n // @ts-ignore\n this.resizeObserver = new ResizeObserver(entries => {\n for (let entry of entries) {\n const { width } = entry.contentRect;\n if (this.isMore && this.elementWidth !== width) {\n this.elementWidth = width;\n this.renderToolbarView();\n }\n }\n });\n this.resizeObserver.observe(editableElement);\n }\n\n private isTableActive() {\n const [table] = Editor.nodes(this.editor, { match: n => Element.isElement(n) && n.type === ElementKinds.table });\n return !!table;\n }\n\n public selectionChange(editor: Editor) {\n if (this.isMore) {\n this.renderToolbarView();\n }\n\n const toolbarItems = [...this.toolbarItems, this.moreGroupMenu];\n for (const item of toolbarItems) {\n if (item.key !== ToolbarActionTypes.split) {\n const itemComponent = this.components.get(item.key);\n if (itemComponent && itemComponent.instance.selectionChange) {\n itemComponent.instance.selectionChange(editor);\n }\n }\n }\n }\n\n public renderToolbarView(): void {\n const toolbarItems = this.toolbarItemsCompose();\n const { items, group } = toolbarItems;\n\n if (items.length === this.composeToolbarItems?.items?.length && group?.length === this.composeToolbarItems?.group?.length) {\n return;\n }\n this.composeToolbarItems = toolbarItems;\n this.components.clear();\n this.toolbarContainer.clear();\n\n this.ngZone.run(() => {\n for (const item of items) {\n if (item.key === ToolbarActionTypes.split) {\n this.createToolbarSplit();\n continue;\n }\n this.createToolbarItem(item);\n }\n this.createMoreGroup(group);\n this.cdr.markForCheck();\n });\n }\n\n /**\n * calculation display toolbar and more grouped toolbars\n *\n *\t┌──────────────────────────────────────── GlobalToolbarView ───────────────────────────────────┐\n *\t| ┌─────────────────────────────────────── #children ─────────────────────────────────────────┐ |\n *\t| | ┌─────── #itemsView ────────┐ ┌──────────────────────┐ ┌── #groupedItemsDropdown ───┐ | |\n *\t| | | #ungroupedItems | | ToolbarSeparatorView | | #groupedItems | | |\n *\t| | └──────────────────────────-┘ └──────────────────────┘ └────────────────────────────┘ | |\n *\t| | \\---------- only when toolbar items overflow --------/ | |\n *\t| └───────────────────────────────────────────────────────────────────────────────────────────┘ |\n *\t└───────────────────────────────────────────────────────────────────────────────────────────────┘\n * split width: 13px\n * item width: default item: 32px; dropdown item: 48px\n * default paddingRight: 4px\n * set aside 50px\n */\n private toolbarItemsCompose(): ToolbarItemsComposeReturn {\n let elementWidth = this.isMore ? this.elementWidth : null;\n // dropdown item + paddingRight\n const maxItemWidth = 52;\n // default item + paddingRight\n const defaultItemWidth = 36;\n const splitWidth = 13;\n const items: ToolbarItem[] = [];\n const group: ToolbarItem[] = [];\n\n for (let i = 0; i < this.toolbarItems.length; i++) {\n const item = this.toolbarItems[i];\n if (!this.isMore) {\n items.push(item);\n continue;\n }\n\n let itemWidth = defaultItemWidth;\n\n switch (item.key) {\n case ElementKinds.headingList:\n itemWidth = 74;\n break;\n case ToolbarActionTypes.split:\n itemWidth = splitWidth;\n break;\n case ToolbarActionTypes.verticalAlign:\n itemWidth = this.isTableActive() ? maxItemWidth : 0;\n break;\n default:\n const isCustomComponent = item?.type === ToolbarItemType.dropdown || !!item?.iconComponent;\n itemWidth = isCustomComponent ? maxItemWidth : defaultItemWidth;\n }\n\n const remainingWidth = i === this.toolbarItems.length - 1 ? itemWidth : itemWidth + splitWidth;\n const allowRender = elementWidth && elementWidth >= remainingWidth;\n elementWidth -= itemWidth;\n\n if (allowRender) {\n items.push(item);\n } else {\n const isFirstSplit = group.length === 0 && item.key === ToolbarActionTypes.split;\n !isFirstSplit && group.push(item);\n }\n }\n\n return {\n items: this.pureToolbarItems(items),\n group\n };\n }\n\n /**\n * externally designated more group\n */\n private toolbarItemsAndMoreCompose() {\n const items = [];\n const group = [];\n\n for (const item of this.toolbarItems) {\n if (item.key === ToolbarActionTypes.split) {\n items.push(item);\n continue;\n }\n items.push(item);\n }\n\n return {\n items: this.pureToolbarItems(items),\n group\n };\n }\n\n /**\n * filter adjacent repeated dividers\n * @param {ToolbarItem[]} items\n * @returns\n * @memberof TheToolbarComponent\n */\n pureToolbarItems(items: ToolbarItem[]) {\n if (!Array.isArray(items)) {\n return [];\n }\n return items.filter((a, i) => {\n if (i > 0 && items[i - 1].key !== ToolbarActionTypes.split) {\n return true;\n }\n return a.key !== ToolbarActionTypes.split;\n });\n }\n\n private createToolbarItem(item: ToolbarItem) {\n const { iconComponent, type, dropdownMode, dropdownItemKey, includes, ...args } = item;\n const viewComponent = this.viewComponentType(type);\n const compRef = this.toolbarContainer.createComponent<TheBaseToolbarItem>(iconComponent ? iconComponent : viewComponent);\n\n compRef.instance.editor = this.editor;\n compRef.instance.toolbarItem = item;\n this.components.set(item.key, compRef);\n if (item.type === ToolbarItemType.dropdown) {\n const dropdownRef = compRef as unknown as ComponentRef<TheBaseToolbarDropdown>;\n dropdownRef.instance.dropdownItemKey = item.dropdownItemKey;\n dropdownRef.instance.menus = includes as ToolbarItem[];\n dropdownRef.instance.mode = dropdownMode;\n }\n }\n\n private createToolbarSplit() {\n const compRef = this.toolbarContainer.createComponent(ThyDividerComponent);\n compRef.instance.thyVertical = true;\n compRef.location.nativeElement.classList.add('mx-2');\n }\n\n private createMoreGroup(group: ToolbarItem[]) {\n if (group.length > 0) {\n const compRef = this.toolbarContainer.createComponent(this.toolbarGroupComponent);\n compRef.instance.editor = this.editor;\n compRef.instance.menus = group;\n compRef.instance.item = this.moreGroupMenu;\n this.components.set(this.moreGroupMenu.key, compRef);\n }\n }\n\n private viewComponentType(type: ToolbarItemType) {\n if (type === ToolbarItemType.default) {\n return TheToolbarItemComponent;\n }\n if (type === ToolbarItemType.dropdown) {\n return TheToolbarDropdownComponent;\n }\n return TheToolbarItemComponent;\n }\n}\n","<ng-container #toolbarContainer></ng-container>\n<ng-content></ng-content>\n<ng-template *ngIf=\"afterTemplate\" [ngTemplateOutlet]=\"afterTemplate\"></ng-template>\n","import { Injectable, NgZone, OnDestroy, ViewContainerRef } from '@angular/core';\nimport { fromEvent, Observable, Subject, Subscription } from 'rxjs';\nimport { TheOptions } from '../interfaces/editor';\nimport { FontSizes, MarkTypes, ScrollDirection } from '../constants/node-types';\nimport { takeUntil } from 'rxjs/operators';\n\nexport interface TheContextOptions {\n theOptions: TheOptions;\n nativeElement: HTMLElement;\n viewContainerRef: ViewContainerRef;\n width?: number;\n}\n\ninterface PaintFormatStatus {\n isActive: boolean;\n marks: { [key in MarkTypes]?: any };\n}\n\n@Injectable()\nexport class TheContextService implements OnDestroy {\n private scrollSubscription?: Subscription;\n\n private destroy$: Subject<void> = new Subject();\n\n private options: TheContextOptions;\n\n public uploadingFiles: { url: string; file: File }[] = [];\n\n public paintFormatStatus: PaintFormatStatus = {\n isActive: false,\n marks: {}\n };\n\n public onMouseUp$: Observable<MouseEvent>;\n\n public onMouseMove$: Observable<MouseEvent>;\n\n public onMouseDown$: Observable<MouseEvent>;\n\n public containerScrolled$ = new Subject<{ event: Event; direction: ScrollDirection }>();\n\n public uploadingStatus$ = new Subject<boolean>();\n\n public containerResized$ = new Subject<{ entry: ResizeObserverEntry; widthChanged: boolean; heightChanged: boolean }>();\n\n public theEditorResized$ = new Subject<{ entry: ResizeObserverEntry; widthChanged: boolean; heightChanged: boolean }>();\n\n public windowResized$ = new Subject<{ entry: ResizeObserverEntry; widthChanged: boolean; heightChanged: boolean }>();\n\n private containerResizeObserver: ResizeObserver;\n\n private theEditorResizeObserver: ResizeObserver;\n\n private windowResizeObserver: ResizeObserver;\n\n constructor(private ngZone: NgZone) {\n this.ngZone.runOutsideAngular(() => {\n this.onMouseUp$ = fromEvent<MouseEvent>(window, `mouseup`).pipe(takeUntil(this.destroy$));\n this.onMouseMove$ = fromEvent<MouseEvent>(window, `mousemove`).pipe(takeUntil(this.destroy$));\n this.onMouseDown$ = fromEvent<MouseEvent>(window, `mousedown`).pipe(takeUntil(this.destroy$));\n });\n }\n\n public initialize(options: TheContextOptions) {\n this.options = options;\n this.rebindContainerScroll();\n this.bindContainerResize();\n this.bindTheEditorResize();\n this.bindWindowResize();\n }\n\n getScrollContainer(): HTMLElement {\n return (\n this.options.nativeElement.closest(this.options.theOptions?.scrollContainer) ||\n this.options.nativeElement.querySelector(this.options.theOptions?.scrollContainer)\n );\n }\n\n rebindContainerScroll() {\n this.scrollSubscription?.unsubscribe();\n if (this.options.theOptions?.scrollContainer) {\n const containerElement = this.getScrollContainer();\n if (containerElement) {\n this.ngZone.runOutsideAngular(() => {\n let previousContainerScroll = { x: 0, y: 0 };\n this.scrollSubscription = fromEvent<Event>(containerElement, 'scroll').subscribe(event => {\n const entires = { event, direction: ScrollDirection.Y };\n const target = event.target as HTMLElement;\n const [x, y] = [target.scrollLeft, target.scrollTop];\n if (x !== previousContainerScroll.x) {\n entires.direction = ScrollDirection.X;\n }\n if (y !== previousContainerScroll.y) {\n entires.direction = ScrollDirection.Y;\n }\n previousContainerScroll = { x, y };\n this.containerScrolled$.next(entires);\n });\n });\n }\n }\n }\n\n bindContainerResize() {\n const containerElement = this.getScrollContainer();\n if (containerElement) {\n this.containerResizeObserver = this.elementResize(containerElement, this.containerResized$);\n }\n }\n\n bindTheEditorResize() {\n this.theEditorResizeObserver = this.elementResize(this.options.nativeElement, this.theEditorResized$);\n }\n\n bindWindowResize() {\n this.windowResizeObserver = this.elementResize(document.documentElement, this.windowResized$);\n }\n\n private elementResize(\n element: HTMLElement,\n subject: Subject<{ entry: ResizeObserverEntry; widthChanged: boolean; heightChanged: boolean }>\n ) {\n let previousContainerRect = element.getBoundingClientRect();\n const resizeObserver = new ResizeObserver(entires => {\n const currentRect = entires[0].contentRect;\n const result = { entry: entires[0], widthChanged: false, heightChanged: false };\n if (currentRect.width !== previousContainerRect.width) {\n result.widthChanged = true;\n }\n if (currentRect.height !== previousContainerRect.height) {\n result.heightChanged = true;\n }\n previousContainerRect = currentRect;\n subject.next(result);\n });\n resizeObserver.observe(element);\n return resizeObserver;\n }\n\n public getOptions() {\n if (!this.options.width) {\n const firstElementChild = this.getFirstElementChild();\n this.options.width = firstElementChild.offsetWidth;\n }\n return this.options;\n }\n\n public getTheOptions() {\n return this.options.theOptions;\n }\n\n public getDefaultFontSize() {\n return this.options.theOptions?.fontSize || FontSizes.fontSize14;\n }\n\n public getEditableElement() {\n return this.options.nativeElement.querySelector('.the-editor-typo');\n }\n\n public getFirstElementChild() {\n const editableElement = this.getEditableElement();\n return editableElement?.firstElementChild as HTMLElement;\n }\n\n addUploadingFiles(file: { url: string; file: File }) {\n this.uploadingFiles.push(file);\n }\n\n removeUploadFile(file: { url: string; file: File }) {\n this.uploadingFiles.splice(\n this.uploadingFiles.findIndex(item => item.url === file.url),\n 1\n );\n }\n\n ngOnDestroy(): void {\n this.uploadingStatus$.complete();\n this.containerScrolled$?.complete();\n this.theEditorResized$?.complete();\n this.containerResized$?.complete();\n this.containerResizeObserver?.disconnect();\n this.theEditorResizeObserver?.disconnect();\n this.windowResized$?.complete();\n this.windowResizeObserver?.disconnect();\n this.scrollSubscription?.unsubscribe();\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ComponentType } from 'slate-angular';\nimport { TheBaseElementComponent } from '../../interfaces/view-base';\nimport { ElementKinds } from '../../constants/node-types';\nimport type { TheTableComponent } from './components/table.component';\nimport { Editor, Element } from 'slate';\nimport { Observable } from 'rxjs';\n\nexport const THE_TABLE_COMPONENT_TOKEN = new InjectionToken<ComponentType<TheTableComponent>>('the-Table-token');\n\nexport const HEADER_CELL_CLASS = 'the-header-cell';\n\nexport const TOP_CELL_CLASS = 'the-top-cell';\n\nexport enum TableOperations {\n headerRow = 'headerRow',\n\n headerColumn = 'headerColumn',\n\n numberedColumn = 'numberedColumn'\n}\nexport interface TheTableComponentBase extends TheBaseElementComponent {\n initializeColumns: () => void;\n transformColumnsWidth: () => void;\n initializeRows: () => void;\n transformRowHeight: () => void;\n}\n\nexport const BASE_CELL_HEIGHT = 41; // min height\nexport const BASE_FILL_HEIGHT = 2 * 8 + 1; // padding * 2 + border 1\nexport const BASE_CELL_INNER_HEIGHT = BASE_CELL_HEIGHT - BASE_FILL_HEIGHT; // 24\nexport const TABLE_INSERT_MASK = 19;\nexport const TABLE_BORDER = 1;\nexport const TABLE_PADDING = 8;\nexport const TABLE_CONTROL = 11;\nexport const TABLE_NUMBER_COLUMN = 45;\n\nexport const TableWithStickyRowClass = 'the-table-with-sticky-row';\n\nexport interface TheTableColumn {\n width: number;\n}\n\nexport interface TheTableOptions {\n headerRow?: boolean;\n headerColumn?: boolean;\n numberedColumn?: boolean;\n}\n\nexport interface MenuEntity {\n icon: string;\n name: string;\n key: string;\n divider?: boolean;\n extendIcon?: string;\n visibility?: boolean;\n isInputNumber?: boolean;\n nameSuffix?: string;\n count?: number;\n backgroundColor?: string;\n actionHandle: (entity: MenuEntity) => void;\n activeHandle?: (event: MouseEvent, entity?: MenuEntity) => void;\n deactivateHandle?: (event: MouseEvent) => void;\n}\n\nexport enum FullscreenState {\n on = 'on',\n off = 'off'\n}\n\nexport interface ThePluginTableOption {\n freezeColumnHeader?: boolean; // 标题列后滚动是否支持冻结\n freezeRowHeader?: boolean; // 标题行后滚动是否支持冻结\n // 后期插件的工具栏支持外部自定义时可以删除\n showFullscreen?: boolean;\n setFullscreen?: (editor: Editor, event: MouseEvent, element: Element) => void;\n fullscreenAction?: (editor: Editor) => Observable<{ element: Element | undefined; state: FullscreenState }>;\n}\n\nexport interface CellPosition {\n row: number;\n col: number;\n}\n\nexport interface TableDropdownOption {\n name: string;\n key: string;\n isActive?: boolean;\n}\n\nexport interface TableOptionsFormat {\n typeTable?: ElementKinds.table;\n typeRow?: ElementKinds.tableRow;\n typeCell?: ElementKinds.tableCell;\n typeContent?: ElementKinds.tableContent;\n exitBlockType?: string;\n defaultWidth?: number;\n minWidth?: number;\n maxWidth?: number;\n}\n\nexport class TableOptions {\n // The type of table blocks\n typeTable: ElementKinds.table = ElementKinds.table;\n // The type of row blocks\n typeRow: ElementKinds.tableRow = ElementKinds.tableRow;\n // The type of cell blocks\n typeCell: ElementKinds.tableCell = ElementKinds.tableCell;\n // The default type for blocks in cells\n typeContent: ElementKinds.tableContent = ElementKinds.tableContent;\n // The type of block inserted when exiting\n exitBlockType: ElementKinds.paragraph = ElementKinds.paragraph;\n\n defaultWidth = 200;\n\n minWidthPx = 52;\n\n maxWidthPx = 1000;\n\n minHeightPx = 41;\n\n maxHeightPx = 1000;\n\n constructor(options?: TableOptionsFormat) {\n if (!options) {\n return;\n }\n const { typeTable, typeRow, typeCell, typeContent } = options;\n this.typeTable = typeTable;\n this.typeRow = typeRow;\n this.typeCell = typeCell;\n this.typeContent = typeContent;\n }\n}\n\nexport enum TableInsertType {\n insertRowsUp = 'insert-rows-up',\n insertRowsDown = 'insert-rows-down',\n insertColumnsLeft = 'insert-columns-left',\n insertColumnsRight = 'insert-columns-right'\n}\n","import { Text } from 'slate';\nimport { TableCellElement } from '../../../custom-types';\nimport { TableOptions } from '../table.types';\n\n/**\n * Create a new cell\n */\nexport function createCell(opts: TableOptions, nodes?: Text[]): TableCellElement {\n return {\n type: opts.typeCell,\n children: nodes || [createEmptyContent(opts)]\n };\n}\n\n/**\n * Create a new default content block\n */\nexport function createEmptyContent(opts: TableOptions) {\n return {\n type: opts.typeContent,\n children: [{ text: '' }]\n };\n}\n","import { Text } from 'slate';\nimport { TableRowElement } from '../../../custom-types';\nimport { TableOptions } from '../table.types';\nimport { createCell } from './create-cell';\n\n/**\n * Create a new row block\n */\nexport function createRow(opts: TableOptions, columns: number, getCellContent?: (column: number) => Text[]): TableRowElement {\n const cellNodes = new Array(columns).fill(1).map(i => createCell(opts, getCellContent ? getCellContent(i) : undefined));\n\n return {\n type: opts.typeRow,\n children: cellNodes\n };\n}\n","import { Node } from 'slate';\nimport { TableElement } from '../../../custom-types';\nimport { TableOptions } from '../table.types';\nimport { createRow } from './create-row';\n\n/**\n * Create a table\n */\nexport function createTable(\n opts: TableOptions,\n columns: number,\n rows: number,\n getCellContent?: (row: number, column: number) => Node[]\n): TableElement {\n const rowNodes = new Array(rows).fill(1).map(i => createRow(opts, columns, getCellContent ? getCellContent.bind(null, i) : undefined));\n\n return {\n type: opts.typeTable,\n children: rowNodes,\n options: {\n headerRow: true\n }\n };\n}\n","import { Node, Path, NodeEntry, Element } from 'slate';\nimport { TableCellElement, TableElement, TableRowElement } from '../../../custom-types';\nimport { CellPosition, TableOptions } from '../table.types';\n\nexport class TablePosition {\n // TheElement container for the table\n tableEntry?: NodeEntry<TableElement>;\n\n // TheElement for current row\n rowEntry?: NodeEntry<Element>;\n\n // TheElement for current cell\n cellEntry?: NodeEntry<TableCellElement>;\n\n // Current content TheElement in the cell\n contentEntry?: NodeEntry<Element>;\n\n constructor(\n options = {\n tableEntry: null,\n rowEntry: null,\n cellEntry: null,\n contentEntry: null\n }\n ) {\n const { tableEntry, rowEntry, cellEntry, contentEntry } = options;\n this.tableEntry = tableEntry;\n this.rowEntry = rowEntry;\n this.cellEntry = cellEntry;\n this.contentEntry = contentEntry;\n }\n\n /**\n * Create a new instance of a TablePosition from a Slate document\n * and a node key.\n */\n static create(opts: TableOptions, containerNode: Node, path: Path): TablePosition {\n const ancestors = Array.from(Node.ancestors(containerNode, path));\n const tableEntry = ancestors.find(([p]) => Element.isElement(p) && p.type === opts.typeTable) || [];\n const rowEntry = ancestors.find(([p]) => Element.isElement(p) && p.type === opts.typeRow) || [];\n const cellEntry = ancestors.find(([p]) => Element.isElement(p) && p.type === opts.typeCell) || [];\n const contentEntry = ancestors.find(([p]) => Element.isElement(p) && p.type === opts.typeContent) || [];\n\n return new TablePosition({\n tableEntry,\n rowEntry,\n cellEntry,\n contentEntry\n });\n }\n\n get table(): TableElement {\n if (!this.tableEntry) {\n throw new Error('Not in a table');\n }\n return this.tableEntry[0];\n }\n\n get row(): TableRowElement {\n if (!this.rowEntry) {\n throw new Error('Not in a row');\n }\n return this.rowEntry[0] as TableRowElement;\n }\n\n get cell(): TableCellElement {\n if (!this.cellEntry) {\n throw new Error('Not in a cell');\n }\n return this.cellEntry[0];\n }\n\n /**\n * Check to see if this position is within a cell\n */\n isInCell(): boolean {\n return Boolean(this.cellEntry.length > 0);\n }\n\n /**\n * Check to see if this position is within a row\n */\n isInRow(): boolean {\n return Boolean(this.rowEntry.length > 0);\n }\n\n /**\n * Check to see if this position is within a table\n */\n isInTable(): boolean {\n return Boolean(this.tableEntry.length > 0);\n }\n\n /**\n * Check to see if this position is at the top of the cell.\n */\n isTopOfCell(): boolean {\n const { contentEntry, cellEntry } = this;\n\n if (!contentEntry || !cellEntry) {\n return false;\n }\n\n const { children } = cellEntry[0];\n const index = children.findIndex(content => content === contentEntry[0]);\n\n return index === 0;\n }\n\n /**\n * Check to see if this position is at the bottom of the cell.\n */\n isBottomOfCell(): boolean {\n const { contentEntry, cellEntry } = this;\n\n if (!contentEntry || !cellEntry) {\n return false;\n }\n\n const { children } = cellEntry[0];\n const index = children.findIndex(content => content === contentEntry[0]);\n\n return index === children.length - 1;\n }\n\n /**\n * Get count of columns\n */\n getWidth(): number {\n const { table } = this;\n const rows = table.children;\n const cells = rows[0].children as Node[];\n\n return cells.length;\n }\n\n /**\n * Get count of rows\n */\n getHeight(): number {\n const { table } = this;\n const rows = table.children;\n\n return rows.length;\n }\n\n /**\n * Get index of current row in the table.\n */\n getRowIndex(): number {\n const { table, row } = this;\n const rows = table.children;\n\n return rows.findIndex(x => x === row);\n }\n\n /**\n * Get index of current column in the row.\n */\n getColumnIndex(): number {\n const { row, cell } = this;\n const cells = row.children;\n\n return cells.findIndex(x => x === cell);\n }\n\n /**\n * find current above column in the table\n */\n findAbove() {\n const { table } = this;\n const rowIndex = this.getRowIndex();\n const columnIndex = this.getColumnIndex();\n let y = 0;\n let t = table.children[rowIndex].children[columnIndex];\n while (t) {\n y++;\n if (table.children[rowIndex - y] && table.children[rowIndex - y].children[columnIndex]) {\n t = table.children[rowIndex - y].children[columnIndex];\n return t;\n }\n return;\n }\n }\n\n findNext() {\n const { table } = this;\n let rowIndex = this.getRowIndex();\n let columnIndex = this.getColumnIndex();\n let nextCell = this.cell;\n while (nextCell && nextCell.hidden) {\n if (columnIndex + 1 < this.getWidth()) {\n columnIndex++;\n nextCell = this.table.children[rowIndex].children[columnIndex];\n } else if (rowIndex + 1 < this.getHeight()) {\n columnIndex = 0;\n rowIndex++;\n nextCell = this.table.children[rowIndex].children[columnIndex];\n } else {\n nextCell = null;\n }\n }\n return nextCell;\n }\n\n findPrevious() {\n const { table } = this;\n let rowIndex = this.getRowIndex();\n let columnIndex = this.getColumnIndex();\n let previousCell = this.cell;\n while (previousCell && previousCell.hidden) {\n if (columnIndex - 1 >= 0) {\n columnIndex--;\n previousCell = this.table.children[rowIndex].children[columnIndex];\n } else {\n columnIndex = this.getWidth() - 1;\n rowIndex--;\n previousCell = this.table.children[rowIndex].children[columnIndex];\n }\n }\n return previousCell;\n }\n\n /**\n * find current below column in the table\n */\n findBelow() {\n const { table } = this;\n const rowIndex = this.getRowIndex();\n const columnIndex = this.getColumnIndex();\n let y = 0;\n let t = table.children[rowIndex].children[columnIndex];\n while (t) {\n y++;\n if (table.children[rowIndex + y] && table.children[rowIndex + y].children[columnIndex]) {\n t = table.children[rowIndex + y].children[columnIndex];\n return t;\n }\n return;\n }\n }\n\n /**\n * True if on first cell of the table\n */\n isFirstCell(): boolean {\n return this.isFirstRow() && this.isFirstColumn();\n }\n\n /**\n * True if on last cell of the table\n */\n isLastCell(): boolean {\n return this.isLastRow() && this.isLastColumn();\n }\n\n /**\n * True if on first row\n */\n isFirstRow(): boolean {\n return this.getRowIndex() === 0;\n }\n\n /**\n * True if on last row\n */\n isLastRow(): boolean {\n return this.getRowIndex() === this.getHeight() - 1;\n }\n\n /**\n * True if on first column\n */\n isFirstColumn(): boolean {\n return this.getColumnIndex() === 0;\n }\n\n /**\n * True if on last column\n */\n isLastColumn(): boolean {\n return this.getColumnIndex() === this.getWidth() - 1;\n }\n\n /**\n * find cell data with col and row\n */\n\n findCellByPath(cell: CellPosition): TableCellElement {\n return this.table.children[cell.row].children[cell.col] as TableCellElement;\n }\n}\n","import { Editor, Path } from 'slate';\nimport { TableOptions } from '../table.types';\nimport { TablePosition } from './table-position';\n\nexport const createTablePosition = (editor: Editor, path?: Path): TablePosition => {\n path = path || editor.selection.anchor?.path;\n if (!path) {\n throw new Error('Path invalid');\n }\n return TablePosition.create(new TableOptions(), editor, path);\n};\n","import { Editor, Node, Range } from 'slate';\nimport { TableOptions } from '../table.types';\nimport { createTablePosition } from './create-table-position';\nimport { TablePosition } from './table-position';\n\n/**\n * True if the given range is inside one table\n */\nexport function isRangeInTable(opts: TableOptions, editor: Editor, range: Range): boolean {\n const { focus } = range;\n const startPosition = createTablePosition(editor);\n const endPosition = createTablePosition(editor, focus.path);\n\n // Only handle events in tables\n if (!startPosition.isInTable() || !endPosition.isInTable()) {\n return false;\n }\n\n // Inside the same table\n return startPosition.table === endPosition.table;\n}\n","import { Editor } from 'slate';\nimport { CellPosition, TableOptions } from '../table.types';\nimport { createTablePosition } from './create-table-position';\nimport { isRangeInTable } from './is-range-in-table';\nimport { TablePosition } from './table-position';\n\n/**\n * Is the selection in a table\n */\nexport function isSelectionInTable(opts: TableOptions, editor: Editor): boolean {\n if (!editor.selection) {\n return false;\n }\n return isRangeInTable(opts, editor, editor.selection);\n}\n\n/**\n * Whether the cells passed in can form a rectangle\n * @param editor\n * @param cells\n * @returns boolean\n */\nexport function isRectangularInTableCells(editor: Editor, cells: CellPosition[]): boolean {\n let selectCellSize = cells.length;\n if (selectCellSize === 0) {\n return false;\n }\n const { row, col } = cells[0];\n let maxCol: number = col;\n let minCol: number = col;\n let maxRow: number = row;\n let minRow: number = row;\n const pos = createTablePosition(editor);\n for (let { row, col } of cells) {\n const { hidden, rowspan, colspan } = pos.findCellByPath({ row, col });\n\n if (hidden) {\n selectCellSize--;\n continue;\n }\n\n if (rowspan || colspan) {\n const colSpan = colspan ?? 1;\n const rowSpan = rowspan ?? 1;\n // 更新视觉选中的个数\n selectCellSize = selectCellSize + (rowSpan * colSpan - 1);\n // 纠正合并单元格下的 row 和 col 的真实值\n row = row + rowSpan - 1;\n col = col + colSpan - 1;\n }\n maxCol = col > maxCol ? col : maxCol;\n minCol = col < minCol ? col : minCol;\n maxRow = row > maxRow ? row : maxRow;\n minRow = row < minRow ? row : minRow;\n }\n return (maxRow + 1 - minRow) * (maxCol + 1 - minCol) === selectCellSize;\n}\n","import { TableCellElement, TableElement } from '../../../custom-types';\n\nexport interface CellRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport function calcSpanForRow(table: TableElement, targetIndex: number) {\n const rowspans = [];\n table.children\n .filter((row, rowIndex) => rowIndex < targetIndex)\n .forEach((row, rowIndex) => {\n row.children.forEach((cell: TableCellElement, columnIndex) => {\n if (cell.rowspan && cell.rowspan > 1) {\n const rect = {\n x: rowIndex,\n y: columnIndex,\n width: cell.colspan || 1,\n height: cell.rowspan || 1\n };\n rowspans.push(rect);\n }\n });\n });\n return table.children[0].children.map((cell, columnIndex) => {\n return rowspans.some(rowspan => isInside(rowspan, targetIndex, columnIndex));\n });\n}\n\nexport function calcSpanForColumn(table: TableElement, targetIndex: number) {\n const rowspans = [];\n table.children.forEach((row, rowIndex) => {\n row.children\n .filter((cell, columnIndex) => columnIndex < targetIndex)\n .forEach((cell: TableCellElement, columnIndex) => {\n if (cell.colspan && cell.colspan > 1) {\n const rect = {\n x: rowIndex,\n y: columnIndex,\n width: cell.colspan || 1,\n height: cell.rowspan || 1\n };\n rowspans.push(rect);\n }\n });\n });\n return table.children.map((cell, rowIndx) => {\n return rowspans.some(rowspan => isInside(rowspan, rowIndx, targetIndex));\n });\n}\n\nexport function getOriginCell(table: TableElement, targetRowIndex: number, targetColumnIndex: number) {\n for (let rowIndex = 0; rowIndex <= targetRowIndex; rowIndex++) {\n const row = table.children[rowIndex];\n const originCell = row.children\n .filter((cell, columnIndex) => columnIndex <= targetColumnIndex)\n .find((cell: TableCellElement, columnIndex) => {\n if (cell.rowspan > 1 || cell.colspan > 1) {\n const rect = {\n x: rowIndex,\n y: columnIndex,\n width: cell.colspan || 1,\n height: cell.rowspan || 1\n };\n return isInside(rect, targetRowIndex, targetColumnIndex);\n }\n });\n if (originCell) {\n return originCell;\n }\n }\n}\n\nexport function isInside(cellRect: CellRect, rowIndex: number, columnIndex: number): boolean {\n if (\n rowIndex >= cellRect.x &&\n rowIndex <= cellRect.x + cellRect.height - 1 &&\n columnIndex >= cellRect.y &&\n columnIndex <= cellRect.y + cellRect.width - 1\n ) {\n return true;\n }\n return false;\n}\n","import { isKeyHotkey } from 'is-hotkey';\n\nexport function isVirtualKey(e: KeyboardEvent) {\n const isMod = e.ctrlKey || e.metaKey;\n const isAlt = isKeyHotkey('alt', e);\n const isShift = isKeyHotkey('shift', e);\n const isCapsLock = e.key.includes('CapsLock');\n const isTab = e.key.includes('Tab');\n const isEsc = e.key.includes('Escape');\n const isF = e.key.startsWith('F');\n const isArrow = e.key.includes('Arrow') ? true : false;\n return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;\n}\n","import { IS_SAFARI } from 'slate-angular';\nimport { TableElement } from '../../../custom-types';\nimport { TheMode } from '../../../interfaces';\nimport { TABLE_NUMBER_COLUMN, TableOptions } from '../table.types';\n\n/**\n * 获取标题行网格列宽值\n * @param editor\n * @param headerRow 标题行\n * @param cellsWidth\n * @returns string\n */\nexport const getGridColumns = (headerRow: HTMLElement, cellsWidth: number[]): string => {\n let result = '';\n Array.from(headerRow.childNodes)\n .filter((n: HTMLElement) => n.nodeType === 1)\n .forEach((node: HTMLElement, i) => {\n const col = node.getAttribute('colspan');\n const display = node.style.display;\n if (display === 'none') {\n return;\n }\n if (col) {\n const colSpan = Number(col) ?? 1;\n let width = 0;\n Array.from({ length: colSpan }, (_, j) => {\n width += cellsWidth[i + j];\n });\n result += width + 'px ';\n } else {\n result += cellsWidth[i] + 'px ';\n }\n });\n return result;\n};\n\nexport const getColumnsWidth = (cellRow: HTMLElement, isColgroup = false) => {\n const result = [];\n Array.from(cellRow.childNodes)\n .filter((n: HTMLElement) => n.nodeType === 1)\n .forEach((item: HTMLElement) => {\n if (isColgroup && IS_SAFARI) {\n result.push(item.offsetWidth);\n return;\n }\n if (item.getBoundingClientRect) {\n result.push(item.getBoundingClientRect().width);\n }\n });\n return result;\n};\n\n/**\n * 计算表格列宽\n * @param isReadonly\n * @param element\n * @param tableWidth\n * @param mode\n * @returns number[]\n */\nexport const calcColumnGroups = (isReadonly: boolean, element: TableElement, tableWidth: number, mode: string) => {\n const columns = element?.columns;\n if (isReadonly) {\n if (columns) {\n const opts = new TableOptions();\n const isPrint = mode === TheMode.print;\n const newColumns = isPrint\n ? calcPrintColumnWidth(element, opts.minWidthPx)\n : calcColumnWidth(element, tableWidth, opts.minWidthPx);\n return newColumns;\n }\n return [];\n } else {\n return columns;\n }\n};\n\n/**\n * 计算表格列宽\n * @param element\n * @param tableWidth\n * @param minWidthPx\n * @returns number[]\n */\nexport const calcColumnWidth = (element: TableElement, tableWidth: number, minWidthPx: number) => {\n const columns = element?.columns;\n const numberedColumnWidth = element?.options?.numberedColumn ? TABLE_NUMBER_COLUMN : 0;\n const columnsWidth = columns.reduce((a, b) => a + b.width, 0);\n // 总列宽大于当前表格宽度时,按照设置时的总列宽计算\n const columnTotalWidth = Math.max(columnsWidth, tableWidth - numberedColumnWidth);\n return columns.map(column => {\n const cellWidth = (column.width / columnsWidth) * columnTotalWidth;\n return { width: Math.max(cellWidth, minWidthPx) };\n });\n};\n\n/**\n * 打印模式下,按照原宽度比例基于当前表格宽度计算列宽\n * 1. 所有列的最小列宽总和大于表格宽度时,所有列返回最小宽度\n * @param element\n * @param minWidthPx\n * @returns number[]\n */\nexport const calcPrintColumnWidth = (element: TableElement, minWidthPx: number) => {\n const columns = element?.columns;\n const numberedColumnWidth = element?.options?.numberedColumn ? TABLE_NUMBER_COLUMN : 0;\n // 按照 DPI 96 的 A4 纸宽度是 794, 打印时左右 80px 的边距,所以这里取 794 - 80 * 2 = 634\n // 如果存在序号列,还需要在 634 基础上减去序号列的宽度,剩下的才是内容区域的宽度\n let columnTotalWidth = 634 - numberedColumnWidth;\n const columnsWidth = columns.reduce((a, b) => a + b.width, 0);\n\n // 计算所有列的 minWidth 总和\n const totalMinWidth = minWidthPx * columns.length;\n\n if (totalMinWidth > columnTotalWidth) {\n // 如果所有列的 minWidth 总和大于 columnTotalWidth,所有列返回最小宽度\n return columns.map(() => ({ width: minWidthPx }));\n }\n\n // 在剩余的宽度中按比例分配\n const remainingWidth = columnTotalWidth - totalMinWidth;\n const remainingWidthRatio = columns.map(column => column.width / columnsWidth);\n // 为什么减 1, 因为这个宽度是内容区域宽度,但 td 右侧还有一个边框,所以减去 1\n let newColumnsWidth = remainingWidthRatio.map(ratio => minWidthPx + Math.floor(ratio * remainingWidth) - 1);\n\n return columns.map((_, index) => ({\n width: newColumnsWidth[index]\n }));\n};\n","import { Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { TableCellElement } from '../../../custom-types';\nimport { CellPosition } from '../table.types';\nimport { createTablePosition } from './create-table-position';\n\n/* cell-position 有关的函数 */\n\n/**\n * 判断是否选中了所有的单元格\n * @param editor 编辑器对象\n * @param selectedCellPositions 选中的单元格位置数组\n * @returns 是否选中了所有的单元格\n */\nexport const isSelectedAllCell = (editor: Editor, selectedCellPositions: CellPosition[]) => {\n if (!AngularEditor.isFocused(editor)) {\n return false;\n }\n const pos = createTablePosition(editor);\n return !!selectedCellPositions.length && pos.getHeight() * pos.getWidth() === selectedCellPositions.length;\n};\n\n/**\n * 获取选中的单元格位置数组\n * @param editor 编辑器对象\n * @param selectedCells 选中的单元格\n * @returns 选中的单元格位置\n */\nexport const getSelectedCellPositions = (editor: Editor, selectedCells: TableCellElement[]) => {\n return selectedCells?.map((cell: TableCellElement) => {\n const path = AngularEditor.findPath(editor, cell);\n const [row, col] = path.slice(-2);\n return { row, col };\n });\n};\n\n/**\n * 获取一定范围内所有的单元格位置\n * @param startRow 起始行\n * @param startCol 起始列\n * @param endRow 结束行\n * @param endCol 结束列\n * @returns 单元格位置\n */\nexport const getCellPositionsFromRange = (startRow: number, startCol: number, endRow: number, endCol: number) => {\n const positions: CellPosition[] = [];\n for (let row = startRow; row < endRow; row++) {\n for (let col = startCol; col < endCol; col++) {\n positions.push({ row, col });\n }\n }\n return positions;\n};\n\n/**\n * 过滤重复的单元格位置\n * @param cells 单元格数组\n * @param selectedCellPositions 选中的单元格位置数组\n * @returns 过滤后的单元格位置数组\n */\nexport const uniqueCellPosition = (cells: CellPosition[], selectedCellPositions: CellPosition[]) => {\n const positions: CellPosition[] = [];\n const modCells = new Set();\n cells.concat(selectedCellPositions).forEach(cell => modCells.add(JSON.stringify(cell)));\n modCells.forEach((cell: string) => positions.push(JSON.parse(cell)));\n return positions;\n};\n","import { AngularEditor } from 'slate-angular';\nimport { TableCellElement, TableElement } from '../../../custom-types';\nimport { TheEditor } from '../../../interfaces';\nimport { getElementHeight } from '../../../utils';\n\n/**\n * 计算最小行跨距单元格\n * @param element TableElement\n * @returns\n */\nconst calculateMinRowSpanCellForRows = (element: TableElement): { cell?: TableCellElement; rowIndex: number }[] => {\n const cells = element.children.map((row, index) => {\n const noHiddenCells = row.children.filter(cell => !cell.hidden);\n if (noHiddenCells.length > 0) {\n const minRowspan = Math.min.apply(\n Math,\n noHiddenCells.map(cell => {\n return cell.rowspan || 1;\n })\n );\n\n const cell = row.children.find(item => !item.hidden && (item.rowspan || 1) === minRowspan);\n return {\n cell,\n rowIndex: index\n };\n } else {\n return {\n rowIndex: index\n };\n }\n });\n return cells;\n};\n\n/**\n * 计算行控件的平均高度\n * @param previousCombineRowIndex\n * @param previousRowIndex\n * @param rowControls\n */\nconst calculateRowControlsAvgHeight = (\n previousCombineRowIndex: number,\n previousRowIndex: number,\n rowControls: { height: number; rowIndex: number }[]\n) => {\n const rowControl = rowControls[previousRowIndex];\n const count = previousCombineRowIndex - previousRowIndex;\n const avgHeight = Math.floor(rowControl.height / (count + 1));\n const firstHeight = rowControl.height - avgHeight * count;\n rowControl.height = firstHeight;\n rowControls\n .filter((_, index) => index > previousRowIndex && index <= previousCombineRowIndex)\n .forEach(rowControl => {\n rowControl.height = avgHeight;\n });\n};\n\nconst getBelowRowHeight = (\n editor: TheEditor,\n cells: {\n cell?: TableCellElement;\n rowIndex: number;\n }[],\n index: number,\n rowIndex: number,\n rowspan: number\n) => {\n let belowRowlHeight = 0;\n cells.slice(index + 1, cells.length).map(item => {\n if (!item.cell) {\n return;\n }\n if (rowIndex + rowspan > item.rowIndex) {\n const cellDom = AngularEditor.toDOMNode(editor, item.cell);\n if (item.cell.rowspan > 1) {\n // 如果下方单元格的rowspan > 1,递归计算\n const height = getBelowRowHeight(\n editor,\n cells,\n cells.findIndex(cell => cell.rowIndex === item.rowIndex),\n item.rowIndex,\n item.cell.rowspan\n );\n belowRowlHeight += getElementHeight(cellDom) - height;\n } else {\n belowRowlHeight += getElementHeight(cellDom);\n }\n }\n });\n return belowRowlHeight;\n};\n\nexport const calculateRowControls = (editor: TheEditor, element: TableElement) => {\n const minRowSpanCellForRows = calculateMinRowSpanCellForRows(element);\n const rowControls = [];\n let previousRowIndex = 0;\n let previousCombineRowIndex = 0;\n minRowSpanCellForRows.forEach((cellInfo, index) => {\n if (!cellInfo.cell) {\n rowControls.push({\n height: 0,\n rowIndex: index\n });\n previousCombineRowIndex = index;\n if (index === minRowSpanCellForRows.length - 1) {\n calculateRowControlsAvgHeight(previousCombineRowIndex, previousRowIndex, rowControls);\n }\n return;\n }\n\n // calculate combine row height\n if (previousCombineRowIndex > previousRowIndex) {\n calculateRowControlsAvgHeight(previousCombineRowIndex, previousRowIndex, rowControls);\n previousCombineRowIndex = 0;\n }\n\n const cellDom = AngularEditor.toDOMNode(editor, cellInfo.cell);\n let height = getElementHeight(cellDom);\n // 当cell为合并的单元格(rowspan > 1),计算其实际高度(当前单元格的高度 - 下方合并单元格的高度)\n if (cellInfo.cell.rowspan > 1) {\n const calcHeight = height - getBelowRowHeight(editor, minRowSpanCellForRows, index, cellInfo.rowIndex, cellInfo.cell.rowspan);\n rowControls.push({\n height: calcHeight,\n rowIndex: cellInfo.rowIndex\n });\n } else {\n rowControls.push({\n height,\n rowIndex: cellInfo.rowIndex\n });\n }\n previousRowIndex = index;\n });\n return rowControls;\n};\n","import { TableElement } from '../../../custom-types';\n\n/**\n * compatible with old data\n * @returns\n */\nexport function isHeaderRow(element: TableElement) {\n if (element?.options?.headerRow) {\n return true;\n }\n // compat old data\n if (element?.children[0].header) {\n return true;\n }\n}\n","import { Editor, Transforms } from 'slate';\nimport { TheEditor } from '../../../interfaces';\nimport { CellPosition } from '../table.types';\nimport { createTablePosition } from './create-table-position';\n\nexport function getSelectCellNode(editor: Editor, selectedCells: CellPosition[]) {\n const pos = createTablePosition(editor);\n\n return selectedCells\n .map(item => {\n const node = pos.findCellByPath(item);\n if (node) {\n return {\n ...item,\n node: node\n };\n }\n })\n .filter(item => item);\n}\n\nexport function focusCell(editor: Editor, path: number[]) {\n const at = Editor.start(editor, path);\n TheEditor.focus(editor);\n Transforms.select(editor, at);\n}\n","import { Editor, Path, Point, Range, Text, Transforms } from 'slate';\nimport { MarkTypes } from '../constants';\n\nexport const setMarks = (editor: Editor, marks: { [key in MarkTypes]?: any }, at?: Path | Point | Range) => {\n Transforms.setNodes(editor, marks, {\n at,\n match: Text.isText,\n split: true\n });\n};\n","import { Editor, Range } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { MarkProps, MarkTypes } from '../constants/node-types';\nimport { setMarks } from './set-marks';\n\nexport const clearMarks = (editor: Editor) => {\n const { selection } = editor;\n if (!selection) {\n return;\n }\n\n if (Range.isCollapsed(selection)) {\n const marks = Editor.marks(editor);\n for (const key in marks) {\n Editor.removeMark(editor, key);\n }\n } else {\n const unsetMarks: { [key in MarkTypes]?: null | string } = {};\n MarkProps.forEach(key => {\n unsetMarks[key] = null;\n });\n setMarks(editor, unsetMarks);\n }\n};\n","import { Editor, Range, Path, Transforms, Element } from 'slate';\nimport { isArray } from 'ngx-tethys/util';\nimport { CustomElementKinds } from '../custom-types';\nimport { getPluginOptions } from '../core/utils/get-plugin-options';\nimport * as TheQueries from '../queries';\nimport { refocus } from '../utils';\n\nexport const insertElements = (editor: Editor, elements: Element | Element[]) => {\n if (!editor.selection) {\n refocus(editor);\n }\n if (Range.isExpanded(editor.selection)) {\n Editor.deleteFragment(editor);\n }\n const type = !isArray(elements) ? elements.type : elements[0].type; // 后期处理复制粘贴需要修改\n const allowParentTypes = getPluginOptions(editor, type)?.allowParentTypes || [];\n const insertNodePath = TheQueries.getInsertElementsPath(editor, allowParentTypes as CustomElementKinds[]);\n const [anchorBlock, anchorBlockPath] = TheQueries.anchorBlockEntry(editor);\n let isEmpty = Editor.isEmpty(editor, anchorBlock);\n if (insertNodePath) {\n Editor.withoutNormalizing(editor, () => {\n Transforms.insertNodes(editor, elements, { at: insertNodePath });\n Transforms.select(editor, Editor.start(editor, insertNodePath));\n if (isEmpty) {\n Transforms.removeNodes(editor, { at: anchorBlockPath });\n }\n });\n return;\n }\n\n const nextPath = Path.next([anchorBlockPath[0]]);\n Transforms.insertNodes(editor, elements, { at: nextPath });\n\n if (isEmpty && anchorBlockPath.length === 1) {\n Transforms.delete(editor, { at: anchorBlockPath });\n Transforms.select(editor, Editor.start(editor, anchorBlockPath));\n } else {\n Transforms.select(editor, Editor.start(editor, nextPath));\n }\n};\n","import { Editor, Transforms, Element } from 'slate';\nimport * as TheQueries from '../queries';\n\nexport const setNode = (editor: Editor, props: Partial<Element>, origin: Element) => {\n Transforms.setNodes(editor, props, { at: TheQueries.findPath(editor, origin) });\n};\n","import { Editor, Transforms, Element } from 'slate';\nimport { WrapOptions } from '../interfaces';\n\n/**\n * Unwrap nodes by type\n */\nexport const unwrapNodesByType = (editor: Editor, types: string[] | string, options: Omit<WrapOptions, 'match'> = {}) => {\n if (!Array.isArray(types)) {\n types = [types];\n }\n Transforms.unwrapNodes(editor, {\n match: n => Element.isElement(n) && types.includes(n.type as string),\n ...options\n });\n};\n","import { isKeyHotkey } from 'is-hotkey';\nimport { Editor, Transforms, Element } from 'slate';\nimport { ResetBlockTypePluginOptions } from '../interfaces/reset-block-type-plugin-options';\nimport * as TheQueries from '../queries';\nimport { isCollapsed } from '../queries/is-collapsed';\n\nexport const onKeyDownResetBlockType =\n ({ rules }: ResetBlockTypePluginOptions) =>\n (event: KeyboardEvent | null, editor: Editor) => {\n let reset: boolean | undefined;\n\n if (editor.selection && isCollapsed(editor.selection)) {\n rules.forEach(({ types, defaultType, hotkey, predicate, onReset }) => {\n if (!event || (hotkey && isKeyHotkey(hotkey, event))) {\n if (predicate(editor) && TheQueries.isNodeTypeIn(editor, types)) {\n if (event !== null) {\n event.preventDefault();\n }\n Transforms.setNodes(editor, { type: defaultType } as Element);\n\n onReset(editor);\n\n reset = true;\n }\n }\n });\n }\n\n return reset;\n };\n","import { Editor, Node, NodeEntry, Path, Transforms } from 'slate';\nimport * as TheQueries from '../queries';\n\nexport interface MoveChildrenOptions {\n /**\n * Parent node of the children to move.\n */\n at: NodeEntry | Path;\n\n /**\n * Path where to move the children.\n */\n to: Path;\n\n /**\n * Start index of the children to move.\n * Example: 1 means children[0] will not be moved.\n */\n start?: number;\n\n /**\n * Condition for the child to be moved\n */\n match?(entry: NodeEntry): boolean;\n}\n\n/**\n * 将节点的子级移动到路径。 返回移动的子级数。\n */\nexport const moveChildren = (editor: Editor, { at, to, match, start = 0 }: MoveChildrenOptions) => {\n let moved = 0;\n const parentPath = Path.isPath(at) ? at : at[1];\n const parentNode = Path.isPath(at) ? Node.get(editor, parentPath) : at[0];\n\n if (!Editor.isBlock(editor, parentNode)) return moved;\n\n for (let i = parentNode.children.length - 1; i >= start; i--) {\n const childPath = [...parentPath, i];\n const childNode = TheQueries.getNode(editor, childPath);\n\n if (!match || (childNode && match([childNode, childPath]))) {\n Transforms.moveNodes(editor, { at: childPath, to });\n moved++;\n }\n }\n\n return moved;\n};\n","import { Editor, Location, Transforms } from 'slate';\nimport { createEmptyParagraph } from '../utils/create-empty-paragraph';\n\nexport const insertParagraph = (editor: Editor, at: Location) => {\n Transforms.insertNodes(editor, createEmptyParagraph(), { at });\n};\n","import { Descendant, Node, NodeEntry } from 'slate';\nimport { QueryOptions } from '../interfaces';\nimport * as TheQueries from '../queries';\n\nexport interface ApplyDeepToNodesOptions {\n // The destination node object.\n node: Node;\n // The source object. Can be a factory.\n source: Record<string, any> | (() => Record<string, any>);\n // Function to call on each node following the query.\n apply: (node: Node, source: Record<string, any> | (() => Record<string, any>)) => void;\n // Query to filter the nodes.\n query?: QueryOptions;\n}\n\n/**\n * Recursively apply an operation to children nodes with a query.\n */\nexport const applyDeepToNodes = ({ node, source, apply, query }: ApplyDeepToNodesOptions) => {\n const entry: NodeEntry<Node> = [node, []];\n\n if (TheQueries.isNodeType(entry, query)) {\n if (source instanceof Function) {\n apply(node, source());\n } else {\n apply(node, source);\n }\n }\n\n if (!TheQueries.isAncestor(node)) {\n return;\n }\n\n node.children.forEach((child: Descendant) => {\n applyDeepToNodes({ node: child, source, apply, query });\n });\n};\n","import { defaults } from '../utils/lodash';\nimport { applyDeepToNodes, ApplyDeepToNodesOptions } from './apply-deep-to-nodes';\n\n/**\n * Recursively merge a source object to children nodes with a query.\n */\nexport const mergeDeepToNodes = (options: Omit<ApplyDeepToNodesOptions, 'apply'>) => {\n applyDeepToNodes({ ...options, apply: defaults });\n};\n","import { Editor, Transforms, Element } from 'slate';\nimport { CustomElementKinds } from '../custom-types';\nimport { ElementKinds } from '../constants/node-types';\n\nexport const unWrap = (editor: Editor, kind: CustomElementKinds) => {\n Editor.withoutNormalizing(editor, () => {\n Transforms.setNodes(editor, { type: ElementKinds.paragraph });\n Transforms.unwrapNodes(editor, {\n match: n => Element.isElement(n) && n.type === kind,\n split: true\n });\n });\n};\n","import { Editor, Element, Transforms, Path } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { createEmptyParagraph } from '../utils/create-empty-paragraph';\nimport * as TheQueries from '../queries';\n\nexport const deleteElement = (editor: Editor, element: Element) => {\n const at = TheQueries.findPath(editor, element);\n Transforms.insertNodes(editor, createEmptyParagraph(), { at });\n AngularEditor.focus(editor);\n Transforms.select(editor, at);\n Transforms.removeNodes(editor, { at: Path.next(at) });\n};\n","import { Editor, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { getLastNode } from '../queries/get-last-node';\n\nexport const setEndSelection = (editor: Editor) => {\n const lastNode = getLastNode(editor, 1);\n const end = Editor.end(editor, lastNode[1]);\n Transforms.select(editor, end);\n AngularEditor.focus(editor);\n};\n","import { Editor } from 'slate';\nimport { THE_EDITOR_CONVERSION_HINT_REF } from '../utils/weak-maps';\n\nexport const closeConversionHint = (editor: Editor) => {\n const hintRef = THE_EDITOR_CONVERSION_HINT_REF.get(editor);\n if (hintRef) {\n hintRef.close();\n }\n};\n","import { CustomElementKinds } from '../custom-types';\nimport { Editor, Element, NodeEntry } from 'slate';\nimport * as TheQueries from '../queries';\nimport { unWrap } from './un-wrap';\nimport { BlockElementKinds } from '../interfaces/element';\n\nexport function handleContinualDeleteBackward(editor: Editor, aboveResult: NodeEntry<Element>, type: CustomElementKinds) {\n const highestBlock = aboveResult[0];\n const lowestBlock = TheQueries.anchorBlock(editor);\n const wrapBlockType = highestBlock.type as BlockElementKinds;\n if (lowestBlock && Editor.isStart(editor, editor.selection.anchor, aboveResult[1])) {\n if (wrapBlockType === type) {\n if (highestBlock.children[0] === lowestBlock) {\n unWrap(editor, wrapBlockType);\n return true;\n }\n }\n }\n return false;\n}\n","import { CustomElementKinds } from '../custom-types';\nimport { Editor, Element } from 'slate';\nimport { unWrap } from './un-wrap';\n\nexport function handleContinualInsertBreak(editor: Editor, lowestBlock: Element, type: CustomElementKinds) {\n const isEmpty = Editor.isEmpty(editor, lowestBlock);\n const isEnd = Editor.isEnd(editor, editor.selection.anchor, editor.selection.focus.path);\n const aboveResult = Editor.above<Element>(editor, {\n match: n => Editor.isBlock(editor, n) && n.type === type\n });\n\n if (aboveResult && aboveResult[0] && isEnd && isEmpty) {\n const wrapBlock = aboveResult[0];\n if (wrapBlock.type === type) {\n if (wrapBlock.children[wrapBlock.children.length - 1] === lowestBlock) {\n unWrap(editor, wrapBlock.type);\n return true;\n }\n }\n }\n return false;\n}\n","import { Editor, Node } from 'slate';\nimport { TableOptions } from '../table.types';\nimport { createTable } from '../utils';\nimport * as TheTransforms from '../../../transforms';\n\n/**\n * Insert a new table\n */\nexport function insertTable(\n opts: TableOptions,\n editor: Editor,\n rows: number = 3,\n columns: number = 3,\n getCellContent?: (column: number, row: number) => Node[]\n) {\n const { selection } = editor;\n if (!selection?.anchor) {\n return;\n }\n // Create the table node\n const table = createTable(opts, columns, rows, getCellContent);\n TheTransforms.insertElements(editor, table);\n}\n","import { Editor, Element, Transforms } from 'slate';\nimport { TableRowElement } from '../../../custom-types';\nimport { TableOptions } from '../table.types';\nimport { createRow, calcSpanForRow } from '../utils';\nimport { createTablePosition } from '../utils/create-table-position';\n\nfunction getInsertRowState(opts: TableOptions, editor: Editor, count = 1, at?: number) {\n const tablePosition = createTablePosition(editor);\n let table = tablePosition.table;\n let tableEntry = tablePosition.tableEntry;\n\n // Create a new row with the right count of cells\n const columns = (table.children[0].children as Element[]).length;\n\n const rowIndex = tablePosition.getRowIndex();\n const insertRowIndex = typeof at === 'undefined' ? rowIndex + 1 : at;\n\n return { table, tableEntry, columns, rowIndex, insertRowIndex };\n}\n\nfunction packNewRow(opts: TableOptions, editor: Editor, count = 1, at?: number) {\n const { table, tableEntry, columns, insertRowIndex } = getInsertRowState(opts, editor, count, at);\n const rowspan = calcSpanForRow(table, insertRowIndex);\n const newRow = createRow(opts, columns);\n\n newRow.children.forEach((cell, columnIndex) => {\n const isInside = rowspan[columnIndex];\n if (isInside) {\n cell.hidden = true;\n const dirtyRow = table.children.find(\n (row: TableRowElement, rowIndex: number) =>\n !row.children[columnIndex].hidden &&\n rowIndex < insertRowIndex &&\n row.children[columnIndex].rowspan &&\n row.children[columnIndex].rowspan + rowIndex > insertRowIndex\n );\n if (dirtyRow) {\n Transforms.setNodes(\n editor,\n { rowspan: dirtyRow.children[columnIndex].rowspan + 1 },\n {\n at: tableEntry[1].concat(table.children.indexOf(dirtyRow)).concat(columnIndex)\n }\n );\n }\n }\n });\n return newRow;\n}\n\n/**\n * Insert a new row in current table\n */\nexport function insertRow(\n opts: TableOptions,\n editor: Editor,\n count = 1,\n at?: number // row index\n) {\n const { tableEntry, insertRowIndex } = getInsertRowState(opts, editor, count, at);\n const newRows: TableRowElement[] = [];\n\n for (let i = 0; i < count; i++) {\n const newRow = packNewRow(opts, editor, count, at);\n newRows.push(newRow);\n }\n\n Transforms.insertNodes(editor, newRows, {\n at: tableEntry[1].concat(insertRowIndex)\n });\n}\n","import { TableElement } from '../../../custom-types';\nimport { TableOptions } from '../table.types';\n\nexport function addColumns(table: TableElement, columnsCount: number, insertIndex?: number, canScroll?: boolean) {\n if (table.columns.length < columnsCount) {\n if (!insertIndex && insertIndex !== 0) {\n insertIndex = table.columns.length;\n }\n const opts = new TableOptions();\n let columns = table.columns.slice(0, columnsCount).map(item => {\n return { width: item.width };\n });\n const preTotalWidth = table.columns.reduce((prevValue, column) => {\n return prevValue + column.width;\n }, 0);\n\n const isEqualColumns = table.columns.every(col => col.width === table.columns[0].width);\n\n for (let i = 0; i < columnsCount - table.columns.length; i++) {\n columns.splice(insertIndex, 0, { width: opts.defaultWidth });\n }\n\n if (isEqualColumns) {\n if (canScroll) {\n return columns.fill({ width: table.columns[0].width });\n } else {\n const width = preTotalWidth / columnsCount > opts.minWidthPx ? preTotalWidth / columnsCount : opts.minWidthPx;\n return columns.fill({ width });\n }\n }\n\n const currentTotalWidth = columns.reduce((prevValue, column) => {\n return prevValue + column.width;\n }, 0);\n\n const percentage = preTotalWidth / currentTotalWidth;\n return columns.map((column, index) => {\n const width = Number((column.width * percentage > opts.minWidthPx ? column.width * percentage : opts.minWidthPx).toFixed(2));\n return { width };\n });\n }\n return table.columns;\n}\n","import { Transforms, Editor, NodeEntry } from 'slate';\nimport { TablePosition, createCell } from '../utils';\nimport { calcSpanForColumn } from '../utils/calc-span';\nimport { addColumns } from '../utils/add-columns';\nimport { TableOptions } from '../table.types';\nimport { TableCellElement, TableElement } from '../../../custom-types';\nimport { AngularEditor } from 'slate-angular';\nimport { createTablePosition } from '../utils/create-table-position';\n\n/**\n * Insert a new column in current table\n */\nexport function insertColumn(\n opts: TableOptions,\n editor: Editor,\n count = 1,\n at?: number, // Column index\n getCell?: (column: number, row: number) => TableCellElement\n) {\n const { selection } = editor;\n const {\n anchor: { path }\n } = selection;\n\n const tablePosition = createTablePosition(editor, path);\n let table = tablePosition.table;\n let tableEntry = tablePosition.tableEntry;\n\n const insertColumnIndex = typeof at === 'undefined' ? tablePosition.getColumnIndex() + 1 : at;\n\n // Insert the new cell\n\n Editor.withoutNormalizing(editor, () => {\n const colspan = calcSpanForColumn(table, insertColumnIndex);\n for (let i = 0; i < count; i++) {\n table.children.forEach((row, rowIndex) => {\n const isInside = colspan[rowIndex];\n const newCell = getCell ? getCell(insertColumnIndex, rowIndex) : createCell(opts);\n if (isInside) {\n newCell.hidden = true;\n const dirtyCell = row.children.find(\n (cell: TableCellElement, columnIndex: number) =>\n !cell.hidden &&\n columnIndex < insertColumnIndex &&\n cell.colspan &&\n cell.colspan + columnIndex > insertColumnIndex\n ) as TableCellElement;\n if (dirtyCell) {\n Transforms.setNodes(\n editor,\n { colspan: dirtyCell.colspan + 1 },\n {\n at: tablePosition.tableEntry[1].concat(rowIndex).concat(row.children.indexOf(dirtyCell))\n }\n );\n }\n }\n Transforms.insertNodes(editor, [newCell], {\n at: tablePosition.tableEntry[1].concat(rowIndex).concat(insertColumnIndex)\n });\n });\n }\n\n const theTableWrapper = AngularEditor.toDOMNode(editor, table).querySelector('.the-table-wrapper');\n const scrollWidth = theTableWrapper.scrollWidth;\n const clientWidth = theTableWrapper.clientWidth;\n const columnLength = table?.children[0].children.length;\n const columnWidth = clientWidth / (columnLength + count);\n\n if (table?.columns) {\n Transforms.setNodes(\n editor,\n { columns: addColumns(table, table.columns.length + count, insertColumnIndex, scrollWidth > clientWidth) },\n { at: tableEntry[1] }\n );\n } else if (columnWidth < opts.minWidthPx) {\n const columns = Array(columnLength + count).fill({ width: opts.minWidthPx });\n Transforms.setNodes(editor, { columns }, { at: tableEntry[1] });\n }\n });\n}\n\n/**\n * Insert new column in the row\n */\nexport function insertColumnAtRow(\n opts: TableOptions,\n editor: Editor,\n count = 1,\n tableEntry: NodeEntry<TableElement>,\n rowIndex: number,\n columnIndex: number,\n getCell?: (column: number, row: number) => TableCellElement\n) {\n Editor.withoutNormalizing(editor, () => {\n for (let i = 0; i < count; i++) {\n const newCell = getCell ? getCell(columnIndex, rowIndex) : createCell(opts);\n Transforms.insertNodes(editor, [newCell], {\n at: tableEntry[1].concat([rowIndex, columnIndex])\n });\n }\n });\n}\n","import { Transforms, NodeEntry, Editor, Element } from 'slate';\nimport { TableOptions } from '../table.types';\nimport { createCell } from '../utils/create-cell';\n\n/**\n * Clear the content of the given cell\n */\nexport function clearCell(opts: TableOptions, editor: Editor, cellEntry: NodeEntry<Element>) {\n Transforms.removeNodes(editor, { at: cellEntry[1] });\n const cellNode = {\n ...cellEntry[0],\n ...createCell(opts)\n };\n Transforms.insertNodes(editor, { ...cellNode }, { at: cellEntry[1] });\n}\n","import { Editor, Element, Transforms } from 'slate';\nimport { TableCellElement, TableRowElement } from '../../../custom-types';\nimport { TableOptions } from '../table.types';\nimport { createTablePosition } from '../utils/create-table-position';\nimport { clearCell } from './clear-cell';\n\nexport function removeRow(opts: TableOptions, editor: Editor, selectRowIndex?: number) {\n const tablePosition = createTablePosition(editor);\n const {\n tableEntry,\n table,\n rowEntry: [rowNode, rowPath]\n } = tablePosition;\n\n selectRowIndex = selectRowIndex === undefined ? [...rowPath].pop() : selectRowIndex;\n const at = tableEntry[1].concat(selectRowIndex);\n\n Editor.withoutNormalizing(editor, () => {\n table.children.map((row, rowIndex) => {\n if (rowIndex < selectRowIndex) {\n const dirtyCells = row.children.filter(\n (cell: TableCellElement, columnIndex: number) =>\n !cell.hidden && cell.rowspan && cell.rowspan + rowIndex > selectRowIndex\n );\n if (dirtyCells.length) {\n dirtyCells.map((dirtyCell: TableCellElement) => {\n const rowspan = dirtyCell.rowspan - 1 > 1 ? dirtyCell.rowspan - 1 : null;\n Transforms.setNodes(\n editor,\n { rowspan },\n {\n at: tablePosition.tableEntry[1].concat(rowIndex).concat(row.children.indexOf(dirtyCell))\n }\n );\n });\n }\n }\n });\n const removeRow = table.children[selectRowIndex] as TableRowElement;\n const nextRow = table.children[selectRowIndex + 1] as TableRowElement;\n if (nextRow) {\n removeRow.children.map((cell: TableCellElement, cellIndex) => {\n const nextCell = nextRow.children[cellIndex];\n if (nextCell && cell.rowspan > 1 && nextCell.hidden) {\n const rowspan = cell.rowspan - 1 > 1 ? cell.rowspan - 1 : null;\n Transforms.setNodes(\n editor,\n { colspan: cell.colspan || null, rowspan, hidden: null },\n { at: tablePosition.tableEntry[1].concat(selectRowIndex + 1).concat(cellIndex) }\n );\n }\n });\n }\n });\n\n // Update table by removing the row\n if (tablePosition.getHeight() > 1) {\n Transforms.removeNodes(editor, { at });\n } else {\n // If last remaining row, clear it instead\n Editor.withoutNormalizing(editor, () => {\n (rowNode.children as Element[]).forEach((cell, cellIndex) => {\n clearCell(opts, editor, [cell, at.concat(cellIndex)]);\n });\n });\n }\n}\n","import { TableElement } from '../../../custom-types';\n\nexport function removeColumns(table: TableElement, columnsCount: number, index?: number) {\n if (table.columns.length > columnsCount) {\n let removeColumns = [];\n if ((index && index > 0) || index === 0) {\n removeColumns = table.columns.slice(index, index + 1);\n } else {\n removeColumns = table.columns.slice(columnsCount);\n }\n if (removeColumns.length) {\n const addWidth =\n removeColumns.reduce((totalWidth, cell) => {\n return (totalWidth += cell.width);\n }, 0) / columnsCount;\n return table.columns\n .filter(item => !removeColumns.includes(item))\n .map(item => {\n return { width: Number((item.width + addWidth).toFixed(2)) };\n });\n }\n }\n return table.columns;\n}\n","import { Editor, Element, Transforms } from 'slate';\nimport { TablePosition } from '../utils';\nimport { clearCell } from './clear-cell';\nimport { removeColumns } from '../utils/remove-columns';\nimport { TableOptions } from '../table.types';\nimport { TableCellElement } from '../../../custom-types';\nimport { createTablePosition } from '../utils/create-table-position';\n\nexport function removeColumn(opts: TableOptions, editor: Editor, selectColIndex?: number) {\n const { selection } = editor;\n const {\n anchor: { path }\n } = selection;\n\n const tablePosition = createTablePosition(editor, path);\n const {\n tableEntry,\n table,\n row,\n cellEntry: [cellNode, cellPath]\n } = tablePosition;\n\n const rows = tableEntry[0].children as Element[];\n\n selectColIndex = selectColIndex === undefined ? [...cellPath].pop() : selectColIndex;\n\n Editor.withoutNormalizing(editor, () => {\n table.children.map((row, rowIndex) => {\n const dirtyCell = row.children.find(\n (cell: TableCellElement, columnIndex: number) =>\n !cell.hidden && columnIndex < selectColIndex && cell.colspan && cell.colspan + columnIndex > selectColIndex\n ) as TableCellElement;\n if (dirtyCell) {\n const colspan = dirtyCell.colspan - 1 > 1 ? dirtyCell.colspan - 1 : null;\n Transforms.setNodes(\n editor,\n { colspan },\n {\n at: tablePosition.tableEntry[1].concat(rowIndex).concat(row.children.indexOf(dirtyCell))\n }\n );\n }\n const removeCell = row.children[selectColIndex] as TableCellElement;\n const nextCell = row.children[selectColIndex + 1] as TableCellElement;\n if (nextCell && nextCell.hidden && removeCell.colspan > 1) {\n const colspan = removeCell.colspan - 1 > 1 ? removeCell.colspan - 1 : null;\n Transforms.setNodes(\n editor,\n { colspan, rowspan: removeCell.rowspan || null, hidden: null },\n { at: tablePosition.tableEntry[1].concat(rowIndex).concat(row.children.indexOf(nextCell)) }\n );\n }\n });\n });\n\n // Remove the cell from every row\n Editor.withoutNormalizing(editor, () => {\n if (tablePosition.getWidth() > 1) {\n rows.forEach((row, rowIndex) => {\n const at = tableEntry[1].concat([rowIndex, selectColIndex]);\n Transforms.removeNodes(editor, { at });\n });\n if (table.columns) {\n Transforms.setNodes(\n editor,\n { columns: removeColumns(table, table.columns.length - 1, selectColIndex) },\n { at: tableEntry[1] }\n );\n }\n } else {\n // If last column, clear text in cells instead\n rows.forEach((row, rowIndex) => {\n row.children.forEach((cell, cellIndex) => {\n const at = tableEntry[1].concat([rowIndex, cellIndex]);\n clearCell(opts, editor, [cell as Element, at]);\n });\n });\n }\n });\n}\n","import { Path } from 'slate';\n\nexport const NextPath = (path: Path) => {\n const [last, ...rest] = [...path].reverse();\n return [...rest.reverse(), last + 1];\n};\n","import { Editor, Element, Path, Transforms, NodeEntry, Descendant } from 'slate';\nimport { createEmptyParagraph } from '../../../utils/create-empty-paragraph';\nimport { TableOptions } from '../table.types';\nimport { createTablePosition } from '../utils/create-table-position';\nimport { NextPath } from '../utils/next-path';\n\nexport function removeTable(opts: TableOptions, editor: Editor) {\n const { selection } = editor;\n const {\n anchor: { path }\n } = selection;\n const pos = createTablePosition(editor, path);\n const {\n tableEntry: [, tablePath]\n } = pos;\n let nextFocusEntry: NodeEntry<Element> = null;\n let shouldCollapseToEnd = false;\n\n const nextEntry = Editor.next<Element>(editor, { at: tablePath });\n if (nextEntry) {\n nextFocusEntry = nextEntry;\n } else {\n const prevEntry = Editor.previous<Element>(editor, { at: tablePath });\n if (prevEntry) {\n nextFocusEntry = prevEntry;\n shouldCollapseToEnd = true;\n } else if (opts.exitBlockType) {\n nextFocusEntry = [\n {\n type: opts.exitBlockType,\n children: [{ text: '' }]\n } as Element,\n null\n ];\n nextFocusEntry[1] = NextPath(tablePath);\n Transforms.insertNodes(editor, nextFocusEntry[0], { at: nextFocusEntry[1] });\n }\n }\n\n Transforms.removeNodes(editor, { at: tablePath });\n Transforms.insertNodes(editor, createEmptyParagraph(), { at: tablePath });\n\n if (!nextFocusEntry) {\n return;\n }\n\n if (shouldCollapseToEnd) {\n const endPoint = Editor.end(editor, nextFocusEntry[1]);\n Transforms.select(editor, endPoint);\n } else {\n const previousPath = Path.previous(nextFocusEntry[1]);\n const startPoint = Editor.start(editor, previousPath);\n Transforms.select(editor, startPoint);\n }\n}\n","import { Editor, Transforms, Element } from 'slate';\nimport { ElementKinds } from '../../constants';\nimport { PluginKeys } from '../../interfaces';\nimport { getPluginOptions } from '../../core/utils/get-plugin-options';\nimport * as TheQueries from '../../queries';\n\nexport const BlockquoteEditor = {\n toggleBlockquote(editor: Editor) {\n const isActive = TheQueries.isBlockActive(editor, ElementKinds.blockquote);\n const allowParentTypes = getPluginOptions(editor, PluginKeys.blockquote)?.allowParentTypes || [];\n\n if (!isActive) {\n Transforms.wrapNodes(\n editor,\n { type: ElementKinds.blockquote, children: [] },\n {\n mode: 'lowest'\n }\n );\n } else {\n Transforms.unwrapNodes(editor, { match: n => Element.isElement(n) && n.type === ElementKinds.blockquote });\n }\n }\n};\n","import { Editor, Node, Range, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { CodeElement } from '../../custom-types';\nimport { ElementKinds, DEFAULT_LANGUAGE } from '../../constants';\nimport * as TheTransforms from '../../transforms';\n\nexport const CodeEditor = {\n setCodeAttribute(editor: Editor, element: CodeElement, value: { [key: string]: unknown }) {\n const at = AngularEditor.findPath(editor, element);\n Transforms.setNodes(editor, value, {\n at\n });\n },\n insertCode(editor: Editor) {\n const isSelectContent = Editor.string(editor, editor.selection);\n const [startPoint, endPoint] = Range.edges(editor.selection);\n const elementEntryIterator = Node.elements(editor, {\n from: startPoint.path,\n to: endPoint.path,\n pass: ([node, path]) => {\n return Editor.isBlock(editor, node);\n }\n });\n const elementEntrys = Array.from(elementEntryIterator);\n const isAllParagraph = elementEntrys.every(item => item[0].type === ElementKinds.paragraph);\n if (isSelectContent && editor.selection.anchor.path.length === 2 && isAllParagraph) {\n let content = elementEntrys.reduce((content, [element, path], index) => {\n const text = Node.string(element);\n return content + (elementEntrys.length - 1 === index ? `${text}` : `${text}\\n`);\n }, '');\n const codeElement: CodeElement = {\n type: ElementKinds.code,\n content,\n language: DEFAULT_LANGUAGE.value,\n children: [{ text: '' }]\n };\n TheTransforms.insertElements(editor, codeElement);\n } else {\n const codeElement: CodeElement = {\n type: ElementKinds.code,\n content: '',\n language: DEFAULT_LANGUAGE.value,\n children: [{ text: '' }]\n };\n TheTransforms.insertElements(editor, codeElement);\n }\n }\n};\n","import { Editor, Node, Text } from 'slate';\nimport { ColorType } from '../../constants/color-select';\nimport { MarkTypes } from '../../constants/node-types';\nimport { TableEditor } from '../table/table.editor';\n\nexport const ColorEditor = {\n getActiveColor(editor: Editor, type: MarkTypes.color | MarkTypes.backgroundColor): string {\n if (!editor?.selection) {\n return;\n }\n const node = Node.get(editor, editor.selection?.anchor.path);\n if (!Text.isText(node)) {\n return undefined;\n }\n const marks = Editor.marks(editor);\n return marks && marks[type];\n },\n setColor(editor: Editor, color: ColorType, type: MarkTypes.color | MarkTypes.backgroundColor) {\n if (TableEditor.toggleMark(editor, !color, type, color)) {\n return;\n }\n if (color) {\n Editor.addMark(editor, type, color);\n } else {\n Editor.removeMark(editor, type);\n }\n }\n};\n","import { Editor, Transforms, Element } from 'slate';\nimport { HeadingElementKinds, NoInfer, PluginKey, PluginKeys, ThePlugin } from '../../interfaces';\nimport { DISABLED_OPERATE_TYPES, ElementKinds, HEADING_TYPES, MarkTypes } from '../../constants';\nimport { getPluginOptions } from '../../core';\nimport type { HeadingPluginOptions } from './heading.plugin';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\n\nexport const headingOptions: HeadingPluginOptions = {\n allowParentTypes: [ElementKinds.tableCell, ElementKinds.blockquote],\n disabledOperateTypes: [ElementKinds.image, ...DISABLED_OPERATE_TYPES],\n cleanupTypes: [ElementKinds.bulletedList, ElementKinds.numberedList, ElementKinds.listItem]\n};\n\nexport const HeadingEditor = {\n setHeading(editor: Editor, heading: HeadingElementKinds) {\n Editor.withoutNormalizing(editor, () => {\n const cleanupTypes = getPluginOptions<HeadingPluginOptions>(editor, PluginKeys.heading).cleanupTypes;\n Transforms.unwrapNodes(editor, {\n at: editor.selection,\n match: n => Element.isElement(n) && cleanupTypes.includes(n.type),\n mode: 'all',\n split: true\n });\n Transforms.setNodes(editor, { type: heading });\n const entry = TheQueries.anchorBlockEntry(editor);\n const unMarks = {\n [MarkTypes.fontSize]: null\n };\n if (entry) {\n TheTransforms.setMarks(editor, unMarks, entry[1]);\n return;\n }\n TheTransforms.setMarks(editor, unMarks, editor.selection);\n });\n },\n isHeadingActive(editor: Editor, heading: HeadingElementKinds) {\n const [match] = Editor.nodes(editor, {\n match: n => Element.isElement(n) && n.type === heading,\n universal: true\n });\n return !!match;\n },\n headingPlugins(): ThePlugin<{}, {}>[] {\n const plugins: ThePlugin<{}, HeadingPluginOptions>[] = [];\n\n for (let level = 1; level <= HEADING_TYPES.length; level++) {\n const key = ElementKinds[`heading_${level}`];\n const plugin: ThePlugin<{}, HeadingPluginOptions> = {\n key,\n options: headingOptions\n };\n plugins.push(plugin);\n }\n return plugins;\n }\n};\n","import { Editor, Element } from 'slate';\nimport { ElementKinds } from '../../constants/node-types';\nimport * as TheTransforms from '../../transforms';\n\nexport const HrEditor = {\n insertHr(editor: Editor) {\n TheTransforms.insertElements(editor, { type: ElementKinds.hr, children: [{ text: '' }] });\n },\n isHrActive(editor: Editor) {\n const [match] = Editor.nodes(editor, {\n match: n => Element.isElement(n) && n.type === ElementKinds.hr,\n universal: true\n });\n return !!match;\n }\n};\n","import { Editor, Transforms, Element, Path } from 'slate';\nimport { TheContextService } from '../../services/context.service';\nimport {\n Alignment,\n ElementKinds,\n ErrorCodes,\n LayoutTypes,\n PICTURE_ACCEPTED_UPLOAD_MIME,\n PICTURE_ACCEPTED_UPLOAD_SIZE\n} from '../../constants';\nimport * as TheTransforms from '../../transforms';\nimport { ImageElement } from '../../custom-types';\nimport { base64toBlob } from '../../utils/blob';\nimport { isString } from 'ngx-tethys/util';\nimport { getPluginOptions } from '../../core';\nimport { ImagePluginOptions, PluginKeys } from '../../interfaces';\n\nexport const ImageEditor = {\n openUpload(editor: Editor) {\n const inputFile = document.createElement('input');\n inputFile.setAttribute('type', 'file');\n inputFile.setAttribute('accept', 'image/*');\n inputFile.setAttribute('multiple', 'true');\n inputFile.onchange = (event: Event) => {\n ImageEditor.insertImages(editor, (event.target as any).files);\n };\n inputFile.click();\n },\n insertImages(editor: Editor, imageFiles: FileList | File[]) {\n const contextService = editor.injector.get(TheContextService);\n const imageNodes: Element[] = [];\n const text = { text: '' };\n for (const image of imageFiles) {\n const verify = ImageEditor.verifyImage(editor, image);\n if (verify) {\n const url = URL.createObjectURL(image);\n contextService.addUploadingFiles({ url, file: image });\n imageNodes.push({ type: ElementKinds.image, url, children: [text] });\n }\n }\n if (imageNodes.length > 0) {\n TheTransforms.insertElements(editor, imageNodes);\n }\n },\n handleBase64ImageElement(editor: Editor, image: ImageElement) {\n if (isString(image.originUrl) && image.originUrl.includes('base64')) {\n const indexSplit = image.originUrl.indexOf(',');\n const base64 = image.originUrl.slice(indexSplit + 1);\n const contentType = image.originUrl.substring(image.originUrl.indexOf(':') + 1, image.originUrl.indexOf(';'));\n const ext = contentType.substring(contentType.indexOf('/') + 1);\n const blob = base64toBlob(base64, contentType);\n const blobUrl = URL.createObjectURL(blob);\n image.thumbUrl = blobUrl;\n image.originUrl = blobUrl;\n image.url = blobUrl;\n const contextService = editor.injector.get(TheContextService);\n contextService.addUploadingFiles({\n url: blobUrl,\n file: new File([blob], `${new Date().getTime()}.${ext}`, { type: contentType })\n });\n }\n },\n verifyImage(editor: Editor, image: File) {\n if (!PICTURE_ACCEPTED_UPLOAD_MIME.includes(image.type)) {\n editor.onError({\n code: ErrorCodes.IMAGE_ERR_MIME_FORMAT\n });\n return false;\n }\n const acceptedUploadSize =\n getPluginOptions<ImagePluginOptions>(editor, PluginKeys.image)?.acceptedUploadSize ?? PICTURE_ACCEPTED_UPLOAD_SIZE;\n if (image.size / 1000000 >= acceptedUploadSize) {\n editor.onError({\n code: ErrorCodes.IMAGE_ERR_SIZE_LIMIT\n });\n return false;\n }\n return true;\n },\n isImageActive(editor: Editor): boolean {\n const [match] = Editor.nodes(editor, {\n match: n => Element.isElement(n) && n.type === ElementKinds.image,\n universal: true\n });\n return !!match;\n },\n setImageNode(editor: Editor, path: Path, partial: { layout?: LayoutTypes; align?: Alignment }) {\n Transforms.setNodes(editor, partial, { at: path });\n }\n};\n","import { Editor, Transforms, Element } from 'slate';\nimport { TheEditor, PluginKeys } from '../../interfaces';\nimport { CustomElementKinds } from '../../custom-types';\nimport { getPluginOptions } from '../../core';\nimport type { IndentPluginOptions } from './indent.plugin';\nimport { TableEditor } from '../table/table.editor';\nimport { Indents } from '../../constants';\n\nexport const IndentEditor = {\n getAllowedTypes(editor: TheEditor) {\n return getPluginOptions<IndentPluginOptions>(editor, PluginKeys.indent)?.allowedTypes ?? [];\n },\n setIndent(editor: TheEditor) {\n if (TableEditor.handleIndent(editor, Indents.indentRight)) {\n return;\n }\n const allowedTypes = IndentEditor.getAllowedTypes(editor);\n const maxIndent = getPluginOptions<IndentPluginOptions>(editor, PluginKeys.indent)?.maxIndent ?? [];\n const nodes = Array.from(\n Editor.nodes<Element>(editor, {\n mode: 'highest',\n match: n => Element.isElement(n) && allowedTypes.includes(n.type)\n })\n );\n const [startBlock] = nodes;\n if (startBlock) {\n let [{ indent }] = startBlock;\n indent = indent ? ++indent : 1;\n if (indent <= maxIndent) {\n Transforms.setNodes(\n editor,\n { indent },\n {\n mode: 'highest',\n match: n => Element.isElement(n) && allowedTypes.includes(n.type)\n }\n );\n }\n }\n },\n cancelIndent(editor: Editor) {\n if (TableEditor.handleIndent(editor, Indents.indentLeft)) {\n return;\n }\n const allowedTypes = IndentEditor.getAllowedTypes(editor);\n const nodes = Array.from(\n Editor.nodes<Element>(editor, {\n mode: 'highest',\n match: n => Element.isElement(n) && allowedTypes.includes(n.type)\n })\n );\n const [startBlock] = nodes;\n if (startBlock) {\n let [{ indent }] = startBlock;\n indent = indent ? --indent : 0;\n Transforms.setNodes(\n editor,\n { indent },\n {\n mode: 'highest',\n match: n => Element.isElement(n) && allowedTypes.includes(n.type)\n }\n );\n }\n },\n setTextIndent(editor: TheEditor, kinds: CustomElementKinds[], textIndent: number) {\n Transforms.setNodes(\n editor,\n { textIndent },\n {\n mode: 'highest',\n match: node => Element.isElement(node) && kinds.includes(node.type)\n }\n );\n },\n cancelTextIntent(editor: TheEditor, event: KeyboardEvent, anchorBlock: Element, kinds: CustomElementKinds[]) {\n let { textIndent, indent } = anchorBlock;\n\n if (textIndent > 2) {\n event.preventDefault();\n textIndent -= 2;\n IndentEditor.setTextIndent(editor, kinds, textIndent);\n return true;\n }\n if (textIndent === 2) {\n event.preventDefault();\n IndentEditor.setTextIndent(editor, kinds, null);\n return true;\n }\n if (indent) {\n event.preventDefault();\n IndentEditor.cancelIndent(editor);\n return true;\n }\n\n return false;\n }\n};\n","export enum LinkTags {\n insert = 'insert',\n edit = 'edit',\n selection = 'selection'\n}\nexport enum LinkCloseTypes {\n apply = 'apply',\n destroy = 'destroy'\n}\n","import { Range, Transforms, Editor, Element, Node } from 'slate';\nimport { ELEMENT_TO_COMPONENT } from 'slate-angular';\nimport { LinkElement } from '../../custom-types';\nimport { ElementKinds, LINK_DEFAULT_TEXT } from '../../constants';\nimport { getAboveByType } from '../../queries/get-above-by-type';\nimport { TheLinkComponent } from './link.component';\nimport { LinkTags } from './link.types';\n\nexport const LinkEditor = {\n insertLink(editor: Editor) {\n if (Range.isCollapsed(editor.selection)) {\n Promise.resolve()\n .then(() => {\n LinkEditor.wrapLink(editor, LINK_DEFAULT_TEXT, '');\n })\n .then(() => {\n const [linkNode] = getAboveByType(editor, ElementKinds.link);\n const linkComponent = ELEMENT_TO_COMPONENT.get(linkNode) as TheLinkComponent;\n linkComponent.openLinkEdit(LinkTags.insert);\n });\n } else {\n const isActive = LinkEditor.isLinkActive(editor);\n if (isActive) {\n LinkEditor.unwrapLink(editor);\n return;\n }\n\n const fragment = Node.fragment(editor, editor.selection)[0];\n const selectNode = Node.get(fragment, []);\n const selectText = Node.string(selectNode);\n\n Promise.resolve()\n .then(() => {\n LinkEditor.wrapLink(editor, selectText, '');\n })\n .then(() => {\n const [linkNode] = getAboveByType(editor, ElementKinds.link);\n const linkComponent = ELEMENT_TO_COMPONENT.get(linkNode) as TheLinkComponent;\n linkComponent.openLinkEdit(LinkTags.insert);\n });\n }\n },\n isLinkActive(editor: Editor) {\n const [link] = Editor.nodes(editor, { match: n => Element.isElement(n) && n.type === ElementKinds.link });\n return !!link;\n },\n wrapLink(editor: Editor, text: string, url: string) {\n if (LinkEditor.isLinkActive(editor)) {\n LinkEditor.unwrapLink(editor);\n }\n const { selection } = editor;\n const isCollapsed = selection && Range.isCollapsed(selection);\n const link: LinkElement = {\n type: ElementKinds.link,\n url,\n children: isCollapsed ? [{ text }] : []\n };\n if (isCollapsed) {\n Transforms.insertNodes(editor, link);\n } else {\n Transforms.wrapNodes(editor, link, { split: true });\n Transforms.collapse(editor, { edge: 'end' });\n }\n },\n unwrapLink(editor: Editor) {\n Transforms.unwrapNodes(editor, { match: n => Element.isElement(n) && n.type === ElementKinds.link });\n }\n};\n","import { Element, Node } from 'slate';\nimport { ElementKinds } from '../../../constants/node-types';\n\nexport const isNodeTypeList = (n: Node): n is Element => {\n return [ElementKinds.bulletedList, ElementKinds.numberedList].includes((n as Element).type);\n};\n","import { Transforms, Node, Editor, Path, Element } from 'slate';\nimport { ElementKinds, LIST_BLOCK_TYPES } from '../../constants/node-types';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\nimport { isNodeTypeList } from './queries/is-node-type-list';\n\nexport const ListEditor = {\n isList(editor: Editor, element: Element, type: ElementKinds.bulletedList | ElementKinds.numberedList) {\n return Editor.isBlock(editor, element) && element.type === type;\n },\n toggleList(editor: Editor, type: ElementKinds.bulletedList | ElementKinds.numberedList, startIndex?: number) {\n if (!editor.selection) {\n return;\n }\n if (!startIndex) {\n startIndex = 1;\n }\n const types = [ElementKinds.bulletedList, ElementKinds.numberedList];\n\n Editor.withoutNormalizing(editor, () => {\n const [...listItems] = Editor.nodes(editor, {\n match: node => Element.isElement(node) && node.type === ElementKinds.listItem,\n mode: 'lowest'\n });\n const firstListItemPath = listItems.length && listItems[0][1];\n const activeListPath = listItems.length && Path.parent(firstListItemPath);\n const activeListNode = listItems.length && (Node.get(editor, activeListPath) as Element);\n\n // 同级且类型相同:unwrap\n const isLowestActive =\n listItems.length &&\n listItems.every(\n ([, path]) =>\n activeListNode.type === type && (Path.isSibling(firstListItemPath, path) || Path.equals(firstListItemPath, path))\n );\n if (isLowestActive) {\n const upListItem = Path.parent(activeListPath);\n Transforms.unwrapNodes(editor, {\n at: editor.selection,\n match: node => node === activeListNode,\n split: true,\n mode: 'lowest'\n });\n if (upListItem && (Node.get(editor, upListItem) as Element).type === ElementKinds.listItem) {\n Transforms.moveNodes(editor, {\n at: editor.selection,\n to: Path.next(upListItem),\n match: node => Element.isElement(node) && node.type === ElementKinds.listItem\n });\n } else {\n Transforms.unwrapNodes(editor, {\n match: node => Element.isElement(node) && node.type === ElementKinds.listItem\n });\n }\n return;\n }\n\n // 跨级、同级且类型不同\n if (activeListNode && types.includes(activeListNode.type)) {\n Transforms.setNodes(\n editor,\n { type },\n { match: node => Element.isElement(node) && node.type !== type && types.includes(node.type) }\n );\n return;\n }\n\n // wrap\n ListEditor.buildListItem(editor);\n Transforms.wrapNodes(editor, { type, children: [], start: startIndex } as Element, {\n at: editor.selection,\n match: node => Element.isElement(node) && node.type === ElementKinds.listItem\n });\n });\n },\n unwrapList(editor: Editor) {\n Editor.withoutNormalizing(editor, () => {\n TheTransforms.unwrapNodesByType(editor, [ElementKinds.bulletedList, ElementKinds.numberedList], { split: true, mode: 'all' });\n TheTransforms.unwrapNodesByType(editor, [ElementKinds.listItem], { split: true, mode: 'all' });\n });\n },\n wrapList(editor: Editor, type: ElementKinds.bulletedList | ElementKinds.numberedList) {\n Editor.withoutNormalizing(editor, () => {\n const listItem: Element = {\n type: ElementKinds.listItem,\n children: []\n };\n const list = {\n type,\n children: []\n };\n Transforms.wrapNodes(editor, list, { split: true });\n Transforms.wrapNodes(editor, listItem, { split: true });\n });\n },\n isActive(editor: Editor, type: ElementKinds.bulletedList | ElementKinds.numberedList) {\n const [match] = TheQueries.getNodesByType(editor, type);\n return !!match;\n },\n getActiveList(editor: Editor) {\n const [match] = TheQueries.getNodesByType(editor, LIST_BLOCK_TYPES);\n return match;\n },\n buildListItem(editor: Editor) {\n const nodes = Editor.nodes(editor, {\n match: node => Editor.isBlock(editor, node),\n mode: 'lowest'\n });\n for (const [node, path] of nodes) {\n if (!Editor.isVoid(editor, node) && Element.isElement(node) && node.type !== ElementKinds.paragraph) {\n Transforms.setNodes(\n editor,\n { type: ElementKinds.paragraph, checked: undefined } as any, // todo remove checked\n { at: path }\n );\n } else if (Element.isElement(node) && node.type === ElementKinds.paragraph) {\n let { textIndent } = node;\n if (textIndent) {\n Transforms.setNodes(\n editor,\n { textIndent: undefined, indent: undefined }, // remove indent\n { at: path }\n );\n }\n }\n if ((Node.parent(editor, path) as Element).type !== ElementKinds.listItem) {\n Transforms.wrapNodes(\n editor,\n { type: ElementKinds.listItem, children: [] },\n {\n at: path,\n split: true\n }\n );\n }\n }\n },\n buildInsertDataChildren(node: Element) {\n const { children } = node;\n const listItem = children[0];\n if (isNodeTypeList(node) && Element.isElement(listItem) && (listItem.children[0] as Element).type === ElementKinds.paragraph) {\n return node;\n }\n\n return ListEditor.buildInsertDataChildren(listItem as Element);\n }\n};\n","import { Editor, Text, Node } from 'slate';\nimport { TableEditor } from '../table/table.editor';\n\nexport interface MarkEditor extends Editor {\n removeMark: (key: string, shouldChange?: boolean) => void;\n}\n\nexport const MarkEditor = {\n isMarkActive(editor: Editor, format) {\n if (!editor?.selection) {\n return;\n }\n const node = Node.get(editor, editor?.selection?.anchor?.path);\n if (!Text.isText(node)) {\n return false;\n }\n const marks = Editor.marks(editor);\n return marks && marks[format] ? true : false;\n },\n toggleMark(editor, format) {\n const isActive = MarkEditor.isMarkActive(editor, format);\n if (TableEditor.toggleMark(editor, isActive, format)) {\n return;\n }\n if (isActive) {\n Editor.removeMark(editor, format);\n } else {\n Editor.addMark(editor, format, true);\n }\n }\n};\n","import { ConnectedPosition, Overlay } from '@angular/cdk/overlay';\nimport { ChangeDetectorRef, ElementRef, ViewContainerRef } from '@angular/core';\nimport { ThyPopover } from 'ngx-tethys/popover';\nimport { Editor, Transforms, Element } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { getPluginOptions } from '../../core';\nimport { PluginKeys, TheEditor } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { THE_EDITOR_ORIGIN_ANCHOR, THE_EDITOR_POPOVER_REF } from '../../utils';\nimport { MentionPluginOptions } from './mention.type';\n\nexport const MentionEditor = {\n insertTrigger(editor: TheEditor, type: string) {\n MentionEditor.close(editor);\n const mentions = getPluginOptions<MentionPluginOptions>(editor, PluginKeys.mention)?.mentions;\n const currentMention = mentions.find(m => m?.type === type);\n Transforms.insertText(editor, ` ${currentMention.trigger}`);\n setTimeout(() => {\n THE_EDITOR_ORIGIN_ANCHOR.set(editor, Editor.before(editor, editor.selection.anchor));\n const textElement = AngularEditor.toDOMNode(editor, TheQueries.anchorBlockEntry(editor)[0]);\n MentionEditor.openSelectOverlay(editor, type, textElement);\n });\n },\n deleteTriggerText(editor: TheEditor) {\n const searchInfo = MentionEditor.getSearchInfo(editor);\n const { currentRange } = searchInfo;\n Transforms.delete(editor, { at: currentRange });\n },\n openSuggestion(editor: TheEditor, type: string) {\n const { selection } = editor;\n const elementRef = editor.injector.get(ElementRef);\n const isParagraphStart = Editor.isStart(editor, selection?.anchor, TheQueries.anchorBlockEntry(editor)[1]);\n const originAnchor = THE_EDITOR_ORIGIN_ANCHOR.get(editor);\n let text = '';\n\n if (!isParagraphStart) {\n const beforeRange = {\n anchor: Editor.before(editor, selection.anchor),\n focus: selection.focus\n };\n text = Editor.string(editor, beforeRange);\n }\n\n const isSoftBreak = text === '\\n';\n if (isParagraphStart || text === ' ' || isSoftBreak) {\n if (!originAnchor) {\n THE_EDITOR_ORIGIN_ANCHOR.set(editor, editor.selection.anchor);\n }\n const textElement = AngularEditor.toDOMNode(editor, TheQueries.anchorBlockEntry(editor)[0]);\n const origin = isParagraphStart ? textElement : elementRef;\n MentionEditor.openSelectOverlay(editor, type, origin, isSoftBreak);\n }\n },\n getSearchInfo(editor: TheEditor) {\n const popoverRef = THE_EDITOR_POPOVER_REF.get(editor);\n const originAnchor = THE_EDITOR_ORIGIN_ANCHOR.get(editor);\n\n if (originAnchor && popoverRef && popoverRef.componentInstance) {\n const currentRange = Editor.range(editor, originAnchor, editor.selection?.focus);\n const currentText = Editor.string(editor, currentRange);\n\n return {\n currentRange,\n currentText\n };\n }\n\n return null;\n },\n updateSearchText(editor: TheEditor, text: string) {\n const popoverRef = THE_EDITOR_POPOVER_REF.get(editor);\n const mentions = getPluginOptions<MentionPluginOptions>(editor, PluginKeys.mention)?.mentions;\n const panelClass = popoverRef.getOverlayRef().getConfig().panelClass;\n const type = Array.isArray(panelClass)\n ? panelClass.find(i => i.indexOf('the-mention-') > -1).split('the-mention-')[1]\n : panelClass.split('the-mention-')[1];\n const currentMention = mentions.find(m => m.type === type);\n const regex = new RegExp(`^${currentMention.trigger}`);\n const beforeMatch = text && text.match(regex);\n const keywords = text.slice(1);\n const cdr = editor.injector.get(ChangeDetectorRef);\n\n if (popoverRef?.componentInstance && beforeMatch && !keywords.match(/^\\s|\\s$/)) {\n popoverRef.componentInstance.keywords = keywords;\n popoverRef.componentInstance.getSearchResult(keywords);\n cdr.markForCheck();\n }\n },\n openSelectOverlay(editor: TheEditor, type: string, origin: ElementRef | HTMLElement, isSoftBreak = false) {\n const overlay = editor.injector.get(Overlay);\n const thyPopover = editor.injector.get(ThyPopover);\n const viewContainerRef = editor.injector.get(ViewContainerRef);\n const cdr = editor.injector.get(ChangeDetectorRef);\n const mentions = getPluginOptions<MentionPluginOptions>(editor, PluginKeys.mention)?.mentions;\n const currentMention = mentions.find(m => m.type === type);\n const suggestionComponent = currentMention?.suggestion;\n\n const popoverRef = thyPopover.open(suggestionComponent, {\n origin,\n initialState: {\n editor,\n type\n },\n panelClass: `the-mention-${type}`,\n placement: 'bottomLeft',\n insideClosable: false,\n outsideClosable: true,\n hasBackdrop: false,\n offset: 4,\n minWidth: 0,\n viewContainerRef: viewContainerRef,\n scrollStrategy: overlay.scrollStrategies.reposition(),\n autoAdaptive: true\n });\n popoverRef?.afterClosed().subscribe(() => {\n MentionEditor.close(editor);\n });\n popoverRef?.getOverlayRef().updatePositionStrategy(MentionEditor.createPositionStrategy(editor, isSoftBreak));\n\n THE_EDITOR_POPOVER_REF.set(editor, popoverRef);\n cdr.markForCheck();\n },\n close(editor: TheEditor) {\n const popoverRef = THE_EDITOR_POPOVER_REF.get(editor);\n if (popoverRef) {\n popoverRef.close();\n THE_EDITOR_POPOVER_REF.set(editor, null);\n THE_EDITOR_ORIGIN_ANCHOR.set(editor, null);\n }\n },\n insertMention<T>(editor: TheEditor, type: string, data: T) {\n const element = {\n type,\n ...data,\n children: [\n {\n text: ''\n }\n ]\n };\n Transforms.insertNodes(editor, element as Element);\n Transforms.select(editor, editor.selection);\n Transforms.move(editor);\n TheEditor.focus(editor);\n\n editor.insertText(' ');\n },\n isActive(editor: TheEditor, type: string) {\n const [match] = TheQueries.getNodesByType(editor, type);\n return !!match;\n },\n createPositionStrategy(editor: TheEditor, isSoftBreak = false) {\n const textElement = AngularEditor.toDOMNode(editor, TheQueries.anchorBlockEntry(editor)[0]);\n const nativeRange = AngularEditor.toDOMRange(editor, editor.selection);\n const cursorRect = nativeRange.getBoundingClientRect();\n const textElementRect = textElement.getBoundingClientRect();\n const bottomPosition: ConnectedPosition = {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n offsetX: isSoftBreak ? 0 : cursorRect.x - textElementRect.x,\n offsetY: isSoftBreak ? textElementRect.height : cursorRect.y - textElementRect.y + 20\n };\n const bottomLeftPosition: ConnectedPosition = {\n ...bottomPosition,\n overlayX: 'end',\n offsetX: isSoftBreak ? 0 : cursorRect.x - textElementRect.x + 10\n };\n const topRightPosition: ConnectedPosition = {\n ...bottomPosition,\n overlayY: 'bottom',\n offsetY: cursorRect.y - textElementRect.y + (isSoftBreak ? cursorRect.height : 0)\n };\n const topLeftPosition: ConnectedPosition = {\n ...topRightPosition,\n overlayX: 'end',\n overlayY: 'bottom',\n offsetX: isSoftBreak ? 0 : cursorRect.x - textElementRect.x + 10\n };\n const overlay = editor.injector.get(Overlay);\n return overlay\n .position()\n .flexibleConnectedTo(textElement)\n .withFlexibleDimensions(false)\n .withGrowAfterOpen(false)\n .withPush(false)\n .withPositions([bottomPosition, bottomLeftPosition, topRightPosition, topLeftPosition]);\n }\n};\n","import { Editor, Element } from 'slate';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport { isDirectionKeydown, THE_EDITOR_POPOVER_REF } from '../../utils';\nimport { MentionEditor } from './mention.editor';\nimport { MentionPluginOptions } from './mention.type';\n\nexport const withMention = <T extends Editor>(editor: T): T => {\n const { isInline, isVoid, insertText, deleteBackward, renderElement, deleteFragment, onKeydown } = editor;\n\n editor.isInline = element => {\n const mentions = getPluginOptions<MentionPluginOptions>(editor, PluginKeys.mention)?.mentions;\n if (mentions?.some(mention => element?.type === mention?.type)) {\n return true;\n }\n return isInline(element);\n };\n\n editor.isVoid = element => {\n const mentions = getPluginOptions<MentionPluginOptions>(editor, PluginKeys.mention)?.mentions;\n if (mentions?.some(mention => element?.type === mention?.type)) {\n return true;\n }\n return isVoid(element);\n };\n\n editor.renderElement = (element: Element) => {\n const mentions = getPluginOptions<MentionPluginOptions>(editor, PluginKeys.mention)?.mentions;\n const currentMention = mentions?.find(mention => element?.type === mention?.type);\n if (currentMention && currentMention?.render) {\n return currentMention?.render;\n }\n\n return renderElement(element);\n };\n\n editor.insertText = text => {\n if (text === ' ') {\n MentionEditor.close(editor);\n } else {\n const mentions = getPluginOptions<MentionPluginOptions>(editor, PluginKeys.mention)?.mentions;\n const currentMention = mentions?.find(m => m?.trigger === text);\n const isDisabledTrigger = currentMention && currentMention.disableTrigger ? currentMention?.disableTrigger(editor) : false;\n if (editor.selection && currentMention && !isDisabledTrigger) {\n MentionEditor.openSuggestion(editor, currentMention.type);\n }\n\n const searchInfo = MentionEditor.getSearchInfo(editor);\n if (searchInfo) {\n const { currentText } = searchInfo;\n const searchText = `${currentText}${text}`;\n MentionEditor.updateSearchText(editor, searchText);\n }\n }\n\n insertText(text);\n };\n\n editor.deleteBackward = unit => {\n const searchInfo = MentionEditor.getSearchInfo(editor);\n if (searchInfo) {\n const { currentText } = searchInfo;\n const searchText = currentText.slice(0, -1);\n\n if (!!searchText) {\n MentionEditor.updateSearchText(editor, searchText);\n } else {\n MentionEditor.close(editor);\n }\n }\n\n deleteBackward(unit);\n };\n\n editor.deleteFragment = direction => {\n const searchInfo = MentionEditor.getSearchInfo(editor);\n\n if (searchInfo) {\n const { currentText } = searchInfo;\n\n if (!!currentText) {\n MentionEditor.updateSearchText(editor, currentText);\n } else {\n MentionEditor.close(editor);\n }\n }\n\n deleteFragment(direction);\n };\n\n editor.onKeydown = (event: KeyboardEvent) => {\n if (THE_EDITOR_POPOVER_REF.get(editor)) {\n if (isDirectionKeydown(event)) {\n event.preventDefault();\n return;\n }\n }\n onKeydown(event);\n };\n\n return editor;\n};\n\nexport const createMentionPlugin = createPluginFactory<MentionPluginOptions>({\n key: PluginKeys.mention,\n withOverrides: withMention\n});\n","import { Directive, HostListener, Input } from '@angular/core';\nimport { TheEditor } from '../../interfaces';\n\n@Directive()\nexport abstract class TheBaseSuggestion {\n @Input() editor: TheEditor;\n\n @Input() type: string;\n\n @Input() keywords: string;\n\n @HostListener('mousedown', ['$event'])\n handleMousedown(event: Event): void {\n event.preventDefault();\n }\n\n abstract getSearchResult(keywords: string): void;\n\n abstract selectMention<T>(event: T): void;\n}\n","import { Component, Input, OnInit, HostListener } from '@angular/core';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { insertTable } from '../../plugins/table/transforms/insert-table';\nimport { TheEditor } from '../../interfaces';\nimport { TableOptions } from '../../plugins/table/table.types';\nimport { refocus } from '../../utils';\n\n@Component({\n selector: 'table-select',\n templateUrl: './table-select.component.html'\n})\nexport class TheTableSelectComponent implements OnInit {\n @Input() optionsParam: TableOptions;\n\n @Input() editor: TheEditor;\n\n @Input() beforeInsert = () => {};\n\n tableData = new Array(10);\n\n maxRowIndex = -1;\n\n maxColIndex = -1;\n\n constructor(private popoverRef: ThyPopoverRef<TheTableSelectComponent>) {}\n\n ngOnInit(): void {}\n\n onSelectCells(rowIndex, colIndex) {\n this.maxRowIndex = rowIndex;\n this.maxColIndex = colIndex;\n }\n\n executeTable(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.beforeInsert();\n if (!this.editor.selection) {\n refocus(this.editor);\n }\n const opts = new TableOptions(this.optionsParam);\n insertTable(opts, this.editor, this.maxRowIndex + 1, this.maxColIndex + 1);\n if (this.popoverRef) {\n this.popoverRef.close();\n this.maxColIndex = -1;\n this.maxRowIndex = -1;\n }\n }\n}\n","<div class=\"table-selector-container\">\n <div *ngFor=\"let item of tableData; let rowIndex = index\" class=\"selector-row\" (mousedown)=\"executeTable($event)\">\n <span\n *ngFor=\"let item of tableData; let colIndex = index\"\n [ngClass]=\"{ 'active-cell': rowIndex <= maxRowIndex && colIndex <= maxColIndex, 'selector-cell': true }\"\n (mouseenter)=\"onSelectCells(rowIndex, colIndex)\"\n >\n </span>\n </div>\n <span class=\"selector-text\">{{ maxRowIndex + 1 }} x {{ maxColIndex + 1 }}</span>\n</div>\n","import { InjectionToken } from '@angular/core';\n\nexport const THE_LISTBOX_PARENT_OPTION_TOKEN = new InjectionToken('THE_LISTBOX_PARENT_OPTION_TOKEN');\n\nexport const THE_LISTBOX_PARENT_GROUP_TOKEN = new InjectionToken('THE_LISTBOX_PARENT_GROUP_TOKEN');\n\nexport const THE_LISTBOX_TOKEN = new InjectionToken('THE_LISTBOX_TOKEN');\n\nexport type TheListboxChangeEventType = 'turn' | 'child' | 'parent' | 'init' | 'select';\n","import { DOWN_ARROW, LEFT_ARROW, ENTER, RIGHT_ARROW, UP_ARROW, T } from '@angular/cdk/keycodes';\nimport { forwardRef, NgZone, Optional, SkipSelf } from '@angular/core';\nimport {\n AfterContentInit,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n QueryList\n} from '@angular/core';\nimport { fromEvent } from 'rxjs';\nimport { Subscription } from 'rxjs/internal/Subscription';\nimport { debounceTime } from 'rxjs/operators';\nimport {\n TheListboxChangeEventType,\n THE_LISTBOX_TOKEN,\n THE_LISTBOX_PARENT_OPTION_TOKEN,\n THE_LISTBOX_PARENT_GROUP_TOKEN\n} from './listbox.type';\n\n@Directive({\n selector: '[theListboxOption]',\n exportAs: 'theListboxOption',\n providers: [\n {\n provide: THE_LISTBOX_PARENT_OPTION_TOKEN,\n useExisting: TheListboxOptionDirective\n }\n ]\n})\nexport class TheListboxOptionDirective implements OnInit, AfterContentInit {\n private _active = false;\n\n @HostBinding('class') className = 'the-listbox-option';\n\n @ContentChildren(forwardRef(() => TheListboxOptionDirective), { descendants: true })\n public _options: QueryList<TheListboxOptionDirective>;\n\n get hasChild() {\n return this._options.length > 0;\n }\n\n get firstChild() {\n return this._options.first;\n }\n\n @Input() theOptionValue: unknown;\n\n @Input() theOptionDisabled: boolean;\n\n constructor(\n @Inject(THE_LISTBOX_PARENT_OPTION_TOKEN) @Optional() @SkipSelf() public parentOption: TheListboxOptionDirective,\n @Inject(THE_LISTBOX_PARENT_GROUP_TOKEN) public parentGroup: TheListboxGroupDirective,\n public elementRef: ElementRef<HTMLElement>\n ) {}\n\n ngOnInit(): void {}\n\n ngAfterContentInit(): void {}\n\n getGroups() {\n const groups: TheListboxGroupDirective[] = [];\n this._options.forEach(option => {\n if (option.parentOption && option.parentOption === this && !groups.includes(option.parentGroup)) {\n groups.push(option.parentGroup);\n }\n });\n return groups;\n }\n\n setActive(active: boolean) {\n this._active = active;\n if (active) {\n this.elementRef.nativeElement.classList.add('focus');\n } else {\n this.elementRef.nativeElement.classList.remove('focus');\n }\n }\n\n getActive() {\n return this._active;\n }\n}\n\n@Directive({\n selector: '[theListboxGroup]',\n exportAs: 'theListboxGroup',\n providers: [\n {\n provide: THE_LISTBOX_PARENT_GROUP_TOKEN,\n useExisting: TheListboxGroupDirective\n }\n ]\n})\nexport class TheListboxGroupDirective implements OnInit, AfterContentInit {\n @HostBinding('class') className = 'the-listbox-group';\n\n options: TheListboxOptionDirective[] = [];\n\n @ContentChildren(TheListboxOptionDirective, { descendants: true }) public _options: QueryList<TheListboxOptionDirective>;\n\n /**\n * 大于 1 表示水平分组,小于等于 1 表示垂直分组\n */\n @Input() horizontalColumn = 1;\n\n constructor(\n @Inject(THE_LISTBOX_PARENT_OPTION_TOKEN) @Optional() @SkipSelf() public parentOption: TheListboxOptionDirective,\n @Inject(THE_LISTBOX_TOKEN) public theListBox: TheListboxDirective\n ) {}\n\n ngOnInit(): void {}\n\n ngAfterContentInit(): void {\n this.filterOptions();\n }\n\n filterOptions() {\n this.options = this._options.filter(_option => {\n if (_option.parentGroup && _option.parentGroup === this) {\n return true;\n } else {\n return false;\n }\n });\n }\n\n getSiblingGroups() {\n if (this.parentOption) {\n return this.parentOption.getGroups();\n } else {\n return this.theListBox.groups;\n }\n }\n\n hasChild() {\n return this.options.length > 0;\n }\n\n getFirst() {\n return this.options[0];\n }\n\n getLast() {\n return this.options[this.options.length - 1];\n }\n}\n\n@Directive({\n selector: '[theListBox]',\n exportAs: 'theListBox',\n providers: [\n {\n provide: THE_LISTBOX_TOKEN,\n useExisting: TheListboxDirective\n }\n ]\n})\nexport class TheListboxDirective implements OnInit, AfterContentInit, OnDestroy {\n @HostBinding('class') className = 'the-listbox-container';\n\n private _optionChangesSubscription: Subscription;\n\n private _keyboardSubscription: Subscription;\n\n public activeOption: TheListboxOptionDirective;\n\n public groups: TheListboxGroupDirective[] = [];\n\n @ContentChildren(TheListboxGroupDirective, { descendants: true }) protected _groups: QueryList<TheListboxGroupDirective>;\n\n @ContentChildren(TheListboxOptionDirective, { descendants: true }) protected _options: QueryList<TheListboxOptionDirective>;\n\n @Input() keyboardContainer: HTMLElement;\n\n @Input() autoActiveFirstItem = true;\n\n @Output() theListboxChange = new EventEmitter<TheListboxChangeEvent>();\n\n constructor(private ngZone: NgZone, private elementRef: ElementRef<HTMLElement>) {}\n\n ngOnInit(): void {}\n\n ngAfterContentInit(): void {\n this.filterGroups();\n if (this.groups.length > 0 && this.autoActiveFirstItem) {\n this.setActiveItem(null, this.groups[0].getFirst(), 'init');\n }\n this._optionChangesSubscription = this._options.changes.pipe(debounceTime(20)).subscribe(() => {\n this.filterGroups();\n this.setActiveItem(this.activeOption, this.groups[0].getFirst(), 'init');\n });\n this.ngZone.runOutsideAngular(() => {\n this._keyboardSubscription = fromEvent<KeyboardEvent>(\n this.keyboardContainer || this.elementRef.nativeElement,\n 'keydown'\n ).subscribe(event => {\n this.handleKeydown(event);\n });\n });\n }\n\n filterGroups() {\n this.groups = this._groups.filter(group => {\n group.filterOptions();\n if (!group.parentOption && group.hasChild()) {\n return true;\n } else {\n return false;\n }\n });\n }\n\n handleKeydown(event: KeyboardEvent) {\n const { keyCode } = event;\n if (!this.activeOption && (keyCode === DOWN_ARROW || keyCode === UP_ARROW || keyCode === RIGHT_ARROW || keyCode === LEFT_ARROW)) {\n this.setActiveItem(null, this.groups[0].getFirst(), 'init');\n return;\n }\n\n switch (keyCode) {\n case DOWN_ARROW:\n this.setNextLineActive();\n event.preventDefault();\n break;\n case UP_ARROW:\n this.setPreviousLineActive();\n event.preventDefault();\n break;\n case RIGHT_ARROW:\n this.setNextItemActive();\n event.preventDefault();\n break;\n case LEFT_ARROW:\n this.setPreviousItemActive();\n event.preventDefault();\n break;\n case ENTER:\n this.theListboxChange.emit({ option: this.activeOption, type: 'select' });\n event.preventDefault();\n break;\n }\n }\n\n /**\n * ←\n */\n setPreviousItemActive() {\n if (this.activeOption.parentOption) {\n this.setActiveItem(this.activeOption, this.activeOption.parentOption, 'parent');\n } else {\n const groupOptions = this.activeOption.parentGroup.options;\n let optionIndex = groupOptions.indexOf(this.activeOption);\n let newOptionIndex = optionIndex - 1;\n if (newOptionIndex >= 0) {\n this.setActiveItem(this.activeOption, groupOptions[newOptionIndex], 'turn');\n } else {\n this.enterPreviousGroup();\n }\n }\n }\n\n /**\n * ↓ 键\n */\n setNextLineActive(activeOption?: TheListboxOptionDirective) {\n const _activeOption = activeOption ? activeOption : this.activeOption;\n const groupOptions = _activeOption.parentGroup.options;\n let optionIndex = groupOptions.indexOf(_activeOption);\n let newOptionIndex = optionIndex + _activeOption.parentGroup.horizontalColumn;\n const lastLineLength = groupOptions.length % _activeOption.parentGroup.horizontalColumn;\n const lastLineStartIndex = groupOptions.length - (lastLineLength > 0 ? lastLineLength : 1);\n let newOption = null;\n if (newOptionIndex <= groupOptions.length - 1) {\n newOption = groupOptions[newOptionIndex];\n } else if (optionIndex < lastLineStartIndex) {\n newOptionIndex = groupOptions.length - 1;\n newOption = groupOptions[newOptionIndex];\n }\n if (newOption) {\n this.setActiveItem(this.activeOption, newOption, 'turn');\n } else {\n this.enterNextGroup();\n }\n }\n\n /**\n * → 键\n */\n setNextItemActive() {\n if (this.activeOption.hasChild) {\n this.setActiveItem(this.activeOption, this.activeOption.firstChild, 'child');\n } else {\n const groupOptions = this.activeOption.parentGroup.options;\n let optionIndex = groupOptions.indexOf(this.activeOption);\n let newOptionIndex = optionIndex + 1;\n if (newOptionIndex <= groupOptions.length - 1) {\n this.setActiveItem(this.activeOption, groupOptions[newOptionIndex], 'turn');\n } else {\n this.enterNextGroup();\n }\n }\n }\n\n /**\n * ↑ 键\n */\n setPreviousLineActive() {\n const groupOptions = this.activeOption.parentGroup.options;\n let optionIndex = groupOptions.indexOf(this.activeOption);\n let newOptionIndex = optionIndex - this.activeOption.parentGroup.horizontalColumn;\n if (newOptionIndex >= 0) {\n this.setActiveItem(this.activeOption, groupOptions[newOptionIndex], 'turn');\n } else {\n this.enterPreviousGroup();\n }\n }\n\n enterNextGroup() {\n const groups = this.activeOption.parentGroup.getSiblingGroups();\n const groupIndex = groups.indexOf(this.activeOption.parentGroup);\n let newGroupIndex = groupIndex + 1;\n if (newGroupIndex > groups.length - 1) {\n newGroupIndex = 0;\n }\n this.setActiveItem(this.activeOption, groups[newGroupIndex].getFirst(), 'turn');\n }\n\n enterPreviousGroup() {\n const groups = this.activeOption.parentGroup.getSiblingGroups();\n const groupIndex = groups.indexOf(this.activeOption.parentGroup);\n let newGroupIndex = groupIndex - 1;\n if (newGroupIndex < 0) {\n newGroupIndex = groups.length - 1;\n }\n this.setActiveItem(this.activeOption, groups[newGroupIndex].getLast(), 'turn');\n }\n\n setActiveItem(previous: TheListboxOptionDirective | null, option: TheListboxOptionDirective, type: TheListboxChangeEventType) {\n if (previous) {\n previous.setActive(false);\n }\n option.setActive(true);\n this.activeOption = option;\n this.theListboxChange.emit({ option, type });\n }\n\n ngOnDestroy(): void {\n this._optionChangesSubscription.unsubscribe();\n this._keyboardSubscription.unsubscribe();\n }\n}\n\nexport interface TheListboxChangeEvent {\n option: TheListboxOptionDirective;\n type: TheListboxChangeEventType;\n}\n","import { Directive, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[thePreventDefault]',\n exportAs: 'thePreventDefault'\n})\nexport class ThePreventDefaultDirective {\n @HostListener('mousedown', ['$event'])\n mousedown(event: MouseEvent) {\n event.preventDefault();\n }\n}\n","import { Component, OnInit, Input, OnDestroy, ElementRef, ChangeDetectorRef, HostBinding, ViewChildren, NgZone } from '@angular/core';\nimport { mixinUnsubscribe, MixinBase, ScrollToService } from 'ngx-tethys/core';\nimport { Editor, Node, PathRef, Text } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { buildPluginMenu, buildPluginMenuItemMap } from '../../core/utils/plugin-menu';\nimport { DefaultPluginMenu, ThePluginMenuItemType } from '../../constants/plugin-menu';\nimport {\n ThePluginMenu,\n ThePluginMenuGroup,\n ThePluginMenuItem,\n ThePluginMenuItemConfig,\n ThePluginMenuItemWrap\n} from '../../interfaces/plugins/plugin-menu';\nimport { QuickInsertEditor } from '../../plugins/public-api';\nimport { TheListboxChangeEvent, TheListboxOptionDirective } from '../listbox/listbox';\nimport { ThyDropdownDirective } from 'ngx-tethys/dropdown';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { refocus } from '../../utils/refocus';\n\n@Component({\n selector: 'the-plugin-menu',\n templateUrl: 'plugin-menu.component.html'\n})\nexport class ThePluginMenuComponent extends mixinUnsubscribe(MixinBase) implements OnInit, OnDestroy {\n listBoxAutoActiveFirstItem = true;\n\n pathRef: PathRef;\n\n keyboardContainer: HTMLElement;\n\n _pluginMenu: ThePluginMenu;\n\n groupMenu: ThePluginMenu = [];\n\n iconMenu: ThePluginMenu = [];\n\n ThePluginMenuItemType = ThePluginMenuItemType;\n\n keyWords: string;\n\n thyMessage = '暂无数据';\n\n scrollContainer: HTMLElement;\n\n searchGroup: ThePluginMenuGroup = {\n groupName: '搜索结果'\n };\n\n expandPopoverOptions = {\n placement: 'rightTop',\n width: '262px'\n };\n\n tableSelectPopoverConfig = {\n panelClass: 'plugin-menu-table-select-container',\n minWidth: 0,\n // 避免重写\n originActiveClass: 'thy-popover-origin-active'\n };\n\n @ViewChildren('dropdownTriggers', { read: ThyDropdownDirective }) dropdownTriggers: ThyDropdownDirective[];\n\n @HostBinding('class') containerClassName = `the-plugin-menu-container`;\n\n @Input() editor: Editor;\n\n @Input() theDisplaySearch: boolean = false;\n\n @Input() thePluginMenu: ThePluginMenuItemConfig[];\n\n @Input() sceneKey?: string;\n\n @Input() subPanelClass: string | string[];\n\n @Input() autoActiveFirstItem: boolean = true;\n\n constructor(\n public elementRef: ElementRef<HTMLElement>,\n public cdr: ChangeDetectorRef,\n private ngZone: NgZone,\n private thyPopoverRef: ThyPopoverRef<ThePluginMenuComponent>\n ) {\n super();\n }\n\n ngOnInit() {\n if (!this.autoActiveFirstItem || this.theDisplaySearch) {\n this.listBoxAutoActiveFirstItem = false;\n }\n this.initializeSearch();\n this.initializePluginMenu();\n this.buildMenus();\n setTimeout(() => {\n this.scrollContainer = this.elementRef.nativeElement.querySelector('.the-plugin-menu-scroll-container');\n }, 0);\n }\n\n initializeSearch() {\n if (this.theDisplaySearch) {\n this.keyboardContainer = this.elementRef.nativeElement;\n setTimeout(() => {\n // 记住位置\n if (this.editor.selection) {\n this.pathRef = Editor.pathRef(this.editor, this.editor.selection.anchor.path);\n }\n this.elementRef.nativeElement.querySelector('input').focus();\n }, 0);\n } else {\n this.keyboardContainer = AngularEditor.toDOMNode(this.editor, this.editor);\n }\n }\n\n initializePluginMenu() {\n const currentMenu = this.thePluginMenu || DefaultPluginMenu;\n const menuItemsMap = buildPluginMenuItemMap(this.editor);\n this._pluginMenu = buildPluginMenu(menuItemsMap, currentMenu);\n }\n\n buildMenus() {\n this.iconMenu = [];\n this.groupMenu = [];\n this._pluginMenu.forEach((item: ThePluginMenuItemWrap) => {\n const isHidden = item?.isHidden && item.isHidden(this.editor);\n if (ThePluginMenu.isMenuItem(item)) {\n item.isMenuItem = true;\n item.disabled = item.isDisabled && item.isDisabled(this.editor);\n if (this.keyWords && !isHidden && item.keywords && item.keywords?.includes(this.keyWords)) {\n this.groupMenu.push(item);\n }\n if (!isHidden && item.children && item.children.length > 0) {\n item.children?.forEach((child: ThePluginMenuItemWrap | 'divider') => {\n if (child === 'divider') return;\n child.isMenuItem = true;\n child.disabled = child.isDisabled && child.isDisabled(this.editor);\n const isHiddenChid = item.isHidden && item.isHidden(this.editor);\n if (this.keyWords && !isHiddenChid && child.keywords && child.keywords?.includes(this.keyWords)) {\n this.groupMenu.push(child);\n }\n });\n }\n }\n if (!this.keyWords && !isHidden) {\n item?.type === ThePluginMenuItemType.icon ? this.iconMenu.push(item) : this.groupMenu.push(item);\n }\n });\n\n if (this.keyWords && this.groupMenu.length > 0) {\n this.groupMenu.unshift(this.searchGroup);\n }\n\n this.cdr.markForCheck();\n }\n\n handleItemSelection(menuItem: ThePluginMenuItem) {\n if (menuItem.isDisabled && menuItem.isDisabled(this.editor)) {\n return;\n }\n if (!this.editor.selection) {\n refocus(this.editor);\n }\n if (!this.theDisplaySearch) {\n this.removeKeywords();\n }\n menuItem.execute(this.editor);\n this.thyPopoverRef.close();\n QuickInsertEditor.updatePluginMenuRef(this.editor, null);\n }\n\n removeKeywords = () => {\n const node = Node.get(this.editor, this.editor.selection.anchor.path) as Text;\n if (node && Node.string(node).length > 0) {\n Editor.deleteBackward(this.editor, { unit: 'block' });\n }\n };\n\n updateKeywords(keywords: string) {\n if (this.autoActiveFirstItem) {\n this.listBoxAutoActiveFirstItem = true;\n }\n this.keyWords = keywords.toLowerCase().trim();\n this.buildMenus();\n if (this.scrollContainer) {\n this.scrollContainer.scrollTop = 0;\n }\n }\n\n theListboxChange(event: TheListboxChangeEvent) {\n if (event.type === 'select') {\n this.handleItemSelection(event.option.theOptionValue as ThePluginMenuItem);\n }\n if (event.type === 'child') {\n const dropdown = this.findDropdownTrigger(event.option.parentOption);\n this.ngZone.run(() => {\n dropdown.show();\n });\n }\n if (event.type === 'parent') {\n const dropdown = this.findDropdownTrigger(event.option);\n dropdown.hide();\n }\n if (event.type === 'turn' && !event.option.parentOption) {\n ScrollToService.scrollToElement(event.option.elementRef.nativeElement, this.scrollContainer);\n }\n }\n\n findDropdownTrigger(option: TheListboxOptionDirective) {\n const dropdown = this.dropdownTriggers.find(value => {\n return value['elementRef'].nativeElement === option.elementRef.nativeElement;\n });\n return dropdown;\n }\n\n trackByFn(index: ThePluginMenuItem, item: any) {\n return item?.key ?? index;\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div *ngIf=\"theDisplaySearch\" class=\"menu-search px-5 pt-5 pb-2\">\n <thy-input-search [(ngModel)]=\"keyWords\" placeholder=\"搜索\" thyIconPosition=\"after\" (ngModelChange)=\"updateKeywords(keyWords)\">\n </thy-input-search>\n</div>\n\n<div\n *ngIf=\"groupMenu.length > 0; else thyEmpty\"\n theListBox\n [keyboardContainer]=\"keyboardContainer\"\n [autoActiveFirstItem]=\"listBoxAutoActiveFirstItem\"\n (theListboxChange)=\"theListboxChange($event)\"\n class=\"thy-dropdown-menu the-plugin-menu-scroll-container pb-2 pt-0\"\n>\n <div *ngIf=\"iconMenu?.length > 0\" theListboxGroup [horizontalColumn]=\"6\" class=\"icon-menu d-flex pl-5 py-1\">\n <ng-container *ngFor=\"let item of iconMenu; trackBy: trackByFn\">\n <a\n *ngIf=\"item.type === ThePluginMenuItemType.icon\"\n href=\"javascript:;\"\n class=\"mt-2\"\n thyAction\n theListboxOption\n [theOptionValue]=\"item\"\n [thyActionIcon]=\"item.icon\"\n [thyTooltip]=\"item?.name\"\n [thyDisabled]=\"item.disabled\"\n [theOptionDisabled]=\"item.disabled\"\n thePreventDefault\n (click)=\"handleItemSelection(item)\"\n ></a>\n </ng-container>\n </div>\n\n <thy-divider *ngIf=\"this.iconMenu?.length\" class=\"my-2\"></thy-divider>\n <div theListboxGroup>\n <ng-container *ngFor=\"let item of groupMenu; trackBy: trackByFn\">\n <ng-container *ngIf=\"item.isMenuItem && !(item.children?.length > 0) && item.key !== 'table'\">\n <div\n thyDropdownMenuItem\n theListboxOption\n [theOptionValue]=\"item\"\n class=\"py-0\"\n thePreventDefault\n [thyDisabled]=\"item.disabled\"\n [theOptionDisabled]=\"item.disabled\"\n (click)=\"handleItemSelection(item)\"\n >\n <div *ngIf=\"item.menuIcon\" class=\"menu-icon mr-2\">\n <thy-icon [thyIconName]=\"item.menuIcon | getMenuIcon: sceneKey\"></thy-icon>\n </div>\n <div class=\"menu-content d-flex align-items-center\">\n <div class=\"menu-item-title w-100\">\n {{ item.name }}\n </div>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"item.isMenuItem && item.children?.length > 0\" #hasExpanded>\n <div\n #dropdownTriggers\n [thyDropdown]=\"expand\"\n thyTrigger=\"hover\"\n thyDropdownMenuItem\n [thyDisabled]=\"item.disabled\"\n theListboxOption\n [theOptionValue]=\"item\"\n [theOptionDisabled]=\"item.disabled\"\n [thyPopoverOptions]=\"expandPopoverOptions\"\n class=\"py-0\"\n thePreventDefault\n [thyPanelClass]=\"subPanelClass\"\n (click)=\"handleItemSelection(item)\"\n >\n <div *ngIf=\"item.menuIcon\" class=\"menu-icon mr-2\">\n <thy-icon [thyIconName]=\"item.menuIcon | getMenuIcon: sceneKey\"></thy-icon>\n </div>\n <div class=\"menu-content d-flex align-items-center\">\n <div class=\"menu-item-title w-100\">\n {{ item.name }}\n </div>\n </div>\n <div *ngIf=\"item.children?.length > 0\">\n <thy-icon class=\"text-muted\" thyIconName=\"angle-right\"></thy-icon>\n </div>\n <thy-dropdown-menu #expand>\n <div class=\"the-plugin-menu-container expand-menu\" theListboxGroup>\n <ng-container *ngFor=\"let child of item.children\">\n <div\n *ngIf=\"child.type === ThePluginMenuItemType.group\"\n thyDropdownMenuItem\n theListboxOption\n class=\"py-0\"\n thePreventDefault\n [theOptionDisabled]=\"item.disabled\"\n [thyDisabled]=\"child.disabled\"\n (click)=\"handleItemSelection(child)\"\n [theOptionValue]=\"child\"\n >\n <div *ngIf=\"child.menuIcon\" class=\"menu-icon mr-2\">\n <thy-icon [thyIconName]=\"child.menuIcon | getMenuIcon: sceneKey\"></thy-icon>\n </div>\n <div class=\"menu-content d-flex align-items-center\">\n <div class=\"menu-item-title w-100\">\n {{ child.name }}\n </div>\n </div>\n </div>\n <thy-divider *ngIf=\"child === 'divider'\" class=\"my-2\"></thy-divider>\n </ng-container>\n </div>\n </thy-dropdown-menu>\n </div>\n </ng-container>\n <ng-container *ngIf=\"item.isMenuItem && item.key === 'table'\">\n <div\n #dropdownTriggers\n [thyPopover]=\"tableSelect\"\n thyPlacement=\"rightTop\"\n thyTrigger=\"hover\"\n thyDropdownMenuItem\n theListboxOption\n [thyConfig]=\"tableSelectPopoverConfig\"\n [theOptionValue]=\"item\"\n [theOptionDisabled]=\"item.disabled\"\n [thyDisabled]=\"item.disabled\"\n class=\"py-0\"\n thePreventDefault\n (click)=\"handleItemSelection(item)\"\n >\n <div class=\"menu-icon mr-2\">\n <thy-icon [thyIconName]=\"item.menuIcon | getMenuIcon: sceneKey\"></thy-icon>\n </div>\n <div class=\"menu-content d-flex align-items-center\">\n <div class=\"menu-item-title w-100\">\n {{ item.name }}\n </div>\n </div>\n <div>\n <thy-icon class=\"text-muted\" thyIconName=\"angle-right\"></thy-icon>\n </div>\n\n <ng-template #tableSelect>\n <table-select\n class=\"plugin-menu-table the-table-selector-panel\"\n [editor]=\"editor\"\n [beforeInsert]=\"removeKeywords\"\n ></table-select>\n </ng-template>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!item.isMenuItem\" #menuGroup>\n <thy-dropdown-menu-group class=\"font-size-sm\" [thyTitle]=\"item.groupName\"></thy-dropdown-menu-group>\n </ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #thyEmpty>\n <div class=\"empty d-flex align-items-center justify-content-center\">\n <thy-empty [thyMessage]=\"thyMessage\"></thy-empty>\n </div>\n</ng-template>\n","import { Overlay } from '@angular/cdk/overlay';\nimport { ViewContainerRef } from '@angular/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { THE_PLUGIN_MENU_REF } from '../../utils/weak-maps';\nimport { getBlockAbove } from '../../queries/get-block-above';\nimport { ThePluginMenuComponent } from '../../components/plugin-menu/plugin-menu.component';\n\nexport const QuickInsertEditor = {\n openMenu(editor: Editor) {\n if (QuickInsertEditor.isOpenedMenu(editor)) {\n return;\n }\n const [block] = getBlockAbove(editor);\n const rootNode = AngularEditor.toDOMNode(editor, block);\n const origin = rootNode.querySelector('[data-slate-leaf=\"true\"]') as HTMLElement;\n const overlay = editor.injector.get(Overlay);\n const viewContainerRef = editor.injector.get(ViewContainerRef);\n const thyPopover = editor.injector.get(ThyPopover);\n const pluginMenuRef = thyPopover.open(ThePluginMenuComponent, {\n initialState: {\n editor,\n thePluginMenu: editor.options.menu\n },\n origin,\n viewContainerRef: viewContainerRef,\n backdropClosable: true,\n placement: 'bottomLeft',\n offset: 4,\n hasBackdrop: false,\n outsideClosable: true,\n manualClosure: true,\n minWidth: 0,\n scrollStrategy: overlay.scrollStrategies.reposition()\n });\n QuickInsertEditor.updatePluginMenuRef(editor, pluginMenuRef);\n pluginMenuRef.afterClosed().subscribe(() => {\n QuickInsertEditor.updatePluginMenuRef(editor, null);\n });\n pluginMenuRef.componentInstance.cdr.markForCheck();\n return pluginMenuRef;\n },\n updateKeywords(editor: Editor, keywords: string) {\n const pluginMenuRef = THE_PLUGIN_MENU_REF.get(editor);\n if (pluginMenuRef) {\n pluginMenuRef.componentInstance.updateKeywords(keywords);\n }\n },\n updatePluginMenuRef(editor: Editor, pluginMenuRef: ThyPopoverRef<any> | null) {\n if (pluginMenuRef) {\n THE_PLUGIN_MENU_REF.set(editor, pluginMenuRef);\n } else {\n THE_PLUGIN_MENU_REF.set(editor, null);\n }\n },\n closeMenu(editor: Editor) {\n const pluginMenuRef = THE_PLUGIN_MENU_REF.get(editor);\n if (pluginMenuRef) {\n pluginMenuRef.close();\n QuickInsertEditor.updatePluginMenuRef(editor, null);\n }\n },\n isOpenedMenu(editor: Editor) {\n const pluginMenuRef = THE_PLUGIN_MENU_REF.get(editor);\n return !!pluginMenuRef;\n }\n};\n","import { Editor, Transforms } from 'slate';\nimport { ElementKinds } from '../../constants';\nimport { ListEditor } from '../list/list.editor';\nimport * as TheQueries from '../../queries';\n\nexport const TodoItemEditor = {\n isActive(editor: Editor) {\n const [match] = TheQueries.getNodesByType(editor, ElementKinds.checkItem);\n return !!match;\n },\n insertTodoItem(editor: Editor) {\n if (!editor.selection) {\n return;\n }\n const isActive = TodoItemEditor.isActive(editor);\n const isNumberedList = ListEditor.isActive(editor, ElementKinds.numberedList);\n const isBulletedList = ListEditor.isActive(editor, ElementKinds.bulletedList);\n\n if (isActive) {\n Transforms.setNodes(editor, {\n type: ElementKinds.paragraph\n });\n } else {\n if (isNumberedList || isBulletedList) {\n ListEditor.unwrapList(editor);\n }\n Transforms.setNodes(editor, {\n type: ElementKinds.checkItem\n });\n }\n }\n};\n","import { Component, ElementRef, HostListener, OnInit, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor } from 'slate';\nimport { TheBaseToolbarDropdown } from '../../core/toolbar-item/base-toolbar-item';\nimport { ToolbarItem } from '../../interfaces';\n\n@Component({\n selector: 'the-toolbar-vertical-align-item',\n templateUrl: './toolbar-item.component.html',\n host: {\n class: 'the-toolbar-dropdown-container verticalAlign',\n '[class.hide]': '!active'\n }\n})\nexport class TheVerticalToolbarItemComponent extends TheBaseToolbarDropdown implements OnInit {\n isHide = true;\n dropdownPopoverRef: ThyPopoverRef<any>;\n\n @ViewChild('VerticalAlignItems', { read: TemplateRef, static: true })\n template: TemplateRef<any>;\n\n get isOpened() {\n return this.dropdownPopoverRef && this.dropdownPopoverRef.getOverlayRef() && this.dropdownPopoverRef.getOverlayRef().hasAttached();\n }\n\n @HostListener('document: mousedown', ['$event'])\n handleDocumentMouseDown(event: MouseEvent) {\n if (!this.elementRef.nativeElement.contains(event.target as HTMLElement)) {\n this.close();\n }\n }\n\n constructor(public elementRef: ElementRef, private thyPopover: ThyPopover, private viewContainerRef: ViewContainerRef) {\n super();\n }\n\n ngOnInit(): void {}\n\n menusActive(editor: Editor) {\n return this.menus.find(i => {\n if (this.editor?.selection && i?.active) {\n return i?.active(editor);\n }\n });\n }\n\n execute(event: MouseEvent) {\n super.execute(event);\n if (this.editor?.readOnly || this.editor?.disabled) {\n return;\n }\n this.openPopover();\n }\n\n itemMousedown(event: MouseEvent, item: ToolbarItem) {\n event.preventDefault();\n event.stopPropagation();\n\n this.close();\n\n if (item?.execute) {\n item?.execute(this.editor);\n }\n }\n\n openPopover() {\n this.dropdownPopoverRef = this.thyPopover.open(this.template, {\n origin: this.elementRef,\n panelClass: ['the-toolbar-dropdown-popover', this.toolbarItem?.key],\n placement: 'bottomLeft',\n offset: 10,\n minWidth: 0,\n viewContainerRef: this.viewContainerRef,\n insideClosable: false,\n backdropClosable: false,\n hasBackdrop: false\n });\n }\n\n close() {\n if (this.dropdownPopoverRef) {\n this.dropdownPopoverRef.close();\n }\n }\n}\n","<a\n href=\"javascript:;\"\n class=\"icon-mode link-with-down\"\n thyAction\n [thyActionIcon]=\"activeMenuItem?.icon\"\n [thyActionActive]=\"isOpened\"\n [thyTooltip]=\"toolbarItem?.name\"\n thyTooltipPlacement=\"top\"\n (mousedown)=\"execute($event)\"\n>\n <thy-icon class=\"font-size-sm text-desc ml-1\" thyIconName=\"caret-down\"></thy-icon>\n</a>\n\n<ng-template #VerticalAlignItems>\n <div class=\"thy-dropdown-menu\">\n <ng-container *ngFor=\"let menu of toolbarItem?.includes\">\n <a\n href=\"javascript:;\"\n thyDropdownMenuItem\n [thyDropdownMenuItemActive]=\"menu.key === activeMenuItem?.key\"\n (mousedown)=\"itemMousedown($event, menu)\"\n >\n <thy-icon *ngIf=\"menu.icon\" thyDropdownMenuItemIcon [thyIconName]=\"menu?.icon\"></thy-icon>\n <span thyDropdownMenuItemName>{{ menu.name }}</span>\n </a>\n </ng-container>\n </div>\n</ng-template>\n","import { createPluginFactory } from '../../core';\nimport { DropdownMode, ToolbarActionTypes, VerticalAlignment } from '../../constants';\nimport { PluginKeys, TheEditor, ToolbarItemType } from '../../interfaces';\nimport { TableEditor } from '../table/table.editor';\nimport { TheVerticalToolbarItemComponent } from './toolbar-item.component';\n\nexport const VerticalAlignEditor = {\n isVerticalActive(editor: TheEditor, alignment: VerticalAlignment) {\n const tableCellAlign = TableEditor.isVerticalAlignActive(editor, alignment);\n if (tableCellAlign !== null) {\n return tableCellAlign;\n }\n return false;\n },\n setVerticalAlign(editor: TheEditor, alignment: VerticalAlignment) {\n if (TableEditor.setVerticalAlign(editor, alignment)) {\n return;\n }\n }\n};\n\nexport const createVerticalAlignPlugin = createPluginFactory({\n key: PluginKeys.verticalAlign,\n toolbarItems: [\n {\n key: ToolbarActionTypes.verticalAlign,\n name: '垂直对齐',\n type: ToolbarItemType.dropdown,\n dropdownMode: DropdownMode.icon,\n iconComponent: TheVerticalToolbarItemComponent,\n includes: [ToolbarActionTypes.verticalAlignTop, ToolbarActionTypes.verticalAlignMiddle, ToolbarActionTypes.verticalAlignBottom],\n active: editor => TableEditor.isActive(editor)\n },\n {\n key: ToolbarActionTypes.verticalAlignTop,\n icon: 'align-top',\n name: '顶部对齐',\n execute: editor => VerticalAlignEditor.setVerticalAlign(editor, VerticalAlignment.top),\n active: editor => VerticalAlignEditor.isVerticalActive(editor, VerticalAlignment.top)\n },\n {\n key: ToolbarActionTypes.verticalAlignMiddle,\n icon: 'align-middle',\n name: '垂直居中',\n execute: editor => VerticalAlignEditor.setVerticalAlign(editor, VerticalAlignment.middle),\n active: editor => VerticalAlignEditor.isVerticalActive(editor, VerticalAlignment.middle)\n },\n {\n key: ToolbarActionTypes.verticalAlignBottom,\n icon: 'align-bottom',\n name: '底部对齐',\n execute: editor => VerticalAlignEditor.setVerticalAlign(editor, VerticalAlignment.bottom),\n active: editor => VerticalAlignEditor.isVerticalActive(editor, VerticalAlignment.bottom)\n }\n ]\n});\n","import { Editor, Range, Transforms, Node, Element, Path } from 'slate';\nimport { InlineCodeElement } from '../../custom-types';\nimport { ElementKinds, ZERO_WIDTH_CHAR } from '../../constants';\n\nexport const InlineCodeEditor = {\n toggleInlineCode(editor, text?: string) {\n const isActive = InlineCodeEditor.isInlineCodeActive(editor);\n if (isActive) {\n InlineCodeEditor.unwrapInlineCode(editor);\n return;\n }\n if (Range.isCollapsed(editor.selection)) {\n InlineCodeEditor.wrapInlineCode(editor, text);\n } else {\n const fragment = Node.fragment(editor, editor.selection)[0];\n const selectNode = Node.get(fragment, []);\n const selectText = Node.string(selectNode);\n InlineCodeEditor.wrapInlineCode(editor, selectText);\n }\n },\n\n wrapInlineCode(editor: Editor, text = '') {\n if (InlineCodeEditor.isInlineCodeActive(editor)) {\n InlineCodeEditor.unwrapInlineCode(editor);\n }\n const { selection } = editor;\n const isCollapsed = selection && Range.isCollapsed(selection);\n const inlineCode: InlineCodeElement = {\n type: ElementKinds.inlineCode,\n children: isCollapsed ? [{ text: text ? text : ZERO_WIDTH_CHAR }] : []\n };\n if (isCollapsed) {\n Transforms.insertNodes(editor, inlineCode);\n } else {\n Transforms.wrapNodes(editor, inlineCode, { split: true });\n }\n },\n\n unwrapInlineCode(editor: Editor) {\n Transforms.unwrapNodes(editor, { match: n => Element.isElement(n) && n.type === ElementKinds.inlineCode });\n },\n\n isInlineCodeActive(editor: Editor, path?: Path) {\n const [inlineCode] = Editor.nodes(editor, {\n at: path ? path : editor.selection?.anchor.path,\n match: n => Element.isElement(n) && n.type === ElementKinds.inlineCode\n });\n return !!inlineCode;\n }\n};\n","import { CellPosition } from '../table.types';\nimport { Transforms, Element, Editor, Path } from 'slate';\nimport { IndentPluginOptions } from '../../../plugins/indent/indent.plugin';\nimport { getPluginOptions } from '../../../core/utils';\nimport { IndentEditor } from '../../../plugins/public-api';\nimport { PluginKeys } from '../../../interfaces';\nimport { Indents } from '../../../constants';\nimport { CustomElement } from '../../../custom-types';\n\nexport function sortCell(cells: CellPosition[]) {\n cells.sort((a, b) => a.row - b.row);\n cells.sort((a, b) => a.col - b.col);\n}\n\nexport function setCellIndent(editor: Editor, indentType: Indents, child: CustomElement, at: Path) {\n const allowedTypes = IndentEditor.getAllowedTypes(editor);\n if (!Element.isElement(child) || !allowedTypes.includes(child.type)) {\n return;\n }\n\n const maxIndent = getPluginOptions<IndentPluginOptions>(editor, PluginKeys.indent)?.maxIndent ?? [];\n let { indent } = child;\n indent = indentType === Indents.indentRight ? (indent ? ++indent : 1) : indent ? --indent : 0;\n if (indent <= maxIndent) {\n Transforms.setNodes(\n editor,\n { indent },\n {\n at,\n mode: 'highest'\n }\n );\n }\n}\n","import { Editor, Element, NodeEntry, Transforms, Text, Path, Range, Node, Location, Point } from 'slate';\nimport { AngularEditor, ELEMENT_TO_COMPONENT } from 'slate-angular';\nimport { TableOptions } from './table.types';\nimport { Alignment, ALIGN_BLOCK_TYPES, ElementKinds, Indents, MarkProps, MarkTypes, VerticalAlignment } from '../../constants';\nimport { TheEditor } from '../../interfaces';\nimport { CustomElement, TableCellElement, TableElement } from '../../custom-types';\nimport { insertTable, insertColumn, insertRow, removeColumn, removeRow, removeTable } from './transforms';\nimport { clearCell } from './transforms/clear-cell';\nimport type { TheTableComponent } from './components/table.component';\nimport { getOriginCell } from './utils';\nimport * as TheTransforms from '../../transforms';\nimport * as TheQueries from '../../queries';\nimport { setCellIndent, sortCell } from './utils/handle-cell';\nimport { createTablePosition } from './utils/create-table-position';\n\nexport const TableEditor = {\n insertTable(editor: Editor, optionsParam?: TableOptions) {\n const opts = new TableOptions(optionsParam);\n insertTable(opts, editor);\n },\n insertColumn(editor: Editor, count: number = 1, at?: number, optionsParam?: TableOptions) {\n const opts = new TableOptions(optionsParam);\n insertColumn(opts, editor, count, at);\n },\n insertRow(editor: Editor, count: number = 1, at?: number, optionsParam?: TableOptions) {\n const opts = new TableOptions(optionsParam);\n insertRow(opts, editor, count, at);\n },\n removeTable(editor: Editor, optionsParam?: TableOptions) {\n const opts = new TableOptions(optionsParam);\n removeTable(opts, editor);\n },\n removeRow(editor: Editor, rowIndex?: number, optionsParam?: TableOptions) {\n const opts = new TableOptions(optionsParam);\n removeRow(opts, editor, rowIndex);\n },\n removeColumn(editor: Editor, colIndex?: number, optionsParam?: TableOptions) {\n const opts = new TableOptions(optionsParam);\n removeColumn(opts, editor, colIndex);\n },\n clearCell(editor: Editor, nodeEntry?: NodeEntry<Element>, optionsParam?: TableOptions) {\n const opts = new TableOptions(optionsParam);\n clearCell(opts, editor, nodeEntry);\n },\n isActive(editor: Editor) {\n const [table] = Editor.nodes(editor, { match: n => Element.isElement(n) && n.type === ElementKinds.table });\n return !!table;\n },\n getSelectedCells(editor: Editor) {\n const tableNode = TheQueries.getAboveByType(editor, ElementKinds.table);\n if (tableNode) {\n const tableComponent = ELEMENT_TO_COMPONENT.get(tableNode[0]) as TheTableComponent;\n const selectedCellPositions = tableComponent.tableStore.getSelectedCellPositions();\n\n if (selectedCellPositions.length > 0) {\n return selectedCellPositions;\n }\n }\n return null;\n },\n setAlign(editor: Editor, alignment: Alignment) {\n return TableEditor.handleSelectedCells(editor, (_, cellRange) => {\n Transforms.setNodes(\n editor,\n { align: alignment },\n {\n at: cellRange,\n match: (n: Element) => ALIGN_BLOCK_TYPES.includes(n.type)\n }\n );\n });\n },\n setVerticalAlign(editor: TheEditor, alignment: VerticalAlignment) {\n const isSelected = TableEditor.handleSelectedCells(editor, cellPath => {\n Transforms.setNodes(editor, { verticalAlign: alignment }, { at: cellPath });\n });\n if (!isSelected) {\n const cellEntry = TheQueries.getAboveByType(editor, ElementKinds.tableCell);\n if (cellEntry) {\n const [, cellPath] = cellEntry;\n Transforms.setNodes(\n editor,\n { verticalAlign: alignment },\n {\n at: cellPath,\n match: (n: Element) => n.type === ElementKinds.tableCell\n }\n );\n return true;\n }\n return false;\n }\n return true;\n },\n isVerticalAlignActive(editor: TheEditor, alignment: VerticalAlignment) {\n const cells = TableEditor.getSelectedCells(editor);\n if (cells) {\n const lastCell = cells[cells.length - 1];\n const tableNode = TheQueries.getAboveByType(editor, ElementKinds.table);\n const cellPath = [...tableNode[1], lastCell.row, lastCell.col];\n const cell = Node.get(editor, cellPath) as TableCellElement;\n const { verticalAlign } = cell;\n if (!verticalAlign && alignment === VerticalAlignment.top) {\n return true;\n }\n return verticalAlign === alignment;\n } else {\n const cellElement = TheQueries.getAboveByType(editor, ElementKinds.tableCell);\n if (cellElement) {\n const { verticalAlign } = cellElement[0];\n if (!verticalAlign && alignment === VerticalAlignment.top) {\n return true;\n }\n return verticalAlign === alignment;\n }\n }\n return null;\n },\n toggleMark(editor: TheEditor, isActive: boolean, format: string | string[], value: string | number | boolean = true) {\n return TableEditor.handleSelectedCells(editor, at => {\n if (isActive) {\n Transforms.unsetNodes(editor, format, {\n at,\n match: Text.isText,\n split: true\n });\n } else {\n Transforms.setNodes(\n editor,\n { [format as string]: value },\n {\n at,\n match: Text.isText,\n split: true\n }\n );\n }\n });\n },\n clearMark(editor: TheEditor) {\n return TableEditor.handleSelectedCells(editor, (cellPath, cellRange) => {\n const unsetMarks: { [key in MarkTypes]?: null | string } = {};\n MarkProps.forEach(key => {\n unsetMarks[key] = null;\n });\n TheTransforms.setMarks(editor, unsetMarks, cellRange);\n });\n },\n handleSelectedCells(editor: TheEditor, handle: (cellPath: Path, cellRange: Range) => void) {\n const cells = TableEditor.getSelectedCells(editor);\n if (cells) {\n const tableNode = TheQueries.getAboveByType(editor, ElementKinds.table);\n Editor.withoutNormalizing(editor, () => {\n for (const cell of cells) {\n const { row, col } = cell;\n const cellPath = [...tableNode[1], row, col];\n const cellRange = { anchor: Editor.start(editor, cellPath), focus: Editor.end(editor, cellPath) };\n handle(cellPath, cellRange);\n }\n });\n return true;\n }\n return false;\n },\n\n hasHeaderRow(editor: TheEditor, location?: Location) {\n const [tableEntry] = Editor.nodes(editor, { at: location, match: (n: Element) => n.type === ElementKinds.table });\n const tableComponent = ELEMENT_TO_COMPONENT.get(tableEntry[0]) as TheTableComponent;\n return tableComponent.headerRow;\n },\n\n hasHeaderColumn(editor: TheEditor, location?: Location) {\n const [tableEntry] = Editor.nodes(editor, { at: location, match: (n: Element) => n.type === ElementKinds.table });\n return tableEntry && (tableEntry[0] as TableElement)?.options?.headerColumn;\n },\n\n isActiveHeader(editor: TheEditor, location?: Location) {\n location = location || editor.selection;\n if (!TableEditor.hasHeaderRow(editor, location) && !TableEditor.hasHeaderColumn(editor, location)) {\n return false;\n }\n const position = createTablePosition(editor, (location as Point).path);\n if (TableEditor.hasHeaderRow(editor, location) && position.getRowIndex() === 0) {\n return true;\n }\n if (TableEditor.hasHeaderColumn(editor, location) && position.getColumnIndex() === 0) {\n return true;\n }\n\n return false;\n },\n\n hasHeaderRowCell(editor: TheEditor) {\n const isHeaderRow = Editor.nodes(editor, {\n match: n =>\n Element.isElement(n) &&\n ((n.type === ElementKinds.tableRow && n.header) || (n.type === ElementKinds.table && n.options?.headerRow))\n });\n const selectedCells = TableEditor.getSelectedCells(editor) ?? [];\n sortCell(selectedCells);\n const isContainHeaderRow = !!selectedCells && selectedCells[0].row === 0;\n\n return isHeaderRow && isContainHeaderRow;\n },\n hasHeaderColumnCell(editor: TheEditor) {\n const table = TheQueries.getAboveByType(editor, ElementKinds.table);\n const selectedCells = TableEditor.getSelectedCells(editor) ?? [];\n sortCell(selectedCells);\n const isContainHeaderColumn = !!selectedCells && selectedCells[0].col === 0;\n const isHeaderColumn = table && table[0] && (table[0] as TableElement)?.options?.headerColumn;\n\n return isHeaderColumn && isContainHeaderColumn;\n },\n selectOriginCell(editor: TheEditor, table: TableElement, rowIndex: number, columnIndex: number, isStart: boolean) {\n const origin = getOriginCell(table, rowIndex, columnIndex);\n if (origin) {\n const path = AngularEditor.findPath(editor, origin);\n Transforms.select(editor, isStart ? Editor.start(editor, path) : Editor.end(editor, path));\n }\n },\n handleIndent(editor: TheEditor, indentType: Indents) {\n return TableEditor.handleSelectedCells(editor, (cellPath, cellRange) => {\n const children = (TheQueries.getNode(editor, cellPath) as CustomElement).children as Element[];\n\n if (children.length) {\n children.forEach((child: Element, index: number) => {\n setCellIndent(editor, indentType, child, [...cellPath, index]);\n });\n }\n });\n }\n};\n","import { Editor, Transforms, Element } from 'slate';\nimport { Alignment, ALIGN_BLOCK_TYPES, ElementKinds } from '../../constants';\nimport { TableEditor } from '../table/table.editor';\nimport { TheContextService } from '../../services/context.service';\nimport * as TheQueries from '../../queries';\nimport { PluginKeys } from '../../interfaces';\n\nexport const AlignEditor = {\n isActive(editor: Editor, alignment: Alignment) {\n if (!editor?.selection) {\n return;\n }\n\n const blockElement = TheQueries.anchorBlock(editor);\n if (blockElement) {\n const { align } = blockElement;\n if (!align && alignment === Alignment.left) {\n return true;\n }\n return align === alignment;\n }\n if (alignment === Alignment.left) {\n return true;\n }\n return false;\n },\n isDisabled(editor: Editor): boolean {\n const contextService = editor?.injector?.get(TheContextService);\n const {\n theOptions: { richMedia }\n } = contextService.getOptions();\n return TheQueries.getToolbarItemDisabled(editor, PluginKeys.align, richMedia ? [ElementKinds.image] : []);\n },\n setAlign(editor: Editor, alignment: Alignment) {\n if (TableEditor.setAlign(editor, alignment)) {\n return;\n }\n const props = {\n align: alignment !== Alignment.left ? alignment : null\n };\n Transforms.setNodes(editor, props, {\n at: editor.selection,\n match: (n: Element) => ALIGN_BLOCK_TYPES.includes(n.type)\n });\n }\n};\n","import { Editor, Transforms } from 'slate';\nimport { Alignment, DISABLED_OPERATE_TYPES, DropdownMode, ElementKinds, ToolbarActionTypes } from '../../constants';\nimport { PluginKeys, ToolbarItemType } from '../../interfaces';\nimport { TheElement } from '../../custom-types';\nimport { createPluginFactory } from '../../core';\nimport { AlignEditor } from './align.editor';\nimport * as TheQueries from '../../queries';\n\nexport const withAlign = <T extends Editor>(editor: T): T => {\n const { deleteBackward } = editor;\n\n editor.deleteBackward = unit => {\n const { anchor } = editor.selection;\n const node = TheQueries.anchorBlock(editor) as TheElement;\n const isVoid = Editor.isVoid(editor, node);\n const alignTypes = [Alignment.center, Alignment.right];\n const startLine = Editor.start(editor, anchor.path);\n const startLineRange = { anchor, focus: startLine };\n const beforeText = Editor.string(editor, startLineRange);\n\n if (!isVoid && node && node.align && alignTypes.includes(node.align) && beforeText === '') {\n const align = alignTypes.indexOf(node.align) ? Alignment.center : undefined;\n return Transforms.setNodes(editor, { align });\n }\n deleteBackward(unit);\n };\n\n return editor;\n};\n\nexport const createAlignPlugin = createPluginFactory({\n key: PluginKeys.align,\n withOverrides: withAlign,\n toolbarItems: [\n {\n key: ToolbarActionTypes.alignType,\n type: ToolbarItemType.dropdown,\n dropdownMode: DropdownMode.icon,\n dropdownItemKey: ToolbarActionTypes.alignLeft,\n includes: [ToolbarActionTypes.alignLeft, ToolbarActionTypes.alignCenter, ToolbarActionTypes.alignRight],\n name: '对齐方式',\n disable: editor => AlignEditor.isDisabled(editor)\n },\n {\n key: ToolbarActionTypes.alignLeft,\n icon: 'align-left',\n name: '左对齐',\n execute: editor => AlignEditor.setAlign(editor, Alignment.left),\n active: editor => AlignEditor.isActive(editor, Alignment.left)\n },\n {\n key: ToolbarActionTypes.alignCenter,\n icon: 'align-center',\n name: '居中',\n execute: editor => AlignEditor.setAlign(editor, Alignment.center),\n active: editor => AlignEditor.isActive(editor, Alignment.center)\n },\n {\n key: ToolbarActionTypes.alignRight,\n icon: 'align-right',\n name: '右对齐',\n execute: editor => AlignEditor.setAlign(editor, Alignment.right),\n active: editor => AlignEditor.isActive(editor, Alignment.right)\n }\n ],\n options: {\n disabledOperateTypes: [...DISABLED_OPERATE_TYPES]\n }\n});\n","import { Editor, Location, Transforms, Node } from 'slate';\n\nexport const autoFormatBlock = (\n editor: Editor,\n type: string,\n at: Location,\n {\n preFormat,\n format\n }: {\n preFormat?: (editor: Editor) => void;\n format?: (editor: Editor, markups?: string[]) => void;\n },\n markups?: string[]\n) => {\n Transforms.delete(editor, { at });\n\n if (preFormat) {\n preFormat(editor);\n }\n\n if (!format) {\n Transforms.setNodes(editor, { type } as Node, { match: n => Editor.isBlock(editor, n) });\n } else {\n format(editor, markups);\n }\n};\n","import { Editor, Range, Transforms } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { MarkEditor } from '../../../plugins/mark/mark.editor';\n\nexport const autoFormatInline = (\n editor: MarkEditor,\n {\n type,\n between,\n markup,\n ignoreTrim,\n format\n }: {\n type: string;\n between?: string[];\n markup?: string;\n ignoreTrim?: boolean;\n format?: (editor: Editor, markup?: string) => void;\n }\n) => {\n const selection = editor.selection as Range;\n\n const startMarkup = between ? between[0] : markup;\n const endMarkup = between ? between[1] : '';\n\n let endMarkupPointBefore = selection.anchor;\n if (endMarkup) {\n endMarkupPointBefore = TheQueries.getPointBefore(editor, selection, {\n matchString: endMarkup\n });\n if (!endMarkupPointBefore) {\n return false;\n }\n }\n\n const startMarkupPointAfter = TheQueries.getPointBefore(editor, endMarkupPointBefore, {\n matchString: startMarkup,\n skipInvalid: true,\n afterMatch: true\n });\n\n if (!startMarkupPointAfter) {\n return false;\n }\n\n // found\n\n const markupRange: Range = {\n anchor: startMarkupPointAfter,\n focus: endMarkupPointBefore\n };\n\n if (!ignoreTrim) {\n const markupText = TheQueries.getText(editor, markupRange);\n if (markupText.trim() !== markupText) {\n return false;\n }\n }\n\n // delete end markup\n if (endMarkup) {\n endMarkupPointBefore = TheQueries.getPointBefore(editor, selection, {\n matchString: endMarkup\n });\n Transforms.delete(editor, {\n at: {\n anchor: endMarkupPointBefore,\n focus: selection.anchor\n }\n });\n }\n const startMarkupPointBefore = TheQueries.getPointBefore(editor, selection, {\n matchString: startMarkup,\n skipInvalid: true\n });\n\n if (format) {\n const markupText = TheQueries.getText(editor, markupRange);\n format(editor, markupText);\n\n // delete start to end selection\n Transforms.delete(editor, {\n at: {\n anchor: startMarkupPointBefore,\n focus: selection.anchor\n }\n });\n } else {\n // add mark to the text between the markups\n Transforms.select(editor, markupRange);\n editor.addMark(type, true);\n Transforms.collapse(editor, { edge: 'end' });\n editor.removeMark(type, false);\n\n // delete start markup\n Transforms.delete(editor, {\n at: {\n anchor: startMarkupPointBefore,\n focus: startMarkupPointAfter\n }\n });\n }\n\n return true;\n};\n","import { Editor, Transforms } from 'slate';\nimport { AutoFormatRule } from '../interfaces/auto-format';\nimport { MarkTypes, ElementKinds } from './node-types';\nimport * as TheQueries from '../queries';\nimport { ListEditor } from '../plugins/list/list.editor';\nimport { TodoItemEditor } from '../plugins/todo-item/todo-item.editor';\nimport { BlockquoteEditor } from '../plugins/blockquote/blockquote.editor';\nimport { InlineCodeEditor } from '../plugins/inline-code/inline-code.editor';\nimport { HeadingEditor } from '../plugins/heading/heading.editor';\nimport { CodeEditor } from '../plugins/code/code.editor';\n\nexport const defaultAutoFormatRules: AutoFormatRule[] = [\n {\n key: ElementKinds.heading_1,\n type: ElementKinds.heading_1,\n markup: '#',\n format: (editor: Editor) => {\n HeadingEditor.setHeading(editor, ElementKinds.heading_1);\n }\n },\n {\n key: ElementKinds.heading_2,\n type: ElementKinds.heading_2,\n markup: '##',\n format: (editor: Editor) => {\n HeadingEditor.setHeading(editor, ElementKinds.heading_2);\n }\n },\n {\n key: ElementKinds.heading_3,\n type: ElementKinds.heading_3,\n markup: '###',\n format: (editor: Editor) => {\n HeadingEditor.setHeading(editor, ElementKinds.heading_3);\n }\n },\n {\n key: ElementKinds.heading_4,\n type: ElementKinds.heading_4,\n markup: '####',\n format: (editor: Editor) => {\n HeadingEditor.setHeading(editor, ElementKinds.heading_4);\n }\n },\n {\n key: ElementKinds.heading_5,\n type: ElementKinds.heading_5,\n markup: '#####',\n format: (editor: Editor) => {\n HeadingEditor.setHeading(editor, ElementKinds.heading_5);\n }\n },\n {\n key: ElementKinds.heading_6,\n type: ElementKinds.heading_6,\n markup: '######',\n format: (editor: Editor) => {\n HeadingEditor.setHeading(editor, ElementKinds.heading_6);\n }\n },\n {\n key: ElementKinds.blockquote,\n type: ElementKinds.blockquote,\n markup: ['>'],\n format: (editor: Editor) => {\n BlockquoteEditor.toggleBlockquote(editor);\n }\n },\n {\n key: MarkTypes.bold,\n type: MarkTypes.bold,\n between: ['**', '**'],\n mode: 'inline',\n insertTrigger: true\n },\n {\n key: `${MarkTypes.bold}__`,\n type: MarkTypes.bold,\n between: ['__', '__'],\n mode: 'inline',\n insertTrigger: true\n },\n {\n key: MarkTypes.italic,\n type: MarkTypes.italic,\n between: ['*', '*'],\n mode: 'inline',\n insertTrigger: true\n },\n {\n key: `${MarkTypes.italic}_`,\n type: MarkTypes.italic,\n between: ['_', '_'],\n mode: 'inline',\n insertTrigger: true\n },\n {\n key: ElementKinds.inlineCode,\n type: ElementKinds.inlineCode,\n between: ['`', '`'],\n mode: 'inline',\n format: (editor: Editor, text: string) => {\n InlineCodeEditor.toggleInlineCode(editor, text);\n Transforms.select(editor, Editor.after(editor, editor.selection));\n }\n },\n {\n key: MarkTypes.strike,\n type: MarkTypes.strike,\n between: ['~~', '~~'],\n mode: 'inline',\n insertTrigger: true\n },\n {\n key: ElementKinds.code,\n type: ElementKinds.code,\n markup: '```',\n format: (editor: Editor) => {\n CodeEditor.insertCode(editor);\n }\n },\n {\n key: ElementKinds.listItem,\n type: ElementKinds.listItem,\n markup: [],\n match: (editor: Editor) => {\n return TheQueries.isParagraph(editor) ? ['*', '-', '+'] : [];\n },\n format: (editor: Editor) => {\n ListEditor.toggleList(editor, ElementKinds.bulletedList);\n }\n },\n {\n key: ElementKinds.numberedList,\n type: ElementKinds.listItem,\n markup: [],\n match: (editor: Editor, textFromBlockStart: string) => {\n return TheQueries.isParagraph(editor) && /^-?\\d+(\\.|\\))$/.test(textFromBlockStart) ? [textFromBlockStart] : [];\n },\n format: (editor: Editor, markup?: string[]) => {\n let startIndex = 1;\n if (markup) {\n startIndex = markup[0].split('.')[0] as unknown as number;\n if (startIndex === 0) {\n startIndex = 1;\n }\n }\n ListEditor.toggleList(editor, ElementKinds.numberedList, startIndex);\n }\n },\n {\n key: ElementKinds.checkItem,\n type: ElementKinds.checkItem,\n markup: [],\n match: (editor: Editor) => {\n return TheQueries.isParagraph(editor) ? ['[]'] : [];\n },\n format: (editor: Editor) => {\n TodoItemEditor.insertTodoItem(editor);\n }\n },\n {\n key: ElementKinds.hr,\n type: ElementKinds.hr,\n markup: '---',\n insertTrigger: true\n }\n];\n","import { Editor, Range } from 'slate';\nimport * as TheQueries from '../../queries';\nimport { castArray } from '../../utils/cast-array';\nimport { AutoFormatRule } from '../../interfaces/auto-format';\nimport { autoFormatBlock } from './transforms/auto-format-block';\nimport { autoFormatInline } from './transforms/auto-format-inline';\nimport { defaultAutoFormatRules } from '../../constants/auto-format-rules';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { PluginKeys } from '../../interfaces';\n\nconst mergAutoFormateRules = (rules: AutoFormatRule[]) => {\n const dataInfo = {};\n rules.forEach(item => {\n if (!dataInfo[item.type + item.key]) {\n dataInfo[item.type + item.key] = {\n ...item\n };\n }\n dataInfo[item.type + item.key] = { ...dataInfo[item.type + item.key], ...item };\n });\n return dataInfo;\n};\n\nexport interface AutoFormatOptions {\n autoFormatRules?: AutoFormatRule[];\n}\n\nexport const withAutoFormat = <T extends Editor>(editor: T) => {\n const { insertText } = editor;\n editor.insertText = text => {\n let autoFormatRules = getPluginOptions<AutoFormatOptions>(editor, PluginKeys.autoFormat)?.autoFormatRules;\n const extraRules = mergAutoFormateRules(autoFormatRules);\n autoFormatRules = Object.values(extraRules);\n if (!TheQueries.isCollapsed(editor.selection)) {\n return insertText(text);\n }\n\n for (const { query, ...rule } of autoFormatRules) {\n const {\n trigger = ' ',\n mode = 'block',\n type,\n markup,\n preFormat,\n format,\n match,\n between,\n ignoreTrim,\n insertTrigger,\n allowSameTypeAbove = false,\n triggerAtBlockStart = true\n } = rule;\n\n if (query && !query(editor, rule)) continue;\n\n const triggers: string[] = castArray(trigger);\n\n // Check trigger\n if (!triggers.includes(text)) continue;\n\n const valid = () => insertTrigger && insertText(text);\n\n if (mode === 'block') {\n let markups: string[] = castArray(markup);\n let markupRange: Range | undefined;\n\n if (triggerAtBlockStart) {\n markupRange = TheQueries.getRangeFromBlockStart(editor) as Range;\n\n // Don't autoformat if there is void nodes.\n const hasVoidNode = TheQueries.someNode(editor, {\n at: markupRange,\n match: n => Editor.isVoid(editor, n)\n });\n if (hasVoidNode) continue;\n\n const textFromBlockStart = TheQueries.getText(editor, markupRange);\n if (match) {\n markups = match(editor, textFromBlockStart);\n }\n if (!markups.includes(textFromBlockStart)) continue;\n } else {\n markupRange = TheQueries.getRangeBefore(editor, editor.selection as Range, {\n matchString: markup,\n skipInvalid: true\n });\n if (!markupRange) continue;\n\n const blockAbovePath = TheQueries.getBlockAbove(editor)?.[1];\n if (!blockAbovePath) continue;\n\n // If the markup is not at the start, insert break before autoformatting.\n if (!Editor.isStart(editor, markupRange.anchor, blockAbovePath)) {\n editor.insertBreak();\n }\n }\n\n if (!allowSameTypeAbove) {\n // Don't autoformat if already in a block of the same type.\n const isBelowSameBlockType = TheQueries.someNode(editor, { match: { type } });\n if (isBelowSameBlockType) continue;\n }\n\n // Start of the block\n autoFormatBlock(\n editor,\n type,\n markupRange,\n {\n preFormat,\n format\n },\n markups\n );\n return valid();\n }\n\n if (mode === 'inline') {\n if (\n autoFormatInline(editor, {\n type,\n between,\n ignoreTrim,\n format,\n markup: Array.isArray(markup) ? markup[0] : markup\n })\n ) {\n return valid();\n }\n }\n }\n\n insertText(text);\n };\n\n return editor;\n};\n\nexport const createAutoFormatPlugin = createPluginFactory<AutoFormatOptions>({\n key: PluginKeys.autoFormat,\n withOverrides: withAutoFormat,\n options: {\n autoFormatRules: defaultAutoFormatRules\n }\n});\n","import { Component, ElementRef, ChangeDetectorRef } from '@angular/core';\nimport { Editor, Element } from 'slate';\nimport { TheBaseElementComponent } from '../../interfaces';\n\n@Component({\n selector: 'blockquote[theBlockquote]',\n template: `<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>`\n})\nexport class TheBlockquoteComponent extends TheBaseElementComponent<Element, Editor> {\n constructor(public elementRef: ElementRef, public cdr: ChangeDetectorRef) {\n super(elementRef, cdr);\n }\n}\n","import { Editor, Element, Transforms } from 'slate';\nimport { ElementKinds } from '../../constants';\nimport { PluginKeys } from '../../interfaces';\nimport { createEmptyParagraph } from '../../utils';\nimport { createPluginFactory } from '../../core';\nimport { TheBlockquoteComponent } from './blockquote.component';\nimport { BlockquoteEditor } from './blockquote.editor';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\nimport { PluginMenuIcons, PluginMenuSvgs, ThePluginMenuItemType } from '../../constants/plugin-menu';\n\nexport const withBlockquote = <T extends Editor>(editor: T): T => {\n const { renderElement, deleteBackward, insertBreak, isContainer } = editor;\n\n editor.renderElement = (element: Element) => {\n if (element.type === ElementKinds.blockquote) {\n return TheBlockquoteComponent;\n }\n return renderElement(element);\n };\n\n editor.deleteBackward = unit => {\n const aboveResult = Editor.above<Element>(editor, {\n match: n => Editor.isBlock(editor, n) && n.type === ElementKinds.blockquote\n });\n if (!aboveResult) {\n return deleteBackward(unit);\n }\n const hasHandled = TheTransforms.handleContinualDeleteBackward(editor, aboveResult, ElementKinds.blockquote);\n if (hasHandled) {\n return;\n }\n return deleteBackward(unit);\n };\n\n editor.insertBreak = () => {\n const lowestBlock = TheQueries.anchorBlock(editor);\n\n if (!lowestBlock) {\n insertBreak();\n return;\n }\n const hasHandled = TheTransforms.handleContinualInsertBreak(editor, lowestBlock, ElementKinds.blockquote);\n if (hasHandled) {\n return;\n }\n const voidEntry = Editor.above<Element>(editor, {\n match: n => Editor.isBlock(editor, n) && Editor.isVoid(editor, n)\n });\n if (voidEntry && voidEntry[0]) {\n Transforms.insertNodes(editor, createEmptyParagraph());\n return;\n }\n return insertBreak();\n };\n\n editor.isContainer = (element: Element) => {\n return element.type === ElementKinds.blockquote ? true : isContainer(element);\n };\n\n return editor;\n};\n\nexport const createBlockquotePlugin = createPluginFactory({\n key: PluginKeys.blockquote,\n withOverrides: withBlockquote,\n toolbarItems: [\n {\n key: ElementKinds.blockquote,\n icon: 'blockquote',\n name: '引用',\n active: editor => TheQueries.isBlockActive(editor, ElementKinds.blockquote),\n execute: editor => BlockquoteEditor.toggleBlockquote(editor)\n }\n ],\n menuItems: [\n {\n key: ElementKinds.blockquote,\n type: ThePluginMenuItemType.group,\n keywords: 'yy,yinyong,quote,引用',\n active: editor => TheQueries.isBlockActive(editor, ElementKinds.blockquote),\n execute: editor => BlockquoteEditor.toggleBlockquote(editor),\n name: '引用',\n description: '支持引用内容',\n menuIcon: PluginMenuIcons.blockquote,\n displayKey: '/yy'\n }\n ],\n options: {\n allowParentTypes: [ElementKinds.tableCell]\n }\n});\n","import { ConnectedPosition, Overlay } from '@angular/cdk/overlay';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Inject,\n NgZone,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport { CodeMirrorComponent } from 'ng-codemirror';\nimport { ThyNotifyService } from 'ngx-tethys/notify';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { ThyResizeEvent } from 'ngx-tethys/resizable';\nimport { fromEvent, Subject } from 'rxjs';\nimport { delay, take, takeUntil } from 'rxjs/operators';\nimport { Editor, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { copyNode } from '../../utils';\nimport { TheToolbarDropdownComponent } from '../../components/toolbar-dropdown/toolbar-dropdown.component';\nimport { CODEMIRROR_PADDING_TOP, CODE_MODES, DropdownMode } from '../../constants';\nimport { CodeElement } from '../../custom-types';\nimport { DefaultToolbarItem, TheBaseElementComponent, TheMode, TheModeConfig, THE_MODE_TOKEN } from '../../interfaces';\nimport * as TheQueries from '../../queries';\nimport { TheContextService } from '../../services/context.service';\nimport * as TheTransforms from '../../transforms';\nimport { CodeEditor } from './code.editor';\n\n@Component({\n selector: 'div[theCode]',\n templateUrl: './code.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheCodeComponent extends TheBaseElementComponent<CodeElement, Editor> implements OnInit, AfterViewInit, OnDestroy {\n startRenderCodemirror = false;\n\n dropdownMode = DropdownMode;\n\n maxHeight = this.config.mode === TheMode.print ? 0 : 350 - CODEMIRROR_PADDING_TOP * 2;\n\n menus = CODE_MODES.map(item => {\n return { key: item.value, name: item.showName };\n });\n\n destroy$ = new Subject<void>();\n\n isHightLight = false;\n\n resizeHeight: number = null;\n\n options = {\n mode: this.menus[0].key,\n lineNumbers: false,\n readOnly: false,\n autofocus: false,\n lineWiseCopyCut: true,\n lineWrapping: this.config.mode === TheMode.print,\n cursorBlinkRate: 500\n };\n\n activeLanguage: DefaultToolbarItem = this.menus[0];\n\n resizeBounds = null;\n\n toolbarPopoverRef: ThyPopoverRef<any>;\n\n @ViewChild('toolbar', { read: TemplateRef, static: true })\n toolbar: TemplateRef<any>;\n\n @ViewChild('codemirror', { read: CodeMirrorComponent, static: false })\n codemirror: CodeMirrorComponent;\n\n @ViewChild(TheToolbarDropdownComponent, { read: TheToolbarDropdownComponent, static: false })\n toolbarDropdownComponent: TheToolbarDropdownComponent;\n\n get code() {\n return this.element.content;\n }\n\n get isToolbarOpen() {\n return this.toolbarPopoverRef && this.toolbarPopoverRef.getOverlayRef() && this.toolbarPopoverRef.getOverlayRef().hasAttached();\n }\n\n constructor(\n public elementRef: ElementRef,\n public cdr: ChangeDetectorRef,\n private thyNotifyService: ThyNotifyService,\n private contextService: TheContextService,\n private ngZone: NgZone,\n @Inject(THE_MODE_TOKEN)\n private config: TheModeConfig,\n private thyPopover: ThyPopover,\n private viewContainerRef: ViewContainerRef,\n private overlay: Overlay\n ) {\n super(elementRef, cdr);\n }\n\n onContextChange() {\n super.onContextChange();\n\n if (this.isCollapsedAndNonReadonly) {\n this.openToolbar();\n } else {\n this.closeToolbar();\n }\n\n if (this.initialized) {\n if (this.options.readOnly !== this.readonly) {\n this.useReadonly();\n }\n if (this.options.mode !== this.element.language) {\n this.useMode();\n }\n if (this.options.lineWrapping !== this.element.autoWrap) {\n this.useAutoWrap();\n }\n if (this.resizeHeight !== this.element.height) {\n this.useHeight();\n }\n }\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.ngZone.runOutsideAngular(() => {\n fromEvent(this.nativeElement, 'mousedown')\n .pipe(takeUntil(this.destroy$))\n .subscribe(event => {\n event.stopPropagation();\n event.preventDefault();\n const isBlockOperation =\n this.isCollapsedAndNonReadonly &&\n this.nativeElement.querySelector('.the-code-block-operation')?.contains(event.target as HTMLElement);\n const isCodemirror = this.nativeElement.querySelector('.ng-codemirror')?.contains(event.target as HTMLElement);\n this.isHightLight = !isCodemirror && !isBlockOperation;\n });\n });\n this.elementRef.nativeElement.classList.add('the-code-container');\n }\n\n ngAfterViewInit() {\n if (this.readonly) {\n // delay 20ms\n // ccodemirror is too slow\n this.ngZone.onStable.pipe(take(1), delay(20)).subscribe(() => {\n this.renderCodemirror();\n });\n } else {\n // edit mode can not delay\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.renderCodemirror();\n this.initializeCodemirrorFocus();\n this.resizeBounds = {\n nativeElement: this.contextService.getEditableElement()\n };\n });\n }\n }\n\n openToolbar() {\n if (!TheQueries.isGlobalCollapsed(this.editor) || this.isToolbarOpen) {\n return;\n }\n this.toolbarPopoverRef = this.thyPopover.open(this.toolbar, {\n origin: this.elementRef.nativeElement,\n viewContainerRef: this.viewContainerRef,\n panelClass: ['the-plugin-toolbar-popover'],\n minWidth: 0,\n manualClosure: true,\n hasBackdrop: false,\n insideClosable: false,\n outsideClosable: false,\n scrollStrategy: this.overlay.scrollStrategies.reposition()\n });\n this.toolbarPopoverRef?.getOverlayRef().updatePositionStrategy(this.createPositionStrategy());\n }\n\n closeToolbar() {\n if (this.isToolbarOpen) {\n this.toolbarPopoverRef.close();\n }\n }\n\n createPositionStrategy() {\n const topLeftPosition: ConnectedPosition = {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetX: 0,\n offsetY: -4\n };\n return this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef.nativeElement)\n .withFlexibleDimensions(false)\n .withGrowAfterOpen(false)\n .withPush(false)\n .withPositions([topLeftPosition]);\n }\n\n renderCodemirror() {\n this.startRenderCodemirror = true;\n this.useReadonly();\n this.useMode();\n this.useAutoWrap();\n this.useHeight();\n this.cdr.detectChanges();\n }\n\n initializeCodemirrorFocus() {\n if (this.isCollapsedAndNonReadonly) {\n setTimeout(() => {\n if (this.isCollapsedAndNonReadonly && this.codemirror && this.codemirror.editor && !this.codemirror.editor.hasFocus()) {\n AngularEditor.blur(this.editor);\n this.codemirror.editor.focus();\n this.codemirror.editor.refresh();\n }\n }, 200);\n }\n }\n\n codeChange($event) {\n this.isHightLight = false;\n CodeEditor.setCodeAttribute(this.editor, this.element, { content: $event });\n }\n\n onDelete(event: MouseEvent) {\n TheTransforms.deleteElement(this.editor, this.element);\n }\n\n onCopy(event: MouseEvent) {\n event.preventDefault();\n copyNode(this.editor, this.element, this.thyNotifyService, this.codemirror.editor);\n }\n\n focusChange(codeMirrorFocused: boolean) {\n if (codeMirrorFocused) {\n this.isHightLight = false;\n }\n }\n\n onChangeLanguage = item => {\n this.options = { ...this.options, mode: item.key };\n this.activeLanguage = item;\n CodeEditor.setCodeAttribute(this.editor, this.element, { language: item.key });\n };\n\n useMode() {\n this.options = { ...this.options, mode: this.element.language };\n const menuItem = this.menus.find(i => i.key === this.element.language);\n if (menuItem) {\n this.activeLanguage = menuItem;\n }\n }\n\n useAutoWrap() {\n this.options = { ...this.options, lineWrapping: this.element.autoWrap || false };\n }\n\n useHeight() {\n if (this.element.height && this.config.mode !== TheMode.print) {\n this.resizeHeight = this.element.height;\n this.maxHeight = this.element.height;\n }\n }\n\n useReadonly() {\n this.options = { ...this.options, readOnly: this.readonly, cursorBlinkRate: this.readonly ? -1 : 500 };\n }\n\n onResize({ height }: ThyResizeEvent) {\n this.resizeHeight = height;\n this.maxHeight = height;\n }\n\n onEndResize() {\n Transforms.select(this.editor, AngularEditor.findPath(this.editor, this.element));\n CodeEditor.setCodeAttribute(this.editor, this.element, { height: this.resizeHeight });\n }\n\n onChangeWrap(value: boolean) {\n this.isHightLight = false;\n this.options = { ...this.options, lineWrapping: value || false };\n CodeEditor.setCodeAttribute(this.editor, this.element, { autoWrap: value ? value : null });\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>\n\n<!-- 只读模式下CodeMirror-sizer高度比编辑模式下多2px,设置thyMinHeight为46px防止拖拽到最小高度时只读模式下出现滚动条 -->\n<div\n thyResizable\n [thyMinHeight]=\"46\"\n [thyBounds]=\"resizeBounds\"\n [style.height.px]=\"resizeHeight\"\n (thyResize)=\"onResize($event)\"\n (thyResizeEnd)=\"onEndResize()\"\n class=\"resize-code-container\"\n [ngClass]=\"{ focus: isCollapsedAndNonReadonly, readonly: options.readOnly, active: isHightLight && isCollapsedAndNonReadonly }\"\n>\n <ng-codemirror\n *ngIf=\"startRenderCodemirror\"\n #codemirror\n contenteditable=\"false\"\n class=\"ng-codemirror-wrapper\"\n [ngStyle]=\"{ maxHeight: maxHeight > 0 ? maxHeight + 'px' : 'auto' }\"\n [options]=\"options\"\n [ngModel]=\"code\"\n [delayRefreshTime]=\"300\"\n (ngModelChange)=\"codeChange($event)\"\n (focusChange)=\"focusChange($event)\"\n [autoMaxHeight]=\"maxHeight\"\n >\n </ng-codemirror>\n <thy-resize-handle thyDirection=\"bottom\" class=\"code-resize-icon\" *ngIf=\"isCollapsedAndNonReadonly\"></thy-resize-handle>\n</div>\n\n<ng-template #toolbar>\n <thy-actions thySize=\"xxs\" thePreventDefault>\n <the-toolbar-dropdown\n [menus]=\"menus\"\n [toolbarItem]=\"activeLanguage\"\n [dropdownItemKey]=\"activeLanguage?.key\"\n [itemMousedownHandle]=\"onChangeLanguage\"\n >\n </the-toolbar-dropdown>\n <span class=\"auto-wrap d-flex align-items-center px-2 text-secondary\">\n <span>自动换行</span>\n <thy-switch\n class=\"auto-wrap-btn d-flex ml-1\"\n [(ngModel)]=\"options.lineWrapping\"\n (ngModelChange)=\"onChangeWrap($event)\"\n thySize=\"sm\"\n ></thy-switch>\n </span>\n <a href=\"javascript:;\" thyAction thyActionIcon=\"copy\" thyTooltip=\"复制\" thyTooltipPlacement=\"top\" (click)=\"onCopy($event)\"></a>\n <thy-divider class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\"></thy-divider>\n <a\n href=\"javascript:;\"\n thyAction\n thyType=\"danger\"\n thyActionIcon=\"trash\"\n thyTooltip=\"删除\"\n thyTooltipPlacement=\"top\"\n (click)=\"onDelete($event)\"\n ></a>\n </thy-actions>\n</ng-template>\n","import { Editor, Element } from 'slate';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport { ElementKinds } from '../../constants';\nimport { TheCodeComponent } from './code.component';\nimport { CodeEditor } from './code.editor';\nimport * as TheQueries from '../../queries';\nimport { PluginMenuIcons, ThePluginMenuItemType } from '../../constants/plugin-menu';\nimport { getAboveByType } from '../../queries';\nimport { CodeElement } from '../../custom-types';\n\nexport const withCode = <T extends Editor>(editor: T): T => {\n const { isVoid, isBlockCard, renderElement, setFragmentData } = editor;\n\n editor.isVoid = (element: Element) => {\n return element.type === ElementKinds.code ? true : isVoid(element);\n };\n\n editor.isBlockCard = (element: Element) => {\n if (element && element.type === ElementKinds.code) {\n return true;\n }\n return isBlockCard(element);\n };\n\n editor.renderElement = (element: Element) => {\n if (element.type === ElementKinds.code) {\n return TheCodeComponent;\n }\n return renderElement(element);\n };\n\n editor.setFragmentData = unit => {\n setFragmentData(unit);\n const { selection } = editor;\n const [start] = Editor.edges(editor, selection);\n if (TheQueries.isNodeTypeIn(editor, [ElementKinds.code], { at: start })) {\n const [codeNode] = getAboveByType(editor, ElementKinds.code);\n unit.setData('text/plain', (codeNode as CodeElement).content.trim());\n return unit;\n }\n };\n\n return editor;\n};\n\nexport const createCodePlugin = createPluginFactory({\n key: PluginKeys.code,\n withOverrides: withCode,\n toolbarItems: [\n {\n key: ElementKinds.code,\n icon: 'code-syntax',\n name: '代码块',\n active: editor => TheQueries.isBlockActive(editor, ElementKinds.code),\n execute: editor => CodeEditor.insertCode(editor)\n }\n ],\n menuItems: [\n {\n key: ElementKinds.code,\n type: ThePluginMenuItemType.group,\n keywords: 'dmk,daimakuai,code,代码块',\n active: editor => TheQueries.isBlockActive(editor, ElementKinds.code),\n execute: editor => CodeEditor.insertCode(editor),\n name: '代码块',\n description: '支持插入语法高亮的代码',\n menuIcon: PluginMenuIcons.code,\n displayKey: '/dmk'\n }\n ],\n options: {\n allowParentTypes: [ElementKinds.tableCell]\n }\n});\n","import { Component, OnInit } from '@angular/core';\nimport { Transforms } from 'slate';\nimport { ColorEditor } from './color.editor';\nimport { MarkTypes } from '../../constants/node-types';\nimport { TheBaseToolbarItem } from '../../core/toolbar-item/base-toolbar-item';\nimport { refocus, reSelection } from '../../utils/refocus';\n\n@Component({\n selector: 'the-color-toolbar-item',\n templateUrl: './toolbar-item.component.html',\n host: {\n class: 'the-toolbar-item'\n }\n})\nexport class TheColorToolbarItemComponent extends TheBaseToolbarItem implements OnInit {\n defaultColorLine: string = '#FF0100';\n\n defaultBackgroundColorLine: string = '#FFDA00';\n\n selectedColor: string;\n\n get type() {\n return this.toolbarItem.key as MarkTypes.color | MarkTypes.backgroundColor;\n }\n\n constructor() {\n super();\n }\n\n ngOnInit(): void {\n this.setSelectedColor();\n }\n\n selectionChange() {\n super.selectionChange();\n this.setSelectedColor();\n }\n\n setSelectedColor() {\n this.selectedColor = ColorEditor.getActiveColor(this.editor, this.toolbarItem.key as MarkTypes.color & MarkTypes.backgroundColor);\n }\n\n preventDefault(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n changeColor(value: string) {\n if (!this.editor.selection) {\n reSelection(this.editor);\n }\n // 无填充色\n if (value === 'transparent') {\n this.active = false;\n this.selectedColor = '';\n } else {\n this.selectedColor = value;\n }\n Transforms.select(this.editor, this.editor.selection);\n ColorEditor.setColor(this.editor, this.selectedColor, this.type);\n }\n}\n","<a\n href=\"javascript:;\"\n thyAction\n [thyActionActive]=\"active\"\n [thyTooltip]=\"toolbarItem.name\"\n thyTooltipPlacement=\"top\"\n thyColorPicker\n thyPlacement=\"bottomLeft\"\n [(ngModel)]=\"selectedColor\"\n (ngModelChange)=\"changeColor($event)\"\n (mousedown)=\"preventDefault($event)\"\n>\n <thy-icon\n [thyIconName]=\"toolbarItem.icon\"\n thyIconType=\"twotone\"\n [thyTwotoneColor]=\"active ?? (toolbarItem.key === 'color' ? defaultColorLine : defaultBackgroundColorLine)\"\n ></thy-icon>\n <thy-icon class=\"link-down-icon font-size-sm text-desc ml-1\" thyIconName=\"caret-down\"></thy-icon>\n</a>\n","import { createPluginFactory } from '../../core';\nimport { DISABLED_OPERATE_TYPES, ElementKinds, MarkTypes } from '../../constants';\nimport { PluginKeys } from '../../interfaces';\nimport { ColorEditor } from './color.editor';\nimport { TheColorToolbarItemComponent } from './toolbar-item.component';\n\nexport const createColorPlugin = createPluginFactory({\n key: PluginKeys.color,\n toolbarItems: [\n {\n key: MarkTypes.color,\n icon: 'color-tt',\n name: '字体颜色',\n iconComponent: TheColorToolbarItemComponent,\n active: editor => ColorEditor.getActiveColor(editor, MarkTypes.color)\n },\n {\n key: MarkTypes.backgroundColor,\n icon: 'background-tt',\n name: '背景颜色',\n iconComponent: TheColorToolbarItemComponent,\n active: editor => ColorEditor.getActiveColor(editor, MarkTypes.backgroundColor)\n }\n ],\n options: {\n disabledOperateTypes: [ElementKinds.image, ...DISABLED_OPERATE_TYPES]\n }\n});\n","import { Editor } from 'slate';\nimport { PluginKeys } from '../../interfaces';\nimport { createPluginFactory } from '../../core';\nimport { extractFragment } from '../../utils/fragment';\nimport { insertDataByInvalidType } from '../../utils';\n\nexport const withInsertDataByInvalidType = <T extends Editor>(editor: T): T => {\n const { insertData } = editor;\n\n editor.insertData = (data: DataTransfer) => {\n const fragment = extractFragment(data);\n if (fragment) {\n const isContinue = insertDataByInvalidType(editor, fragment);\n if (!isContinue) {\n return;\n }\n }\n insertData(data);\n };\n\n return editor;\n};\n\nexport const createInsertDataByInvalidTypePlugin = createPluginFactory({\n key: PluginKeys.insertDataByInvalidType,\n withOverrides: withInsertDataByInvalidType\n});\n","import { Editor, Node, Range, Path, Transforms } from 'slate';\nimport { HistoryEditor } from 'slate-history';\nimport { AngularEditor, hotkeys, hasBlockCard, isCardLeft, FAKE_RIGHT_BLOCK_CARD_OFFSET } from 'slate-angular';\nimport { PluginKeys } from '../../interfaces';\nimport { createPluginFactory } from '../../core';\nimport { createEmptyParagraph } from '../../utils/create-empty-paragraph';\nimport { insertParagraph } from '../../transforms/insert-paragraph';\nimport * as TheTransforms from '../../transforms';\nimport * as TheQueries from '../../queries';\n\nexport const withBlockCard = <T extends Editor>(editor: T): T => {\n const { insertBreak, deleteBackward, onKeydown, deleteForward, insertData, insertText } = editor;\n\n editor.insertBreak = () => {\n const domSelection = window.getSelection();\n const anchorNode = domSelection.anchorNode;\n if (domSelection && domSelection.isCollapsed && hasBlockCard(domSelection)) {\n const isLeftCursor = isCardLeft(anchorNode);\n const cardEntry = AngularEditor.toSlateCardEntry(editor, anchorNode);\n const cursorRootPath = cardEntry[1];\n TheTransforms.insertParagraph(editor, isLeftCursor ? cursorRootPath : Path.next(cursorRootPath));\n if (!isLeftCursor) {\n Transforms.select(editor, Path.next(cursorRootPath));\n }\n return;\n }\n insertBreak();\n };\n\n editor.deleteBackward = unit => {\n const domSelection = window.getSelection();\n const anchorNode = domSelection.anchorNode;\n if (domSelection && domSelection.isCollapsed && hasBlockCard(domSelection)) {\n const isLeftCursor = isCardLeft(anchorNode);\n const cardEntry = AngularEditor.toSlateCardEntry(editor, anchorNode);\n const cursorRootPath = cardEntry[1];\n if (isLeftCursor) {\n const previousPath = Path.hasPrevious(cursorRootPath) && Path.previous(cursorRootPath);\n if (!previousPath) {\n return;\n }\n if (previousPath && TheQueries.isEmptyParagraphByPath(editor, previousPath)) {\n Transforms.removeNodes(editor, {\n at: previousPath\n });\n return;\n }\n HistoryEditor.withoutMerging(editor, () => {\n Transforms.select(editor, Editor.end(editor, previousPath));\n });\n return;\n } else {\n TheTransforms.insertParagraph(editor, cursorRootPath);\n Transforms.select(editor, cursorRootPath);\n Transforms.removeNodes(editor, { at: Path.next(cursorRootPath) });\n return;\n }\n }\n\n const blockCard = TheQueries.getBlockCardAbove(editor);\n const beforePoint = Editor.before(editor, editor.selection.anchor);\n const beforeBlockCard = TheQueries.getBlockCardAbove(editor, { at: beforePoint });\n if (!blockCard && beforeBlockCard) {\n if (TheQueries.isBlockAboveEmpty(editor)) {\n const [node, path] = Editor.parent(editor, editor.selection.anchor.path);\n HistoryEditor.withoutMerging(editor, () => {\n const rightCursor = { path: beforeBlockCard[1], offset: FAKE_RIGHT_BLOCK_CARD_OFFSET };\n Transforms.select(editor, { anchor: rightCursor, focus: rightCursor });\n });\n Transforms.delete(editor, { at: path });\n return;\n } else {\n Transforms.delete(editor, { at: beforeBlockCard[1] });\n }\n return;\n }\n\n deleteBackward(unit);\n };\n\n editor.deleteForward = unit => {\n const domSelection = window.getSelection();\n const anchorNode = domSelection.anchorNode;\n if (domSelection && domSelection.isCollapsed && hasBlockCard(domSelection)) {\n const isLeftCursor = isCardLeft(anchorNode);\n const cardEntry = AngularEditor.toSlateCardEntry(editor, anchorNode);\n const cursorRootPath = cardEntry[1];\n if (isLeftCursor) {\n TheTransforms.insertParagraph(editor, cursorRootPath);\n Transforms.select(editor, cursorRootPath);\n Transforms.removeNodes(editor, { at: Path.next(cursorRootPath) });\n return;\n } else {\n const nextPath = Path.next(cursorRootPath);\n HistoryEditor.withoutMerging(editor, () => {\n Transforms.select(editor, Editor.start(editor, nextPath));\n });\n return;\n }\n }\n\n const blockCard = TheQueries.getBlockCardAbove(editor);\n const afterPoint = Editor.after(editor, editor.selection.anchor);\n const afterBlockCard = TheQueries.getBlockCardAbove(editor, { at: afterPoint });\n if (!blockCard && afterBlockCard) {\n if (TheQueries.isBlockAboveEmpty(editor)) {\n HistoryEditor.withoutMerging(editor, () => {\n const leftCursor = { path: afterBlockCard[1], offset: -1 };\n Transforms.select(editor, { anchor: leftCursor, focus: leftCursor });\n });\n Transforms.delete(editor, { at: Path.previous(afterBlockCard[1]) });\n return;\n }\n return;\n }\n\n deleteForward(unit);\n };\n\n editor.onKeydown = (event: KeyboardEvent) => {\n const domSelection = window.getSelection();\n const anchorNode = domSelection.anchorNode;\n const nativeEvent = event;\n const { selection } = editor;\n\n const isMoveBackward = hotkeys.isMoveBackward(nativeEvent);\n const isMoveForward = hotkeys.isMoveForward(nativeEvent);\n const isMoveUp = hotkeys.isMoveUp(nativeEvent);\n const isMoveDown = hotkeys.isMoveDown(nativeEvent);\n const isCollapsed = selection && Range.isCollapsed(selection);\n const anchorEntry = TheQueries.anchorBlockEntry(editor);\n\n // block card cursor\n if (anchorNode && hasBlockCard(domSelection)) {\n const isCardLeftCursor = isCardLeft(anchorNode);\n if (isMoveUp) {\n const [, path] = AngularEditor.toSlateCardEntry(editor, anchorNode);\n const previousPath = Path.hasPrevious(path) && Path.previous(path);\n const previousNode = previousPath && TheQueries.getNode(editor, previousPath);\n if (previousNode && editor.isBlockCard(previousNode)) {\n AngularEditor.moveBlockCard(editor, previousNode, { direction: isCardLeftCursor ? 'left' : 'right' });\n } else {\n const before = Editor.before(editor, path);\n if (before) {\n Transforms.select(editor, before);\n }\n }\n nativeEvent.preventDefault();\n return;\n }\n if (isMoveDown) {\n const [, path] = AngularEditor.toSlateCardEntry(editor, anchorNode);\n const nextPath = Path.next(path);\n const nextNode = TheQueries.getNode(editor, nextPath);\n if (nextNode && editor.isBlockCard(nextNode)) {\n AngularEditor.moveBlockCard(editor, nextNode, { direction: isCardLeftCursor ? 'left' : 'right' });\n } else {\n const after = Editor.after(editor, path);\n if (after) {\n Transforms.select(editor, Editor.after(editor, path));\n }\n }\n nativeEvent.preventDefault();\n return;\n }\n // → + right-block-card\n if (isMoveForward && !isCardLeftCursor) {\n nativeEvent.preventDefault();\n const [, path] = AngularEditor.toSlateCardEntry(editor, anchorNode);\n const nextPath = Path.next(path);\n const nextNode = TheQueries.getNode(editor, nextPath);\n if (nextNode && editor.isBlockCard(nextNode)) {\n event.preventDefault();\n AngularEditor.moveBlockCard(editor, nextNode, { direction: 'left' });\n return;\n }\n const after = Editor.after(editor, path);\n if (after) {\n Transforms.select(editor, Editor.after(editor, path));\n }\n return;\n }\n // ← + left-block-card\n if (isMoveBackward && isCardLeftCursor) {\n nativeEvent.preventDefault();\n const [, path] = AngularEditor.toSlateCardEntry(editor, anchorNode);\n const previousPath = Path.hasPrevious(path) && Path.previous(path);\n const previousNode = previousPath && TheQueries.getNode(editor, previousPath);\n if (previousNode && editor.isBlockCard(previousNode)) {\n event.preventDefault();\n AngularEditor.moveBlockCard(editor, previousNode, { direction: 'right' });\n return;\n }\n const before = Editor.before(editor, path);\n if (before) {\n Transforms.select(editor, before);\n }\n return;\n }\n // move to card center\n if ((isCardLeftCursor && isMoveForward) || (!isCardLeftCursor && isMoveBackward)) {\n nativeEvent.preventDefault();\n const [, path] = AngularEditor.toSlateCardEntry(editor, anchorNode);\n Transforms.select(editor, isCardLeftCursor ? Editor.start(editor, path) : Editor.end(editor, path));\n return;\n }\n }\n // block card center\n if (isCollapsed && (isMoveUp || isMoveDown) && anchorEntry) {\n const [block, path] = anchorEntry;\n if (editor.isBlockCard(block)) {\n event.preventDefault();\n Transforms.select(editor, isMoveUp ? Editor.before(editor, path) : Editor.after(editor, path));\n return;\n }\n }\n if (isCollapsed && (isMoveBackward || isMoveForward) && anchorEntry) {\n const [block] = anchorEntry;\n if (editor.isBlockCard(block)) {\n event.preventDefault();\n AngularEditor.moveBlockCard(editor, block, { direction: isMoveBackward ? 'left' : 'right' });\n return;\n }\n }\n // move to block card cursor\n if (isCollapsed && isMoveBackward && Editor.isStart(editor, selection.anchor, selection.anchor.path.slice(0, 1))) {\n const currentPath = selection.anchor.path.slice(0, 1);\n if (currentPath[0] > 0) {\n const previousNode = Node.get(editor, Path.previous(currentPath));\n if (previousNode && editor.isBlockCard(previousNode)) {\n event.preventDefault();\n AngularEditor.moveBlockCard(editor, previousNode, { direction: 'right' });\n return;\n }\n }\n }\n if (isCollapsed && isMoveForward && Editor.isEnd(editor, selection.anchor, selection.anchor.path.slice(0, 1))) {\n const currentPath = selection.anchor.path.slice(0, 1);\n if (currentPath[0] < editor.children.length - 1) {\n const previousNode = Node.get(editor, Path.next(currentPath));\n if (previousNode && editor.isBlockCard(previousNode)) {\n event.preventDefault();\n AngularEditor.moveBlockCard(editor, previousNode, { direction: 'left' });\n return;\n }\n }\n }\n\n onKeydown(event);\n };\n\n editor.insertData = (data: DataTransfer) => {\n const domSelection = window.getSelection();\n const anchorNode = domSelection.anchorNode;\n if (domSelection && domSelection.isCollapsed && hasBlockCard(domSelection)) {\n const isLeftCursor = isCardLeft(anchorNode);\n const cardEntry = AngularEditor.toSlateCardEntry(editor, anchorNode);\n const cursorRootPath = cardEntry[1];\n if (isLeftCursor) {\n Transforms.insertNodes(editor, createEmptyParagraph(), { at: cursorRootPath });\n Transforms.select(editor, cursorRootPath);\n } else {\n Transforms.insertNodes(editor, createEmptyParagraph(), { at: Path.next(cursorRootPath) });\n Transforms.select(editor, Path.next(cursorRootPath));\n }\n }\n insertData(data);\n };\n\n editor.insertText = (text: string) => {\n const domSelection = window.getSelection();\n const anchorNode = domSelection?.anchorNode;\n if (AngularEditor.isBlockCardLeftCursor(editor) || AngularEditor.isBlockCardRightCursor(editor)) {\n const isLeftCursor = isCardLeft(anchorNode);\n const cardEntry = AngularEditor.toSlateCardEntry(editor, anchorNode);\n const cursorRootPath = cardEntry[1];\n if (isLeftCursor) {\n insertParagraph(editor, cursorRootPath);\n Transforms.select(editor, cursorRootPath);\n } else {\n const nextPath = Path.next(cursorRootPath);\n insertParagraph(editor, nextPath);\n Transforms.select(editor, nextPath);\n }\n }\n insertText(text);\n };\n\n return editor;\n};\n\nexport const createBlockCardPlugin = createPluginFactory({\n key: PluginKeys.blockCard,\n withOverrides: withBlockCard\n});\n","import { createPluginFactory } from '../../core';\nimport { PluginKeys, ToolbarItemType } from '../../interfaces';\nimport { DropdownMode, ElementKinds, MarkTypes, ToolbarActionTypes } from '../../constants';\nimport { Editor } from 'slate';\nimport { isColorIndicator, isColorInput, isColorPanel } from '../../utils/color-picker';\nimport { ThyPopover } from 'ngx-tethys/popover';\n\nexport const withInternalCommon = <T extends Editor>(editor: T): T => {\n const { globalMousedown, onKeydown } = editor;\n\n editor.globalMousedown = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n if (isColorIndicator(target)) {\n event.stopPropagation();\n return;\n }\n if (isColorInput(target)) {\n return;\n }\n if (isColorPanel(target)) {\n event.preventDefault();\n }\n globalMousedown(event);\n };\n\n editor.onKeydown = (event: KeyboardEvent) => {\n const isColorPanel = document.querySelector('.thy-color-picker-panel') || document.querySelector('.thy-color-picker-custom-panel');\n if (editor.selection && isColorPanel) {\n const popover = editor.injector.get(ThyPopover);\n popover.close();\n }\n onKeydown(event);\n };\n\n return editor;\n};\n\nexport const createCommonPlugin = createPluginFactory({\n key: PluginKeys.internalCommon,\n withOverrides: withInternalCommon,\n toolbarItems: [\n {\n key: ToolbarActionTypes.group,\n name: '更多',\n icon: 'more',\n type: ToolbarItemType.dropdown,\n dropdownMode: DropdownMode.icon,\n dropdownItemKey: ToolbarActionTypes.group,\n dropdownFixedIcon: true,\n isHideDropdownActionIcon: true,\n includes: [MarkTypes.underline, MarkTypes.strike, ElementKinds.inlineCode]\n }\n ]\n});\n","import { Editor, Element } from 'slate';\nimport { CustomElementKinds } from '../../custom-types';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport * as TheQueries from '../../queries';\n\nexport interface GetFragmentPluginOptions {\n types?: CustomElementKinds[];\n}\n\nexport const withGetFragment = <T extends Editor>(editor: T) => {\n const { getFragment } = editor;\n const elementKinds = getPluginOptions<GetFragmentPluginOptions>(editor, PluginKeys.getFragment)?.types ?? [];\n\n editor.getFragment = () => {\n const { selection } = editor;\n const containerBlocks = [...elementKinds, ...TheQueries.getContainerBlocks(editor)];\n if (selection && selection.anchor.path[0] === selection.focus.path[0]) {\n const fragmentData = getFragment();\n const nodes = TheQueries.getSelectionNodesByType(editor, fragmentData, containerBlocks);\n return nodes && Element.isElement(nodes) ? nodes.children : fragmentData;\n }\n return getFragment();\n };\n\n return editor;\n};\n\nexport const createGetFragmentPlugin = createPluginFactory<GetFragmentPluginOptions>({\n key: PluginKeys.getFragment,\n withOverrides: withGetFragment\n});\n","import { Editor } from 'slate';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\n\nexport const UNDOING = new WeakMap<Editor, boolean | undefined>();\nexport const REDOING = new WeakMap<Editor, boolean | undefined>();\n\nexport const withTheHistory = <T extends Editor>(editor: T): T => {\n const { undo, redo } = editor;\n\n editor.undo = () => {\n UNDOING.set(editor, true);\n undo();\n UNDOING.set(editor, false);\n };\n editor.redo = () => {\n REDOING.set(editor, true);\n redo();\n REDOING.set(editor, false);\n };\n\n return editor;\n};\n\nexport const TheHistoryEditor = {\n isUndoing(editor: Editor): boolean | undefined {\n return UNDOING.get(editor);\n },\n isRedoing(editor: Editor): boolean | undefined {\n return REDOING.get(editor);\n }\n};\n\nexport const createTheHistoryPlugin = createPluginFactory({\n key: PluginKeys.theHistory,\n withOverrides: withTheHistory\n});\n","import { Editor, Path, Element } from 'slate';\n\nexport const isInline = (editor: Editor, path?: Path): boolean => {\n const [inlineNode] = Editor.nodes(editor, {\n at: path ? path : editor.selection?.anchor.path,\n match: n => Element.isElement(n) && Editor.isInline(editor, n) && !Editor.isVoid(editor, n)\n });\n return !!inlineNode;\n};\n","import { Editor, Transforms, Range, Operation, SelectionOperation, BaseRange } from 'slate';\nimport { timer } from 'rxjs';\nimport { AngularEditor, hotkeys } from 'slate-angular';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport { isInline } from '../../utils/is-inline';\nimport * as TheQueries from '../../queries';\nimport { THE_EDITOR_PREVIOUS_SELECTION } from '../../utils/weak-maps';\n\nexport const withMoveSelection = <T extends Editor>(editor: T): T => {\n const { onClick, deleteBackward, onKeydown, onChange } = editor;\n\n editor.onClick = (event: MouseEvent) => {\n const domSelection = window.getSelection();\n if (domSelection && !domSelection.isCollapsed && event.detail >= 2 && editor.selection) {\n const slateSelection = AngularEditor.toSlateRange(editor, domSelection);\n const isNextStart = slateSelection.focus.offset === 0;\n\n if (Range.isExpanded(slateSelection) && Range.isForward(slateSelection) && isNextStart) {\n const beforePoint = Editor.before(editor, slateSelection.focus);\n const changedRange = Editor.range(editor, slateSelection.anchor, beforePoint);\n\n // slate-angular throttle 80ms, so wait selectionchange complete\n timer(81).subscribe(() => {\n Transforms.select(editor, changedRange);\n });\n }\n }\n onClick(event);\n };\n\n editor.deleteBackward = unit => {\n const { selection } = editor;\n const inlineBlockEntry = Editor.above(editor, {\n match: n => Editor.isInline(editor, n)\n });\n // fix deleteBackward on the start of inline block\n // deleteBackward logic bug\n if (inlineBlockEntry && !Editor.isVoid(editor, inlineBlockEntry[0]) && selection.anchor.offset === 0) {\n const beforePoint = TheQueries.getPointBefore(editor, selection.focus);\n Transforms.select(editor, beforePoint);\n }\n deleteBackward(unit);\n };\n\n editor.onKeydown = (event: KeyboardEvent) => {\n const { selection } = editor;\n if (!selection || !selection.anchor || !selection.focus) {\n onKeydown(event);\n return;\n }\n const isMoveBackward = hotkeys.isMoveBackward(event);\n const isMoveForward = hotkeys.isMoveForward(event);\n const isCollapsed = selection && TheQueries.isCollapsed(selection);\n const isInlineNode = isInline(editor);\n if (isCollapsed && isMoveForward) {\n let isInlineCodeBefore = false;\n if (!isInlineNode) {\n try {\n const { path } = Editor.after(editor, selection);\n if (path) {\n isInlineCodeBefore = isInline(editor, path);\n }\n } catch (error) {}\n }\n if (isInlineNode || isInlineCodeBefore) {\n event.preventDefault();\n Transforms.move(editor, { unit: 'offset' });\n return;\n }\n }\n if (isCollapsed && isMoveBackward) {\n let isInlineCodeAfter = false;\n if (!isInlineNode) {\n try {\n const { path } = Editor.before(editor, selection);\n isInlineCodeAfter = isInline(editor, path);\n } catch (error) {}\n }\n if (isInlineNode || isInlineCodeAfter) {\n event.preventDefault();\n Transforms.move(editor, { unit: 'offset', reverse: true });\n return;\n }\n }\n onKeydown(event);\n };\n\n editor.onChange = () => {\n if (!editor.selection && editor.operations.length) {\n const isSelectionOperation = editor.operations.every(op => Operation.isSelectionOperation(op));\n if (isSelectionOperation) {\n const prevSelection = (editor.operations[0] as SelectionOperation).properties as BaseRange;\n THE_EDITOR_PREVIOUS_SELECTION.set(editor, {\n rangeRef: Editor.rangeRef(editor, prevSelection),\n selection: prevSelection\n });\n }\n }\n onChange();\n };\n\n return editor;\n};\n\nexport const createMoveSelectionPlugin = createPluginFactory({\n key: PluginKeys.moveSelection,\n withOverrides: withMoveSelection\n});\n","import { Path, Node, Editor, Transforms, Element } from 'slate';\nimport { HistoryEditor } from 'slate-history';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport { HEADING_TYPES } from '../../constants';\nimport * as TheQueries from '../../queries';\n\nexport const withRemoveEmpty = <T extends Editor>(editor: T): T => {\n const { deleteBackward, deleteForward } = editor;\n\n editor.deleteBackward = unit => {\n const { selection } = editor;\n const anchorBlock = TheQueries.anchorBlock(editor);\n\n if (!anchorBlock) {\n deleteBackward(unit);\n return;\n }\n\n // delete empty paragraphs or empty headings, the default operation is to delete before the void node\n const parentPath = Path.parent(editor.selection.anchor.path);\n const isEmptyHeading = HEADING_TYPES.includes(anchorBlock.type) && Editor.isEmpty(editor, anchorBlock);\n const isEmptyParagraph = TheQueries.isEmptyParagraph(editor, editor.selection.anchor);\n if (\n (isEmptyParagraph || isEmptyHeading) &&\n parentPath[parentPath.length - 1] > 0 &&\n Editor.isVoid(editor, Node.get(editor, Path.previous(parentPath)))\n ) {\n Transforms.delete(editor, { at: editor.selection.anchor.path.slice(0, editor.selection.anchor.path.length - 1) });\n return;\n }\n // just remove inline node when before inline node text length is 1, default action is remove current the block above inline node\n if (selection.anchor.path[selection.anchor.path.length - 1] > 0 && selection.anchor.offset === 0) {\n const beforePoint = Editor.before(editor, editor.selection);\n const inlineEntry = Editor.above<Element>(editor, {\n at: beforePoint,\n match: n => Editor.isInline(editor, n) && !Editor.isVoid(editor, n)\n });\n if (inlineEntry && Editor.string(editor, inlineEntry[1]).length === 1) {\n Transforms.removeNodes(editor, { at: inlineEntry[1] });\n return;\n }\n }\n deleteBackward(unit);\n };\n\n editor.deleteForward = unit => {\n const anchorBlockEntry = TheQueries.anchorBlockEntry(editor);\n if (\n anchorBlockEntry &&\n TheQueries.isAncestorEmpty(editor, anchorBlockEntry[0]) &&\n TheQueries.getNode(editor, Path.next(anchorBlockEntry[1]))\n ) {\n const pathRef = Editor.pathRef(editor, Path.parent(editor.selection.anchor.path));\n HistoryEditor.withoutMerging(editor, () => {\n Transforms.move(editor);\n });\n Transforms.delete(editor, { at: pathRef.unref() });\n return;\n }\n deleteForward(unit);\n };\n\n return editor;\n};\n\nexport const createRemoveEmptyPlugin = createPluginFactory({\n key: PluginKeys.removeEmpty,\n withOverrides: withRemoveEmpty\n});\n","import { Editor, Path, Transforms } from 'slate';\nimport { HistoryEditor } from 'slate-history';\nimport { hotkeys } from 'slate-angular';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport { createEmptyParagraph } from '../../utils/create-empty-paragraph';\nimport * as TheQueries from '../../queries';\n\nexport const withRemoveVoid = <T extends Editor>(editor: T): T => {\n const { deleteBackward, deleteForward, onKeydown } = editor;\n\n const deleteBlockVoid = (e: Editor) => {\n const aboveEntry = TheQueries.getAbove(e);\n const canDelete = aboveEntry && Editor.isBlock(e, aboveEntry[0]) && Editor.isVoid(e, aboveEntry[0]);\n if (canDelete) {\n Transforms.insertNodes(e, createEmptyParagraph(), { at: Path.next(aboveEntry[1]) });\n Transforms.select(e, Path.next(aboveEntry[1]));\n Transforms.removeNodes(e, { at: aboveEntry[1] });\n }\n return canDelete;\n };\n\n editor.deleteBackward = unit => {\n if (deleteBlockVoid(editor)) {\n return;\n }\n deleteBackward(unit);\n };\n\n editor.onKeydown = event => {\n const aboveEntry = TheQueries.getAbove(editor);\n if (aboveEntry && Editor.isVoid(editor, aboveEntry[0]) && Editor.isInline(editor, aboveEntry[0])) {\n if (hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event)) {\n event.preventDefault();\n HistoryEditor.withoutMerging(editor, () => {\n Transforms.move(editor);\n });\n Transforms.delete(editor, { reverse: true });\n return;\n }\n if (hotkeys.isSplitBlock(event)) {\n event.preventDefault();\n Transforms.move(editor);\n return;\n }\n }\n onKeydown(event);\n };\n\n editor.deleteForward = unit => {\n if (deleteBlockVoid(editor)) {\n return;\n }\n deleteForward(unit);\n };\n return editor;\n};\n\nexport const createRemoveVoidPlugin = createPluginFactory({\n key: PluginKeys.removeVoid,\n withOverrides: withRemoveVoid\n});\n","import { Editor, Range } from 'slate';\nimport { hotkeys, IS_SAFARI } from 'slate-angular';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport { BLOCK_DELETE_BACKWARD_TYPES } from '../../constants';\nimport * as TheQueries from '../../queries';\n\nexport const withResetType = <T extends Editor>(editor: T): T => {\n const { onKeydown } = editor;\n\n editor.onKeydown = (event: KeyboardEvent) => {\n const { selection } = editor;\n\n if (IS_SAFARI && selection && Range.isCollapsed(selection) && hotkeys.isDeleteBackward(event)) {\n const blockEntry = TheQueries.getAboveByType(editor, BLOCK_DELETE_BACKWARD_TYPES);\n if (blockEntry && blockEntry[0]) {\n const isStart = Editor.isStart(editor, selection.anchor, blockEntry[1]);\n if (isStart) {\n event.preventDefault();\n Editor.deleteBackward(editor);\n return;\n }\n }\n if (Editor.isStart(editor, selection.anchor, [0])) {\n event.preventDefault();\n Editor.deleteBackward(editor);\n return;\n }\n }\n onKeydown(event);\n };\n\n return editor;\n};\n\nexport const createResetTypePlugin = createPluginFactory({\n key: PluginKeys.resetType,\n withOverrides: withResetType\n});\n","import { Editor, Transforms } from 'slate';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\n\ntype Params = Parameters<typeof Transforms.insertNodes>;\n\nexport interface TransformEditor {\n insertNodes: (nodes: Params[1], options?: Params[2]) => void;\n}\n\nexport const withTransforms = <T extends Editor>(editor: T) => {\n const e = editor as T & TransformEditor;\n\n e.insertNodes = (nodes, options) => {\n try {\n Transforms.insertNodes(editor, nodes, options);\n } catch (err) {}\n };\n\n return e;\n};\n\nexport const createTransformsPlugin = createPluginFactory({\n key: PluginKeys.transforms,\n withOverrides: withTransforms\n});\n","import { Editor, Element, Transforms, Node } from 'slate';\nimport { TheiaConverter } from '@atinc/selene';\nimport { CLIPBOARD_FORMAT_KEY, ElementKinds } from '../../constants';\nimport { filterTextFormat, recursionNodes } from '../../utils/fragment';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport { ImageEditor } from '../image/image.editor';\nimport { isLogicEmptyParagraphElement } from '../../queries/is-empty-paragraph';\nimport { insertDataByInvalidType } from '../../utils';\n\nexport const withDeserializeHTML = <T extends Editor>(editor: T): T => {\n const { insertData } = editor;\n\n editor.insertData = (data: DataTransfer) => {\n const html = data.getData(`text/html`);\n const slateFragment = data.getData(`application/${CLIPBOARD_FORMAT_KEY}`);\n\n if (html && !slateFragment) {\n const htmlDom = new DOMParser().parseFromString(html, 'text/html');\n const fragment = TheiaConverter.convertToTheia(Array.from(htmlDom.body.children)) as Element[];\n // 无法识别HTML内容时后退一下:识别纯文本\n if (fragment.every(block => block.type === ElementKinds.paragraph && isLogicEmptyParagraphElement(editor, block))) {\n insertData(data);\n return;\n }\n // 识出纯图片并且粘贴板中存在文件则不进行处理, hook 直接右键复制图片的场景,流转到上传图片流程\n // 后续需要做识别html图片后自动上传处理\n if (fragment.length === 1 && fragment[0].type === ElementKinds.image && data.files.length > 0) {\n insertData(data);\n return;\n }\n\n // 过滤 text 节点的 color/background-color 属性\n fragment.forEach(node => filterTextFormat(node));\n\n // base 64 图片处理\n recursionNodes(fragment, (node: Node) => {\n const isImage = Element.isElement(node) && node.type === ElementKinds.image;\n if (isImage) {\n ImageEditor.handleBase64ImageElement(editor, node);\n }\n });\n const isContinue = insertDataByInvalidType(editor, fragment);\n if (!isContinue) {\n return;\n }\n Transforms.insertFragment(editor, fragment);\n return;\n }\n\n insertData(data);\n };\n return editor;\n};\n\nexport const createDeserializeHTMLPlugin = createPluginFactory({\n key: PluginKeys.deserializeHtml,\n withOverrides: withDeserializeHTML\n});\n","import { ChangeDetectionStrategy, Component, HostListener, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Editor } from 'slate';\nimport * as TheTransforms from '../../transforms';\n\n@Component({\n selector: 'the-conversion-hint',\n templateUrl: 'conversion-hint.component.html',\n host: {\n class: 'the-conversion-hint'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheConversionHintComponent implements OnInit, OnDestroy {\n @Input() editor: Editor;\n\n @Input() conversion: () => void;\n\n duration = 10000;\n pauseOnHover = true;\n closeTimer: any;\n\n @HostListener('mouseenter') mouseenter() {\n if (this.pauseOnHover) {\n this.clearCloseTimer();\n }\n }\n\n @HostListener('mouseleave') mouseleave() {\n if (this.pauseOnHover) {\n this.creatCloseTimer();\n }\n }\n\n ngOnInit() {\n this.creatCloseTimer();\n }\n\n ngOnDestroy() {\n this.clearCloseTimer();\n }\n\n creatCloseTimer() {\n this.closeTimer = setInterval(() => {\n clearInterval(this.closeTimer);\n TheTransforms.closeConversionHint(this.editor);\n }, this.duration);\n }\n\n clearCloseTimer() {\n clearInterval(this.closeTimer);\n }\n}\n","<ng-container>\n <thy-alert thyType=\"primary-weak\" thyIcon=\"info-circle-fill\" thyCloseable=\"true\" thyMessage=\"检测到粘贴内容符合Markdown语法\">\n <ng-template #operation>\n <a href=\"javascript:;\" thyAlertActionItem (click)=\"conversion()\"> 立即转换 </a>\n </ng-template>\n </thy-alert>\n</ng-container>\n","import { ChangeDetectorRef, ViewContainerRef } from '@angular/core';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { ThyPopover } from 'ngx-tethys/popover';\nimport { Editor, Element, Node, Text, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport marked from 'marked';\nimport { TheiaConverter } from '@atinc/selene';\nimport { CLIPBOARD_FORMAT_KEY, ElementKinds } from '../../constants';\nimport * as TheTransforms from '../../transforms';\nimport { TheConversionHintComponent } from '../../components/conversion-hint/conversion-hint.component';\nimport { THE_EDITOR_CONVERSION_HINT_REF, getToolbarClass, recursionNodes } from '../../utils';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport { ImageEditor } from '../image/image.editor';\n\nexport const withDeserializeMd = <T extends Editor>(editor: T): T => {\n const { insertData, onKeydown } = editor;\n\n editor.onKeydown = (event: KeyboardEvent) => {\n TheTransforms.closeConversionHint(editor);\n onKeydown(event);\n };\n\n editor.insertData = (data: DataTransfer) => {\n const popover = editor.injector.get(ThyPopover);\n const viewContainerRef = editor.injector.get(ViewContainerRef);\n const cdr = editor.injector.get(ChangeDetectorRef);\n\n const plainFragment = data.getData('text/plain');\n const slateFragment = data.getData(`application/${CLIPBOARD_FORMAT_KEY}`);\n const oldRange = editor.selection;\n TheTransforms.closeConversionHint(editor);\n\n if (plainFragment && isMarkdownStynx(plainFragment) && !slateFragment) {\n setTimeout(() => {\n const overlay = editor.injector.get(Overlay);\n const bodyElement = document.body;\n const toolbarClass = getToolbarClass(editor);\n const toolbarElement = document.querySelector(`.${toolbarClass}`) as HTMLElement;\n const origin = toolbarElement ? toolbarElement : bodyElement;\n const placement = toolbarElement ? 'top' : 'topRight';\n\n const hintPopverRef = popover.open(TheConversionHintComponent, {\n initialState: {\n editor,\n conversion: () => {\n try {\n const html = marked(plainFragment.replace(/\\n```/g, '\\n\\n```'), { gfm: true });\n const htmlDom = new DOMParser().parseFromString(html, 'text/html');\n const fragment = TheiaConverter.convertToTheia(Array.from(htmlDom.body.children));\n\n if (!isUnformatted(fragment)) {\n TheTransforms.closeConversionHint(editor);\n\n editor.undo();\n\n setTimeout(() => {\n Transforms.select(editor, oldRange);\n // base 64 图片处理\n recursionNodes(fragment, (node: Node) => {\n const isImage = Element.isElement(node) && node.type === ElementKinds.image;\n if (isImage) {\n ImageEditor.handleBase64ImageElement(editor, node);\n }\n });\n Transforms.insertFragment(editor, fragment);\n AngularEditor.focus(editor);\n });\n return;\n } else {\n TheTransforms.closeConversionHint(editor);\n }\n } catch (error) {\n TheTransforms.closeConversionHint(editor);\n }\n }\n },\n origin,\n viewContainerRef,\n placement,\n offset: -100,\n minWidth: 0,\n hasBackdrop: false,\n backdropClosable: false,\n closeOnNavigation: false,\n scrollStrategy: overlay.scrollStrategies.reposition()\n });\n THE_EDITOR_CONVERSION_HINT_REF.set(editor, hintPopverRef);\n cdr.markForCheck();\n });\n }\n\n insertData(data);\n };\n return editor;\n};\n\nexport const createDeserializeMdPlugin = createPluginFactory({\n key: PluginKeys.deserializeMd,\n withOverrides: withDeserializeMd\n});\n\nconst isUnformatted = (elements: Element[]) => {\n return elements.every(\n element =>\n element.type === ElementKinds.default &&\n element.children.every((node: Node) => {\n return Text.isText(node) && Object.keys(node).length === 1;\n })\n );\n};\n\nconst isMarkdownStynx = content => {\n // https://github.com/Chalarangelo/parse-md-js/blob/master/parsemd.js\n const codeBlockRegex = /((\\n\\t)(.*))+/g;\n const inlineCodeRegex = /(`)(.*?)\\1/g;\n const imageRegex = /!\\[([^\\[]+)\\]\\(([^\\)]+)\\)/g;\n const linkRegex = /\\[([^\\[]+)\\]\\(([^\\)]+)\\)/g;\n const headingRegex = /(#+\\s*)(.*)/g;\n const boldItalicsRegex = /(\\*{1,2})(\\S+)\\1/g;\n const strikethroughRegex = /(\\~\\~)(.*?)\\1/g;\n const blockquoteRegex = /\\n(&gt;|\\>)(.*)/g;\n const horizontalRuleRegex = /\\n((\\-{3,})|(={3,}))/g;\n const unorderedListRegex = /(\\n\\s*(\\-|\\+)\\s.*)+/g;\n const orderedListRegex = /(\\n\\s*([0-9]+\\.)\\s.*)+/g;\n const paragraphRegex = /\\n+(?!<pre>)(?!<h)(?!<ul>)(?!<blockquote)(?!<hr)(?!\\t)([^\\n]+)\\n/g;\n // from marked\n const table =\n /^\\s*([^\\s].*\\|.*)\\s{0,3}(?:\\|\\s*)?(:?-+:?\\s*(?:\\|\\s*:?-+:?\\s*)*)\\|?(?:\\s*((?:(?!|hr|heading|blockquote|code|fences|list|html).*(?:|$))*)*|$)/g;\n const regexps = [\n inlineCodeRegex,\n imageRegex,\n linkRegex,\n headingRegex,\n boldItalicsRegex,\n strikethroughRegex,\n blockquoteRegex,\n horizontalRuleRegex,\n unorderedListRegex,\n orderedListRegex,\n table\n ];\n return regexps.some(regexp => regexp.test(content));\n};\n","import { Editor } from 'slate';\nimport { ElementKinds, FontSizes, MarkTypes, HEADING_TYPES, FontSizeTypes, DISABLED_OPERATE_TYPES } from '../../constants';\nimport { TheEditor, PluginKeys, ToolbarItem, ToolbarItemType } from '../../interfaces';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { TheContextService } from '../../services/context.service';\nimport { TableEditor } from '../table/table.editor';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\n\nexport const FontSizeEditor = {\n setFontSize(editor: TheEditor, size: FontSizes) {\n const contextService = editor.injector.get(TheContextService);\n const defaultFontSize = contextService.getDefaultFontSize();\n const marks = TheQueries.getSelectionMarks(editor);\n const fontSizeMark: number = marks[MarkTypes.fontSize];\n const isDefaultFontSize = size === defaultFontSize;\n\n if (!fontSizeMark && isDefaultFontSize) {\n return;\n }\n\n // unset fontSize\n if (isDefaultFontSize) {\n FontSizeEditor.unsetFontSize(editor, size);\n return;\n }\n\n FontSizeEditor.setFontSizeMark(editor, size);\n },\n setFontSizeMark(editor: Editor, size: FontSizes) {\n // set Table selectedCells fontSize\n if (TableEditor.toggleMark(editor, false, MarkTypes.fontSize, Number(size))) {\n return;\n }\n // set paragraph text fontSize\n Editor.addMark(editor, MarkTypes.fontSize, Number(size));\n },\n unsetFontSize(editor: Editor, size: FontSizes) {\n const isTable = TableEditor.isActive(editor);\n\n // unset Table selectedCells fontSize\n if (isTable && TableEditor.toggleMark(editor, true, MarkTypes.fontSize, Number(size))) {\n return;\n }\n // unset paragraph text fontSize\n TheTransforms.setMarks(\n editor,\n {\n [MarkTypes.fontSize]: null\n },\n editor.selection\n );\n },\n isFontSizeActive(editor: Editor, size: FontSizes) {\n if (editor.selection) {\n const anchorBlock = TheQueries.anchorBlock(editor);\n switch (anchorBlock?.type) {\n case ElementKinds.heading_1:\n return size === FontSizes.fontSize28;\n case ElementKinds.heading_2:\n return size === FontSizes.fontSize24;\n case ElementKinds.heading_3:\n return size === FontSizes.fontSize20;\n case ElementKinds.heading_4:\n return size === FontSizes.fontSize18;\n case ElementKinds.heading_5:\n return size === FontSizes.fontSize16;\n case ElementKinds.heading_6:\n return size === FontSizes.fontSize14;\n case ElementKinds.paragraph:\n const marks = TheQueries.getSelectionMarks(editor);\n const fontSizeMark = marks[MarkTypes.fontSize];\n return Number(size) === fontSizeMark;\n default:\n return false;\n }\n }\n return false;\n }\n};\n\nconst sizeOptions = (): ToolbarItem[] => {\n return FontSizeTypes.map(fontSize => {\n return {\n key: fontSize,\n name: fontSize,\n execute: editor => FontSizeEditor.setFontSize(editor, fontSize),\n active: editor => FontSizeEditor.isFontSizeActive(editor, fontSize)\n };\n });\n};\n\nexport const createFontSizePlugin = createPluginFactory({\n key: PluginKeys.fontSize,\n toolbarItems: [\n {\n key: MarkTypes.fontSize,\n name: '字号',\n type: ToolbarItemType.dropdown,\n dropdownItemKey: FontSizes.fontSize14,\n includes: FontSizeTypes\n },\n ...sizeOptions()\n ],\n options: {\n disabledOperateTypes: [...HEADING_TYPES, ElementKinds.image, ...DISABLED_OPERATE_TYPES]\n }\n});\n","import { Editor, Transforms, Range } from 'slate';\nimport { CustomElementKinds } from '../../custom-types';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys, ThePluginBaseOption, ToolbarItemType } from '../../interfaces';\nimport { DropdownMode, ElementKinds, PluginMenuIcons, STANDARD_HEADING_TYPES, ThePluginMenuItemType } from '../../constants';\nimport { HeadingEditor, headingOptions } from './heading.editor';\nimport * as TheQueries from '../../queries';\n\nexport type HeadingPluginOptions = {\n cleanupTypes: CustomElementKinds[];\n} & ThePluginBaseOption;\n\nexport const withHeading = <T extends Editor>(editor: T): T => {\n const { insertBreak } = editor;\n\n editor.insertBreak = () => {\n const { selection } = editor;\n const anchorBlock = TheQueries.getAnchorBlockEntry(editor);\n if (anchorBlock && Range.isCollapsed(selection) && anchorBlock[0].type.startsWith('heading')) {\n if (Editor.isStart(editor, selection.anchor, anchorBlock[1])) {\n insertBreak();\n Transforms.setNodes(\n editor,\n { type: ElementKinds.paragraph },\n {\n at: selection\n }\n );\n return;\n }\n if (Editor.isEnd(editor, selection.focus, anchorBlock[1])) {\n insertBreak();\n Transforms.setNodes(editor, { type: ElementKinds.paragraph });\n return;\n }\n }\n insertBreak();\n };\n\n return editor;\n};\n\nconst headingListPlugins = HeadingEditor.headingPlugins();\n\nexport const createHeadingPlugin = createPluginFactory<HeadingPluginOptions>({\n key: PluginKeys.heading,\n withOverrides: withHeading,\n plugins: headingListPlugins,\n toolbarItems: [\n {\n key: ElementKinds.headingList,\n name: '正文',\n type: ToolbarItemType.dropdown,\n dropdownMode: DropdownMode.text,\n dropdownItemKey: ElementKinds.paragraph,\n includes: [ElementKinds.paragraph, ...STANDARD_HEADING_TYPES]\n },\n {\n key: ElementKinds.paragraph,\n name: '正文',\n styles: { height: '40px' },\n execute: editor => Transforms.setNodes(editor, { type: ElementKinds.paragraph }),\n active: editor => TheQueries.isParagraph(editor)\n },\n {\n key: ElementKinds.heading_1,\n name: '标题1',\n icon: 'header-1',\n styles: { height: '40px', fontSize: '28px' },\n execute: editor => HeadingEditor.setHeading(editor, ElementKinds.heading_1),\n active: editor => HeadingEditor.isHeadingActive(editor, ElementKinds.heading_1)\n },\n {\n key: ElementKinds.heading_2,\n icon: 'header-2',\n name: '标题2',\n styles: { height: '38px', fontSize: '24px' },\n execute: editor => HeadingEditor.setHeading(editor, ElementKinds.heading_2),\n active: editor => HeadingEditor.isHeadingActive(editor, ElementKinds.heading_2)\n },\n {\n key: ElementKinds.heading_3,\n icon: 'header-3',\n name: '标题3',\n styles: { height: '34px', fontSize: '20px' },\n execute: editor => HeadingEditor.setHeading(editor, ElementKinds.heading_3),\n active: editor => HeadingEditor.isHeadingActive(editor, ElementKinds.heading_3)\n },\n {\n key: ElementKinds.heading_4,\n icon: 'header-4',\n name: '标题4',\n styles: { height: '30px', fontSize: '16px' },\n execute: editor => HeadingEditor.setHeading(editor, ElementKinds.heading_4),\n active: editor => HeadingEditor.isHeadingActive(editor, ElementKinds.heading_4)\n }\n ],\n menuItems: [\n {\n key: ElementKinds.heading_1,\n type: ThePluginMenuItemType.icon,\n execute: editor => HeadingEditor.setHeading(editor, ElementKinds.heading_1),\n active: editor => HeadingEditor.isHeadingActive(editor, ElementKinds.heading_1),\n name: '标题1',\n displayKey: '/h1',\n description: '插入一级标题',\n icon: 'header-1',\n menuIcon: PluginMenuIcons.heading_1,\n keywords: 'h,H,bt,heading1,标题,h1'\n },\n {\n key: ElementKinds.heading_2,\n type: ThePluginMenuItemType.icon,\n execute: editor => HeadingEditor.setHeading(editor, ElementKinds.heading_2),\n active: editor => HeadingEditor.isHeadingActive(editor, ElementKinds.heading_2),\n name: '标题2',\n icon: 'header-2',\n description: '插入二级标题',\n displayKey: '/h2',\n menuIcon: PluginMenuIcons.heading_2,\n keywords: 'h,H,bt,heading2,标题,h2'\n },\n {\n key: ElementKinds.heading_3,\n type: ThePluginMenuItemType.icon,\n execute: editor => HeadingEditor.setHeading(editor, ElementKinds.heading_3),\n active: editor => HeadingEditor.isHeadingActive(editor, ElementKinds.heading_3),\n name: '标题3',\n icon: 'header-3',\n description: '插入三级标题',\n displayKey: '/h3',\n menuIcon: PluginMenuIcons.heading_3,\n keywords: 'h,H,bt,heading3,标题,h3'\n },\n {\n key: ElementKinds.heading_4,\n type: ThePluginMenuItemType.icon,\n execute: editor => HeadingEditor.setHeading(editor, ElementKinds.heading_4),\n active: editor => HeadingEditor.isHeadingActive(editor, ElementKinds.heading_4),\n name: '标题4',\n icon: 'header-4',\n description: '插入四级标题',\n displayKey: '/h4',\n menuIcon: PluginMenuIcons.heading_4,\n keywords: 'h,H,bt,heading4,BT,标题,h4'\n }\n ],\n options: headingOptions\n});\n","import { Component, ElementRef, ChangeDetectorRef, AfterViewInit } from '@angular/core';\nimport { Editor, Element } from 'slate';\nimport { TheBaseElementComponent } from '../../interfaces';\n\n@Component({\n selector: 'the-hr, [theHr]',\n template: `\n <div class=\"the-hr\" contenteditable=\"false\" [ngClass]=\"{ active: isCollapsedAndNonReadonly }\">\n <hr class=\"the-hr\" />\n <slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>\n </div>\n `\n})\nexport class TheHrComponent extends TheBaseElementComponent<Element, Editor> implements AfterViewInit {\n constructor(public elementRef: ElementRef, public cdr: ChangeDetectorRef) {\n super(elementRef, cdr);\n }\n\n ngAfterViewInit() {\n setTimeout(() => {\n const blockCardElement = this.nativeElement.closest('slate-block-card');\n if (blockCardElement) {\n blockCardElement.classList.add(`slate-block-card-${this.element.type}`);\n }\n });\n }\n}\n","import { Editor, Element } from 'slate';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport { ElementKinds } from '../../constants';\nimport { TheHrComponent } from './hr.component';\nimport { HrEditor } from './hr.editor';\nimport * as TheQueries from '../../queries';\nimport { PluginMenuIcons, PluginMenuSvgs, ThePluginMenuItemType } from '../../constants/plugin-menu';\n\nexport const withHr = <T extends Editor>(editor: T): T => {\n const { isVoid, isBlockCard, renderElement } = editor;\n\n editor.isVoid = (element: Element) => {\n return element.type === ElementKinds.hr || isVoid(element);\n };\n\n editor.isBlockCard = (element: Element) => {\n if (element.type === ElementKinds.hr) {\n return true;\n }\n return isBlockCard(element);\n };\n\n editor.renderElement = (element: Element) => {\n if (element.type === ElementKinds.hr) {\n return TheHrComponent;\n }\n return renderElement(element);\n };\n\n return editor;\n};\n\nexport const createHrPlugin = createPluginFactory({\n key: PluginKeys.hr,\n withOverrides: withHr,\n toolbarItems: [\n {\n key: ElementKinds.hr,\n icon: 'horizontal-line',\n name: '分割线',\n active: editor => TheQueries.isBlockActive(editor, ElementKinds.hr),\n execute: editor => HrEditor.insertHr(editor)\n }\n ],\n menuItems: [\n {\n key: ElementKinds.hr,\n keywords: 'fengexian,fgx,divider,line,分割线',\n type: ThePluginMenuItemType.group,\n active: editor => TheQueries.isBlockActive(editor, ElementKinds.hr),\n execute: editor => HrEditor.insertHr(editor),\n name: '分割线',\n menuIcon: PluginMenuIcons.hr,\n description: '使用水平线分隔内容',\n displayKey: '/fgx'\n }\n ],\n options: {\n allowParentTypes: [ElementKinds.tableCell]\n }\n});\n","import { ConnectedPosition, Overlay } from '@angular/cdk/overlay';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Inject,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { ThyUploadStatus } from 'ngx-tethys/upload';\nimport { Subscription } from 'rxjs/internal/Subscription';\nimport { map } from 'rxjs/operators';\nimport { Editor, Transforms } from 'slate';\nimport { AngularEditor, BeforeContextChange, SlateElementContext } from 'slate-angular';\nimport { HistoryEditor } from 'slate-history';\nimport { Alignment, ElementKinds, LayoutTypes, ToolbarActionTypes } from '../../constants/node-types';\nimport { ImageElement } from '../../custom-types';\nimport { PluginKeys, TheBaseElementComponent } from '../../interfaces';\nimport {\n ImageEntry,\n LayoutOption,\n TheImageUploaderService,\n THE_UPLOAD_SERVICE_TOKEN,\n ImagePluginOptions,\n ImageInfo\n} from '../../interfaces/image';\nimport * as TheQueries from '../../queries';\nimport { TheContextService } from '../../services/context.service';\nimport * as TheTransforms from '../../transforms';\nimport { ImageEditor } from './image.editor';\nimport { getPluginOptions } from '../../core/utils';\nimport { ThyImageDirective, ThyImageGroupComponent } from 'ngx-tethys/image';\n\ndeclare const $: any;\n\n@Component({\n selector: 'the-image, [theImage]',\n templateUrl: './image.component.html'\n})\nexport class TheImageComponent\n extends TheBaseElementComponent<ImageElement, Editor>\n implements OnInit, OnDestroy, AfterViewInit, BeforeContextChange<SlateElementContext>\n{\n naturalWidth = 0;\n\n naturalHeight = 0;\n\n imageEntry: ImageEntry = {};\n\n uploading = false;\n\n percentage = 0;\n\n fileItem: { url: string; file: File };\n\n layoutDefaultWidth = 368;\n\n disablePreview = false;\n\n loadImageError = false;\n\n layoutOptions: LayoutOption[] = [\n {\n key: Alignment.left,\n icon: 'image-left',\n name: '左对齐',\n handle: (e: MouseEvent, key: Alignment) => this.setImageNode(e, { align: key, layout: undefined })\n },\n {\n key: Alignment.center,\n icon: 'image-center',\n name: '居中',\n handle: (e: MouseEvent, key: Alignment) => this.setImageNode(e, { align: key, layout: undefined })\n },\n {\n key: Alignment.right,\n icon: 'image-right',\n name: '右对齐',\n handle: (e: MouseEvent, key: Alignment) => this.setImageNode(e, { align: key, layout: undefined })\n },\n {\n key: ToolbarActionTypes.split\n },\n {\n key: LayoutTypes.wrapLeft,\n icon: 'wrap-left',\n name: '图片居左',\n handle: (e: MouseEvent, key: LayoutTypes) => this.setImageNode(e, { layout: key })\n },\n {\n key: LayoutTypes.wrapRight,\n icon: 'wrap-right',\n name: '图片居右',\n handle: (e: MouseEvent, key: LayoutTypes) => this.setImageNode(e, { layout: key })\n },\n {\n key: 'remove',\n icon: 'trash',\n name: '删除',\n handle: (e: MouseEvent) => this.onDelete(e)\n }\n ];\n\n private uploadingSubscription: Subscription;\n\n private mouseMoveSubscription: Subscription;\n\n private mouseUpSubscription: Subscription;\n\n private dragable = false;\n\n private layoutToolbarRef: ThyPopoverRef<any>;\n\n private imagePluginOptions: ImagePluginOptions;\n\n get isOpen() {\n return this.layoutToolbarRef && this.layoutToolbarRef.getOverlayRef() && this.layoutToolbarRef.getOverlayRef().hasAttached();\n }\n\n get imageBindingWidth() {\n const currentWidth = this.imageEntry?.width || this.naturalWidth;\n return this.imageEntry?.layout && currentWidth > this.layoutDefaultWidth && !this.imageEntry?.reSized\n ? this.layoutDefaultWidth\n : this.imageEntry.width;\n }\n\n @ViewChild('imageContent')\n imageContent: ElementRef;\n\n @ViewChild('img', { static: false })\n img: ElementRef;\n\n @ViewChild('layoutToolbar', { static: true })\n layoutToolbar: TemplateRef<any>;\n\n @ViewChild(ThyImageDirective) imageDirective: ThyImageDirective;\n\n constructor(\n public elementRef: ElementRef,\n @Inject(THE_UPLOAD_SERVICE_TOKEN)\n private imageUploaderService: TheImageUploaderService,\n public cdr: ChangeDetectorRef,\n private theContextService: TheContextService,\n private thyPopover: ThyPopover,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n public imageGroupComponent: ThyImageGroupComponent\n ) {\n super(elementRef, cdr);\n }\n\n beforeContextChange = (value: SlateElementContext<ImageElement>) => {\n if (value.element !== this.element && value.element.thumbUrl) {\n let thumbUrl = value.element.thumbUrl;\n let originUrl = value.element.originUrl;\n const baseUrl = this.imageUploaderService.getBaseUrl?.() || '';\n if (baseUrl && thumbUrl.startsWith('http')) {\n const slice = '/files/public/';\n thumbUrl = `${baseUrl}${slice}${thumbUrl.slice(thumbUrl.indexOf(slice) + slice.length, thumbUrl.length)}`;\n originUrl = `${baseUrl}${slice}${originUrl.slice(originUrl.indexOf(slice) + slice.length, originUrl.length)}`;\n }\n this.imageEntry = {\n // name: value.element.name,\n name: undefined,\n width: value.element.width,\n height: value.element.height,\n thumbUrl,\n originUrl,\n align: value.element.align || Alignment.left,\n layout: value.element.layout,\n reSized: value.element.reSized || false,\n size: value.element.size\n };\n this.setBlockCardLayoutAttr();\n }\n };\n\n ngOnInit() {\n this.fileItem = this.theContextService.uploadingFiles.find(item => item.url === this.element.url);\n if (this.fileItem?.file && this.fileItem.file instanceof File) {\n this.uploadImage(this.fileItem.file);\n }\n super.ngOnInit();\n this.imagePluginOptions = getPluginOptions<ImagePluginOptions>(this.editor, PluginKeys.image);\n if (this.imagePluginOptions.disablePreview && typeof this.imagePluginOptions.disablePreview === 'function') {\n this.disablePreview = this.imagePluginOptions.disablePreview(this.editor);\n } else {\n this.disablePreview = this.imagePluginOptions.disablePreview as boolean;\n }\n }\n\n imageClick() {\n const index = this.imageGroupComponent.images.findIndex(item => item === this.imageDirective);\n const imageGroup = this.imageGroupComponent.images.map(item => {\n return {\n originUrl: item.thyOriginSrc,\n thumbUrl: item.thyPreviewSrc,\n name: item.thyImageMeta.name,\n size: item.thyImageMeta.size\n };\n }) as ImageInfo[];\n const { originUrl, thumbUrl, name, size } = this.element;\n if (this.imagePluginOptions.preview) {\n this.imagePluginOptions.preview({\n editor: this.editor,\n previewImageInfo: {\n image: {\n originUrl,\n thumbUrl,\n name,\n size\n },\n imageGroup,\n index\n }\n });\n }\n }\n\n onContextChange() {\n super.onContextChange();\n if (this.initialized) {\n if (this.isShouldOpen()) {\n this.openLayoutToolbar();\n }\n if (this.isShouldClose()) {\n this.closeLayoutToolbar();\n }\n }\n }\n\n ngOnDestroy() {\n this.uploadingSubscription.unsubscribe();\n this.mouseUpSubscription.unsubscribe();\n this.theContextService.removeUploadFile(this.fileItem);\n if (this.uploading) {\n this.theContextService.uploadingStatus$.next(false);\n }\n super.ngOnDestroy();\n }\n\n ngAfterViewInit() {\n this.mouseUpSubscription = this.theContextService.onMouseUp$.subscribe(e => this.endDrag(e));\n this.uploadingSubscription = this.imageUploaderService\n .getUploadingItems$()\n .pipe(map(fileUploadingItem => this.fileItem?.file && fileUploadingItem.find(item => item.file === this.fileItem?.file)))\n .subscribe(uploadingItem => {\n if (!uploadingItem || !uploadingItem.result) {\n return;\n }\n this.percentage = uploadingItem.result.uploadFile.progress.percentage;\n const { status } = uploadingItem.result;\n // 成功和失败都要上传结束\n if (status === ThyUploadStatus.done) {\n this.uploadingSubscription.unsubscribe();\n this.uploading = false;\n this.theContextService.removeUploadFile(this.fileItem);\n setTimeout(() => this.theContextService.uploadingStatus$.next(false), 0);\n }\n this.cdr.detectChanges();\n });\n }\n\n setImageNodes(imageInfo: ImageEntry) {\n const path = AngularEditor.findPath(this.editor, this.element);\n const data = { type: ElementKinds.image, url: null, ...imageInfo };\n HistoryEditor.withoutSaving(this.editor, () => Transforms.setNodes(this.editor, data, { at: path }));\n }\n\n async uploadImage(file: File) {\n this.imageEntry = {\n align: this.imageEntry.align || Alignment.center,\n thumbUrl: URL.createObjectURL(file)\n };\n this.uploading = true;\n this.theContextService.uploadingStatus$.next(true);\n const [uploadFileEntity] = await this.imageUploaderService.uploadFileHandle([file]).toPromise();\n const { thumbUrl, originUrl } = uploadFileEntity;\n const imageInfo: ImageEntry = {\n name: file.name,\n thumbUrl,\n originUrl,\n align: this.imageEntry.align || Alignment.center,\n size: file.size\n };\n this.setImageNodes(imageInfo);\n }\n\n startDrag(event: MouseEvent, axis: string) {\n if (this.loadImageError || !this.img) {\n return;\n }\n event.preventDefault();\n this.dragable = true;\n const imgElement = this.img.nativeElement as HTMLImageElement;\n const options = {\n axis,\n printerPositionX: event.pageX,\n printerPositionY: event.pageY,\n internalWidth: imgElement.width || this.imageEntry.width,\n internalHeight: imgElement.height || this.imageEntry.height,\n maxWidth: this.theContextService.getFirstElementChild().clientWidth\n };\n this.mouseMoveSubscription = this.theContextService.onMouseMove$.subscribe(e => this.mouseMoveHandle(e, options));\n }\n\n mouseMoveHandle(\n event: MouseEvent,\n options: {\n axis: string;\n printerPositionX: number;\n printerPositionY: number;\n internalWidth: number;\n internalHeight: number;\n maxWidth: number;\n }\n ) {\n if (this.dragable) {\n const { axis, printerPositionX, printerPositionY, internalWidth, internalHeight, maxWidth } = options;\n const isReversal = axis.includes('-');\n\n let offsetX = event.pageX - printerPositionX;\n let offsetY = event.pageY - printerPositionY;\n let { width, height } = this.element;\n\n if (isReversal) {\n offsetX = -offsetX;\n offsetY = -offsetY;\n }\n if (this.element.align === 'center') {\n offsetX = offsetX * 2;\n }\n\n if (axis.includes('x')) {\n width = offsetX + internalWidth;\n if (width >= maxWidth) {\n width = maxWidth;\n\n // clear `layout` when the image is adjusted to the maximum value under rich media\n if (this.imageEntry?.layout) {\n const path = TheQueries.findPath(this.editor, this.element);\n ImageEditor.setImageNode(this.editor, path, { layout: undefined });\n }\n }\n if (width <= 100) {\n width = 100;\n }\n if (axis.includes('l')) {\n const ratio = internalWidth / width;\n height = internalHeight / ratio;\n }\n } else if (axis.includes('y')) {\n height = offsetY + internalHeight;\n if (height >= 1000) {\n height = 1000;\n }\n if (height <= 100) {\n height = 100;\n }\n if (axis.includes('l')) {\n const ratio = internalHeight / height;\n width = internalWidth / ratio;\n }\n }\n\n if (!this.imageEntry.reSized && this.imageEntry.width !== width) {\n this.imageEntry.reSized = true;\n }\n this.img.nativeElement.style.width = width + 'px';\n this.imageEntry.width = width;\n this.imageEntry.height = height;\n }\n }\n\n endDrag(event: MouseEvent) {\n if (this.dragable) {\n this.dragable = false;\n this.mouseMoveSubscription.unsubscribe();\n if (\n this.imageEntry.width === this.theContextService.getOptions().width &&\n this.imageEntry.width <= this.naturalWidth &&\n this.element.width\n ) {\n this.imageEntry.width = null;\n this.imageEntry.height = null;\n }\n Transforms.setNodes(\n this.editor,\n {\n type: ElementKinds.image,\n ...this.imageEntry\n },\n { at: this.selection }\n );\n }\n }\n\n cancelUpload(event) {\n Transforms.removeNodes(this.editor, { at: this.selection });\n }\n\n isShouldOpen() {\n const {\n theOptions: { richMedia }\n } = this.theContextService.getOptions();\n return (\n !this?.readonly &&\n richMedia &&\n this.isCollapsedAndNonReadonly &&\n TheQueries.isGlobalCollapsed(this.editor) &&\n !this.uploading &&\n !this.isOpen\n );\n }\n\n isShouldClose() {\n return (\n this.isOpen &&\n (this?.readonly || !this.isCollapsedAndNonReadonly || !TheQueries.isGlobalCollapsed(this.editor) || this.uploading)\n );\n }\n\n openLayoutToolbar() {\n if (!this.img) {\n return;\n }\n this.layoutToolbarRef = this.thyPopover.open(this.layoutToolbar, {\n origin: this.imageContent,\n panelClass: 'the-plugin-toolbar-popover',\n insideClosable: false,\n backdropClosable: true,\n hasBackdrop: false,\n minWidth: 0,\n viewContainerRef: this.viewContainerRef,\n scrollStrategy: this.overlay.scrollStrategies.reposition()\n });\n this.layoutToolbarRef?.getOverlayRef().updatePositionStrategy(this.createPositionStrategy());\n\n setTimeout(() => {\n this.layoutToolbarRef?.getOverlayRef().updatePosition();\n }, 150);\n }\n\n closeLayoutToolbar() {\n this.layoutToolbarRef?.close();\n }\n\n layoutActive(key: Alignment | LayoutTypes) {\n const { layout, align } = this.imageEntry;\n return key && ((key === align && !layout) || key === layout);\n }\n\n setImageNode(e: MouseEvent, partial: { layout?: LayoutTypes; align?: Alignment }) {\n e.preventDefault();\n const path = TheQueries.findPath(this.editor, this.element);\n ImageEditor.setImageNode(this.editor, path, partial);\n }\n\n setBlockCardLayoutAttr() {\n Promise.resolve().then(() => {\n const currentElement = AngularEditor.toDOMNode(this.editor, this.element);\n const blockCard = currentElement.closest('.slate-block-card');\n const { layout } = this.element;\n\n if (blockCard && layout) {\n blockCard.setAttribute('layout', layout);\n } else if (blockCard && !layout) {\n blockCard.removeAttribute('layout');\n }\n this.layoutToolbarRef?.getOverlayRef().updatePosition();\n });\n }\n\n onDelete(event: MouseEvent) {\n event.preventDefault();\n TheTransforms.deleteElement(this.editor, this.element);\n }\n\n createPositionStrategy() {\n const bottomPosition: ConnectedPosition = {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetX: 0,\n offsetY: 4\n };\n return this.overlay\n .position()\n .flexibleConnectedTo(this.imageContent)\n .withFlexibleDimensions(false)\n .withGrowAfterOpen(false)\n .withPush(false)\n .withPositions([bottomPosition]);\n }\n\n imageLoaded(event: Event) {\n const img = event.target as HTMLImageElement;\n this.naturalWidth = img.naturalWidth;\n this.naturalHeight = img.naturalHeight;\n }\n\n imageError(event: Event) {\n const img = event.target as HTMLImageElement;\n const errorImageUrl = this.imagePluginOptions?.errorImageUrl;\n if (errorImageUrl) {\n const url = typeof errorImageUrl === 'function' ? errorImageUrl(this.editor) : errorImageUrl;\n this.loadImageError = true;\n this.disablePreview = true;\n this.imageContent.nativeElement.classList.add('the-image-error');\n img.src = url;\n }\n img.onerror = null;\n }\n\n // 组件库 dialog 弹出时,会记录当前的焦点。阻止 mousedown 默认行为,使得图片原本的 click 事件能获取到正确的焦点。\n preventDefault(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>\n\n<div class=\"image-container\" contenteditable=\"false\" [style.textAlign]=\"imageEntry.align\">\n <div #imageContent *ngIf=\"imageEntry.thumbUrl\" class=\"image-content\" [class.cursor-pointer]=\"!selection\">\n <img\n #img\n thyImage\n class=\"main-image\"\n [class.image-collapsed]=\"selection && !uploading\"\n [ngStyle]=\"{ 'width.px': imageBindingWidth }\"\n [alt]=\"imageEntry.name\"\n [thySrc]=\"imageEntry.thumbUrl\"\n [thyPreviewSrc]=\"imageEntry.thumbUrl\"\n [thyOriginSrc]=\"imageEntry.originUrl\"\n [thyDisablePreview]=\"disablePreview\"\n [thyImageMeta]=\"{ name: imageEntry.name, size: imageEntry.size }\"\n (load)=\"imageLoaded($event)\"\n (mousedown)=\"preventDefault($event)\"\n (error)=\"imageError($event)\"\n (click)=\"imageClick($event)\"\n />\n <div *ngIf=\"isCollapsedAndNonReadonly\" class=\"image-profile\" [class.outline]=\"selection\">\n <ng-container *ngIf=\"!loadImageError\">\n <span (mousedown)=\"startDrag($event, '-xl')\" class=\"image-pointer left top\"></span>\n <span (mousedown)=\"startDrag($event, 'xl')\" class=\"image-pointer right top\"></span>\n <span (mousedown)=\"startDrag($event, 'xl')\" class=\"image-pointer right bottom\"></span>\n <span (mousedown)=\"startDrag($event, '-xl')\" class=\"image-pointer left bottom\"></span>\n </ng-container>\n </div>\n <div *ngIf=\"uploading\" class=\"uploading\">\n <div class=\"uploading-percentage\">\n <thy-progress thyType=\"primary\" [thyValue]=\"percentage\" thySize=\"sm\"></thy-progress>\n <thy-icon (click)=\"cancelUpload($event)\" thyIconName=\"close-circle-bold-fill\" thyIconLegging=\"true\"> </thy-icon>\n </div>\n </div>\n <div *ngIf=\"!uploading\" class=\"layer\" [class.readonly]=\"readonly\"></div>\n </div>\n <div *ngIf=\"!imageEntry.thumbUrl\" class=\"image-loading cursor-pointer\" contenteditable=\"false\">\n <thy-icon thyIconName=\"image\"></thy-icon>\n </div>\n</div>\n\n<ng-template #layoutToolbar>\n <thy-actions thySize=\"xxs\">\n <ng-container *ngFor=\"let item of layoutOptions\">\n <a\n *ngIf=\"item.key !== 'split'\"\n href=\"javascript:;\"\n thyAction\n [thyType]=\"item.key === 'remove' ? 'danger' : 'primary'\"\n [thyActionIcon]=\"item.icon\"\n [thyActionActive]=\"layoutActive(item.key)\"\n [thyTooltip]=\"item.name\"\n thyTooltipPlacement=\"top\"\n (mousedown)=\"item?.handle($event, item.key)\"\n ></a>\n <thy-divider *ngIf=\"item.key === 'split'\" class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\"></thy-divider>\n </ng-container>\n </thy-actions>\n</ng-template>\n","import { Editor, Element } from 'slate';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { ImagePluginOptions, PluginKeys } from '../../interfaces';\nimport { ElementKinds } from '../../constants';\nimport { CustomElementKinds } from '../../custom-types';\nimport { TheImageComponent } from './image.component';\nimport { ImageEditor } from './image.editor';\nimport { PluginMenuIcons, PluginMenuSvgs, ThePluginMenuItemType } from '../../constants/plugin-menu';\n\nexport const withImage = <T extends Editor>(editor: T): T => {\n const { insertData, isVoid, renderElement, isBlockCard } = editor;\n\n editor.isVoid = (element: Element) => {\n return element.type === ElementKinds.image || isVoid(element);\n };\n\n editor.insertData = (data: DataTransfer) => {\n if (data.files.length) {\n const imageFiles: File[] = [];\n const imageTypes = getPluginOptions<ImagePluginOptions>(editor, PluginKeys.image)?.imageTypes;\n for (const file of data.files as FileList) {\n if (imageTypes.includes(file.type)) {\n imageFiles.push(file);\n }\n }\n if (imageFiles.length) {\n return ImageEditor.insertImages(editor, imageFiles);\n }\n }\n insertData(data);\n };\n\n editor.renderElement = (element: Element) => {\n if (element.type === ElementKinds.image) {\n return TheImageComponent;\n }\n return renderElement(element);\n };\n\n editor.isBlockCard = (element: Element) => {\n if (element && element.type === ElementKinds.image) {\n return true;\n }\n return isBlockCard(element);\n };\n\n return editor;\n};\n\nexport const createImagePlugin = createPluginFactory<ImagePluginOptions>({\n key: PluginKeys.image,\n withOverrides: withImage,\n toolbarItems: [\n {\n key: ElementKinds.image,\n icon: 'image',\n name: '图片',\n execute: editor => ImageEditor.openUpload(editor),\n active: editor => ImageEditor.isImageActive(editor)\n }\n ],\n menuItems: [\n {\n key: ElementKinds.image,\n keywords: 'tp,tupian,image,photo,picture,图片',\n execute: editor => ImageEditor.openUpload(editor),\n active: editor => ImageEditor.isImageActive(editor),\n name: '图片',\n menuIcon: PluginMenuIcons.image,\n description: '支持 jpg、jpeg 等格式图像',\n type: ThePluginMenuItemType.group,\n displayKey: '/tp'\n }\n ],\n options: {\n allowParentTypes: [ElementKinds.listItem, ElementKinds.tableCell, ElementKinds.blockquote],\n imageTypes: ['image/png', 'image/jpeg', 'image/gif', 'image/bmp']\n }\n});\n","import { isKeyHotkey } from 'is-hotkey';\nimport { Range, Editor, Element, CustomTypes } from 'slate';\nimport { hotkeys } from 'slate-angular';\nimport { CustomElementKinds } from '../../custom-types';\nimport { TAB_SPACE } from '../../constants/default';\nimport { IndentEditor } from './indent.editor';\nimport { TableEditor } from '../table/table.editor';\nimport { Indents } from '../../constants';\n\nexport const onKeydownTextIndent = (\n editor: Editor,\n event: KeyboardEvent,\n kinds: CustomElementKinds[],\n textIndentDisabled: CustomElementKinds[]\n) => {\n const { selection } = editor;\n const isExpanded = Range.isExpanded(selection);\n const nodes = Array.from(\n Editor.nodes<Element>(editor, {\n mode: 'highest',\n match: node => Element.isElement(node) && kinds.includes(node.type)\n })\n );\n const [startBlock] = nodes;\n if (!startBlock) {\n return false;\n }\n\n const [block, path] = startBlock;\n const isStart = Editor.isStart(editor, selection.anchor, path);\n\n if (isKeyHotkey('Tab', event)) {\n event.preventDefault();\n\n if (TableEditor.handleIndent(editor, Indents.indentRight)) {\n return true;\n }\n\n if (startBlock && (isExpanded || isStart)) {\n if (!editor.isVoid(block)) {\n let { textIndent, type } = block;\n // do not apply first-line indentation for lists\n if (!textIndent && !textIndentDisabled.includes(type)) {\n IndentEditor.setTextIndent(editor, kinds, 2);\n return true;\n } else {\n IndentEditor.setIndent(editor);\n return true;\n }\n }\n } else {\n editor.insertText(TAB_SPACE);\n return true;\n }\n }\n if (isKeyHotkey('shift+Tab', event)) {\n if (startBlock && (isExpanded || isStart)) {\n if (!editor.isVoid(block)) {\n return IndentEditor.cancelTextIntent(editor, event, block, kinds);\n }\n }\n }\n if (selection && Range.isCollapsed(selection) && hotkeys.isDeleteBackward(event)) {\n if (startBlock && isStart) {\n return IndentEditor.cancelTextIntent(editor, event, block, kinds);\n }\n }\n return false;\n};\n","import { Editor } from 'slate';\nimport { DISABLED_OPERATE_TYPES, DropdownMode, ElementKinds, HEADING_TYPES, Indents } from '../../constants';\nimport { CustomElementKinds } from '../../custom-types';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { PluginKeys, ToolbarItemType } from '../../interfaces';\nimport { onKeydownTextIndent } from './on-keydown-indent';\nimport { IndentEditor } from './indent.editor';\n\nexport interface IndentPluginOptions {\n maxIndent?: number;\n allowedTypes?: CustomElementKinds[];\n disableIndentTypes?: CustomElementKinds[];\n}\n\nexport const withIndent = <T extends Editor>(editor: T): T => {\n const { onKeydown } = editor;\n\n const allowedTypes = getPluginOptions<IndentPluginOptions>(editor, PluginKeys.indent)?.allowedTypes ?? [];\n\n editor.onKeydown = (event: KeyboardEvent) => {\n const disableIndentTypes = getPluginOptions<IndentPluginOptions>(editor, PluginKeys.indent)?.disableIndentTypes ?? [];\n const isContinue = !onKeydownTextIndent(editor, event, allowedTypes, disableIndentTypes);\n if (isContinue) {\n onKeydown(event);\n }\n };\n\n return editor;\n};\n\nexport const createIndentPlugin = createPluginFactory<IndentPluginOptions>({\n key: PluginKeys.indent,\n withOverrides: withIndent,\n toolbarItems: [\n {\n key: ElementKinds.indent,\n includes: [Indents.indentRight, Indents.indentLeft],\n type: ToolbarItemType.dropdown,\n icon: 'float-left',\n dropdownMode: DropdownMode.icon,\n dropdownItemKey: Indents.indentRight,\n dropdownFixedIcon: true\n },\n {\n key: Indents.indentRight,\n name: '增加缩进',\n icon: 'float-left',\n shortcutKey: 'Tab',\n execute: editor => IndentEditor.setIndent(editor)\n },\n {\n key: Indents.indentLeft,\n name: '减少缩进',\n icon: 'float-right',\n shortcutKey: 'Shift+Tab',\n execute: editor => IndentEditor.cancelIndent(editor)\n }\n ],\n options: {\n maxIndent: 11,\n allowedTypes: [\n ElementKinds.checkItem,\n ElementKinds.numberedList,\n ElementKinds.bulletedList,\n ElementKinds.paragraph,\n ...HEADING_TYPES\n ],\n disableIndentTypes: [ElementKinds.bulletedList, ElementKinds.numberedList, ElementKinds.checkItem],\n disabledOperateTypes: [ElementKinds.image, ...DISABLED_OPERATE_TYPES]\n }\n});\n","import { Component } from '@angular/core';\nimport { Editor } from 'slate';\nimport { InlineCodeElement } from '../../custom-types';\nimport { TheBaseElementComponent } from '../../interfaces';\n\n@Component({\n selector: 'span[theInlineCode]',\n template: `<span contenteditable=\"false\" class=\"the-break-char\">{{ inlineChromiumBugfix }}</span>\n <span><slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children></span>\n <span contenteditable=\"false\" class=\"the-break-char\">{{ inlineChromiumBugfix }}</span>`\n})\nexport class TheInlineCodeComponent extends TheBaseElementComponent<InlineCodeElement, Editor> {\n // Put this at the start and end of an inline component to work around this Chromium bug:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1249405\n inlineChromiumBugfix = String.fromCodePoint(160);\n}\n","import { TheEditor } from '../../interfaces';\nimport { Node, NodeEntry, Transforms, Element } from 'slate';\nimport { castArray } from '../../utils/cast-array';\n\n/**\n * Remove nodes with empty text.\n */\nexport const withRemoveEmptyNodes =\n (options: { type: string | string[] }) =>\n <T extends TheEditor>(editor: T) => {\n const types = castArray(options.type);\n\n const { normalizeNode } = editor;\n\n editor.normalizeNode = ([node, path]: NodeEntry<Element>) => {\n if (node.type && types.includes(node.type as string) && Node.string(node) === '') {\n Transforms.removeNodes(editor, { at: path });\n return;\n }\n\n normalizeNode([node, path]);\n };\n\n return editor;\n };\n","import { Editor, Transforms } from 'slate';\nimport { DISABLED_OPERATE_TYPES, ElementKinds, HEADING_TYPES, ZERO_WIDTH_CHAR } from '../../constants';\nimport { InlineCodeElement } from '../../custom-types';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport { CONTROL_KEY } from '../../utils';\nimport { TheInlineCodeComponent } from './inline-code.component';\nimport { InlineCodeEditor } from './inline-code.editor';\nimport { withRemoveEmptyNodes } from '../normalizers/remove-empty-nodes';\n\nexport const withInlineCode = <T extends Editor>(editor: T): T => {\n const { isInline, renderElement, insertText } = editor;\n\n editor.isInline = (element: InlineCodeElement) => {\n return element.type === ElementKinds.inlineCode ? true : isInline(element);\n };\n\n editor.renderElement = (element: InlineCodeElement) => {\n if (element.type === ElementKinds.inlineCode) {\n return TheInlineCodeComponent;\n }\n return renderElement(element);\n };\n\n editor.insertText = text => {\n if (text && InlineCodeEditor.isInlineCodeActive(editor)) {\n let selection = editor.selection;\n const currentNodeText = Editor.string(editor, editor.selection.anchor.path);\n insertText(text);\n if (currentNodeText == ZERO_WIDTH_CHAR) {\n const inlineCodePath = Editor.path(editor, editor.selection);\n let range = {\n anchor: Editor.before(editor, selection.anchor),\n focus: selection.anchor\n };\n if (Editor.isStart(editor, selection.anchor, inlineCodePath)) {\n range = {\n anchor: editor.selection.anchor,\n focus: Editor.after(editor, editor.selection)\n };\n }\n Transforms.delete(editor, {\n at: range\n });\n }\n } else {\n insertText(text);\n }\n };\n\n editor = withRemoveEmptyNodes({ type: ElementKinds.inlineCode })(editor);\n return editor;\n};\n\nexport const createInlineCodePlugin = createPluginFactory({\n key: PluginKeys.inlineCode,\n withOverrides: withInlineCode,\n toolbarItems: [\n {\n key: ElementKinds.inlineCode,\n icon: 'code',\n name: '行内代码',\n shortcutKey: `${CONTROL_KEY}+E`,\n execute: editor => InlineCodeEditor.toggleInlineCode(editor),\n active: editor => InlineCodeEditor.isInlineCodeActive(editor)\n }\n ],\n options: {\n disabledOperateTypes: [ElementKinds.image, ...DISABLED_OPERATE_TYPES]\n }\n});\n","import { Component, OnInit, Input } from '@angular/core';\nimport { A_TAG_REL_ATTR } from '../../../constants/default';\n\n@Component({\n selector: 'the-link-hover',\n templateUrl: './link-hover.component.html'\n})\nexport class TheLinkHoverComponent implements OnInit {\n @Input() link = '';\n\n @Input() dom: HTMLElement;\n\n @Input() editHandle: () => void;\n\n @Input() deleteHandle: () => void;\n\n aTagRelAttr = A_TAG_REL_ATTR;\n\n constructor() {}\n\n ngOnInit() {}\n\n editLink(event: MouseEvent) {\n event.preventDefault();\n this.editHandle();\n event.stopPropagation();\n }\n\n removeLink(event: MouseEvent) {\n event.preventDefault();\n this.deleteHandle();\n event.stopPropagation();\n }\n}\n","<div class=\"link-hover-card px-1\">\n <a readonly href=\"{{ link }}\" target=\"_blank\" rel=\"{{ aTagRelAttr }}\" class=\"hover-control-plaintext text-truncate mx-2\">\n {{ link }}\n </a>\n <thy-divider class=\"mx-2\" [thyVertical]=\"true\"></thy-divider>\n <a href=\"javascript:;\" thyAction thyActionIcon=\"edit\" thePreventDefault (click)=\"editLink($event)\"></a>\n <thy-divider class=\"mx-2\" [thyVertical]=\"true\"></thy-divider>\n <a href=\"javascript:;\" thyAction thyActionIcon=\"unlink-insert\" thePreventDefault (click)=\"removeLink($event)\"></a>\n</div>\n","import { Component, OnInit, Input, HostBinding, HostListener } from '@angular/core';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Transforms, Range, Node, Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport * as TheQueries from '../../../queries';\nimport { TheEditor } from '../../../interfaces';\nimport { LinkCloseTypes, LinkTags } from '../link.types';\nimport isUrl from 'is-url';\n\n@Component({\n selector: 'the-link-edit',\n templateUrl: './link-edit.component.html'\n})\nexport class TheLinkEditComponent implements OnInit {\n @HostBinding('class') className = 'the-link-edit-container';\n\n @Input() tag: LinkTags;\n\n @Input() node: Node;\n\n @Input() link = '';\n\n @Input() text = '';\n\n @Input() originSelection: Range;\n\n editor: Editor;\n\n originLink: string;\n\n originText: string;\n\n validatorConfig = {\n validationMessages: {\n link: {\n required: '链接不能为空',\n pattern: '请输入正确的链接'\n },\n text: {\n required: '文本不能为空'\n }\n }\n };\n\n @HostListener('document: mousedown', ['$event'])\n handleDocumentMouseDown(event: MouseEvent) {\n if (!document.querySelector('.the-link-edit-container').contains(event.target as HTMLElement)) {\n this.thyPopoverRef.close();\n }\n }\n\n constructor(public thyPopoverRef: ThyPopoverRef<any>) {}\n\n ngOnInit() {\n this.originText = this.text;\n this.originLink = this.link;\n this.thyPopoverRef.beforeClosed().subscribe(type => {\n switch (true) {\n case type === LinkCloseTypes.apply:\n break;\n case this.tag === LinkTags.insert:\n AngularEditor.focus(this.editor);\n Transforms.select(this.editor, this.originSelection);\n this.editor.undo();\n break;\n case this.tag === LinkTags.edit:\n AngularEditor.focus(this.editor);\n Transforms.select(this.editor, this.originSelection);\n break;\n }\n });\n }\n\n closePopover(type?: string) {\n this.thyPopoverRef.close(type);\n }\n\n applyLink(form) {\n const link = this.link.trim();\n if (isUrl(link)) {\n const linkPath = TheQueries.findPath(this.editor, this.node);\n if (this.originLink !== link) {\n Transforms.setNodes(this.editor, { url: link }, { at: linkPath });\n }\n if (this.originText !== this.text) {\n const [start, end] = Editor.edges(this.editor, linkPath);\n Transforms.insertText(this.editor, this.text, { at: { anchor: end, focus: end } });\n Transforms.delete(this.editor, { at: { anchor: start, focus: end } });\n }\n TheEditor.focus(this.editor);\n Transforms.select(this.editor, Editor.after(this.editor, linkPath));\n this.closePopover(LinkCloseTypes.apply);\n } else {\n form.validator.setElementErrorMessage(`link`, '请输入正确的链接');\n }\n }\n}\n","<form thyForm #linkForm=\"thyForm\" [thyFormValidatorConfig]=\"validatorConfig\" name=\"linkForm\">\n <thy-form-group thyLabelText=\"文本\">\n <input thyInput placeholder=\"请输入文本\" required name=\"text\" [(ngModel)]=\"text\" thyAutofocus type=\"text\" />\n </thy-form-group>\n <thy-form-group thyLabelText=\"链接\">\n <input name=\"link\" thyInput placeholder=\"请输入链接\" required type=\"text\" #linkControl=\"ngModel\" [(ngModel)]=\"link\" />\n </thy-form-group>\n <thy-form-group-footer>\n <div class=\"btn-pair\">\n <button thyButton=\"link-secondary\" thySize=\"sm\" (click)=\"closePopover()\">取消</button>\n <button thyButton=\"primary-square\" thySize=\"sm\" (thyFormSubmit)=\"applyLink(linkForm)\">应用</button>\n </div>\n </thy-form-group-footer>\n</form>\n","import { Overlay } from '@angular/cdk/overlay';\nimport { Component, OnInit, ElementRef, OnDestroy, ChangeDetectorRef, ViewContainerRef, HostListener, NgZone } from '@angular/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor, Element, Node as SlateNode, Transforms, Text } from 'slate';\nimport { ElementKinds } from '../../constants';\nimport { LinkElement } from '../../custom-types';\nimport { TheBaseElementComponent } from '../../interfaces';\nimport { LinkCloseTypes, LinkTags } from './link.types';\nimport { TheLinkHoverComponent } from './hover/link-hover.component';\nimport { TheLinkEditComponent } from './edit/link-edit.component';\nimport { SlateElementContext } from 'slate-angular';\n\n@Component({\n selector: '[TheBaseLinkComponent]',\n template: ''\n})\nexport class TheBaseLinkComponent extends TheBaseElementComponent<LinkElement, Editor> implements OnInit, OnDestroy {\n thyPopoverHoverRef: ThyPopoverRef<any>;\n thyPopoverEditRef: ThyPopoverRef<any>;\n\n get linkHoverOpened(): boolean {\n return this.thyPopoverHoverRef && this.thyPopoverHoverRef.componentInstance;\n }\n\n get linkEditOpened(): boolean {\n return this.thyPopoverEditRef && this.thyPopoverEditRef.componentInstance;\n }\n\n constructor(\n public elementRef: ElementRef,\n public cdr: ChangeDetectorRef,\n private thyPopover: ThyPopover,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef\n ) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n }\n\n closeHoverPopover() {\n if (this.linkHoverOpened) {\n this.thyPopoverHoverRef.close();\n }\n }\n\n beforeContextChange = (value: SlateElementContext) => {\n if (this.thyPopoverEditRef && this.thyPopoverEditRef.componentInstance) {\n let { originText } = this.thyPopoverEditRef.componentInstance;\n if (originText && originText !== (value.element.children[0] as Text).text) {\n this.thyPopoverEditRef.componentInstance.originText = (value.element.children[0] as Text).text;\n }\n }\n };\n\n @HostListener('click', ['$event'])\n mousedownHandle(event: MouseEvent) {\n if (!this.readonly && !this.editor.disabled) {\n this.openLinkHover();\n }\n }\n\n openLinkEdit(tag: LinkTags) {\n if (this.linkHoverOpened) {\n this.thyPopoverHoverRef.afterClosed().subscribe(() => {\n this.internalOpenLinkEdit(tag);\n });\n this.thyPopover.close();\n } else {\n this.internalOpenLinkEdit(tag);\n }\n }\n\n isLinkEditOpenedByDom(dom: HTMLElement) {\n return this.linkEditOpened && this.thyPopoverEditRef.componentInstance.dom === dom;\n }\n\n closeEditPopover(type?: string) {\n if (this.linkEditOpened) {\n this.thyPopoverEditRef.close(type);\n }\n }\n\n openLinkHover() {\n const dom = this.nativeElement;\n const url = this.element.url;\n\n if (this.linkHoverOpened) {\n return;\n }\n this.thyPopoverHoverRef = this.thyPopover.open(TheLinkHoverComponent, {\n initialState: {\n link: url,\n dom: dom,\n editHandle: () => {\n this.openLinkEdit(LinkTags.edit);\n },\n deleteHandle: () => {\n Transforms.unwrapNodes(this.editor, { match: n => Element.isElement(n) && n.type === ElementKinds.link });\n this.closeHoverPopover();\n }\n },\n origin: dom,\n placement: 'bottomLeft',\n offset: 4,\n minWidth: 0,\n hasBackdrop: false,\n outsideClosable: true,\n viewContainerRef: this.viewContainerRef,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n panelClass: 'the-link-over'\n });\n }\n\n private internalOpenLinkEdit(tag: LinkTags) {\n const link = this.element.url;\n SlateNode.get(this.editor, this.editor.selection.focus.path);\n this.thyPopoverEditRef = this.thyPopover.open(TheLinkEditComponent, {\n initialState: {\n tag,\n editor: this.editor,\n node: this.element,\n text: SlateNode.string(this.element),\n link,\n originSelection: this.editor.selection\n },\n minWidth: 0,\n origin: this.elementRef.nativeElement,\n backdropClosable: true,\n placement: 'bottomLeft',\n offset: 4,\n hasBackdrop: false,\n originActiveClass: null,\n viewContainerRef: this.viewContainerRef,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n panelClass: 'the-link-edit'\n });\n this.cdr.markForCheck();\n }\n\n close(type?: string) {\n this.closeHoverPopover();\n this.closeEditPopover(type);\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n this.close(LinkCloseTypes.destroy);\n }\n}\n\n@Component({\n selector: 'a[theLink]',\n template: ` <span contenteditable=\"false\" class=\"the-break-char\">{{ inlineChromiumBugfix }}</span>\n <span><slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children></span>\n <span contenteditable=\"false\" class=\"the-break-char\">{{ inlineChromiumBugfix }}</span>`,\n host: {\n '[attr.href]': 'element.url',\n target: '_blank'\n }\n})\nexport class TheLinkComponent extends TheBaseLinkComponent {\n // Put this at the start and end of an inline component to work around this Chromium bug:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1249405\n inlineChromiumBugfix = String.fromCodePoint(160);\n}\n","import isUrl from 'is-url';\nimport { Transforms } from 'slate';\nimport { Editor, Element } from 'slate';\nimport { createPluginFactory } from '../../core';\nimport { ElementKinds, CLIPBOARD_FORMAT_KEY, DISABLED_OPERATE_TYPES, ThePluginMenuItemType, PluginMenuIcons } from '../../constants';\nimport { PluginKeys } from '../../interfaces';\nimport { withRemoveEmptyNodes } from '../normalizers/remove-empty-nodes';\nimport { LinkEditor } from './link.editor';\nimport { TheLinkComponent } from './link.component';\n\nexport const withLink = <T extends Editor>(editor: T): T => {\n const { insertData, insertText, isInline, renderElement } = editor;\n\n editor.isInline = (element: Element) => {\n return element.type === ElementKinds.link ? true : isInline(element);\n };\n\n editor.insertText = text => {\n if (text && isUrl(text)) {\n LinkEditor.wrapLink(editor, text, text);\n Transforms.move(editor, { distance: 1, unit: 'offset' });\n } else {\n insertText(text);\n }\n };\n\n editor.insertData = data => {\n const text = data.getData('text/plain');\n const fragment = data.getData(`application/${CLIPBOARD_FORMAT_KEY}`);\n\n if (text && isUrl(text) && !fragment) {\n LinkEditor.wrapLink(editor, text, text);\n Transforms.move(editor, { distance: 1, unit: 'offset' });\n } else {\n insertData(data);\n }\n };\n\n editor.renderElement = (element: Element) => {\n if (element.type === ElementKinds.link) {\n return TheLinkComponent;\n }\n return renderElement(element);\n };\n\n editor = withRemoveEmptyNodes({ type: ElementKinds.link })(editor);\n\n return editor;\n};\n\nexport const createLinkPlugin = createPluginFactory({\n key: PluginKeys.link,\n withOverrides: withLink,\n toolbarItems: [\n {\n key: ElementKinds.link,\n icon: 'link-insert',\n name: '链接',\n execute: editor => LinkEditor.insertLink(editor),\n active: editor => LinkEditor.isLinkActive(editor)\n }\n ],\n menuItems: [\n {\n key: ElementKinds.link,\n keywords: 'lj,lianjie,link,链接',\n description: '支持插入链接',\n execute: editor => LinkEditor.insertLink(editor),\n active: editor => LinkEditor.isLinkActive(editor),\n type: ThePluginMenuItemType.icon,\n name: '链接',\n displayKey: '/lj',\n icon: 'link-insert',\n menuIcon: PluginMenuIcons.link\n }\n ],\n options: {\n disabledOperateTypes: [ElementKinds.image, ...DISABLED_OPERATE_TYPES]\n }\n});\n","import { Element } from 'slate';\nimport { LIST_BLOCK_TYPES } from '../../../constants/node-types';\n\nexport const isList = (n: Element) => {\n return [...LIST_BLOCK_TYPES].includes(n.type);\n};\n","import { Editor, Path, Point, Range } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { ElementKinds } from '../../../constants';\n\nexport const isInList = (editor: Editor, at: Path | Range | Point | null = editor.selection) => {\n return TheQueries.isNodeTypeIn(editor, [ElementKinds.numberedList, ElementKinds.bulletedList], { at });\n};\n","import { Editor, Path, Element } from 'slate';\nimport { ElementKinds } from '../../../constants';\n\n/**\n * Is the list nested, i.e. its parent is a list item.\n */\nexport const isListNested = (editor: Editor, listPath: Path, options?: any) => {\n const [listParentNode] = Editor.parent(editor, listPath);\n return (listParentNode as Element).type === ElementKinds.listItem;\n};\n","import { ElementKinds } from '../../../constants';\n\nexport const getListTypes = () => {\n return [ElementKinds.bulletedList, ElementKinds.numberedList];\n};\n","import { Element } from 'slate';\nimport { ElementKinds } from '../../../constants';\nimport { getListTypes } from './get-list-types';\n\n/**\n * 获取 List 中 ListItems,过滤掉空列表嵌套\n * @param node\n * @param initialValue\n * @returns\n */\nexport const getStartListItem = (node: Element[], initialValue?: Element[]) => {\n if (!initialValue) {\n initialValue = [];\n }\n if (node) {\n return node.reduce((result: Element[], current: Element) => {\n if (current.type === ElementKinds.listItem && !getListTypes().includes(current.children[0].type)) {\n result.push(current);\n } else {\n if (current.children) {\n getStartListItem(current.children as Element[], result);\n }\n }\n return result;\n }, initialValue);\n }\n};\n","import { Ancestor, Element, Node } from 'slate';\nimport { ElementKinds } from '../../../constants';\nimport { match } from '../../../utils/match';\nimport { getListTypes } from './get-list-types';\n\n/**\n *\n */\nexport const hasListInListItem = (listItemNode: Ancestor | Element) => {\n const sublist = (listItemNode.children as Node[]).find(n => match(n, { type: getListTypes() })) as Element | undefined;\n return listItemNode.children.length > 1 && sublist;\n};\n\n/**\n * p + ul/ol structure\n * @param listItemNode\n */\nexport const hasStableListInListItem = (listItemNode: Ancestor | Element) => {\n const sublist = (listItemNode.children as Node[]).find(n => match(n, { type: getListTypes() })) as Element | undefined;\n return listItemNode.children.length === 2 && sublist;\n};\n\n/**\n * li + p structure\n * @param listItemNode\n */\nexport const hasStableListItem = (listItemNode: Ancestor | Element) => {\n const type = (listItemNode.children[0] as Element).type;\n return listItemNode.children.length === 1 && type === ElementKinds.paragraph;\n};\n","import { Node, Element } from 'slate';\nimport { hasListInListItem } from './has-list-in-list-item';\nimport { isNodeTypeList } from './is-node-type-list';\n\n/**\n * list 中 是否是单个listItem,且listItem没有子列表\n */\nexport const isSingleListItem = (list: Node) => {\n return isNodeTypeList(list) && (list.children as Node[]).length === 1 && !hasListInListItem(list.children[0] as Element);\n};\n","import { Editor, Location, Element } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { ElementKinds } from '../../../constants';\nimport { ListItemElement } from '../../../custom-types';\nimport { isList } from './is-list';\n\n/**\n * 如果at(默认= selection)位于ul> li> p中,则返回li和ul节点条目。\n */\nexport const getListItemEntry = (editor: Editor, { at = editor.selection }: { at?: Location | null } = {}) => {\n if (at && TheQueries.isNodeTypeIn(editor, ElementKinds.listItem, { at })) {\n const selectionParent = TheQueries.getParent(editor, at);\n if (!selectionParent) return;\n const [, paragraphPath] = selectionParent;\n\n const listItem = TheQueries.getAboveByType(editor, ElementKinds.listItem, { at }) || TheQueries.getParent(editor, paragraphPath);\n\n if (!listItem) return;\n const [listItemNode, listItemPath] = listItem;\n\n if ((listItemNode as ListItemElement).type !== ElementKinds.listItem) return;\n\n const list = TheQueries.getParent(editor, listItemPath);\n if (!list || !isList(list[0] as Element)) return;\n\n return {\n list,\n listItem\n };\n }\n};\n","import { Editor } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { ElementKinds } from '../../../constants';\n\n/**\n * Is the selection focus at the start of its parent block.\n */\nexport const isSelectionAtListItemStart = (editor: Editor) => {\n const listItemEntry = TheQueries.getAboveByType(editor, [ElementKinds.listItem]);\n if (listItemEntry) {\n return TheQueries.isStart(editor, editor.selection.focus, listItemEntry[1]);\n }\n return false;\n};\n","import { NodeEntry, Ancestor, Node, Path, Transforms, Editor, Element } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { hasListInListItem } from '../queries/has-list-in-list-item';\nimport { getListItemEntry } from '../queries/get-list-item-entry';\n\nexport interface InsertListDataOptions {\n /**\n * 要粘贴的list数据\n */\n fromList: Element;\n\n /**\n * 粘贴list数据至此\n */\n toListItemEntry: NodeEntry<Ancestor>;\n}\n\nexport const insertListData = (editor: Editor, { fromList, toListItemEntry }: InsertListDataOptions) => {\n const { children } = fromList;\n const [toListItem, toListItemPath] = toListItemEntry;\n const nextListItemPath = Path.next(toListItemPath);\n const toListItemIsEmptyParagraph = TheQueries.isEmptyParagraph(editor, editor.selection.anchor);\n const hasSubList = hasListInListItem(toListItem as Element);\n\n let selectPath = [...toListItemPath];\n const liIndex = selectPath.pop();\n selectPath = [...selectPath, liIndex + children.length];\n\n Editor.withoutNormalizing(editor, () => {\n if (toListItemIsEmptyParagraph && hasSubList) {\n Transforms.insertNodes(editor, children, { at: nextListItemPath });\n } else {\n const insertListItemPath = toListItemIsEmptyParagraph ? toListItemPath : nextListItemPath;\n // 如果粘贴目标listItem为空,则先删除listItem\n if (toListItemIsEmptyParagraph) {\n Transforms.removeNodes(editor, { at: insertListItemPath });\n selectPath = Path.previous(selectPath);\n }\n Transforms.insertNodes(editor, children, { at: insertListItemPath });\n }\n\n /**\n * 粘贴目标lisItem有子列表\n */\n if (hasSubList) {\n const paragraphPath = toListItemPath.concat([0]);\n const nextSubListPath = Path.next(paragraphPath);\n\n // 判断粘贴数据是否是多级\n if (hasListInListItem(fromList.children[0] as Element)) {\n // 设置粘贴后正确选区\n Transforms.select(editor, Editor.end(editor, nextListItemPath));\n\n // 获取当前选区所在listItem entry\n const currentListItemEntry = getListItemEntry(editor, {});\n // 获取粘贴目标listItem中的子列表\n const { children: subListChildren } = Node.get(editor, nextSubListPath) as Element;\n\n /**\n * 复制子列表数据\n * 之所以是复制,而不是移动,因为无法单纯一次性移动子列表的所有listItem(不包含subList本身)到目标位置,\n * 需要循环移动才可以\n **/\n Transforms.insertNodes(editor, subListChildren as Node[], {\n at: Path.next(currentListItemEntry.listItem[1])\n });\n // 删除已被复制后无用的listItem/listItem subList\n Transforms.delete(editor, {\n at: toListItemIsEmptyParagraph ? toListItemPath : nextSubListPath\n });\n return;\n }\n\n Transforms.select(editor, Editor.end(editor, selectPath));\n\n // 粘贴数据不是多级\n const currentListItemEntry = getListItemEntry(editor, {});\n Transforms.moveNodes(editor, {\n at: nextSubListPath,\n to: currentListItemEntry.listItem[1].concat(1)\n });\n\n if (toListItemIsEmptyParagraph) {\n Transforms.delete(editor, { at: toListItemPath });\n }\n return;\n }\n });\n\n // 粘贴目标listItem没有子列表, 设置选区\n Transforms.select(editor, Editor.end(editor, selectPath));\n return;\n};\n","import { Ancestor, Editor, NodeEntry, Path, Transforms, Element } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport { ElementKinds } from '../../../constants';\nimport { ListItemElement } from '../../../custom-types';\n\nexport interface MoveListItemUpOptions {\n list: NodeEntry<Ancestor>;\n listItem: NodeEntry<Ancestor>;\n}\n\n/**\n * 将列表项移到其父项旁边。\n * 父项应为列表项。\n */\nexport const moveListItemUp = (editor: Editor, { list, listItem }: MoveListItemUpOptions, options?: any) => {\n const [listNode, listPath] = list;\n const [, listItemPath] = listItem;\n\n const listParentEntry = TheQueries.getParent(editor, listPath);\n if (!listParentEntry) return;\n const [listParentNode, listParentPath] = listParentEntry;\n\n if ((listParentNode as Element).type !== ElementKinds.listItem) {\n return;\n }\n\n Editor.withoutNormalizing(editor, () => {\n const newListItemPath = Path.next(listParentPath);\n\n // 将 item 上移一层\n Transforms.moveNodes(editor, {\n at: listItemPath,\n to: newListItemPath\n });\n\n /**\n * 将下一个兄弟节点移动到新列表\n */\n const listItemIdx = listItemPath[listItemPath.length - 1];\n const siblingPath = [...listItemPath];\n const newListPath = newListItemPath.concat(1);\n let siblingFound = false;\n let newSiblingIdx = 0;\n\n listNode.children.forEach((n, idx) => {\n if (listItemIdx < idx) {\n if (!siblingFound) {\n siblingFound = true;\n\n Transforms.insertNodes(\n editor,\n {\n type: (listNode as ListItemElement).type,\n children: []\n },\n { at: newListPath }\n );\n }\n\n siblingPath[siblingPath.length - 1] = listItemIdx;\n const newSiblingsPath = newListPath.concat(newSiblingIdx);\n newSiblingIdx++;\n Transforms.moveNodes(editor, {\n at: siblingPath,\n to: newSiblingsPath\n });\n }\n });\n\n // 处理listItem下方有段落的情况\n const listIndex = listParentNode.children.findIndex(item => item.key === (listNode as Element).key);\n const behindNode = listParentNode.children.slice(listIndex + 1);\n if (behindNode.length > 0) {\n const nextPath = Path.next(newListItemPath);\n Transforms.insertNodes(\n editor,\n {\n type: ElementKinds.listItem,\n children: []\n },\n { at: nextPath }\n );\n const moveStartPath = TheQueries.findPath(editor, behindNode[0]);\n const moveEndPath = TheQueries.findPath(editor, behindNode[behindNode.length - 1]);\n const moveRange = Editor.range(editor, moveStartPath, moveEndPath);\n Transforms.moveNodes(editor, {\n at: moveRange,\n to: nextPath.concat(0),\n match: node => behindNode.includes(node as any)\n });\n }\n\n // 删除子列表(如果它是第一个列表项)\n if (!listItemIdx) {\n Transforms.removeNodes(editor, {\n at: listPath\n });\n }\n });\n return true;\n};\n","import { Editor, Path, Range, Transforms, Element } from 'slate';\nimport { TheEditor } from '../../../interfaces';\nimport { ElementKinds } from '../../../constants';\nimport * as TheQueries from '../../../queries';\n\n/**\n * Insert list item if selection in li>p.\n */\nexport const insertListItem = (editor: Editor) => {\n if (editor.selection && !TheQueries.isRangeAtRoot(editor.selection)) {\n const paragraphEntry = TheQueries.getAboveByType(editor, ElementKinds.paragraph);\n if (!paragraphEntry) {\n return;\n }\n const [, paragraphPath] = paragraphEntry;\n\n const [listItemNode, listItemPath] = Editor.parent(editor, paragraphPath);\n if (Element.isElement(listItemNode) && listItemNode.type !== ElementKinds.listItem) {\n return;\n }\n\n if (!Range.isCollapsed(editor.selection)) {\n Transforms.delete(editor);\n }\n\n const isEnd = TheQueries.isBlockTextEmptyAfterSelection(editor);\n const nextNodePath = Path.next(paragraphPath);\n const nextListItemPath = Path.next(listItemPath);\n const nextEnd = Editor.end(editor, listItemPath);\n\n /**\n * If not end, split nodes, wrap a list item on the new paragraph and move it to the next list item\n */\n if (!isEnd) {\n Editor.withoutNormalizing(editor, () => {\n Transforms.splitNodes(editor, { at: editor.selection, always: true });\n Transforms.wrapNodes(\n editor,\n {\n type: ElementKinds.listItem,\n children: []\n },\n { at: nextNodePath }\n );\n Transforms.moveNodes(editor, {\n at: nextNodePath,\n to: nextListItemPath\n });\n });\n } else {\n /**\n * If end, split nodes\n */\n Editor.withoutNormalizing(editor, () => {\n Transforms.splitNodes(editor, {\n always: true,\n mode: 'highest',\n match: node => {\n const path = node && TheEditor.findPath(editor, node);\n return path && path.length === nextListItemPath.length;\n }\n });\n });\n }\n\n /**\n * If there is a list in the list item, move it to the next list item\n */\n if (TheQueries.getNode(editor, nextNodePath)) {\n Transforms.moveNodes(editor, {\n at: Editor.range(editor, nextNodePath, nextEnd),\n to: nextListItemPath.concat(1),\n match: node => {\n // TODO: types\n return listItemNode.children.includes(node as any);\n }\n });\n }\n\n return true;\n }\n};\n","import { Editor } from 'slate';\nimport * as TheTransforms from '../../../transforms';\nimport { ElementKinds } from '../../../constants/node-types';\n\nexport const unwrapList = (editor: Editor) => {\n Editor.withoutNormalizing(editor, () => {\n TheTransforms.unwrapNodesByType(editor, ElementKinds.listItem);\n TheTransforms.unwrapNodesByType(editor, [ElementKinds.bulletedList, ElementKinds.numberedList], { split: true });\n });\n};\n","import { Ancestor, NodeEntry } from 'slate';\nimport { hasListInListItem } from './has-list-in-list-item';\n\n/**\n * 获取 listItem 内的列表(如果存在).\n * 它采用以下结构:ul> li > span + ul\n */\nexport const getListItemSublist = (listItem: NodeEntry<Ancestor>, options?: any): NodeEntry<Ancestor> | undefined => {\n const [listItemNode, listItemPath] = listItem;\n\n if (hasListInListItem(listItemNode)) {\n return [listItemNode.children[1] as Ancestor, listItemPath.concat([1])];\n }\n};\n","import { Ancestor, Editor, NodeEntry, Path, Transforms, Element } from 'slate';\nimport { moveChildren } from '../../../transforms/move-children';\nimport { getListItemSublist } from '../queries/get-list-item-sublist';\nimport * as TheQueries from '../../../queries';\n\nexport interface MoveListItemSublistItemsToListItemSublistOptions {\n /**\n * The list item to merge.\n */\n fromListItem: NodeEntry<Ancestor>;\n\n /**\n * The list item where to merge.\n */\n toListItem: NodeEntry<Ancestor>;\n\n /**\n * Move to the start of the list instead of the end.\n */\n start?: boolean;\n}\n\n/**\n * Move fromListItem sublist list items to the end of `toListItem` sublist.\n * If there is no `toListItem` sublist, insert one.\n */\nexport const moveListItemSublistItemsToListItemSublist = (\n editor: Editor,\n { fromListItem, toListItem, start }: MoveListItemSublistItemsToListItemSublistOptions,\n options?: any\n) => {\n const [, fromListItemPath] = fromListItem;\n const [toListItemNode, toListItemPath] = toListItem;\n\n const fromListItemSublist = getListItemSublist(fromListItem, options);\n if (!fromListItemSublist) return 0;\n const [, fromListItemSublistPath] = fromListItemSublist;\n\n const toListItemSublist = getListItemSublist(toListItem, options);\n\n let to: Path;\n\n if (!toListItemSublist) {\n const fromList = TheQueries.getParent(editor, fromListItemPath);\n if (!fromList) return 0;\n const [fromListNode] = fromList;\n\n const fromListType = (fromListNode as Element).type;\n const toListItemSublistPath = toListItemPath.concat([toListItemNode.children.length]);\n Transforms.insertNodes(editor, { type: fromListType, children: [] } as Element, { at: toListItemSublistPath });\n\n to = toListItemSublistPath.concat([0]);\n } else if (start) {\n const [, toListItemSublistPath] = toListItemSublist;\n to = toListItemSublistPath.concat([0]);\n } else {\n to = Path.next(TheQueries.getLastChildPath(toListItemSublist));\n }\n\n const moved = moveChildren(editor, {\n at: Path.previous(fromListItemSublistPath),\n to\n });\n\n // Remove the empty list\n Transforms.delete(editor, { at: fromListItemPath });\n\n return moved;\n};\n","import { Editor, Node, NodeEntry, Path, Element } from 'slate';\nimport { ListItemElement } from '../../../custom-types';\nimport { ElementKinds } from '../../../constants';\nimport { insertParagraph } from '../../../transforms/insert-paragraph';\n\nexport const normalizeListItem = (editor: Editor, { nodeEntry }: { nodeEntry: NodeEntry<ListItemElement> }) => {\n const [listItemNode, listItemPath] = nodeEntry;\n const firstChildPath: Path = listItemPath.concat([0]);\n const firstChild = (listItemNode.children as Node[])?.[0];\n\n if (!firstChild) {\n insertParagraph(editor, firstChildPath);\n return true;\n }\n\n // Ensure that all lists have a <p> tag as a first element\n if (Element.isElement(firstChild) && (firstChild.type === ElementKinds.bulletedList || firstChild.type === ElementKinds.numberedList)) {\n insertParagraph(editor, firstChildPath);\n return true;\n }\n};\n","import { Editor, Transforms, Path, Node, NodeEntry, Element } from 'slate';\nimport * as TheQueries from '../../../queries';\nimport * as TheTransforms from '../../../transforms';\n\n// 列表续号\nexport const normalizeNo = (editor: Editor, nodeEntry: NodeEntry) => {\n const [listNode, listPath] = nodeEntry;\n let moved = false;\n Editor.withoutNormalizing(editor, () => {\n /**\n * 获取nextList判断是否为同类型list\n * 如果为同类型list,则把nextList children移动到当前list的尾部, 并删除nextList\n */\n const nextPath = Path.next(listPath);\n const nextNode = TheQueries.getNode(editor, nextPath) as Node;\n if (nextNode && Element.isElement(nextNode) && Element.isElement(listNode) && nextNode.type === listNode.type) {\n TheTransforms.moveChildren(editor, {\n at: [nextNode, nextPath],\n to: listPath.concat((listNode.children as Node[]).length)\n });\n Transforms.removeNodes(editor, { at: nextPath });\n moved = true;\n }\n\n if (listPath[listPath.length - 1] !== 0) {\n /**\n * 获取prevList判断是否为同类型list\n * 如果为同类型list,则把当前list children移动到prevList的尾部, 并删除当前List\n */\n const currentListNode = TheQueries.getNode(editor, listPath);\n const prevPath = Path.previous(listPath);\n const prevNode = TheQueries.getNode(editor, prevPath) as Node;\n if (prevNode && Element.isElement(prevNode) && Element.isElement(currentListNode) && prevNode.type === currentListNode.type) {\n TheTransforms.moveChildren(editor, {\n at: [currentListNode, listPath],\n to: prevPath.concat((prevNode.children as Node[]).length)\n });\n Transforms.removeNodes(editor, { at: listPath });\n moved = true;\n }\n }\n });\n return moved;\n};\n","import { Descendant, Editor, NodeEntry, Transforms, Element } from 'slate';\nimport { ElementKinds } from '../../../constants';\nimport { match } from '../../../utils/match';\nimport { getListTypes } from '../queries/get-list-types';\nimport { normalizeListItem } from './normalize-list-item';\nimport { ListNormalizerOptions } from '../types';\nimport { normalizeNo } from './normalize-no';\nimport { isList } from '../queries/is-list';\nimport { TheHistoryEditor } from '../../common/history.plugin';\n\n/**\n * Normalize list node to force the ul>li>p+ul structure.\n */\nexport const getListNormalizer = (editor: Editor, { validLiChildrenTypes }: ListNormalizerOptions) => {\n const { normalizeNode } = editor;\n\n return ([node, path]: NodeEntry) => {\n // 不是选区, 执行续号检测操作\n if (isList(node as Element) && !TheHistoryEditor.isUndoing(editor)) {\n const moved = normalizeNo(editor, [node, path]);\n if (moved) {\n return;\n }\n }\n\n if (match(node, { type: getListTypes() })) {\n if (Element.isElement(node) && !(node.children as Descendant[]).length) {\n return Transforms.removeNodes(editor, { at: path });\n }\n }\n\n // normalize list item\n // 1. list-item at least one child\n // 2. list-item first child is not list\n if (Element.isElement(node) && node.type === ElementKinds.listItem) {\n if (normalizeListItem(editor, { nodeEntry: [node, path] })) {\n // Tree changed - kick off another normalization\n return;\n }\n }\n\n normalizeNode([node, path]);\n };\n};\n","import { Ancestor, Editor, NodeEntry, Path, Transforms } from 'slate';\nimport { getListTypes } from '../queries/get-list-types';\nimport { moveChildren } from '../../../transforms/move-children';\nimport * as TheQueries from '../../../queries';\n\nexport interface MergeListItemIntoListOptions {\n /**\n * 该节点的子列表的列表项将被移动。\n */\n fromListItem: NodeEntry<Ancestor>;\n\n /**\n * 列表项将被移动到该列表中。\n */\n toList: NodeEntry<Ancestor>;\n\n /**\n * 具体位置\n */\n location?: number;\n}\n\n/**\n * 将 fromListItem 子列表的列表项移到 toList\n */\nexport const moveListItemSublistItemsToList = (editor: Editor, { fromListItem, toList, location }: MergeListItemIntoListOptions) => {\n const fromListItemSublist = TheQueries.findDescendant(editor, {\n at: fromListItem[1],\n match: {\n type: getListTypes()\n }\n });\n if (!fromListItemSublist) return 0;\n\n const [, fromListItemSublistPath] = fromListItemSublist;\n const lastChildPath = TheQueries.getLastChildPath(toList);\n let moved: number;\n Editor.withoutNormalizing(editor, () => {\n moved = moveChildren(editor, {\n at: fromListItemSublistPath,\n to: location ? toList[1].concat(location) : Path.next(lastChildPath)\n });\n\n // 删除空白列表\n Transforms.delete(editor, { at: fromListItemSublistPath });\n });\n\n return moved;\n};\n","import { Ancestor, Editor, NodeEntry, Path, Transforms, Element, Node } from 'slate';\nimport { getListItemEntry } from '../queries/get-list-item-entry';\nimport { hasListInListItem } from '../queries/has-list-in-list-item';\nimport { moveListItemSublistItemsToList } from './move-list-item-sublist-items-to-list';\nimport { isNodeTypeList } from '../queries/is-node-type-list';\n\nexport interface MoveListItemDownOptions {\n list: NodeEntry<Ancestor>;\n listItem: NodeEntry<Ancestor>;\n}\n\nexport const moveListItemDown = (editor: Editor, { list, listItem }: MoveListItemDownOptions) => {\n const [listNode] = list;\n const [, listItemPath] = listItem;\n\n Editor.withoutNormalizing(editor, () => {\n // 以前的兄弟是新父级\n const previousSiblingItem = Editor.node(editor, Path.previous(listItemPath)) as NodeEntry<Ancestor>;\n\n if (previousSiblingItem) {\n const [previousNode, previousPath] = previousSiblingItem;\n const lastChildIndexOfPreviousNode = previousNode.children.length - 1;\n const lastChildOfPreviousNode = previousNode.children[lastChildIndexOfPreviousNode] as Element;\n\n const newPath = previousPath.concat(\n isNodeTypeList(lastChildOfPreviousNode)\n ? [lastChildIndexOfPreviousNode, lastChildOfPreviousNode.children.length]\n : [previousNode.children.length]\n );\n\n if (!isNodeTypeList(lastChildOfPreviousNode)) {\n // 创建新子列表\n const type = (listNode as Element).type;\n Transforms.wrapNodes(editor, { type, children: [] } as Element, {\n at: listItemPath\n });\n }\n // 将当前listItem移动到子列表\n Transforms.moveNodes(editor, {\n at: listItemPath,\n to: newPath\n });\n\n const currentListItemEntry = getListItemEntry(editor, {});\n if (hasListInListItem(currentListItemEntry.listItem[0])) {\n moveListItemSublistItemsToList(editor, {\n fromListItem: currentListItemEntry.listItem,\n toList: currentListItemEntry.list\n });\n }\n }\n });\n};\n","import { Editor } from 'slate';\nimport { moveListItemUp } from './transforms/move-list-item-up';\nimport { moveListItemDown } from './transforms/move-list-item-down';\nimport { getListItemEntry } from './queries/get-list-item-entry';\nimport * as TheQueries from '../../queries';\n\nexport function onKeyDownList(e: KeyboardEvent, editor: Editor) {\n let moved: boolean | undefined = false;\n if (e.key === 'Tab') {\n const res = getListItemEntry(editor, {});\n if (!res) {\n return false;\n }\n const { list, listItem } = res;\n const [, listItemPath] = listItem;\n\n e.preventDefault();\n\n // move up with shift+tab\n const shiftTab = e.shiftKey;\n if (shiftTab) {\n moved = moveListItemUp(editor, { list, listItem });\n if (moved) {\n e.preventDefault();\n return true;\n }\n }\n\n // move down with tab\n const tab = !e.shiftKey;\n if (tab && !TheQueries.isFirstChild(listItemPath)) {\n moveListItemDown(editor, { list, listItem });\n return true;\n }\n return false;\n }\n}\n","import { Component, OnInit, ElementRef, OnDestroy, ChangeDetectorRef, HostBinding } from '@angular/core';\nimport { Editor } from 'slate';\nimport { NumberedListElement } from '../../../custom-types';\nimport { TheBaseElementComponent } from '../../../interfaces';\n\n@Component({\n selector: 'ol[theOl]',\n template: `<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>`\n})\nexport class TheNumberedListComponent extends TheBaseElementComponent<NumberedListElement, Editor> implements OnInit, OnDestroy {\n @HostBinding('attr.start')\n get start() {\n return this.element.start;\n }\n\n @HostBinding('attr.the-level')\n get level() {\n return this.element?.indent || null;\n }\n\n constructor(public elementRef: ElementRef, public cdr: ChangeDetectorRef) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","import { Component, OnInit, ElementRef, OnDestroy, ChangeDetectorRef, HostBinding } from '@angular/core';\nimport { Editor } from 'slate';\nimport { BulletedListElement } from '../../../custom-types';\nimport { TheBaseElementComponent } from '../../../interfaces';\n\n@Component({\n selector: 'ul[theUl]',\n template: `<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>`\n})\nexport class TheBulletedListComponent extends TheBaseElementComponent<BulletedListElement, Editor> implements OnInit, OnDestroy {\n @HostBinding('attr.the-level')\n get level() {\n return this.element?.indent || null;\n }\n\n constructor(public elementRef: ElementRef, public cdr: ChangeDetectorRef) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","import { Component, OnInit, ElementRef, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { Editor, Element, Node, Text } from 'slate';\nimport { FontSizes, MarkTypes } from '../../../constants/node-types';\nimport { TheBaseElementComponent } from '../../../interfaces';\nimport * as TheQueries from '../../../queries';\n\n@Component({\n selector: 'li[theLi]',\n template: `<slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>`\n})\nexport class TheListItemComponent extends TheBaseElementComponent<Element, Editor> implements OnInit, OnDestroy {\n fontSizeClass: string;\n\n constructor(public elementRef: ElementRef, public cdr: ChangeDetectorRef) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n }\n\n onContextChange() {\n super.onContextChange();\n this.addFontSize();\n this.addMultiDigit();\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n }\n\n addFontSize() {\n let firstText: Text;\n for (const entry of Node.descendants(this.element)) {\n const node = entry[0];\n if (Text.isText(node) && !firstText) {\n firstText = node;\n break;\n }\n }\n if (!firstText) {\n return;\n }\n\n const { text, ...rest } = firstText;\n const size = rest[MarkTypes.fontSize];\n\n if (size) {\n const sizeClass = `font-size-${size}`;\n const isContains = this.elementRef.nativeElement?.classList?.contains(sizeClass);\n if (isContains) {\n return;\n }\n this.clearFontSize();\n this.elementRef.nativeElement.classList.add(sizeClass);\n this.fontSizeClass = sizeClass;\n } else {\n this.clearFontSize();\n }\n }\n\n clearFontSize() {\n if (this.fontSizeClass) {\n this.elementRef.nativeElement.classList.remove(this.fontSizeClass);\n this.fontSizeClass = null;\n }\n }\n\n getStart() {\n const parent = this.elementRef.nativeElement.closest('.slate-element-numbered-list');\n const start = parent?.getAttribute('start') || 1;\n return Number(start);\n }\n\n getLiIndex() {\n const path = TheQueries.findPath(this.editor, this.element);\n const index = path[path.length - 1];\n return index || 0;\n }\n\n addMultiDigit() {\n const start = this.getStart();\n const index = this.getLiIndex();\n const multiDigit = 'data-multi-digit';\n\n // start number + index\n // when it is greater than 9, it is a multi-digit serial number\n // exclude Font size >= 20\n if (start + index > 9) {\n this.elementRef.nativeElement.setAttribute(multiDigit, true);\n } else {\n this.elementRef.nativeElement.removeAttribute(multiDigit);\n }\n }\n}\n","import { Editor, Range, Path } from 'slate';\nimport { getAboveByType } from '../../../queries/get-above-by-type';\nimport { ElementKinds } from '../../../constants/node-types';\n\n/**\n * Is the selection in same li\n */\nexport const isSelectionInSameListItem = (editor: Editor) => {\n const { selection } = editor;\n\n if (!selection) {\n return false;\n }\n\n const [start, end] = Range.edges(selection);\n const startListItemEntry = getAboveByType(editor, ElementKinds.listItem, { at: start.path });\n const endListItemEntry = getAboveByType(editor, ElementKinds.listItem, { at: end.path });\n\n return startListItemEntry && endListItemEntry && Path.equals(startListItemEntry[1], endListItemEntry[1]);\n};\n","import { Transforms, Node, Editor, Path, Ancestor, Element } from 'slate';\nimport { AngularEditor, getPlainText } from 'slate-angular';\nimport { CLIPBOARD_FORMAT_KEY, ElementKinds, PluginMenuIcons, ThePluginMenuItemType } from '../../constants';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\nimport { isList } from './queries/is-list';\nimport { isInList } from './queries/is-in-list';\nimport { isListNested } from './queries/is-list-nested';\nimport { getListTypes } from './queries/get-list-types';\nimport { getStartListItem } from './queries/get-start-list-item';\nimport { isSingleListItem } from './queries/is-single-list-item';\nimport { getListItemEntry } from './queries/get-list-item-entry';\nimport { hasListInListItem, hasStableListInListItem, hasStableListItem } from './queries/has-list-in-list-item';\nimport { isSelectionAtListItemStart } from './queries/is-selection-at-list-item-start';\nimport { insertListData } from './transforms/insert-list-data';\nimport { moveListItemUp } from './transforms/move-list-item-up';\nimport { insertListItem } from './transforms/insert-list-item';\nimport { unwrapList } from './transforms/unwrap-list';\nimport { moveListItemSublistItemsToListItemSublist } from './transforms/move-list-item-sublist-items-to-list-item-sublist';\nimport { getListNormalizer } from './normalizers/get-list-normalizer';\nimport { onKeyDownList } from './on-key-down-list';\nimport { WithListOptions } from './types';\nimport { TheNumberedListComponent } from './components/numbered-list.component';\nimport { TheBulletedListComponent } from './components/bulleted-list.component';\nimport { TheListItemComponent } from './components/list-item.component';\nimport { extractFragment } from '../../utils/fragment';\nimport { isSelectionInSameListItem } from './queries/is-selection-in-same-list-item';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport { ListEditor } from './list.editor';\n\nexport const withList = <T extends Editor>(editor: T): T => {\n const { insertBreak, deleteBackward, onKeydown, insertData, setFragmentData, renderElement } = editor;\n\n const validLiChildrenTypes = getPluginOptions<WithListOptions>(editor, PluginKeys.list)?.validLiChildrenTypes ?? [];\n\n const resetBlockTypesListRule = {\n types: [ElementKinds.listItem],\n defaultType: ElementKinds.paragraph,\n onReset: (_editor: Editor) => unwrapList(_editor)\n };\n\n editor.insertBreak = () => {\n const node = TheQueries.anchorBlock(editor);\n\n if (!node) {\n insertBreak();\n return;\n }\n\n const isVoid = Editor.isVoid(editor, node);\n if (isVoid) {\n insertBreak();\n return;\n }\n const listEntry = getListItemEntry(editor, {});\n if (listEntry) {\n let moved: boolean | undefined;\n const { list, listItem } = listEntry;\n const [listItemNode, listItemPath] = listItem;\n const cursor = editor.selection.focus;\n const isStart = Editor.isStart(editor, cursor, listItemPath);\n\n // deprecated\n // 如果有子级\n if (hasListInListItem(listItemNode)) {\n /**\n * If selection is at the end of li,\n * insert below li where children will be moved.\n */\n if (Editor.isEnd(editor, cursor, listItemPath)) {\n return Transforms.insertNodes(\n editor,\n {\n type: ElementKinds.listItem,\n children: [{ type: ElementKinds.paragraph, children: [{ text: '' }] }]\n },\n { at: Path.next(listItemPath), select: true }\n );\n }\n\n /**\n * 如果选区是在listItem的开头,则在listItem上方插入\n */\n if (isStart) {\n return Transforms.insertNodes(\n editor,\n {\n type: ElementKinds.listItem,\n children: [{ type: ElementKinds.paragraph, children: [{ text: '' }] }]\n },\n { at: listItemPath }\n );\n }\n }\n\n // 如果选择的listItem为空则将其向上移动\n if (isStart && TheQueries.isBlockAboveEmpty(editor)) {\n moved = moveListItemUp(editor, { list, listItem });\n if (moved) return;\n }\n\n const didReset = TheTransforms.onKeyDownResetBlockType({\n rules: [\n {\n ...resetBlockTypesListRule,\n predicate: () => !moved && isStart && TheQueries.isBlockAboveEmpty(editor)\n }\n ]\n })(null, editor);\n if (didReset) {\n return;\n }\n\n /**\n * Add a new list item if selection is in a LIST_ITEM > p.type.\n */\n if (!moved) {\n const inserted = insertListItem(editor);\n if (inserted) {\n return;\n }\n }\n }\n\n insertBreak();\n };\n\n editor.setFragmentData = unit => {\n const { selection } = editor;\n const [start] = Editor.edges(editor, selection);\n if (isInList(editor, start)) {\n const fragmentData = editor.getFragment();\n const fragmentElement = fragmentData[0] as Element;\n if (getListTypes().includes(fragmentElement.type)) {\n const startNodes = getStartListItem([fragmentElement.children[0]] as Element[]);\n const children = startNodes.concat((fragmentElement.children as Element[]).slice(1));\n let fragmentNodes = [\n {\n ...fragmentElement,\n children\n }\n ] as Node[];\n if (isSelectionInSameListItem(editor)) {\n // 仅仅复制列表中的内容\n fragmentNodes = children[0].children;\n }\n const fragment = fragmentNodes.concat(fragmentData.slice(1));\n const domRange = AngularEditor.toDOMRange(editor, selection);\n const contents = domRange.cloneContents();\n const stringObj = JSON.stringify(fragment);\n const encoded = window.btoa(encodeURIComponent(stringObj));\n unit.setData(`application/${CLIPBOARD_FORMAT_KEY}`, encoded);\n const div = document.createElement('div');\n div.appendChild(contents);\n div.setAttribute('hidden', 'true');\n document.body.appendChild(div);\n unit.setData('text/html', div.innerHTML);\n unit.setData('text/plain', getPlainText(div));\n document.body.removeChild(div);\n return;\n }\n }\n setFragmentData(unit);\n };\n\n editor.deleteBackward = unit => {\n const res = getListItemEntry(editor, {});\n\n if (res && isSelectionAtListItemStart(editor)) {\n const { list, listItem } = res;\n const [, listPath] = list;\n const [listItemNode, listItemPath] = listItem;\n\n const previousListItemPath = TheQueries.getPreviousPath(listItemPath);\n\n if (previousListItemPath) {\n const beforePoint = Editor.before(editor, listItemPath);\n const parentPath = Path.parent(beforePoint.path);\n const parentNode = Node.get(editor, parentPath);\n if (Editor.isVoid(editor, parentNode)) {\n Editor.withoutNormalizing(editor, () => {\n TheTransforms.unwrapNodesByType(editor, [ElementKinds.bulletedList, ElementKinds.numberedList], {\n split: true\n });\n TheTransforms.unwrapNodesByType(editor, ElementKinds.listItem);\n });\n return;\n }\n }\n\n if (previousListItemPath && hasStableListInListItem(listItemNode)) {\n Editor.withoutNormalizing(editor, () => {\n deleteBackward(unit);\n const [previousListItemNode] = Editor.node(editor, previousListItemPath);\n moveListItemSublistItemsToListItemSublist(\n editor,\n {\n fromListItem: listItem,\n toListItem: [previousListItemNode as Ancestor, previousListItemPath],\n start: false\n },\n {}\n );\n });\n return;\n }\n\n // move listItem children to before listItem\n if (listItemNode.children.length > 1) {\n Editor.withoutNormalizing(editor, () => {\n const beforePathRef = Editor.pathRef(editor, listItemPath);\n const beforePoint = Editor.before(editor, listItemPath);\n const startPoint = Editor.start(editor, listItemPath);\n const endPoint = Editor.end(editor, listItemPath);\n const isInFirstChild = !isListNested(editor, listPath) && TheQueries.isFirstChild(listItemPath);\n const to = isInFirstChild ? listPath : Path.next(Path.parent(beforePoint.path));\n\n Transforms.moveNodes(editor, {\n at: Editor.range(editor, startPoint, endPoint),\n to,\n match: node => listItemNode.children.includes(node as any)\n });\n Transforms.delete(editor, { at: beforePathRef.unref() });\n\n if (!isInFirstChild) {\n deleteBackward(unit);\n }\n });\n return;\n }\n\n // deprecated\n if (!isListNested(editor, listPath) && TheQueries.isFirstChild(listItemPath)) {\n unwrapList(editor);\n return;\n }\n }\n\n deleteBackward(unit);\n };\n\n editor.insertData = (data: DataTransfer) => {\n const text = data.getData('text/plain');\n const fragment = extractFragment(data);\n const aboveEntry = Editor.above(editor, {\n match: n => Editor.isBlock(editor, n) && n.type === ElementKinds.listItem\n });\n if (fragment) {\n const res = getListItemEntry(editor, {});\n if (\n fragment.length === 1 &&\n isList(fragment[0] as Element) &&\n aboveEntry &&\n !isSingleListItem(fragment[0]) &&\n hasStableListItem(res.listItem[0])\n ) {\n insertListData(editor, { fromList: fragment[0] as Element, toListItemEntry: aboveEntry });\n return;\n }\n }\n\n insertData(data);\n };\n\n editor.onKeydown = (event: KeyboardEvent) => {\n const isContinue = !onKeyDownList(event, editor);\n if (isContinue) {\n onKeydown(event);\n }\n };\n\n editor.normalizeNode = getListNormalizer(editor, { validLiChildrenTypes: validLiChildrenTypes });\n\n editor.renderElement = (element: Element) => {\n if (element.type === ElementKinds.numberedList) {\n return TheNumberedListComponent;\n }\n if (element.type === ElementKinds.bulletedList) {\n return TheBulletedListComponent;\n }\n if (element.type === ElementKinds.listItem) {\n return TheListItemComponent;\n }\n return renderElement(element);\n };\n\n return editor;\n};\n\nconst listOptions = {\n validLiChildrenTypes: [ElementKinds.image],\n allowParentTypes: [ElementKinds.listItem, ElementKinds.tableCell, ElementKinds.blockquote]\n};\n\nexport const createListPlugin = createPluginFactory<WithListOptions>({\n key: PluginKeys.list,\n withOverrides: withList,\n plugins: [\n {\n key: PluginKeys.numberedList,\n options: listOptions\n },\n {\n key: PluginKeys.bulletedList,\n options: listOptions\n }\n ],\n nestedStructureByKey: {\n [ElementKinds.bulletedList]: ElementKinds.listItem,\n [ElementKinds.numberedList]: ElementKinds.listItem\n },\n toolbarItems: [\n {\n key: ElementKinds.numberedList,\n icon: 'list-ordered',\n name: '有序列表',\n execute: editor => ListEditor.toggleList(editor, ElementKinds.numberedList),\n active: editor => ListEditor.isActive(editor, ElementKinds.numberedList)\n },\n {\n key: ElementKinds.bulletedList,\n icon: 'list-bullet',\n name: '无序列表',\n execute: editor => ListEditor.toggleList(editor, ElementKinds.bulletedList),\n active: editor => ListEditor.isActive(editor, ElementKinds.bulletedList)\n }\n ],\n menuItems: [\n {\n key: ElementKinds.numberedList,\n keywords: 'yxlb,youxuliebiao,numbered list,numberedlist,有序列表',\n execute: editor => ListEditor.toggleList(editor, ElementKinds.numberedList),\n active: editor => ListEditor.isActive(editor, ElementKinds.numberedList),\n type: ThePluginMenuItemType.icon,\n name: '有序列表',\n description: '插入有序列表',\n displayKey: '/yxlb',\n icon: 'list-ordered',\n menuIcon: PluginMenuIcons.numberedList\n },\n {\n key: ElementKinds.bulletedList,\n keywords: 'wxlb,wuxuliebiao,bulletedlist,bulleted list,无序列表',\n execute: editor => ListEditor.toggleList(editor, ElementKinds.bulletedList),\n active: editor => ListEditor.isActive(editor, ElementKinds.bulletedList),\n type: ThePluginMenuItemType.icon,\n name: '无序列表',\n description: '插入无序列表',\n displayKey: '/wxlb',\n icon: 'list-bullet',\n menuIcon: PluginMenuIcons.bulletedList\n }\n ],\n options: listOptions\n});\n","import { Editor, Range, Text, Transforms } from 'slate';\nimport { DISABLED_OPERATE_TYPES, ElementKinds, MarkTypes } from '../../constants';\nimport { PluginKeys } from '../../interfaces';\nimport { createPluginFactory } from '../../core';\nimport { CONTROL_KEY } from '../../utils';\nimport { MarkEditor } from './mark.editor';\n\nexport const withMark = <T extends Editor & MarkEditor>(editor: T): T => {\n const e = editor;\n\n e.removeMark = (key: string, shouldChange = true) => {\n const { selection } = e;\n if (selection) {\n if (Range.isExpanded(selection)) {\n Transforms.unsetNodes(e, key, {\n match: Text.isText,\n split: true\n });\n } else {\n const marks = { ...(Editor.marks(e) || {}) };\n delete marks[key];\n editor.marks = marks;\n const text = Editor.string(e, selection.anchor.path);\n if (text !== '') {\n Editor.setNormalizing(editor, false);\n e.insertText('');\n editor.marks = marks;\n Editor.setNormalizing(editor, true);\n } else {\n Transforms.unsetNodes(e, key, { at: selection.anchor.path });\n }\n if (shouldChange) {\n editor.onChange();\n }\n }\n }\n };\n\n e.addMark = (key: string, value: any) => {\n const { selection } = editor;\n\n if (selection) {\n if (Range.isExpanded(selection)) {\n Transforms.setNodes(e, { [key]: value }, { match: Text.isText, split: true });\n } else {\n const marks = {\n ...(Editor.marks(e) || {}),\n [key]: value\n };\n editor.marks = marks;\n const text = Editor.string(e, selection.anchor.path);\n if (text !== '') {\n Editor.setNormalizing(editor, false);\n e.insertText('');\n editor.marks = marks;\n Editor.setNormalizing(editor, true);\n } else {\n Transforms.setNodes(e, { [key]: value }, { at: selection.anchor.path });\n }\n }\n }\n };\n\n return e;\n};\n\nexport const createMarkPlugin = createPluginFactory({\n key: PluginKeys.mark,\n withOverrides: withMark,\n toolbarItems: [\n {\n key: MarkTypes.bold,\n icon: 'bold',\n name: '加粗',\n shortcutKey: `${CONTROL_KEY}+B`,\n execute: editor => MarkEditor.toggleMark(editor, MarkTypes.bold),\n active: editor => MarkEditor.isMarkActive(editor, MarkTypes.bold)\n },\n {\n key: MarkTypes.italic,\n icon: 'italic',\n name: '斜体',\n shortcutKey: `${CONTROL_KEY}+I`,\n execute: editor => MarkEditor.toggleMark(editor, MarkTypes.italic),\n active: editor => MarkEditor.isMarkActive(editor, MarkTypes.italic)\n },\n {\n key: MarkTypes.strike,\n icon: 'strike',\n name: '删除线',\n execute: editor => MarkEditor.toggleMark(editor, MarkTypes.strike),\n active: editor => MarkEditor.isMarkActive(editor, MarkTypes.strike)\n },\n {\n key: MarkTypes.underline,\n icon: 'underline',\n name: '下划线',\n shortcutKey: `${CONTROL_KEY}+U`,\n execute: editor => MarkEditor.toggleMark(editor, MarkTypes.underline),\n active: editor => MarkEditor.isMarkActive(editor, MarkTypes.underline)\n }\n ],\n options: {\n disabledOperateTypes: [ElementKinds.image, ...DISABLED_OPERATE_TYPES]\n }\n});\n","import { NodeEntry, Element, Node, Editor, Operation, Descendant } from 'slate';\nimport { PluginKeys, QueryOptions } from '../../interfaces';\nimport { cloneDeep } from '../../utils/lodash';\nimport { deleteElementKey } from '../../utils/fragment';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { ELEMENT_UNIQUE_ID } from '../../constants';\nimport { idCreator } from '../../utils';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\n\nexport interface WithNodeIDProps extends QueryOptions {\n // Key used for the id. Default is `id`.\n idKey?: string;\n // ID factory, e.g. `uuid`\n idCreator?: () => void;\n // Filter `Text` nodes.\n filterText?: boolean;\n}\n\nexport const withNodeID = <T extends Editor>(e: T): T => {\n const editor = e as T & { removedIDs: Set<any> };\n\n let props: WithNodeIDProps = { idKey: 'id', idCreator: () => Date.now(), filterText: true, filter: () => true };\n const options = getPluginOptions<WithNodeIDProps>(editor, PluginKeys.nodeID);\n props = { ...props, ...options };\n const { idKey, idCreator, filterText, filter } = props;\n\n const { apply, getFragment } = editor;\n\n const idPropsCreator = () => ({ [idKey]: idCreator() });\n\n editor.removedIDs = new Set();\n\n editor.apply = (operation: Operation) => {\n if (operation.type === 'insert_node') {\n const newFilter = (entry: NodeEntry<Node>) => {\n const [_node] = entry;\n return filter(entry) && filterText ? Element.isElement(_node) : TheQueries.isDescendant(_node);\n };\n\n // fix can not find path by orign node\n let node = operation.node;\n if (!Object.isExtensible(node)) {\n node = cloneDeep(node);\n }\n\n // it will not overwrite ids once it's set as it's read-only\n TheTransforms.mergeDeepToNodes({\n node,\n source: idPropsCreator,\n query: {\n filter: newFilter\n }\n });\n\n return apply({\n ...operation,\n node\n });\n }\n\n if (operation.type === 'split_node' && (!filterText || (operation.properties as Element).type)) {\n let id = operation.properties[idKey];\n if (editor.removedIDs.has(id)) {\n editor.removedIDs.delete(id);\n } else {\n id = idCreator();\n }\n\n return apply({\n ...operation,\n properties: {\n ...operation.properties,\n [idKey]: id\n }\n });\n }\n\n if (operation.type === 'merge_node' && (!filterText || (operation.properties as Element).type)) {\n editor.removedIDs.add((operation.properties as Element)[idKey]);\n }\n\n return apply(operation);\n };\n\n editor.getFragment = () => {\n const fragment = cloneDeep(getFragment());\n return deleteElementKey(fragment, idKey) as Descendant[];\n };\n\n return editor;\n};\n\nexport const createNodeIDPlugin = createPluginFactory<WithNodeIDProps>({\n key: PluginKeys.nodeID,\n withOverrides: withNodeID,\n options: {\n idKey: ELEMENT_UNIQUE_ID,\n idCreator\n }\n});\n","import { Transforms, Element, Text, Editor } from 'slate';\nimport { PluginKeys } from '../../interfaces';\nimport { CustomElementKinds } from '../../custom-types';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { createEmptyParagraph } from '../../utils/create-empty-paragraph';\nimport { TransformEditor } from '../common/transforms.plugin';\nimport * as TheQueries from '../../queries';\n\nexport interface InsertParagraphNodesOptions {\n types: CustomElementKinds[];\n}\n\nexport const withInsertParagraphNodes = <T extends Editor & TransformEditor>(editor: T): T => {\n const { normalizeNode } = editor;\n const types = getPluginOptions<InsertParagraphNodesOptions>(editor, PluginKeys.insertParagraphNodes)?.types ?? [];\n\n editor.normalizeNode = ([currentNode, currentPath]) => {\n if (Text.isText(currentNode) && currentPath.length) {\n const [node] = Editor.parent(editor, currentPath);\n const containerBlocks = [...types, ...TheQueries.getContainerBlocks(editor)];\n if (Element.isElement(node) && containerBlocks.includes(node.type)) {\n const paragraph = createEmptyParagraph();\n (paragraph.children[0] as Text).text = currentNode.text;\n Transforms.insertNodes(editor, paragraph, { at: currentPath });\n return;\n }\n }\n return normalizeNode([currentNode, currentPath]);\n };\n\n return editor;\n};\n\nexport const createInsertParagraphNodesPlugin = createPluginFactory<InsertParagraphNodesOptions>({\n key: PluginKeys.insertParagraphNodes,\n withOverrides: withInsertParagraphNodes\n});\n","import { Editor, Path, Element, Node } from 'slate';\nimport { PluginKeys, QueryOptions } from '../../interfaces';\nimport { ElementKinds } from '../../constants';\nimport { TransformEditor } from '../common/transforms.plugin';\nimport { CustomElementKinds } from '../../custom-types';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport * as TheQueries from '../../queries';\n\nexport interface WithTrailingNode extends QueryOptions {\n type?: CustomElementKinds;\n level?: number;\n}\n\nexport const withTrailingNode = <T extends Editor & TransformEditor>(editor: T) => {\n const { normalizeNode } = editor;\n\n const options = getPluginOptions<WithTrailingNode>(editor, PluginKeys.trailingNode);\n const { type, level, ...query } = options;\n\n editor.normalizeNode = ([currentNode, currentPath]) => {\n if (!currentPath.length) {\n const entry = TheQueries.getLastNode(editor, level);\n const [lastNode, lastPath] = entry;\n\n if (Element.isElement(lastNode) && lastNode.type !== type && TheQueries.isNodeType(entry, query)) {\n editor.insertNodes(\n {\n type,\n children: [{ text: '' }]\n } as Node,\n { at: Path.next(lastPath) }\n );\n }\n }\n\n return normalizeNode([currentNode, currentPath]);\n };\n\n return editor;\n};\n\nexport const createTrailingNodePlugin = createPluginFactory({\n key: PluginKeys.trailingNode,\n withOverrides: withTrailingNode,\n options: {\n type: ElementKinds.paragraph,\n level: 0\n }\n});\n","import { take, skip, filter } from 'rxjs/operators';\nimport { Editor, Range } from 'slate';\nimport { HistoryEditor } from 'slate-history';\nimport { EDITOR_TO_ELEMENT } from 'slate-angular';\nimport { PluginKeys, TheEditor } from '../../interfaces';\nimport { TheContextService } from '../../services/context.service';\nimport { MarkProps, MarkTypes, ToolbarActionTypes } from '../../constants';\nimport { createPluginFactory } from '../../core';\nimport { CONTROL_KEY } from '../../utils';\nimport { TableEditor } from '../table/table.editor';\nimport * as TheQueries from '../../queries';\nimport * as TheTransforms from '../../transforms';\n\nexport const PaintFormatEditor = {\n formatBrush(editor: TheEditor) {\n const contextService = editor.injector.get(TheContextService);\n const obj = {};\n for (const key of MarkProps) {\n const k = contextService.paintFormatStatus.marks[key];\n obj[key] = k || null;\n }\n const block = TheQueries.anchorBlock(editor);\n if (block && Range.isCollapsed(editor.selection)) {\n // TODO:: 在撤销时有bug, 临时使用withoutSaving处理\n HistoryEditor.withoutSaving(editor, () => {\n const path = TheEditor.findPath(editor, block);\n TheTransforms.setMarks(editor, obj, path);\n });\n } else {\n TheTransforms.setMarks(editor, obj);\n }\n PaintFormatEditor.cancelFormatBrushStatus(editor);\n },\n isActive(editor: TheEditor) {\n const contextService = editor.injector.get(TheContextService);\n const res = contextService.paintFormatStatus.isActive;\n return res;\n },\n enableFormatBrush(editor: TheEditor) {\n const contextService = editor.injector.get(TheContextService);\n if (contextService.paintFormatStatus.isActive) {\n return PaintFormatEditor.cancelFormatBrushStatus(editor);\n }\n contextService.paintFormatStatus = {\n isActive: true,\n marks: TheQueries.getSelectionMarks(editor)\n };\n const element = EDITOR_TO_ELEMENT.get(editor);\n element.classList.add('pointer-paint');\n contextService.onMouseUp$\n .pipe(\n filter(event => element.contains(event.target as Element)),\n take(1)\n )\n .subscribe((event: MouseEvent) => {\n if (contextService.paintFormatStatus.isActive) {\n PaintFormatEditor.formatBrush(editor);\n }\n });\n editor.onChange();\n },\n cancelFormatBrushStatus(editor: TheEditor) {\n const contextService = editor.injector.get(TheContextService);\n contextService.paintFormatStatus = {\n isActive: false,\n marks: {}\n };\n const element = EDITOR_TO_ELEMENT.get(editor);\n element.classList.remove('pointer-paint');\n editor.onChange();\n }\n};\n\nexport const createPaintFormatPlugin = createPluginFactory({\n key: PluginKeys.paintFormat,\n toolbarItems: [\n {\n key: ToolbarActionTypes.undo,\n icon: 'undo',\n name: '撤销',\n shortcutKey: `${CONTROL_KEY}+Z`,\n execute: (editor: TheEditor) => editor.undo()\n },\n {\n key: ToolbarActionTypes.redo,\n icon: 'redo',\n name: '重做',\n shortcutKey: `${CONTROL_KEY}+Shift+Z`,\n execute: (editor: TheEditor) => editor.redo()\n },\n {\n key: ToolbarActionTypes.paintformat,\n icon: 'paintformat',\n name: '格式刷',\n execute: PaintFormatEditor.enableFormatBrush,\n active: PaintFormatEditor.isActive\n },\n {\n key: ToolbarActionTypes.clean,\n icon: 'clean',\n name: '清除格式',\n execute: (editor: TheEditor) => {\n const { selection } = editor;\n if (!selection) {\n return;\n }\n\n if (TableEditor.clearMark(editor)) {\n return;\n }\n\n if (Range.isCollapsed(selection)) {\n const marks = Editor.marks(editor);\n for (const key of Object.keys(marks)) {\n Editor.removeMark(editor, key);\n }\n } else {\n const unsetMarks: { [key in MarkTypes]?: null | string } = {};\n MarkProps.forEach(key => {\n unsetMarks[key] = null;\n });\n TheTransforms.setMarks(editor, unsetMarks);\n }\n }\n }\n ]\n});\n","import { Editor, Node, Range } from 'slate';\nimport { ElementKinds } from '../../constants';\nimport { isPureEmptyParagraph } from '../../utils';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport { QuickInsertEditor } from './quick-insert.editor';\nimport { getBlockAbove } from '../../queries/get-block-above';\nimport { CustomElementKinds } from '../../custom-types';\nimport { hotkeys } from 'slate-angular';\n\nexport interface QuickInsertPluginOptions {\n hotkey?: string;\n disabledPlus?: boolean;\n allowHotkeyInTypes?: CustomElementKinds[];\n}\n\nexport const withQuickInsert = <T extends Editor>(editor: T): T => {\n const { onKeydown, onChange, insertText, insertBreak, deleteBackward } = editor;\n let openMenuFromHotkey = false;\n\n editor.onKeydown = (event: KeyboardEvent) => {\n const isOpenMenu = QuickInsertEditor.isOpenedMenu(editor);\n const isMoveUp = hotkeys.isMoveUp(event);\n const isMoveDown = hotkeys.isMoveDown(event);\n const isMoveForward = hotkeys.isMoveForward(event);\n const isMoveBackward = hotkeys.isMoveBackward(event);\n\n // 阻止方向键默认行为\n if (isOpenMenu && (isMoveUp || isMoveDown || isMoveForward || isMoveBackward)) {\n event.preventDefault();\n return;\n }\n\n onKeydown(event);\n };\n\n editor.insertText = (text: string) => {\n const options = getPluginOptions<QuickInsertPluginOptions>(editor, PluginKeys.quickInsert);\n const [block] = getBlockAbove(editor);\n const { hotkey, allowHotkeyInTypes } = options;\n // 基于插入内容对比,避免 keydown 判断时无法区分中文「、」和英文「/」热键\n if (text === hotkey) {\n const types = [...(allowHotkeyInTypes || [])];\n if (isPureEmptyParagraph(editor, block) && allowOpenInsertMenu(editor, types)) {\n setTimeout(() => {\n openMenuFromHotkey = true;\n QuickInsertEditor.openMenu(editor);\n }, 0);\n }\n }\n insertText(text);\n };\n\n editor.onChange = () => {\n onChange();\n\n if (editor.selection) {\n const [block] = getBlockAbove(editor);\n const isOpenMenu = QuickInsertEditor.isOpenedMenu(editor);\n if (openMenuFromHotkey && !isOpenMenu) {\n openMenuFromHotkey = false;\n }\n if (isOpenMenu) {\n if (!Range.isCollapsed(editor.selection)) {\n QuickInsertEditor.closeMenu(editor);\n return;\n }\n\n // 更新搜索\n const options = getPluginOptions<QuickInsertPluginOptions>(editor, PluginKeys.quickInsert);\n const { hotkey } = options;\n const keywords = Node.string(block);\n const filterKeywords = openMenuFromHotkey && keywords.startsWith(hotkey) ? keywords.substring(1) : keywords;\n QuickInsertEditor.updateKeywords(editor, filterKeywords);\n }\n }\n };\n\n // 拦截行为处理菜单的关闭(避免协同编辑出现异常)\n editor.deleteBackward = unit => {\n const isOpenMenu = QuickInsertEditor.isOpenedMenu(editor);\n if (isOpenMenu) {\n const [block] = getBlockAbove(editor);\n const options = getPluginOptions<QuickInsertPluginOptions>(editor, PluginKeys.quickInsert);\n const { hotkey } = options;\n if (isPureEmptyParagraph(editor, block)) {\n QuickInsertEditor.closeMenu(editor);\n } else if (openMenuFromHotkey && Node.string(block) === hotkey) {\n QuickInsertEditor.closeMenu(editor);\n }\n }\n deleteBackward(unit);\n };\n\n // 拦截行为处理菜单的关闭(避免协同编辑出现异常)\n editor.insertBreak = () => {\n const isOpenMenu = QuickInsertEditor.isOpenedMenu(editor);\n if (isOpenMenu) {\n QuickInsertEditor.closeMenu(editor);\n }\n insertBreak();\n };\n\n return editor;\n};\n\nexport const createQuickInsertPlugin = createPluginFactory<QuickInsertPluginOptions>({\n key: PluginKeys.quickInsert,\n withOverrides: withQuickInsert,\n options: {\n hotkey: '/',\n disabledPlus: true\n }\n});\n\nexport const allowOpenInsertMenu = (editor: Editor, allowTypes: ElementKinds[]) => {\n const [, path] = getBlockAbove(editor);\n const parentNode = Node.parent(editor, path);\n if (path.length === 1 || (parentNode && allowTypes.includes(parentNode.type))) {\n return true;\n }\n return false;\n};\n","import { isKeyHotkey } from 'is-hotkey';\nimport { TheEditor } from '../../interfaces';\nimport { createPluginFactory, getPluginOptions } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport { ElementKinds } from '../../constants';\nimport { TransformEditor } from '../common/transforms.plugin';\nimport { SoftBreakOnKeyDownOptions } from './soft-break.types';\nimport * as TheQueries from '../../queries';\n\nexport const withSoftBreak = <T extends TheEditor & TransformEditor>(editor: T): T => {\n const { onKeydown } = editor;\n\n const rules = getPluginOptions<SoftBreakOnKeyDownOptions>(editor, PluginKeys.softBreak)?.rules ?? [];\n\n editor.onKeydown = (event: KeyboardEvent) => {\n const entry = TheQueries.getBlockAbove(editor as any);\n\n rules.forEach(({ hotkey, query }) => {\n if (isKeyHotkey(hotkey, event) && TheQueries.isNodeType(entry, query)) {\n event.preventDefault();\n\n editor.insertText('\\n');\n }\n });\n onKeydown(event);\n };\n\n return editor;\n};\n\nexport const createSoftBreakPlugin = createPluginFactory<SoftBreakOnKeyDownOptions>({\n key: PluginKeys.softBreak,\n withOverrides: withSoftBreak,\n options: {\n rules: [\n { hotkey: 'shift+enter' },\n {\n hotkey: 'enter',\n query: {\n allow: [ElementKinds.blockquote]\n }\n }\n ]\n }\n});\n","export const SLA_TABLE_SELECTOR = '.slate-element-table';\n\nexport const SLA_TABLE_CELL_SELECTOR = '.slate-element-table-cell';\n","import {\n Component,\n OnInit,\n ElementRef,\n Input,\n ViewChild,\n TemplateRef,\n ViewContainerRef,\n OnDestroy,\n HostListener,\n HostBinding\n} from '@angular/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor } from 'slate';\nimport { DefaultToolbarItem, TheEditor } from '../../interfaces';\n\n@Component({\n selector: 'the-toolbar-group',\n templateUrl: './toolbar-group.component.html'\n})\nexport class TheToolbarGroupComponent implements OnInit, OnDestroy {\n private _item: DefaultToolbarItem;\n\n @HostBinding('class') className = 'the-toolbar-group';\n\n @Input() menus: DefaultToolbarItem[];\n\n @Input()\n set item(i: DefaultToolbarItem) {\n this._item = i;\n this.activeMenuItem = i;\n }\n get item() {\n return this._item;\n }\n\n get isOpened() {\n return this.groupPopoverRef && this.groupPopoverRef.getOverlayRef() && this.groupPopoverRef.getOverlayRef().hasAttached();\n }\n\n editor: Editor;\n\n active = false;\n\n activeMenuItem: DefaultToolbarItem;\n\n groupPopoverRef: ThyPopoverRef<any>;\n\n @ViewChild('groupTemplate', { read: TemplateRef, static: true })\n groupTemplate: TemplateRef<any>;\n\n @HostListener('mousedown', ['$event'])\n mousedownHandler(event) {\n event.preventDefault();\n this.toggleGroupMenus(event);\n }\n\n @HostListener('document:mouseup', ['$event'])\n documentMouseupHandle(event) {\n const isGroup = (event.target as HTMLElement).closest('.the-toolbar-group');\n const isGroupContainer = (event.target as HTMLElement).closest('.the-toolbar-group-container');\n if (!isGroupContainer && !isGroup && this.isOpened) {\n this.closeGroup();\n }\n }\n\n @HostListener('click', ['$event'])\n clickHandle(event) {\n event.stopPropagation();\n }\n\n constructor(public elementRef: ElementRef, private thyPopover: ThyPopover, private viewContainerRef: ViewContainerRef) {}\n\n ngOnInit() {}\n\n ngOnDestroy(): void {\n this.closeGroup();\n }\n\n toggleGroupMenus(event: MouseEvent) {\n if (this.editor?.disabled) {\n return;\n }\n if (this.isOpened) {\n this.closeGroup();\n } else {\n this.openGroup(event);\n }\n }\n\n public selectionChange(editor: Editor) {\n const activeItem = this.menusActive(editor);\n this.activeMenuItem = activeItem ? activeItem : null;\n this.activeChange();\n }\n\n menusActive(editor: Editor) {\n return this.menus.find(i => {\n if (this.editor?.selection && i?.active) {\n return i?.active(editor);\n }\n });\n }\n\n activeChange() {\n const activeItem = this.menusActive(this.editor);\n if (this.isOpened && !activeItem) {\n this.active = false;\n return;\n }\n this.active = activeItem ? true : false;\n }\n\n openGroup(event: MouseEvent) {\n this.active = true;\n this.groupPopoverRef = this.thyPopover.open(this.groupTemplate, {\n panelClass: 'the-toolbar-group-container',\n offset: 0,\n minWidth: 0,\n placement: 'bottomRight',\n origin: event.currentTarget as HTMLElement,\n viewContainerRef: this.viewContainerRef,\n hasBackdrop: false,\n outsideClosable: true,\n manualClosure: true\n });\n this.groupPopoverRef.afterClosed().subscribe(() => {\n this.activeChange();\n });\n }\n\n closeGroup() {\n if (this.isOpened) {\n this.groupPopoverRef.close();\n }\n }\n}\n","<a\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"item.icon\"\n [thyActionActive]=\"active\"\n [thyTooltip]=\"item?.name\"\n thyTooltipPlacement=\"top\"\n></a>\n\n<ng-template #groupTemplate>\n <the-toolbar class=\"group\" [editor]=\"editor\" [toolbarItems]=\"menus\" [isMore]=\"false\"></the-toolbar>\n</ng-template>\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n/** Indicates the width of a column. */\nexport interface ColumnSize {\n /** The ID/name of the column, as defined in CdkColumnDef. */\n readonly tableCell: HTMLElement;\n\n /** The width / height in pixels of the column / row. */\n readonly deltaSize?: number;\n\n /** The width / height in pixels of the column / row prior to this update, if known. */\n readonly previousSize?: number;\n}\n\n/** Interface describing column size changes. */\nexport interface ColumnSizeAction extends ColumnSize {\n /**\n * Whether the resize action should be applied instantaneously. False for events triggered during\n * a UI-triggered resize (such as with the mouse) until the mouse button is released. True\n * for all programatically triggered resizes.\n */\n readonly completeImmediately?: boolean;\n}\n\n/**\n * Originating source of column resize events within a table.\n * @docs-private\n */\n@Injectable()\nexport class ColumnResizeNotifierSource {\n /** Emits when an in-progress resize is canceled. */\n readonly resizeCanceled = new Subject<ColumnSizeAction>();\n\n /** Emits when a resize is applied. */\n readonly resizeCompleted = new Subject<ColumnSize>();\n\n readonly resizeStarted = new Subject<ColumnSize>();\n\n /** Triggers a resize action. */\n readonly triggerResize = new Subject<ColumnSizeAction>();\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { Subject, MonoTypeOperatorFunction, Observable, combineLatest } from 'rxjs';\nimport { distinctUntilChanged, share, map, startWith, skip, tap } from 'rxjs/operators';\n\nexport enum Position {\n top = 'top',\n right = 'right',\n bottom = 'bottom',\n left = 'left'\n}\nexport class HoveredCellInfo {\n cell: HTMLTableCellElement;\n position: Position;\n}\n\n@Injectable()\nexport class TableCellEventDispatcher {\n readonly tableCellHovered = new Subject<HoveredCellInfo | null>();\n\n readonly overlayHandleActiveForCell = new Subject<HoveredCellInfo | null>();\n\n constructor(private readonly ngZone: NgZone) {}\n\n readonly tableCellHoveredOrActiveDistinct = combineLatest(\n this.tableCellHovered.pipe(startWith(null), distinctUntilChanged()),\n this.overlayHandleActiveForCell.pipe(startWith(null), distinctUntilChanged())\n ).pipe(\n skip(1), // Ignore initial [null, null] emission.\n map(([hovered, active]) => active || hovered),\n distinctUntilChanged(),\n share()\n );\n\n private readonly _tableCellHoveredDistinctReenterZone = this.tableCellHoveredOrActiveDistinct.pipe(this._enterZone(), share());\n\n private _lastSeenCell: Element | null = null;\n private _lastSeenCellHover: Observable<HoveredCellInfo> | null = null;\n\n /**\n * Emits whether the specified row should show its overlay controls.\n * Emission occurs within the NgZone.\n */\n resizeOverlayVisibleForTableCell(cell: Element): Observable<HoveredCellInfo> {\n if (cell !== this._lastSeenCell) {\n this._lastSeenCell = cell;\n this._lastSeenCellHover = this._tableCellHoveredDistinctReenterZone.pipe(\n map(hoveredCell => {\n if (hoveredCell && hoveredCell.cell === cell) {\n return hoveredCell;\n } else {\n return null;\n }\n }),\n distinctUntilChanged((x, y) => x === y || (x && y && x.cell === y.cell && x.position === y.position)),\n share()\n );\n }\n\n return this._lastSeenCellHover!;\n }\n\n private _enterZone<T>(): MonoTypeOperatorFunction<T> {\n return (source: Observable<T>) =>\n new Observable<T>(observer =>\n source.subscribe({\n next: value => this.ngZone.run(() => observer.next(value)),\n error: err => observer.error(err),\n complete: () => observer.complete()\n })\n );\n }\n}\n","import { Editor, Transforms } from 'slate';\nimport { TableCellElement, TableElement } from '../../../custom-types';\nimport * as TheQueries from '../../../queries';\nimport { createTablePosition } from './create-table-position';\n\nexport function splitCell(editor: Editor) {\n const tablePosition = createTablePosition(editor);\n const { cell, table, cellEntry } = tablePosition;\n if ((!cell.rowspan && !cell.colspan) || (cell.rowspan === 1 && cell.colspan === 1)) return editor;\n const cellRow = tablePosition.getRowIndex();\n const cellCol = tablePosition.getColumnIndex();\n resetTableCell(editor, table, cell, cellRow, cellCol);\n Transforms.select(editor, cellEntry[1]);\n Transforms.collapse(editor, { edge: 'end' });\n}\n\nexport function resetTableCell(editor: Editor, table: TableElement, cell: TableCellElement, cellRow: number, cellCol: number) {\n const rowSpanIndex = cellRow + (cell.rowspan || 1) - 1;\n const colSpanIndex = cellCol + (cell.colspan || 1) - 1;\n Editor.withoutNormalizing(editor, () => {\n table.children.map((row, rowIndex) => {\n row.children.map((col, colIndex) => {\n if (rowIndex >= cellRow && rowIndex <= rowSpanIndex && colIndex >= cellCol && colIndex <= colSpanIndex) {\n const path = TheQueries.findPath(editor, col);\n Transforms.setNodes(editor, { colspan: null, rowspan: null, hidden: null }, { at: path });\n }\n });\n });\n });\n}\n","import { Transforms, Node, Path, Element, Editor } from 'slate';\nimport { TablePosition } from './table-position';\nimport { ElementKinds } from '../../../constants';\nimport { getSelectCellNode } from './get-select-cell-node';\nimport { TableCellElement } from '../../../custom-types';\nimport { CellPosition, TableOptions } from '../table.types';\nimport * as TheQueries from '../../../queries';\nimport { sortCell } from './handle-cell';\nimport { createTablePosition } from './create-table-position';\nimport { getCellPositionsFromRange } from './cell-position';\n\nexport interface SelectedCellInfo {\n col: number;\n row: number;\n node: TableCellElement;\n maxRowSpan?: number;\n}\n\nexport function isSelectedCellMerged(editor: Editor): boolean {\n if (editor && editor.selection) {\n const opts = new TableOptions();\n const { anchor } = editor.selection;\n const { cell } = TablePosition.create(opts, editor, anchor.path);\n if (cell) {\n return (cell.colspan && cell.colspan !== 1) || (cell.rowspan && cell.rowspan !== 1);\n }\n }\n return false;\n}\n\nexport function getLeftCellDict(selectCellNodes: SelectedCellInfo[]) {\n return selectCellNodes.reduce((dict, cell) => {\n if (!dict[cell.row]) {\n dict[cell.row] = cell;\n }\n return dict;\n }, {} as { [key: string]: SelectedCellInfo });\n}\n\nexport function calculateCellSpan(\n selectCellNodes: SelectedCellInfo[],\n leftCellDict: { [key: string]: SelectedCellInfo }\n): { rowspan: number; colspan: number } {\n let rowspan = 0,\n colspan = 0,\n crossCount = -1;\n selectCellNodes\n .filter(item => !item.node.hidden)\n .forEach(item => {\n const { row } = item;\n if (item.row === selectCellNodes[0].row) {\n colspan += item.node.colspan || 1;\n }\n const maxRowSpan = leftCellDict[row].maxRowSpan || 1;\n leftCellDict[row].maxRowSpan = (item.node.rowspan || 1) > maxRowSpan ? item.node.rowspan : maxRowSpan;\n });\n\n Object.values(leftCellDict).forEach((item: SelectedCellInfo) => {\n const { row, maxRowSpan } = item;\n if (crossCount < row) {\n rowspan += maxRowSpan;\n crossCount = row + maxRowSpan - 1;\n }\n });\n return { rowspan, colspan };\n}\n\nexport function mergeCell(editor: Editor, selectedCells: CellPosition[]) {\n sortCell(selectedCells);\n const selectCellNodes = getSelectCellNode(editor, selectedCells);\n Editor.withoutNormalizing(editor, () => {\n let leftTopCellPath: Path;\n const leftCellDict = getLeftCellDict(selectCellNodes);\n selectCellNodes.forEach((cell, index) => {\n const { row, node } = cell;\n if (node) {\n const cellPath = TheQueries.findPath(editor, node);\n if (index === 0) {\n leftTopCellPath = cellPath;\n } else {\n mergeCellContent(editor, leftTopCellPath, cellPath);\n Transforms.setNodes(editor, { colspan: null, rowspan: null, hidden: true }, { at: cellPath });\n }\n }\n });\n let { rowspan, colspan } = calculateCellSpan(selectCellNodes, leftCellDict);\n Transforms.setNodes(editor, { rowspan, colspan }, { at: leftTopCellPath });\n Transforms.select(editor, leftTopCellPath);\n Transforms.collapse(editor, { edge: 'end' });\n });\n}\n\nexport function mergeCellContent(editor: Editor, leftTopCellPath: Path, cellPath: Path) {\n Editor.withoutNormalizing(editor, () => {\n const { path } = Editor.end(editor, leftTopCellPath);\n const endRange = Editor.range(editor, Editor.start(editor, cellPath), Editor.end(editor, cellPath));\n let tableCell;\n\n path.pop();\n\n const nextPath = Path.next(path);\n\n Transforms.moveNodes(editor, {\n at: endRange,\n to: nextPath,\n match: node => {\n if (Element.isElement(node) && node.type === ElementKinds.tableCell) {\n tableCell = node;\n }\n if (Element.isElement(node) && node.type && tableCell && (tableCell.children as Node[]).includes(node)) {\n const isSingleEmptyParagraph =\n tableCell.children.length === 1 && Editor.isEmpty(editor, node) && node.type === ElementKinds.default;\n return !isSingleEmptyParagraph && true;\n }\n }\n });\n });\n}\n\n// 计算合并前的单元格\nexport function getCellPositionsBeforeMerge(editor: Editor, { row, col }: CellPosition): CellPosition[] {\n const pos = createTablePosition(editor);\n const { rowspan, colspan } = pos.findCellByPath({ row, col });\n if (rowspan || colspan) {\n const colSpan = colspan ?? 1;\n const rowSpan = rowspan ?? 1;\n return getCellPositionsFromRange(row, col, row + rowSpan, col + colSpan);\n }\n return [{ row, col }];\n}\n","import { Editor } from 'slate';\nimport { isSelectedCellMerged } from './merge-cell';\nimport { getSelectCellNode } from './get-select-cell-node';\nimport { isRectangularInTableCells } from './is-selection-in-table';\nimport { MenuEntity, CellPosition, TableInsertType } from '../table.types';\nimport { TableEditor } from '../table.editor';\n\nexport function setCellMenuVisibility(\n editor: Editor,\n menuList: MenuEntity[],\n tableInfo: {\n selectedCellPositions: CellPosition[];\n isFullscreen?: boolean;\n isSelectedTable?: boolean;\n selectedRowsIndex?: number[];\n selectedColumnsIndex?: number[];\n }\n) {\n const { selectedCellPositions, isFullscreen, isSelectedTable, selectedRowsIndex, selectedColumnsIndex } = tableInfo;\n const isCellMerged = isSelectedCellMerged(editor);\n const selectCellNodes = getSelectCellNode(editor, selectedCellPositions).filter(item => !item.node.hidden);\n const isRect = isRectangularInTableCells(editor, selectedCellPositions);\n menuList.forEach(item => {\n switch (item.key) {\n case 'merge-cells':\n item.visibility = selectCellNodes && selectCellNodes.length > 1 && !isSelectedTable && isRect;\n break;\n case 'split-cells':\n item.visibility = selectCellNodes && selectCellNodes.length === 1 && isCellMerged;\n break;\n case 'delete-selection-rows':\n item.visibility = !(isFullscreen && selectedColumnsIndex.length);\n break;\n case 'delete-selection-columns':\n item.visibility = !(isFullscreen && selectedRowsIndex.length);\n break;\n case 'delete-table':\n item.visibility = !isFullscreen;\n break;\n case TableInsertType.insertRowsUp:\n const hasHeaderRowCell = TableEditor.hasHeaderRowCell(editor);\n item.visibility = !hasHeaderRowCell && isRect;\n break;\n case TableInsertType.insertRowsDown:\n item.visibility = isRect;\n break;\n case TableInsertType.insertColumnsLeft:\n const hasHeaderColumnCell = TableEditor.hasHeaderColumnCell(editor);\n item.visibility = !hasHeaderColumnCell && isRect;\n break;\n case TableInsertType.insertColumnsRight:\n item.visibility = isRect;\n break;\n }\n });\n}\n","import { OnInit, Component, Input, HostBinding, HostListener, ElementRef } from '@angular/core';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { isColorPanel } from '../../utils/color-picker';\nimport { MenuEntity } from '../../plugins/table/table.types';\n\n@Component({\n selector: 'the-contextmenu',\n templateUrl: 'contextmenu.component.html'\n})\nexport class TheContextMenuComponent implements OnInit {\n @Input()\n menuEntities: MenuEntity[] = [];\n\n @Input()\n actionHandle: (entity: MenuEntity) => void;\n\n @Input()\n activeHandle: (event: MouseEvent, entity: MenuEntity) => void;\n\n @Input()\n deactivateHandle: (event: MouseEvent, entity: MenuEntity) => void;\n\n @HostBinding('class.the-overlay-menu-wrap')\n wrap = true;\n\n @HostListener('document: mousedown', ['$event'])\n handleDocumentMouseDown(event: MouseEvent) {\n if (isColorPanel(event.target as HTMLElement)) {\n return;\n }\n if (!this.elementRef.nativeElement.contains(event.target as HTMLElement) && event.button !== 2) {\n this.thyPopoverRef.close();\n }\n }\n\n @HostListener('mousedown', ['$event'])\n handleMouseDown(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n itemMousedown(event: MouseEvent, entity: MenuEntity) {\n event.preventDefault();\n this.actionHandle(entity);\n this.thyPopoverRef.close();\n }\n\n itemMouseleave(event: MouseEvent, entity: MenuEntity) {\n event.preventDefault();\n this.deactivateHandle(event, entity);\n }\n\n itemMouseenter(event: MouseEvent, entity: MenuEntity) {\n event.preventDefault();\n this.activeHandle(event, entity);\n }\n\n inputNumberFocus(e: Event) {\n (e.target as HTMLElement).focus();\n }\n\n itemEnterHandle(e: MouseEvent, entity: MenuEntity) {\n e.preventDefault();\n e.stopPropagation();\n this.actionHandle(entity);\n this.thyPopoverRef.close();\n }\n\n changeColor(color: string, item: MenuEntity) {\n item.backgroundColor = color;\n item.activeHandle(undefined, item);\n }\n\n constructor(public elementRef: ElementRef, private thyPopoverRef: ThyPopoverRef<TheContextMenuComponent>) {}\n\n ngOnInit() {}\n}\n","<div class=\"thy-dropdown-menu\">\n <ng-container *ngFor=\"let menuItem of menuEntities\">\n <ng-container *ngIf=\"menuItem.visibility && !menuItem?.isInputNumber && menuItem.key !== 'background-color'\">\n <ng-template [ngTemplateOutlet]=\"defaultMenuTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"menuItem.visibility && menuItem.key === 'background-color'\">\n <ng-template [ngTemplateOutlet]=\"backgroundColorTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"menuItem.visibility && menuItem?.isInputNumber\">\n <ng-template [ngTemplateOutlet]=\"inputNumberMenuTemplate\" [ngTemplateOutletContext]=\"{ $implicit: menuItem }\"></ng-template>\n </ng-container>\n <thy-dropdown-menu-divider *ngIf=\"menuItem.divider && menuItem.visibility\"></thy-dropdown-menu-divider>\n </ng-container>\n</div>\n\n<ng-template #defaultMenuTemplate let-item>\n <a\n href=\"javascript:;\"\n thyDropdownMenuItem\n (mousedown)=\"itemMousedown($event, item)\"\n (mouseenter)=\"itemMouseenter($event, item)\"\n (mouseleave)=\"itemMouseleave($event, item)\"\n >\n <span thyDropdownMenuItemIcon>\n <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n </span>\n <span thyDropdownMenuItemName>{{ item.name }}</span>\n <span *ngIf=\"item.extendIcon\" thyDropdownMenuItemExtendIcon>\n <thy-icon thyIconName=\"{{ item.extendIcon }}\"></thy-icon>\n </span>\n </a>\n</ng-template>\n\n<ng-template #backgroundColorTemplate let-item>\n <a\n href=\"javascript:;\"\n thyDropdownMenuItem\n thyColorPicker\n thyTrigger=\"hover\"\n thyPlacement=\"rightTop\"\n [(ngModel)]=\"item.backgroundColor\"\n (ngModelChange)=\"changeColor($event, item)\"\n [thyHasBackdrop]=\"false\"\n >\n <span thyDropdownMenuItemIcon>\n <thy-icon [thyIconName]=\"item.icon\" thyIconType=\"twotone\" [thyTwotoneColor]=\"item.backgroundColor\"></thy-icon>\n </span>\n <span thyDropdownMenuItemName>{{ item.name }}</span>\n <span *ngIf=\"item.extendIcon\" thyDropdownMenuItemExtendIcon>\n <thy-icon thyIconName=\"{{ item.extendIcon }}\"></thy-icon>\n </span>\n </a>\n</ng-template>\n\n<ng-template #inputNumberMenuTemplate let-item>\n <a href=\"javascript:;\" class=\"the-input-number-menu\" thyDropdownMenuItem (click)=\"itemMousedown($event, item)\">\n <span thyDropdownMenuItemIcon>\n <thy-icon [thyIconName]=\"item.icon\"></thy-icon>\n </span>\n <span thyDropdownMenuItemName class=\"d-flex align-items-center\">\n {{ item.name }}\n <thy-input-number\n #inputNumber\n class=\"mx-2\"\n thySize=\"sm\"\n [(ngModel)]=\"item.count\"\n [thyStep]=\"1\"\n [thyMin]=\"1\"\n (click)=\"inputNumberFocus($event)\"\n (thyEnter)=\"itemEnterHandle($event, item)\"\n thyStopPropagation\n ></thy-input-number>\n {{ item.nameSuffix }}\n </span>\n </a>\n</ng-template>\n","import { Editor } from 'slate';\nimport { createTablePosition } from './create-table-position';\n\nexport const getTableEntry = (editor: Editor) => {\n const { tableEntry } = createTablePosition(editor);\n return tableEntry;\n};\n\nexport const getTablePath = (editor: Editor) => {\n const tableEntry = getTableEntry(editor);\n return tableEntry[1];\n};\n\nexport const getTable = (editor: Editor) => {\n const { tableEntry } = createTablePosition(editor);\n return tableEntry[0];\n};\n\nexport const getSelectedCell = (editor: Editor) => {\n if (editor && editor.selection) {\n const { cell } = createTablePosition(editor);\n return cell;\n }\n return null;\n};\n","import { TableStore } from '../table.store';\nimport { TableEditor } from '../table.editor';\nimport { TheEditor } from '../../../interfaces';\nimport { TableHeaderBackgroundColor, SpecialBackgroundColor } from '../../../constants';\nimport { Editor, Point } from 'slate';\nimport { THE_EDITOR_PREVIOUS_SELECTION } from '../../../utils';\n\nexport const setSelectedCellsBackgroundColor = (editor: TheEditor, color: string, tableStore: TableStore) => {\n // 点击自定义颜色面板输入框设置颜色值时,会丢失焦点和选区(目前无法做到焦点同时存在于编辑器和输入框)\n let location: Point;\n if (!editor.selection) {\n const { rangeRef } = THE_EDITOR_PREVIOUS_SELECTION.get(editor);\n location = rangeRef.current.anchor;\n }\n\n const isHeader = TableEditor.isActiveHeader(editor, location);\n if (color === 'transparent') {\n color = null;\n }\n if ((color === TableHeaderBackgroundColor && isHeader) || (color === SpecialBackgroundColor && !isHeader)) {\n tableStore.setSelectedCellsBackgroundColor(null);\n } else {\n tableStore.setSelectedCellsBackgroundColor(color);\n }\n};\n","import { Transforms } from 'slate';\nimport { TheEditor } from '../../../interfaces';\nimport { TheTableOptions } from '../table.types';\nimport { createTablePosition } from './create-table-position';\nimport { getTablePath } from './table-entry';\n\nexport function setTableOptions(editor: TheEditor, newOptions: TheTableOptions) {\n const tablePosition = createTablePosition(editor);\n const tablePath = getTablePath(editor);\n const table = tablePosition.table;\n const options = { ...table.options, ...newOptions };\n Transforms.setNodes(editor, { options }, { at: tablePath });\n}\n","import { Transforms } from 'slate';\nimport { ELEMENT_TO_COMPONENT } from 'slate-angular';\nimport { TheEditor } from '../../../interfaces';\nimport { TableEditor } from '../table.editor';\nimport { TableStore } from '../table.store';\nimport { createTablePosition } from './create-table-position';\nimport { setTableOptions } from './set-node-options';\n\nexport function removeColumnOrRows(\n editor: TheEditor,\n tableStore: TableStore,\n options?: { selectedRowsIndex?: number[]; selectedColumnsIndex?: number[] }\n) {\n const { isSelectedTable } = tableStore;\n const selectedRowsIndex = options?.selectedRowsIndex || tableStore.selectedRowsIndex;\n const selectedColumnsIndex = options?.selectedColumnsIndex || tableStore.selectedColumnsIndex;\n const tablePosition = createTablePosition(editor);\n if (isSelectedTable) {\n TableEditor.removeTable(editor);\n return;\n }\n const tableComponent = ELEMENT_TO_COMPONENT.get(tablePosition.table) as any;\n if (selectedRowsIndex.length > 0 && selectedColumnsIndex.length === 0) {\n // 删除行时取消标题行\n if (tablePosition.table && tableComponent.headerRow && selectedRowsIndex.includes(0)) {\n setTableOptions(editor, { headerRow: false });\n // headerRow 兼容代码, 取消标题行的时候同时设置 row 中的 header 属性\n if (tablePosition.table.children[0].header) {\n const rowPath = TheEditor.findPath(editor, tablePosition.table.children[0]);\n Transforms.setNodes(editor, { header: null }, { at: rowPath });\n }\n }\n selectedRowsIndex\n .sort((a, b) => b - a)\n .forEach(index => {\n TableEditor.removeRow(editor, index);\n });\n tableStore.changeCells();\n }\n if (selectedColumnsIndex.length > 0 && selectedRowsIndex.length === 0) {\n // 删除列时取消标题列\n if (tablePosition.table && tablePosition.table.options?.headerColumn && selectedColumnsIndex.includes(0)) {\n setTableOptions(editor, { headerColumn: false });\n }\n selectedColumnsIndex\n .sort((a, b) => b - a)\n .forEach(index => {\n TableEditor.removeColumn(editor, index);\n });\n tableStore.changeCells();\n }\n}\n","import { Editor } from 'slate';\nimport { TableElement, TableCellElement } from '../../../custom-types';\nimport { CellPosition } from '../table.types';\n\nexport const getMinAndMaxCellIndex = (\n editor: Editor,\n selectedCellPositions: CellPosition[],\n maxRow: number,\n maxCol: number,\n minRow: number,\n minCol: number,\n table: TableElement\n): { minRow: number; maxRow: number; minCol: number; maxCol: number } => {\n const beforeCols = [];\n const beforeRows = [];\n let spanSelectedCells = [];\n if (selectedCellPositions.length) {\n spanSelectedCells = selectedCellPositions.map(item => {\n const { row, col } = item;\n const node = table.children[row].children[col] as TableCellElement;\n if (!node.hidden) {\n return {\n ...item,\n colspan: node.colspan || 1,\n rowspan: node.rowspan || 1\n };\n } else {\n return {\n ...item,\n colspan: 1,\n rowspan: 1\n };\n }\n });\n }\n\n table.children.forEach((row, rowIndex) => {\n if (rowIndex <= maxRow) {\n row.children.forEach((cell: TableCellElement, colIndex) => {\n if (colIndex <= maxCol) {\n const cellRowIndex = rowIndex + (cell.rowspan || 1) - 1;\n const cellColIndex = colIndex + (cell.colspan || 1) - 1;\n\n if (spanSelectedCells.length) {\n const { row: selectRow, col: selectCol, rowspan: selectRowSpan, colspan: selectColSpan } = spanSelectedCells[0];\n if (selectRow + selectRowSpan - 1 >= minRow && selectCol + selectColSpan - 1 >= minCol) {\n minRow = Math.min(selectRow, minRow);\n minCol = Math.min(selectCol, minCol);\n }\n }\n\n if (cell.colspan && cell.colspan > 1) {\n beforeCols.push({ rowIndex, colIndex, cellColIndex });\n if (cellColIndex >= minCol && cellRowIndex >= minRow) {\n maxCol = Math.max(maxCol, cellColIndex);\n minCol = Math.min(minCol, colIndex);\n }\n }\n\n if (cell.rowspan && cell.rowspan > 1) {\n beforeRows.push({ rowIndex, colIndex, cellRowIndex });\n if (cellColIndex >= minCol && cellRowIndex >= minRow) {\n minRow = Math.min(minRow, rowIndex);\n maxRow = Math.max(maxRow, cellRowIndex);\n }\n }\n }\n });\n }\n });\n\n // 判断选区范围内之前的单元格 如果存在cellColIndex === minCol,表示当前获取的minCol并不是最小的,重新获取minCol\n const colNode = beforeCols.filter(\n item => item.rowIndex <= maxRow && item.colIndex <= maxCol && item.rowIndex >= minRow && item.cellColIndex === minCol\n );\n const rowNode = beforeRows.filter(\n item => item.rowIndex <= maxRow && item.colIndex <= maxCol && item.colIndex >= minCol && item.cellRowIndex === minRow\n );\n if (colNode.length || rowNode.length) {\n return getMinAndMaxCellIndex(editor, selectedCellPositions, maxRow, maxCol, minRow, minCol, table);\n }\n return {\n minRow,\n maxRow,\n minCol,\n maxCol\n };\n};\n","import { Injectable } from '@angular/core';\nimport { Subject, Observable, BehaviorSubject, merge } from 'rxjs';\nimport { skip } from 'rxjs/operators';\nimport { Transforms, Node, Editor, Path } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { TablePosition } from './utils';\nimport { groupBy, uniq, map } from '../../utils/lodash';\nimport { ColorType } from '../../constants/color-select';\nimport { CellPosition } from './table.types';\nimport { TableCellElement } from '../../custom-types';\nimport { TableEditor } from './table.editor';\nimport { createTablePosition } from './utils/create-table-position';\nimport { getCellPositionsFromRange, getSelectedCellPositions, isSelectedAllCell, uniqueCellPosition } from './utils/cell-position';\nimport { getTablePath } from './utils/table-entry';\nimport { getMinAndMaxCellIndex } from './utils/get-min-max-cell-index';\nimport { getCellPositionsBeforeMerge } from './utils/merge-cell';\nimport { focusCell } from './utils/get-select-cell-node';\n\n@Injectable()\nexport class TableStore {\n private selectedCells$: BehaviorSubject<TableCellElement[]> = new BehaviorSubject<TableCellElement[]>([]);\n\n private dangerousCells$: BehaviorSubject<CellPosition[]> = new BehaviorSubject([]);\n\n private cellsChangeObject$ = new Subject<void>();\n\n private tableChange$ = new Subject<void>();\n\n selectedColumnsIndex: number[] = [];\n\n selectedRowsIndex: number[] = [];\n\n dangerousColumnsIndex: number[] = [];\n\n dangerousRowsIndex: number[] = [];\n\n isSelectedTable: boolean;\n\n editor: Editor;\n\n public isFullscreen: boolean;\n\n public anchorCellPath: number[];\n\n public focusCellPath: number[];\n\n public preFocusCellPath: number[];\n\n public lastFocusCellPath: number[];\n\n public focusCellElement: HTMLTableCellElement;\n\n public isPrepareSelecting = false;\n\n public isCellSelecting = false;\n\n public isRightClicking = false;\n\n public isFocusedInput = false;\n\n public pointerSelection: boolean = false;\n\n public areaSelection: boolean = false;\n\n public maxCol: number;\n\n get dangerousCells() {\n return this.dangerousCells$.getValue();\n }\n\n constructor() {}\n\n initEditor(editor: Editor) {\n this.editor = editor;\n }\n\n getSelectedCellPositions(): CellPosition[] {\n return getSelectedCellPositions(this.editor, this.selectedCells$.getValue());\n }\n\n publishDangerousCells(value: CellPosition[]) {\n return this.dangerousCells$.next(value);\n }\n\n setSelectedColumnsAndRowIndex() {\n if (!this.editor?.selection) {\n return;\n }\n\n const pos = createTablePosition(this.editor);\n if (!pos?.table) {\n return;\n }\n\n const mergeBeforeCells = [];\n const selectedCellPositions = this.getSelectedCellPositions();\n selectedCellPositions.forEach(({ row, col }) => {\n // 计算合并单元格数据时,要按合并前的数据处理\n mergeBeforeCells.push(...getCellPositionsBeforeMerge(this.editor, { row, col }));\n });\n const cells = uniqueCellPosition(mergeBeforeCells, selectedCellPositions);\n const rowGroup = groupBy(cells, ({ row }) => row);\n const colGroup = groupBy(cells, ({ col }) => col);\n this.selectedRowsIndex = [];\n this.selectedColumnsIndex = [];\n for (const row in rowGroup) {\n if (rowGroup[row].length === pos.getWidth()) {\n this.selectedRowsIndex.push(parseInt(row, 10));\n }\n }\n for (const col in colGroup) {\n if (colGroup[col].length === pos.getHeight()) {\n this.selectedColumnsIndex.push(parseInt(col, 10));\n }\n }\n this.selectedRowsIndex = uniq(this.selectedRowsIndex);\n this.selectedColumnsIndex = uniq(this.selectedColumnsIndex);\n if (isSelectedAllCell(this.editor, selectedCellPositions)) {\n this.isSelectedTable = true;\n } else {\n this.isSelectedTable = false;\n }\n }\n\n setSelectedCells(cells: CellPosition[], pos: TablePosition) {\n const uniqueCells = this.pointerSelection ? uniqueCellPosition(cells, this.getSelectedCellPositions()) : cells;\n const cellElements = uniqueCells.map(cell => {\n return pos.findCellByPath(cell);\n });\n this.selectedCells$.next(cellElements);\n this.setSelectedColumnsAndRowIndex();\n }\n\n selectRow(editor: Editor, index: number) {\n const pos = createTablePosition(editor);\n const rangeCells = getCellPositionsFromRange(index, 0, index + 1, pos.getWidth());\n\n this.clearLastFocusPath();\n if (this.areaSelection) {\n this.areaSelectRowAndColumn(rangeCells);\n } else {\n this.setSelectedCells(rangeCells, pos);\n this.focusCell(pos.tableEntry[1].concat([index, 0]));\n }\n }\n\n selectColumn(editor: Editor, index: number) {\n const pos = createTablePosition(editor);\n const rangeCells = getCellPositionsFromRange(0, index, pos.getHeight(), index + 1);\n\n this.clearLastFocusPath();\n if (this.areaSelection) {\n this.areaSelectRowAndColumn(rangeCells);\n } else {\n this.setSelectedCells(rangeCells, pos);\n this.focusCell(pos.tableEntry[1].concat([0, index]));\n }\n }\n\n selectTable(editor: Editor) {\n const pos = createTablePosition(editor);\n const cells = getCellPositionsFromRange(0, 0, pos.getHeight(), pos.getWidth());\n const lastCell = cells[cells.length - 1];\n const anchorCellPath = pos.tableEntry[1].concat([lastCell.row, lastCell.col]);\n\n this.isSelectedTable = true;\n this.setSelectedCells(cells, pos);\n this.setAreaAnchorCellPath(anchorCellPath);\n this.focusCell(pos.tableEntry[1].concat([0, 0]));\n }\n\n // 拖选开始 || 记录聚焦点\n selectCellStart(cell: HTMLTableCellElement, editor: Editor) {\n const node = AngularEditor.toSlateNode(editor, cell);\n const path = AngularEditor.findPath(editor, node);\n this.isPrepareSelecting = true;\n this.anchorCellPath = path;\n this.focusCellPath = path;\n this.focusCellElement = cell;\n this.lastFocusCellPath = path;\n if (!this.preFocusCellPath) {\n this.preFocusCellPath = this.anchorCellPath;\n }\n }\n\n // 拖选\n selectCells(editor: Editor) {\n const pos = createTablePosition(editor);\n const anchorPath = this.anchorCellPath.slice(-2);\n const focusPath = this.focusCellPath.slice(-2);\n\n const rows = [anchorPath[0], focusPath[0]].sort((m, n) => m - n);\n const columns = [anchorPath[1], focusPath[1]].sort((m, n) => m - n);\n\n const { colspan: anchorColspanCount, rowspan: anchorRowspanCount } = Editor.node(\n editor,\n this.anchorCellPath\n )[0] as TableCellElement;\n const { colspan: focusColspanCount, rowspan: focusRowspanCount } = Editor.node(editor, this.focusCellPath)[0] as TableCellElement;\n\n const anchorRow = anchorPath[0] + (anchorRowspanCount || 1) - 1;\n const focusRow = focusPath[0] + (focusRowspanCount || 1) - 1;\n const anchorCol = anchorPath[1] + (anchorColspanCount || 1) - 1;\n const focusCol = focusPath[1] + (focusColspanCount || 1) - 1;\n\n let initMaxCol = Math.max(anchorCol, focusCol);\n let initMaxRow = Math.max(anchorRow, focusRow);\n const { minRow, maxRow, minCol, maxCol } = getMinAndMaxCellIndex(\n this.editor,\n this.getSelectedCellPositions(),\n initMaxRow,\n initMaxCol,\n rows[0],\n columns[0],\n pos.table\n );\n const cells = getCellPositionsFromRange(minRow, minCol, maxRow + 1, maxCol + 1);\n this.setSelectedCells(cells, pos);\n }\n\n selectFirstCell() {\n const selectedCellPositions = this.getSelectedCellPositions();\n const { row, col } = selectedCellPositions[0];\n const tablePath = getTablePath(this.editor);\n const path = Editor.start(this.editor, [...tablePath, row, col]);\n Transforms.select(this.editor, path);\n }\n\n // 选择单元格\n selectCell(cell: HTMLTableCellElement, editor: Editor) {\n const node = AngularEditor.toSlateNode(editor, cell) as TableCellElement;\n const path = AngularEditor.findPath(editor, node);\n this.anchorCellPath = path;\n this.focusCellPath = path;\n this.focusCellElement = cell;\n const [row, col] = path.slice(-2);\n const pos = createTablePosition(editor);\n const cells: CellPosition[] = [{ row, col }];\n const selectedCellPositions = this.getSelectedCellPositions();\n if (this.pointerSelection) {\n cells.push(...selectedCellPositions);\n // 处理单元格选中时,处理为选中多单元格\n const selectedCells = getCellPositionsBeforeMerge(this.editor, { row, col });\n cells.push(...selectedCells);\n // 已聚焦的单元格在多选模式下选中(暂存上次聚焦的单元格数据)\n const focusCell = this.lastFocusCellPath?.slice(-2);\n if (focusCell) {\n const focusCells = getCellPositionsBeforeMerge(this.editor, { row: focusCell[0], col: focusCell[1] });\n cells.push(...focusCells);\n }\n }\n this.setSelectedCells(cells, pos);\n }\n\n selectCellOngoing(cell: HTMLTableCellElement, editor: Editor) {\n const pos = createTablePosition(editor);\n if (AngularEditor.isReadonly(editor) || !editor.selection || !pos?.table) {\n return;\n }\n let isChanged: boolean;\n if (cell) {\n const node = AngularEditor.toSlateNode(editor, cell);\n const path = AngularEditor.findPath(editor, node);\n isChanged = !this.focusCellPath || !Path.equals(this.focusCellPath, path);\n this.focusCellPath = path;\n this.focusCellElement = cell;\n } else {\n const selectedCellPositions = this.getSelectedCellPositions();\n isChanged = !this.focusCellPath || (Path.equals(this.focusCellPath, this.anchorCellPath) && selectedCellPositions.length === 0);\n }\n if (this.isPrepareSelecting && isChanged) {\n if (JSON.stringify(this.preFocusCellPath) !== JSON.stringify(this.focusCellPath)) {\n this.isCellSelecting = true;\n this.selectCells(editor);\n this.preFocusCellPath = this.focusCellPath;\n }\n }\n }\n\n clearSelectedCells() {\n this.selectedColumnsIndex = [];\n this.selectedRowsIndex = [];\n this.isSelectedTable = false;\n this.isCellSelecting = false;\n this.isRightClicking = false;\n this.isFocusedInput = false;\n this.selectedCells$.next([]);\n }\n\n clearLastFocusPath() {\n this.lastFocusCellPath = null;\n }\n\n selectedCellsChange(): Observable<TableCellElement[]> {\n return this.selectedCells$.asObservable().pipe(skip(1));\n }\n\n cellsPositionChange() {\n return this.cellsChangeObject$.asObservable();\n }\n\n changeCells() {\n this.cellsChangeObject$.next();\n }\n\n emitTableChange() {\n this.tableChange$.next();\n }\n\n tableChange() {\n return this.tableChange$.asObservable();\n }\n\n selectCellEnd(editor: Editor) {\n if (this.isCellSelecting) {\n this.focusCell(this.focusCellPath);\n }\n this.isPrepareSelecting = false;\n this.preFocusCellPath = null;\n }\n\n dangerousCellsChange(): Observable<CellPosition[]> {\n return this.dangerousCells$.asObservable().pipe(skip(1));\n }\n\n setDangerousCells() {\n const selectedCellPositions = this.getSelectedCellPositions();\n this.dangerousRowsIndex = this.selectedRowsIndex;\n this.dangerousColumnsIndex = this.selectedColumnsIndex;\n this.dangerousCells$.next(selectedCellPositions);\n }\n\n clearDangerousCells() {\n this.dangerousRowsIndex = [];\n this.dangerousColumnsIndex = [];\n this.dangerousCells$.next([]);\n const pos = createTablePosition(this.editor);\n if (pos.table) {\n this.isSelectedTable = this.selectedRowsIndex.length === pos.getHeight() && this.selectedColumnsIndex.length === pos.getWidth();\n }\n }\n\n dangerousOrSelectedCellsChange() {\n return merge(this.dangerousCells$.asObservable().pipe(skip(1)), this.selectedCells$.asObservable().pipe(skip(1)));\n }\n\n setDangerousRows() {\n const selectedCellPositions = this.getSelectedCellPositions();\n const cells = selectedCellPositions;\n const rows = uniq(map(cells, 'row')).valueOf() as number[];\n const pos = createTablePosition(this.editor);\n const result = [];\n\n this.dangerousRowsIndex = rows;\n this.isSelectedTable = rows.length === pos.getHeight();\n if (this.isSelectedTable) {\n this.dangerousColumnsIndex = [...Array(pos.getWidth())].map((v, i) => i);\n }\n\n for (const rowIndex of rows) {\n for (let i = 0; i < pos.getWidth(); i++) {\n result.push({\n row: rowIndex,\n col: i\n });\n }\n }\n this.dangerousCells$.next(result);\n }\n\n setDangerousColumns() {\n const selectedCellPositions = this.getSelectedCellPositions();\n const cells = selectedCellPositions;\n const cols = uniq(map(cells, 'col')).valueOf() as number[];\n const pos = createTablePosition(this.editor);\n const result = [];\n\n this.dangerousColumnsIndex = cols;\n this.isSelectedTable = cols.length === pos.getWidth();\n if (this.isSelectedTable) {\n this.dangerousRowsIndex = [...Array(pos.getHeight())].map((_, i) => i);\n }\n\n for (const colIndex of cols) {\n for (let i = 0; i < pos.getHeight(); i++) {\n result.push({\n row: i,\n col: colIndex\n });\n }\n }\n this.dangerousCells$.next(result);\n }\n\n setDangerousTable() {\n this.isSelectedTable = true;\n const pos = createTablePosition(this.editor);\n const cells = getCellPositionsFromRange(0, 0, pos.getHeight(), pos.getWidth());\n this.dangerousRowsIndex = [...Array(pos.getHeight())].map((_, i) => i);\n this.dangerousColumnsIndex = [...Array(pos.getWidth())].map((_, i) => i);\n this.dangerousCells$.next(cells);\n }\n\n setSelectedCellsBackgroundColor(backgroundColor: ColorType) {\n const cells = this.selectedCells$.getValue();\n Editor.withoutNormalizing(this.editor, () => {\n cells.map(cell => {\n const cellPath = AngularEditor.findPath(this.editor, cell);\n Transforms.setNodes(this.editor, { backgroundColor }, { at: cellPath });\n });\n });\n }\n\n clearSelectedCellsContent() {\n const cells = this.getSelectedCellPositions();\n const tablePosition = createTablePosition(this.editor);\n\n if (tablePosition.isInTable()) {\n Editor.withoutNormalizing(this.editor, () => {\n for (const { row, col } of cells) {\n const cellPath = [...tablePosition.tableEntry[1], row, col];\n const node = Node.get(this.editor, cellPath) as TableCellElement;\n TableEditor.clearCell(this.editor, [node, cellPath]);\n }\n });\n Transforms.select(this.editor, Editor.start(this.editor, tablePosition.cellEntry[1]));\n }\n }\n\n /**\n * 聚焦单元格并设置聚焦相关路径及元素\n */\n focusCell(path: number[]) {\n const node = Node.get(this.editor, path) as TableCellElement;\n const cellHTMLElement = AngularEditor.toDOMNode(this.editor, node) as HTMLTableCellElement;\n this.preFocusCellPath = this.focusCellPath;\n this.focusCellPath = path;\n this.focusCellElement = cellHTMLElement;\n focusCell(this.editor, path);\n }\n\n /**\n * 区域选择开始\n * @param editor 编辑器对象\n * @param cell 单元格元素\n */\n areaSelectionStart(cell: HTMLTableCellElement, editor: Editor): void {\n const node = AngularEditor.toSlateNode(editor, cell);\n const path = AngularEditor.findPath(editor, node);\n this.isPrepareSelecting = true;\n this.lastFocusCellPath = path;\n if (!this?.anchorCellPath) {\n this.anchorCellPath = path;\n }\n if (!this?.focusCellPath) {\n this.focusCellPath = path;\n }\n if (!this.preFocusCellPath) {\n this.preFocusCellPath = this.anchorCellPath;\n }\n }\n\n /**\n * 设置区域选择的单元格\n * @param cellElement 单元格元素\n */\n setAreaSelectionCells(cellElement: TableCellElement): void {\n if (AngularEditor.isReadonly(this.editor) || !this.editor.selection || !this.isPrepareSelecting) {\n return;\n }\n\n const currentCellPath = AngularEditor.findPath(this.editor, cellElement);\n const selectedCellPositions = this.getSelectedCellPositions();\n const selectEqual = Path.equals(currentCellPath, this.anchorCellPath);\n\n // 不可以区域选择单一单元格\n if (selectedCellPositions.length <= 1 && selectEqual) {\n return;\n }\n this.isCellSelecting = true;\n this.focusCell(currentCellPath);\n this.selectCells(this.editor);\n }\n\n /**\n * 处理区域选择启用时选择整行/整列\n * @param cells 选择的单元格\n */\n areaSelectRowAndColumn(cells: CellPosition[]): void {\n const pos = createTablePosition(this.editor);\n const [row, col] = this.focusCellPath.slice(-2);\n const selectCells = [{ row, col }, ...cells];\n const sortRows = selectCells.map(item => item.row).sort((m, n) => m - n);\n const sortCols = selectCells.map(item => item.col).sort((m, n) => m - n);\n const startRow = sortRows[0];\n const startCol = sortCols[0];\n const endRow = sortCols[sortCols.length - 1];\n const endCol = sortRows[sortRows.length - 1];\n const anchorCellPath = pos.tableEntry[1].concat([endCol, endRow]);\n const focusCellPath = pos.tableEntry[1].concat([startRow, startCol]);\n\n this.setAreaAnchorCellPath(anchorCellPath);\n this.focusCell(focusCellPath);\n this.selectCells(this.editor);\n }\n\n /**\n * 设置区域选择触发时的指定 anchorCellPath\n * @param path 路径\n */\n setAreaAnchorCellPath(path: number[]) {\n if (this.areaSelection && path) {\n this.anchorCellPath = path;\n }\n }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { ThyPopoverRef, ThyPopover } from 'ngx-tethys/popover';\nimport { TableStore } from '../plugins/table/table.store';\nimport { TableEditor } from '../plugins/table/table.editor';\nimport { splitCell } from '../plugins/table/utils/split-cell';\nimport { setCellMenuVisibility } from '../plugins/table/utils/set-menu-cell-invisibility';\nimport { MenuEntity, TableInsertType } from '../plugins/table/table.types';\nimport { calculateCellSpan, getLeftCellDict, mergeCell } from '../plugins/table/utils/merge-cell';\nimport { getSelectCellNode } from '../plugins/table/utils/get-select-cell-node';\nimport { TheContextMenuComponent } from '../components/contextmenu/contextmenu.component';\nimport { TheContextService } from './context.service';\nimport { refocus, reSelection } from '../utils';\nimport { sortCell } from '../plugins/table/utils/handle-cell';\nimport { getSelectedCell } from '../plugins/table/utils/table-entry';\nimport { setSelectedCellsBackgroundColor } from '../plugins/table/utils/set-cells-background-color';\nimport { removeColumnOrRows } from '../plugins/table/utils/remove-row-column';\n@Injectable()\nexport class TheTableContextMenuService {\n menuRef: ThyPopoverRef<TheContextMenuComponent>;\n\n get isOpened() {\n return this.menuRef && this.menuRef.componentInstance;\n }\n\n get editor() {\n return this.tableStore && this.tableStore.editor;\n }\n\n get backgroundColor() {\n const cell = getSelectedCell(this.editor);\n return cell ? cell.backgroundColor : '';\n }\n\n constructor(\n private tableStore: TableStore,\n private thyPopover: ThyPopover,\n private ngZone: NgZone,\n private theContextService: TheContextService\n ) {}\n\n menuEntities: MenuEntity[] = [\n {\n key: 'background-color',\n icon: 'background-tt',\n divider: true,\n name: '单元格背景',\n extendIcon: 'angle-right',\n visibility: true,\n actionHandle: () => {},\n activeHandle: (event: MouseEvent, item: MenuEntity) => {\n setSelectedCellsBackgroundColor(this.editor, item.backgroundColor, this.tableStore);\n },\n deactivateHandle: (event: MouseEvent) => {\n if (event.relatedTarget instanceof HTMLElement) {\n if (event.relatedTarget.classList.contains('color-select-container')) {\n return;\n }\n }\n }\n },\n\n {\n key: TableInsertType.insertRowsUp,\n icon: 'table-insert-rows-top',\n name: '向上插入',\n visibility: true,\n isInputNumber: true,\n nameSuffix: '行',\n actionHandle: (item: MenuEntity) => {\n const { targetRowIndex } = this.getTargetRowOrColIndex();\n TableEditor.insertRow(this.editor, item.count, targetRowIndex);\n this.tableStore.changeCells();\n }\n },\n {\n key: TableInsertType.insertRowsDown,\n icon: 'table-insert-rows-down',\n name: '向下插入',\n visibility: true,\n isInputNumber: true,\n nameSuffix: '行',\n actionHandle: (item: MenuEntity) => {\n const { targetRowIndex } = this.getTargetRowOrColIndex(false);\n TableEditor.insertRow(this.editor, item.count, targetRowIndex);\n this.tableStore.changeCells();\n }\n },\n {\n key: TableInsertType.insertColumnsLeft,\n icon: 'table-insert-columns-left',\n name: '向左插入',\n visibility: true,\n isInputNumber: true,\n nameSuffix: '列',\n actionHandle: (item: MenuEntity) => {\n const { targetColIndex } = this.getTargetRowOrColIndex();\n TableEditor.insertColumn(this.editor, item.count, targetColIndex);\n this.tableStore.changeCells();\n }\n },\n {\n key: TableInsertType.insertColumnsRight,\n icon: 'table-insert-columns-right',\n divider: true,\n name: '向右插入',\n visibility: true,\n isInputNumber: true,\n nameSuffix: '列',\n actionHandle: (item: MenuEntity) => {\n const { targetColIndex } = this.getTargetRowOrColIndex(false);\n TableEditor.insertColumn(this.editor, item.count, targetColIndex);\n this.tableStore.changeCells();\n }\n },\n\n {\n key: 'clear-selection',\n icon: 'sweep',\n divider: true,\n name: '清空选中区域',\n visibility: true,\n actionHandle: () => {\n this.tableStore.clearSelectedCellsContent();\n this.tableStore.selectFirstCell();\n }\n },\n {\n key: 'merge-cells',\n icon: 'table-merge-cells',\n name: '合并单元格',\n visibility: true,\n actionHandle: () => {\n mergeCell(this.editor, this.tableStore.getSelectedCellPositions());\n }\n },\n {\n key: 'split-cells',\n icon: 'table-unmerge-cells',\n name: '拆分单元格',\n divider: true,\n visibility: true,\n actionHandle: () => {\n splitCell(this.editor);\n }\n },\n {\n key: 'delete-selection-rows',\n icon: 'table-delete-rows',\n name: '删除所在行',\n visibility: true,\n actionHandle: () => {\n removeColumnOrRows(this.editor, this.tableStore, {\n selectedColumnsIndex: this.tableStore.dangerousColumnsIndex,\n selectedRowsIndex: this.tableStore.dangerousRowsIndex\n });\n this.tableStore.clearDangerousCells();\n this.tableStore.clearSelectedCells();\n },\n activeHandle: () => {\n this.tableStore.setDangerousRows();\n }\n },\n {\n key: 'delete-selection-columns',\n icon: 'table-delete-columns',\n divider: true,\n name: '删除所在列',\n visibility: true,\n actionHandle: () => {\n removeColumnOrRows(this.editor, this.tableStore, {\n selectedColumnsIndex: this.tableStore.dangerousColumnsIndex,\n selectedRowsIndex: this.tableStore.dangerousRowsIndex\n });\n this.tableStore.clearDangerousCells();\n this.tableStore.clearSelectedCells();\n },\n activeHandle: () => {\n this.tableStore.setDangerousColumns();\n }\n },\n {\n key: 'delete-table',\n icon: 'trash',\n name: '删除表格',\n visibility: true,\n actionHandle: () => {\n TableEditor.removeTable(this.editor);\n this.tableStore.clearDangerousCells();\n this.tableStore.clearSelectedCells();\n },\n activeHandle: () => {\n this.tableStore.setDangerousTable();\n }\n }\n ];\n\n getSelectedCell() {\n const selectedCellPositions = this.tableStore.getSelectedCellPositions();\n const selectCellNodes = getSelectCellNode(this.editor, selectedCellPositions);\n sortCell(selectCellNodes);\n const leftCellDict = getLeftCellDict(selectCellNodes);\n const { rowspan, colspan } = calculateCellSpan(selectCellNodes, leftCellDict);\n\n return { row: rowspan, col: colspan, selectCellNodes };\n }\n\n getTargetRowOrColIndex(isFront = true) {\n const { row, col, selectCellNodes } = this.getSelectedCell();\n const firstSelectCell = selectCellNodes[0];\n const targetRowIndex = isFront ? firstSelectCell.row : row + firstSelectCell.row;\n const targetColIndex = isFront ? firstSelectCell.col : col + firstSelectCell.col;\n\n return { targetRowIndex, targetColIndex };\n }\n\n openMenuList(event: MouseEvent) {\n this.ngZone.run(() => {\n const { isFullscreen, selectedRowsIndex, selectedColumnsIndex, isSelectedTable } = this.tableStore;\n const selectedCellPositions = this.tableStore.getSelectedCellPositions();\n const tableInfo = { selectedCellPositions, isFullscreen, selectedRowsIndex, selectedColumnsIndex, isSelectedTable };\n const { row, col } = this.getSelectedCell();\n setCellMenuVisibility(this.editor, this.menuEntities, tableInfo);\n\n this.menuEntities.forEach(item => {\n switch (item.key) {\n case 'background-color':\n item.backgroundColor = this.backgroundColor;\n break;\n case TableInsertType.insertRowsUp:\n case TableInsertType.insertRowsDown:\n item.count = row;\n break;\n case TableInsertType.insertColumnsLeft:\n case TableInsertType.insertColumnsRight:\n item.count = col;\n break;\n }\n });\n this.menuRef = this.thyPopover.open(TheContextMenuComponent, {\n origin: event.target as HTMLElement,\n initialState: {\n menuEntities: this.menuEntities,\n actionHandle: (entity: MenuEntity) => {\n if (!this.editor.selection) {\n refocus(this.editor);\n }\n entity.actionHandle(entity);\n },\n activeHandle: (menuEvent: MouseEvent, entity: MenuEntity) => {\n if (entity.activeHandle) {\n if (!this.editor.selection) {\n reSelection(this.editor);\n }\n entity.activeHandle(menuEvent);\n }\n },\n deactivateHandle: (menuEvent: MouseEvent, entity: MenuEntity) => {\n if (entity.key.indexOf('delete') >= 0) {\n this.tableStore.clearDangerousCells();\n }\n if (entity.deactivateHandle) {\n if (!this.editor.selection) {\n reSelection(this.editor);\n }\n entity.deactivateHandle(menuEvent);\n }\n }\n },\n originPosition: {\n x: event.x + 30,\n y: event.y\n },\n hasBackdrop: false,\n placement: 'bottomLeft',\n viewContainerRef: this.theContextService.getOptions().viewContainerRef,\n manualClosure: true,\n insideClosable: false,\n backdropClosable: false\n });\n });\n }\n\n closeContextMenu() {\n if (this.isOpened) {\n this.menuRef.close();\n return this.menuRef.afterClosed();\n }\n }\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor, Transforms } from 'slate';\nimport { TableStore } from '../../table.store';\nimport { TableDropdownOption, TableOperations } from '../../table.types';\nimport { TheEditor } from '../../../../interfaces';\nimport { ELEMENT_TO_COMPONENT } from 'slate-angular';\nimport { TheTableComponent } from '../table.component';\nimport { getTable } from '../../utils/table-entry';\nimport { setTableOptions } from '../../utils/set-node-options';\n\n@Component({\n selector: 'the-table-options',\n template: `\n <div class=\"thy-dropdown-menu table-drop-menu\">\n <ng-container *ngFor=\"let option of tableDropdownList\">\n <a thyDropdownMenuItem href=\"javascript:;\" (mousedown)=\"setTableOptions($event, option)\">\n <span thyDropdownMenuItemName>{{ option.name }}</span>\n <span *ngIf=\"option.isActive\" thyDropdownMenuItemIcon class=\"text-primary\">\n <thy-icon thyIconName=\"check\"></thy-icon>\n </span>\n </a>\n </ng-container>\n </div>\n `\n})\nexport class TheTableOptionsComponent implements OnInit {\n @Input() editor: Editor;\n\n tableDropdownList: TableDropdownOption[] = [\n {\n name: '标题行',\n key: TableOperations.headerRow\n },\n {\n name: '标题列',\n key: TableOperations.headerColumn\n },\n {\n name: '序号列',\n key: TableOperations.numberedColumn\n }\n ];\n\n constructor(private popoverRef: ThyPopoverRef<TheTableOptionsComponent>) {}\n\n ngOnInit(): void {\n this.setColumnOptions();\n }\n\n get table() {\n return getTable(this.editor);\n }\n\n setColumnOptions() {\n this.tableDropdownList.forEach(item => {\n const tableComponent = ELEMENT_TO_COMPONENT.get(this.table) as TheTableComponent;\n if (item.key === TableOperations.headerRow) {\n item.isActive = tableComponent.headerRow;\n } else {\n item.isActive = (this.table.options && this.table.options[item.key]) || false;\n }\n });\n }\n\n setTableOptions(event: MouseEvent, option: TableDropdownOption) {\n event.preventDefault();\n event.stopPropagation();\n const currentOption = this.tableDropdownList.find(item => item.key === option.key);\n currentOption.isActive = !option.isActive;\n const tableOption = {};\n tableOption[option.key] = currentOption.isActive || false;\n setTableOptions(this.editor, { ...tableOption });\n // headerRow 兼容代码, 取消标题行的时候同时设置 row 中的 header 属性\n if (option.key === TableOperations.headerRow && !tableOption[option.key] && this.table.children[0].header) {\n const rowPath = TheEditor.findPath(this.editor, this.table.children[0]);\n Transforms.setNodes(this.editor, { header: null }, { at: rowPath });\n }\n }\n}\n","import { Component, OnInit, Input, OnDestroy } from '@angular/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Editor } from 'slate';\nimport { TableStore } from '../../table.store';\nimport { splitCell } from '../../utils/split-cell';\nimport { setCellMenuVisibility } from '../../utils/set-menu-cell-invisibility';\nimport { MenuEntity } from '../../table.types';\nimport { TheTableOptionsComponent } from './table-options.component';\nimport { PluginKeys, TheEditor } from '../../../../interfaces';\nimport { getPluginOptions } from '../../../../core';\nimport { TableElement } from '../../../..//custom-types';\nimport { isRectangularInTableCells } from '../../utils/is-selection-in-table';\nimport * as TheTransforms from '../../../../transforms';\nimport * as TheQueries from '../../../../queries';\nimport { Subscription } from 'rxjs';\nimport { ThyNotifyService } from 'ngx-tethys/notify';\nimport { copyNode } from '../../../../utils';\nimport { createTablePosition } from '../../utils/create-table-position';\nimport { mergeCell } from '../../utils/merge-cell';\nimport { getSelectedCell } from '../../utils/table-entry';\nimport { setSelectedCellsBackgroundColor } from '../../utils/set-cells-background-color';\nimport { removeColumnOrRows } from '../../utils/remove-row-column';\n\n@Component({\n selector: 'the-table-toolbar',\n templateUrl: 'table-toolbar.component.html'\n})\nexport class TheTableToolbarComponent implements OnInit, OnDestroy {\n selectedColor: string;\n\n deleteIcon: DeleteIcon;\n\n iconName: string;\n\n isRectangle: boolean;\n\n isColumnEqual: boolean;\n\n tableChangeSubscriber: Subscription;\n\n @Input() tableStore: TableStore;\n\n @Input() tableElement: TableElement;\n\n get editor(): Editor {\n return this.tableStore && this.tableStore.editor;\n }\n\n cellMenuList: MenuEntity[] = [\n {\n key: 'merge-cells',\n name: '合并单元格',\n visibility: false,\n icon: 'table-merge-cells',\n actionHandle: () => {\n event.preventDefault();\n event.stopPropagation();\n mergeCell(this.editor, this.tableStore.getSelectedCellPositions());\n this.popoverRef.close();\n this.tableStore.clearSelectedCells();\n }\n },\n {\n key: 'split-cells',\n name: '拆分单元格',\n visibility: false,\n icon: 'table-unmerge-cells',\n actionHandle: () => {\n event.preventDefault();\n event.stopPropagation();\n splitCell(this.editor);\n this.popoverRef.close();\n this.tableStore.clearSelectedCells();\n }\n }\n ];\n\n get hasDivider() {\n return this.cellMenuList.filter(item => item.visibility).length > 1;\n }\n\n get tableOptions() {\n return getPluginOptions(this.editor, PluginKeys.table);\n }\n\n constructor(\n private thyPopover: ThyPopover,\n private popoverRef: ThyPopoverRef<TheTableToolbarComponent>,\n private thyNotifyService: ThyNotifyService\n ) {}\n\n ngOnInit() {\n this.isColumnEqual = this.tableElement?.columns?.every(col => this.tableElement.columns[0].width === col.width) ?? true;\n const selectedCellPositions = this.tableStore.getSelectedCellPositions();\n const tableInfo = { selectedCellPositions, isSelectedTable: this.tableStore.isSelectedTable };\n this.isRectangle = isRectangularInTableCells(this.editor, selectedCellPositions);\n this.setDeleteIcon();\n setCellMenuVisibility(this.editor, this.cellMenuList, tableInfo);\n const cell = getSelectedCell(this.editor);\n this.selectedColor = cell ? cell.backgroundColor : '';\n\n const path = TheEditor.findPath(this.editor, this.tableElement);\n this.tableChangeSubscriber = this.tableStore.tableChange().subscribe(() => {\n const columns = (TheQueries.getNode(this.editor, path) as TableElement).columns;\n this.isColumnEqual = columns?.every(col => columns[0].width === col.width) ?? true;\n });\n }\n\n ngOnDestroy() {\n this.tableChangeSubscriber?.unsubscribe();\n }\n\n setDeleteIcon() {\n const { selectedRowsIndex, selectedColumnsIndex } = this.tableStore;\n const selectedCellPositions = this.tableStore.getSelectedCellPositions();\n const pos = createTablePosition(this.editor);\n\n if (this.tableStore.selectedRowsIndex.length > 0) {\n this.deleteIcon = DeleteIcon['table-delete-rows'];\n this.iconName = '删除整行';\n }\n if (this.tableStore.selectedColumnsIndex.length > 0) {\n this.deleteIcon = DeleteIcon['table-delete-columns'];\n this.iconName = '删除整列';\n }\n if (this.tableStore.isSelectedTable) {\n this.deleteIcon = DeleteIcon.trash;\n this.iconName = '删除表格';\n }\n // 满足已选中整行或者整列\n const isSelectedWholeRowOrColumnCell =\n selectedRowsIndex.length * pos.getWidth() === selectedCellPositions.length ||\n selectedColumnsIndex.length * pos.getHeight() === selectedCellPositions.length;\n if (!isSelectedWholeRowOrColumnCell) {\n this.deleteIcon = null;\n this.iconName = null;\n }\n }\n\n onDelete(event: MouseEvent) {\n event.preventDefault();\n removeColumnOrRows(this.editor, this.tableStore);\n this.tableStore.clearDangerousCells();\n this.tableStore.clearSelectedCells();\n this.popoverRef.close();\n }\n\n onEnterDelete(event: MouseEvent) {\n this.tableStore.setDangerousCells();\n }\n\n onLeaveDelete(event: MouseEvent) {\n this.tableStore.clearDangerousCells();\n }\n\n openColorPanel(e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n changeColor(newColor: string) {\n setSelectedCellsBackgroundColor(this.editor, newColor, this.tableStore);\n this.selectedColor = newColor;\n }\n\n setFullscreen(event: MouseEvent) {\n this.tableOptions.setFullscreen(this.editor, event, this.tableElement);\n }\n\n mousedown(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n onCopy(e: Event) {\n e?.preventDefault();\n\n copyNode(this.editor, this.tableElement, this.thyNotifyService);\n }\n\n setEquallyColumnHandle(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n\n const columns = this.tableElement.columns;\n const sumWidth = columns.reduce((previousValue, currentValue) => {\n return previousValue + currentValue.width;\n }, 0);\n const equalColumns = columns.map(() => {\n return { width: sumWidth / columns.length };\n });\n\n TheTransforms.setNode(this.editor, { columns: equalColumns }, this.tableElement);\n }\n\n openTableOptionMenu(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n this.thyPopover.open(TheTableOptionsComponent, {\n origin: event.currentTarget as HTMLElement,\n initialState: {\n editor: this.editor\n },\n minWidth: 0,\n insideClosable: true,\n outsideClosable: true,\n hasBackdrop: false,\n placement: 'bottomLeft',\n originActiveClass: 'active',\n panelClass: 'table-options-pannel'\n });\n }\n}\n\nexport enum DeleteIcon {\n 'table-delete-rows' = 'table-delete-rows',\n 'table-delete-columns' = 'table-delete-columns',\n 'trash' = 'trash'\n}\n","<thy-actions thySize=\"xxs\">\n <ng-container *ngFor=\"let item of cellMenuList\">\n <a\n *ngIf=\"item.visibility\"\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"item.icon\"\n [thyTooltip]=\"item.name\"\n (mousedown)=\"item.actionHandle()\"\n ></a>\n </ng-container>\n <thy-divider *ngIf=\"hasDivider\" class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\"> </thy-divider>\n <a\n href=\"javascript:;\"\n thyAction\n thyTooltip=\"单元格背景\"\n thyColorPicker\n [(ngModel)]=\"selectedColor\"\n (ngModelChange)=\"changeColor($event)\"\n (mousedown)=\"openColorPanel($event)\"\n thyPlacement=\"bottomLeft\"\n [thyHasBackdrop]=\"false\"\n >\n <thy-icon thyIconName=\"background-tt\" thyIconType=\"twotone\" [thyTwotoneColor]=\"selectedColor\"></thy-icon>\n </a>\n <a\n href=\"javascript:;\"\n *ngIf=\"tableStore.isSelectedTable && !isColumnEqual\"\n thyAction\n thyTooltip=\"列等宽\"\n (mousedown)=\"setEquallyColumnHandle($event)\"\n >\n <thy-icon thyIconName=\"table-column-equal-width\"></thy-icon>\n </a>\n <a\n href=\"javascript:;\"\n *ngIf=\"tableStore.isSelectedTable && tableOptions?.showFullscreen\"\n thyAction\n thyTooltip=\"全屏\"\n (mousedown)=\"setFullscreen($event)\"\n >\n <thy-icon thyIconName=\"arrows-alt\"></thy-icon>\n </a>\n <a\n *ngIf=\"tableStore.isSelectedTable && !tableStore?.isFullscreen\"\n class=\"fullscreen-hidden\"\n href=\"javascript:;\"\n thyAction\n thyActionIcon=\"copy\"\n thyTooltip=\"复制\"\n (mousedown)=\"onCopy($event)\"\n ></a>\n <ng-container *ngIf=\"tableStore.isSelectedTable\">\n <thy-divider class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\"></thy-divider>\n <a href=\"javascript:;\" class=\"link-with-down\" thyAction (mousedown)=\"mousedown($event)\" (click)=\"openTableOptionMenu($event)\">\n <span>表格选项</span>\n <thy-icon class=\"font-size-sm text-desc ml-1\" thyIconName=\"caret-down\"></thy-icon>\n </a>\n </ng-container>\n <ng-container *ngIf=\"tableStore?.isFullscreen ? deleteIcon && !tableStore.isSelectedTable : deleteIcon\">\n <thy-divider class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\"></thy-divider>\n <a\n href=\"javascript:;\"\n thyAction\n thyType=\"danger\"\n [thyActionIcon]=\"deleteIcon\"\n [thyTooltip]=\"iconName\"\n (mousedown)=\"onDelete($event)\"\n (mouseenter)=\"onEnterDelete($event)\"\n (mouseleave)=\"onLeaveDelete($event)\"\n ></a>\n </ng-container>\n</thy-actions>\n","import { Overlay } from '@angular/cdk/overlay';\nimport { Injectable, NgZone } from '@angular/core';\nimport { ThyPlacement } from 'ngx-tethys/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { skip } from 'rxjs/operators';\nimport { isColorPanel } from '../../utils/color-picker';\nimport { TableElement } from '../../custom-types';\nimport { TheContextService } from '../..//services/context.service';\nimport { TheTableToolbarComponent } from './components/toolbar/table-toolbar.component';\nimport { TableStore } from './table.store';\nimport { AngularEditor } from 'slate-angular';\nimport { TableEditor } from './table.editor';\n\n@Injectable()\nexport class TableService {\n backdropClosable = false;\n\n hasBackdrop = false;\n\n insideClosable = false;\n\n placement: ThyPlacement = 'topLeft';\n\n offset = 8;\n\n toolbarRef: ThyPopoverRef<any>;\n\n get isOpened() {\n return this.toolbarRef && this.toolbarRef.componentInstance;\n }\n\n constructor(\n private thyPopover: ThyPopover,\n private overlay: Overlay,\n private tableStore: TableStore,\n private ngZone: NgZone,\n private theContextService: TheContextService\n ) {}\n\n private openToolbar(origin: HTMLElement, tableElement: TableElement) {\n if (this.isOpened) {\n if (this.toolbarRef.containerInstance.config.origin === origin) {\n return;\n }\n this.toolbarRef.close();\n }\n this.toolbarRef = this.thyPopover.open(TheTableToolbarComponent, {\n initialState: {\n tableStore: this.tableStore,\n tableElement\n },\n viewContainerRef: this.theContextService.getOptions().viewContainerRef,\n origin: this.getOrigin(origin),\n backdropClosable: this.backdropClosable,\n panelClass: 'the-plugin-toolbar-popover',\n placement: this.placement,\n offset: this.offset,\n hasBackdrop: this.hasBackdrop,\n insideClosable: this.insideClosable,\n minWidth: 0,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n manualClosure: true\n });\n if (this.toolbarRef) {\n this.toolbarRef\n .getOverlayRef()\n .outsidePointerEvents()\n .pipe(skip(1))\n .subscribe(event => {\n if (isColorPanel(event.target as HTMLElement)) {\n return;\n }\n if (!this.toolbarRef.getOverlayRef().hostElement.contains(event.target as HTMLElement)) {\n this.closeToolbar();\n }\n });\n }\n }\n\n afterSelectedCells(origin: HTMLElement, element: TableElement) {\n this.openToolbar(origin, element);\n }\n\n getOrigin(origin: HTMLElement): HTMLElement {\n const focusCellElement = this.tableStore.focusCellElement;\n if ((origin instanceof HTMLTableCellElement || focusCellElement) && origin.tagName !== 'TH') {\n const { selectedRowsIndex, selectedColumnsIndex, focusCellPath, isSelectedTable, focusCellElement } = this.tableStore;\n const [row, col] = focusCellPath.slice(-2);\n const tableElement = focusCellElement.closest('.the-table-container') as HTMLElement;\n if (isSelectedTable && col === 0 && row === 0) {\n return tableElement.querySelector('.the-table-corner-controls');\n }\n if (selectedColumnsIndex.length > 0 && row === 0) {\n return tableElement.querySelectorAll('.the-table-col-controls')[col] as HTMLElement;\n }\n if (selectedRowsIndex.length > 0 && col === 0) {\n return tableElement.querySelectorAll('.the-table-row-controls-button-wrap')[row] as HTMLElement;\n }\n }\n return origin;\n }\n\n public closeToolbar() {\n if (this.isOpened) {\n this.ngZone.run(() => {\n this.toolbarRef.close();\n });\n return this.toolbarRef.afterClosed();\n }\n }\n\n /**\n * 判断是否触发了点选,并处理点选状态\n * @param e 事件对象\n * @param tbody tbody元素\n */\n public handleKeydownForPointerSelection(e: KeyboardEvent, tbody: HTMLElement) {\n const cell = (tbody?.querySelector('.focused-cell') as HTMLTableCellElement) || this.tableStore.focusCellElement;\n if (cell) {\n this.tableStore.pointerSelection = true;\n this.tableStore.selectCellStart(cell, this.tableStore.editor);\n }\n }\n\n /**\n * 判断是否触发了区域选择,并处理区域选择状态\n * @param e 事件对象\n * @param tbody tbody元素\n */\n public handleKeydownForAreaSelection(e: KeyboardEvent, tbody: HTMLElement) {\n const isTable = TableEditor.isActive(this.tableStore.editor);\n const cell = (tbody?.querySelector('.focused-cell') as HTMLTableCellElement) || this.tableStore.focusCellElement;\n if (isTable && cell) {\n this.tableStore.areaSelectionStart(cell, this.tableStore.editor);\n this.tableStore.areaSelection = true;\n }\n }\n\n public cancelPointerSelection() {\n if (this.tableStore.pointerSelection) {\n this.tableStore.pointerSelection = false;\n }\n }\n\n public cancelAreaSelection() {\n if (this.tableStore.areaSelection) {\n this.tableStore.areaSelection = false;\n this.tableStore.selectCellEnd(this.tableStore.editor);\n }\n }\n\n /**\n * 进行区域选择时,阻止默认的选区事件\n * @param e 事件对象\n * @param editor 编辑器对象\n */\n public selectStartPreventDefault(e: KeyboardEvent) {\n const isReadonly = AngularEditor.isReadonly(this.tableStore.editor);\n const cells = this.tableStore.getSelectedCellPositions();\n if (!isReadonly && this.tableStore.areaSelection && cells.length > 1) {\n e.preventDefault();\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TABLE_CONTROL, TABLE_NUMBER_COLUMN, ThePluginTableOption } from './table.types';\nimport { TableElement } from '../../custom-types';\nimport { ELEMENT_TO_COMPONENT } from 'slate-angular';\nimport { getElementWidth } from '../../utils';\n\n@Pipe({ name: 'freezeColumn' })\nexport class TableFreezeColumnPipe implements PipeTransform {\n transform(table: TableElement, tablePluginOptions: ThePluginTableOption) {\n const rows = table.children?.map(item => item.children);\n const headerColumnWidth = table.columns && table.columns[0].width;\n const tableComponent = ELEMENT_TO_COMPONENT.get(table);\n let stickyColumn = true;\n let buffer = TABLE_CONTROL;\n if (table.options?.numberedColumn) {\n buffer = TABLE_NUMBER_COLUMN + TABLE_CONTROL;\n }\n if (tableComponent) {\n const tableWidth = getElementWidth(tableComponent.elementRef.nativeElement);\n stickyColumn = headerColumnWidth + buffer < tableWidth;\n }\n // 标题列存在合并的列时,取消冻结\n const mergeColumnCells = rows && rows.map(cells => cells[0]).filter(item => item.colspan && item.colspan !== 1);\n return !!(tablePluginOptions?.freezeColumnHeader && table.options?.headerColumn && !mergeColumnCells.length && stickyColumn);\n }\n}\n\n@Pipe({ name: 'freezeRow' })\nexport class TableFreezeRowPipe implements PipeTransform {\n transform(table: TableElement, headerRow: boolean, tablePluginOptions: ThePluginTableOption) {\n // 标题行存在合并的行时,取消冻结\n if (table.children) {\n const mergeRows = table.children[0]?.children.filter(item => item.rowspan && item.rowspan !== 1);\n return !!(headerRow && !mergeRows.length && tablePluginOptions?.freezeRowHeader);\n }\n return false;\n }\n}\n","export const TABLE_SELECTOR = '.the-table';\n\nexport const TABLE_WRAPPER_SELECTOR = '.the-table-wrapper';\n\nexport const RESIZE_OVERLAY_SELECTOR = '.the-table-resize-overlay-thumb';\n","import { Directive, OnDestroy, AfterViewInit, ElementRef, ViewContainerRef, ChangeDetectorRef, NgZone, Inject } from '@angular/core';\nimport { fromEvent, merge, ReplaySubject } from 'rxjs';\nimport { map, takeUntil, filter, mapTo } from 'rxjs/operators';\nimport { Position, TableCellEventDispatcher } from './event-dispatcher';\nimport { RESIZE_OVERLAY_SELECTOR } from './selectors';\nimport { ColumnResizeNotifierSource } from './column-resize-notifier';\nimport { SLA_TABLE_CELL_SELECTOR } from '../../constants/selector';\nimport { TheTableComponentBase, THE_TABLE_COMPONENT_TOKEN } from '../../plugins/table/table.types';\n\n@Directive({\n selector: 'div[theColumnResize]'\n})\nexport class TheColumnResizeDirective implements AfterViewInit, OnDestroy {\n protected readonly destroyed = new ReplaySubject<void>();\n protected position: Position;\n protected resizeStarted = false;\n\n constructor(\n public elementRef: ElementRef,\n public viewContainerRef: ViewContainerRef,\n public cdr: ChangeDetectorRef,\n public ngZone: NgZone,\n public eventDispatcher: TableCellEventDispatcher,\n public resizeNotifier: ColumnResizeNotifierSource,\n @Inject(THE_TABLE_COMPONENT_TOKEN)\n public theTableComponent: TheTableComponentBase\n ) {}\n\n ngAfterViewInit() {\n this._listenForCellEdgeHoverEvents();\n this._listenStartDrag();\n this._listenEndDrag();\n }\n\n _listenForCellEdgeHoverEvents() {\n this.ngZone.runOutsideAngular(() => {\n const element = this.elementRef.nativeElement!;\n fromEvent<MouseEvent>(element, 'mousemove') // mouseover to mousemove 增加灵敏性\n .pipe(\n filter(() => !this.resizeStarted),\n map(event => {\n if (!this.theTableComponent.isCollapsedAndNonReadonly) {\n return null;\n }\n const cell = (event.target as HTMLElement).closest(SLA_TABLE_CELL_SELECTOR) as HTMLTableCellElement;\n const positions = [Position.top, Position.right, Position.bottom, Position.left];\n if (cell) {\n const rectCell = cell.getBoundingClientRect();\n const topOffset = event.clientY - rectCell.y;\n const rightOffset = rectCell.right - event.clientX;\n const bottomOffset = rectCell.bottom - event.clientY;\n const leftOffset = event.clientX - rectCell.x;\n const positionOffsets = [topOffset, rightOffset, bottomOffset, leftOffset];\n const minIndex = positionOffsets.indexOf(Math.min(...positionOffsets));\n this.position = positions[minIndex];\n return { cell, position: this.position };\n }\n return null;\n }),\n takeUntil(this.destroyed)\n )\n .subscribe(this.eventDispatcher.tableCellHovered);\n fromEvent<MouseEvent>(element, 'mouseleave')\n .pipe(\n filter(event => {\n return !!event.relatedTarget && !(event.relatedTarget as Element).matches(RESIZE_OVERLAY_SELECTOR);\n }),\n mapTo(null),\n takeUntil(this.destroyed)\n )\n .subscribe(this.eventDispatcher.tableCellHovered);\n });\n }\n\n _listenStartDrag() {\n this.resizeNotifier.resizeStarted.pipe(takeUntil(this.destroyed)).subscribe(() => {\n this.resizeStarted = true;\n if (this.position === Position.left || this.position === Position.right) {\n this.theTableComponent.initializeColumns();\n } else {\n this.theTableComponent.initializeRows();\n }\n });\n }\n\n _listenEndDrag() {\n // resizeCanceled 按照 resizeCompleted 处理,因为界面是实时变化的。\n merge(this.resizeNotifier.resizeCanceled, this.resizeNotifier.resizeCompleted)\n .pipe(takeUntil(this.destroyed))\n .subscribe(() => {\n // 如果没有进行拖拽就不要进行后续表格宽高计算了\n if (!this.resizeStarted) {\n return;\n }\n this.resizeStarted = false;\n if (this.position === Position.left || this.position === Position.right) {\n this.theTableComponent.transformColumnsWidth();\n } else {\n this.theTableComponent.transformRowHeight();\n }\n });\n }\n\n ngOnDestroy() {\n this.destroyed.next();\n this.destroyed.complete();\n }\n}\n","import { Component, OnInit, OnDestroy, Input, ChangeDetectorRef, Renderer2 } from '@angular/core';\nimport { Editor, Range } from 'slate';\nimport { ELEMENT_TO_COMPONENT } from 'slate-angular';\nimport { TableEditor } from '../../table.editor';\nimport { TablePosition } from '../../utils/table-position';\nimport { TableStore } from '../../table.store';\nimport type { TheTableComponent } from '../table.component';\nimport { TOP_CELL_CLASS, TableOptions } from '../../table.types';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { createTablePosition } from '../../utils/create-table-position';\n\n@Component({\n selector: 'the-table-insert-mark',\n templateUrl: './insert-mark.component.html',\n host: {\n class: 'the-table-insert-mark'\n }\n})\nexport class TheInsertMarkComponent implements OnInit, OnDestroy {\n @Input() type: 'row' | 'column';\n\n @Input() at: number;\n\n @Input() tableStore: TableStore;\n\n @Input() parentElement: HTMLElement;\n\n public insertLength: string;\n\n public dotWrapperHovered: boolean;\n\n destroy$ = new Subject<void>();\n\n tooltipContent = '';\n\n disabled = false;\n\n get editor(): Editor {\n return this.tableStore && this.tableStore.editor;\n }\n\n constructor(private cdr: ChangeDetectorRef, public renderer2: Renderer2) {}\n\n ngOnInit() {\n this.tooltipContent = this.type === 'row' ? '插入行' : '插入列';\n\n this.tableStore\n .selectedCellsChange()\n .pipe(takeUntil(this.destroy$))\n .subscribe(selectedCellPositions => {\n this.disabled = !!selectedCellPositions.length;\n });\n }\n\n ngOnDestroy() {\n this.destroy$?.next();\n this.destroy$?.complete();\n }\n\n onMouseDown(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n if (this.disabled) {\n return;\n }\n const fun = this.type === 'row' ? TableEditor.insertRow : TableEditor.insertColumn;\n fun(this.editor, 1, this.at);\n this.tableStore.changeCells();\n }\n\n onMouseEnter(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n if (this.disabled) {\n return;\n }\n this.dotWrapperHovered = true;\n this.insertLength = this.getLength();\n this.parentElement && this.renderer2.addClass(this.parentElement, TOP_CELL_CLASS);\n this.cdr.detectChanges();\n }\n\n onMouseLeave(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n if (this.disabled) {\n return;\n }\n this.dotWrapperHovered = false;\n this.parentElement && this.renderer2.removeClass(this.parentElement, TOP_CELL_CLASS);\n this.cdr.detectChanges();\n }\n\n getLength() {\n const { selection } = this.editor;\n if (selection && Range.isCollapsed(selection)) {\n const { table } = createTablePosition(this.editor, selection.anchor.path);\n if (!table) {\n return;\n }\n const tableComponent = ELEMENT_TO_COMPONENT.get(table) as TheTableComponent;\n const tableWrapper = tableComponent.tableWrapper.nativeElement as HTMLElement;\n const tableElement = tableComponent.theTableElement.nativeElement as HTMLElement;\n let result = 0;\n if (this.type === 'row') {\n result = tableWrapper.offsetWidth;\n } else {\n result = tableElement.offsetHeight - 1;\n }\n return result + 'px';\n }\n }\n}\n","<div\n [thyTooltip]=\"!disabled && tooltipContent\"\n class=\"the-table-controls-insert-wrapper\"\n [ngClass]=\"{ disabled: disabled }\"\n contenteditable=\"false\"\n (mousedown)=\"onMouseDown($event)\"\n (mouseenter)=\"onMouseEnter($event)\"\n (mouseleave)=\"onMouseLeave($event)\"\n>\n <div\n class=\"the-table-controls-insert-line\"\n *ngIf=\"dotWrapperHovered\"\n [attr.data-dot-type]=\"type\"\n [ngStyle]=\"{ height: type === 'column' && insertLength, width: type === 'row' && insertLength }\"\n ></div>\n</div>\n","import {\n Component,\n OnInit,\n ElementRef,\n OnDestroy,\n ChangeDetectorRef,\n NgZone,\n AfterViewInit,\n ViewChild,\n HostListener,\n Renderer2,\n ViewChildren,\n QueryList,\n Inject\n} from '@angular/core';\nimport { fromEvent, merge, Subject } from 'rxjs';\nimport { take, takeUntil, debounceTime, filter, distinctUntilChanged, map } from 'rxjs/operators';\nimport { Editor, Transforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { getPluginOptions } from '../../../core';\nimport { TheEditor, TheBaseElementComponent, PluginKeys, ThePluginOption, TheModeConfig, THE_MODE_TOKEN } from '../../../interfaces';\nimport { SLA_TABLE_CELL_SELECTOR } from '../../../constants/selector';\nimport { TableCellElement, TableElement, TableRowElement } from '../../../custom-types';\nimport { ColumnResizeNotifierSource, TableCellEventDispatcher } from '../../../components';\nimport { TheTableContextMenuService } from '../../../services/table-contextmenu.service';\nimport { coercePixelsFromCssValue, getElementHeight, getElementWidth, isColorInput, isColorPanel } from '../../../utils';\nimport * as TheTransforms from '../../../transforms';\nimport { TheContextService } from '../../../services/context.service';\nimport { DEFAULT_SCROLL_CONTAINER } from '../../../constants/default';\nimport { ScrollDirection } from '../../../constants/node-types';\nimport { TableStore } from '../table.store';\nimport { TableService } from '../table.service';\nimport {\n HEADER_CELL_CLASS,\n TableOptions,\n TableWithStickyRowClass,\n TABLE_CONTROL,\n TABLE_INSERT_MASK,\n TABLE_NUMBER_COLUMN,\n TABLE_PADDING,\n ThePluginTableOption,\n TheTableColumn,\n THE_TABLE_COMPONENT_TOKEN\n} from '../table.types';\nimport {\n isVirtualKey,\n calcColumnGroups,\n getColumnsWidth,\n getGridColumns,\n createTablePosition,\n isSelectedAllCell,\n calculateRowControls,\n isHeaderRow\n} from '../utils';\nimport { TableFreezeColumnPipe, TableFreezeRowPipe } from '../table.pipe';\n\n@Component({\n selector: 'the-table, [theTable]',\n templateUrl: './table.component.html',\n providers: [\n TableStore,\n TableService,\n TheTableContextMenuService,\n TableCellEventDispatcher,\n ColumnResizeNotifierSource,\n TableFreezeColumnPipe,\n TableFreezeRowPipe,\n {\n provide: THE_TABLE_COMPONENT_TOKEN,\n useExisting: TheTableComponent\n }\n ],\n host: {\n '[class.the-table-with-controls]': 'isInTable || tableStore.isRightClicking || tableStore.isFocusedInput',\n '[class.the-table-with-sticky-column]': 'freezeColumnPipe.transform(element, tablePluginOptions)',\n '[class.the-numbered-table]': 'element?.options?.numberedColumn',\n '[class.the-table-selection-hide]': 'tableStore.isCellSelecting || tableStore.isRightClicking || tableStore.isFocusedInput'\n }\n})\nexport class TheTableComponent extends TheBaseElementComponent<TableElement, Editor> implements OnInit, AfterViewInit, OnDestroy {\n headerRow = false;\n\n isSelectedAllCell: boolean = false;\n\n destroy$ = new Subject<void>();\n\n rowControls: { height: number; rowIndex: number }[] = [];\n\n colControls = [];\n\n isInTable: boolean;\n\n tablePluginOptions: ThePluginOption<ThePluginTableOption>;\n\n isStickyTop: boolean;\n\n isScrollX: boolean;\n\n scrollContainerTop: number;\n\n tableRectLeft: number;\n\n isRightShadow: boolean;\n\n isLeftShadow: boolean;\n\n previousScrollContainer: string;\n\n columns: TheTableColumn[];\n\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n get tbodyNativeElement(): HTMLElement {\n return this.tbodyElement?.nativeElement;\n }\n\n @ViewChild('tableWrapper', { read: ElementRef, static: true })\n tableWrapper: ElementRef<HTMLElement>;\n\n @ViewChild('theTable', { read: ElementRef, static: true })\n theTableElement: ElementRef;\n\n @ViewChild('tbody', { read: ElementRef, static: true })\n tbodyElement: ElementRef;\n\n @ViewChild('tableRowControlsWrapper', { read: ElementRef, static: false })\n tableRowControlsWrapper: ElementRef<HTMLElement>;\n\n @ViewChild('columnControlsWrapper', { read: ElementRef, static: false })\n columnControlsWrapper: ElementRef<HTMLElement>;\n\n @ViewChild('cornerControl', { read: ElementRef, static: false })\n cornerControl: ElementRef<HTMLElement>;\n\n @ViewChild('rowControlsInner', { read: ElementRef, static: false })\n rowControlsInner: ElementRef<HTMLElement>;\n\n @ViewChild('headerRowLeftShadow', { read: ElementRef, static: false })\n headerRowLeftShadow: ElementRef<HTMLElement>;\n\n @ViewChild('headerRowRightShadow', { read: ElementRef, static: false })\n headerRowRightShadow: ElementRef<HTMLElement>;\n\n @ViewChild('colgroup', { read: ElementRef, static: false })\n colgroup: ElementRef<HTMLElement>;\n\n @ViewChildren('rowControlsButtonWrapper', { read: ElementRef }) rowControlsButtonWrapper: QueryList<ElementRef<HTMLElement>>;\n\n @HostListener('mousedown', ['$event'])\n handleMousedown(event: MouseEvent) {\n if (event.target instanceof Element && this.tbodyNativeElement.contains(event.target)) {\n return;\n }\n if (!TheEditor.isFocused(this.editor)) {\n TheEditor.focus(this.editor);\n }\n AngularEditor.moveBlockCard(this.editor, this.element, { direction: 'left' });\n event.preventDefault();\n }\n\n onContextChange() {\n super.onContextChange();\n if (this.initialized) {\n Promise.resolve().then(() => {\n this.tableStore.emitTableChange();\n this.tableStore.setSelectedColumnsAndRowIndex();\n this.bindTableScrollingShadow();\n this.useRowControls();\n this.setHeaderCellStyle();\n this.setHeaderRowShadow();\n this.setHeaderRowLeftStyle();\n this.cdr.markForCheck();\n });\n this.getIsInTable();\n this.getColControls();\n this.getColumnGroups();\n }\n this.headerRow = isHeaderRow(this.element);\n }\n\n constructor(\n elementRef: ElementRef<HTMLElement>,\n public eventDispatcher: TableCellEventDispatcher,\n public resizeNotifier: ColumnResizeNotifierSource,\n public tableStore: TableStore,\n public cdr: ChangeDetectorRef,\n public ngZone: NgZone,\n public tableService: TableService,\n private theTableContextMenuService: TheTableContextMenuService,\n private freezeColumnPipe: TableFreezeColumnPipe,\n public freezeRowPipe: TableFreezeRowPipe,\n private renderer: Renderer2,\n private contextService: TheContextService,\n @Inject(THE_MODE_TOKEN)\n private config: TheModeConfig\n ) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.getColControls();\n this.getIsInTable();\n this.tablePluginOptions = getPluginOptions<ThePluginTableOption>(this.editor, PluginKeys.table);\n if (this.tablePluginOptions.showFullscreen && this.tablePluginOptions.fullscreenAction) {\n this.tablePluginOptions\n .fullscreenAction(this.editor)\n .pipe(\n takeUntil(this.destroy$),\n filter(content => {\n return content.element === this.element;\n }),\n map(content => {\n return content.state === 'off' ? false : true;\n })\n )\n .subscribe(value => {\n this.tableStore.isFullscreen = value;\n if (this.tableStore.isFullscreen) {\n this.previousScrollContainer = this.editor.options.scrollContainer;\n this.editor.options.scrollContainer = DEFAULT_SCROLL_CONTAINER;\n } else {\n this.editor.options.scrollContainer = this.previousScrollContainer;\n }\n this.isStickyTop = false;\n this.setHeaderRowStyle();\n this.contextService.rebindContainerScroll();\n });\n }\n this.tableStore\n .selectedCellsChange()\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.isSelectedAllCell = isSelectedAllCell(this.editor, this.tableStore.getSelectedCellPositions());\n });\n }\n\n getWrapperWidth() {\n const tableContainer = this.nativeElement.firstChild as HTMLElement;\n const paddingLeft = coercePixelsFromCssValue(window.getComputedStyle(tableContainer)['paddingLeft']);\n const width = tableContainer.offsetWidth - paddingLeft;\n return width;\n }\n\n ngAfterViewInit() {\n this.ngZone.onStable.pipe(take(1)).subscribe(async () => {\n const blockCardElement = this.nativeElement.closest('slate-block-card');\n if (blockCardElement) {\n blockCardElement.classList.add(`slate-block-card-${this.element.type}`);\n }\n this.tableStore.initEditor(this.editor);\n this.subscribeCellsChange();\n this.subscribeCellPositionChange();\n this.listenTableContextMenuEvent();\n this.listenOnSelectedCells();\n this.listenKeydownEvent();\n this.listenKeyupEvent();\n this.listenTableWrapperScroll();\n this.listenSelectstartEvent();\n this.getColumnGroups();\n this.bindTableScrollingShadow();\n\n if (this.element.options?.numberedColumn) {\n const loadImageDone = await this.resolveImage();\n // 等待序号列表格内图片加载完成后再去渲染表格行高度\n if (loadImageDone) {\n this.useRowControls();\n this.cdr.detectChanges();\n }\n } else {\n this.useRowControls();\n this.cdr.markForCheck();\n }\n this.setHeaderCellStyle();\n const { left } = this.nativeElement.getBoundingClientRect();\n this.tableRectLeft = left;\n this.subscribeScrollContainerScroll();\n this.contextService.containerResized$.pipe(takeUntil(this.destroy$)).subscribe(result => {\n if (result.widthChanged) {\n this.setHeaderRowShadow();\n this.setHeaderRowLeftStyle();\n }\n });\n\n this.contextService.theEditorResized$.pipe(takeUntil(this.destroy$)).subscribe(result => {\n if (result.widthChanged) {\n this.setGridColumnsStyle();\n this.setStickyRowStyle();\n this.bindTableScrollingShadow();\n this.setHeaderRowShadow();\n this.getColumnGroups();\n }\n });\n\n this.contextService.windowResized$.pipe(takeUntil(this.destroy$)).subscribe(result => {\n if (result.widthChanged) {\n this.setHeaderRowShadow();\n this.setHeaderRowLeftStyle();\n }\n });\n });\n }\n\n getColumnGroups() {\n this.columns = calcColumnGroups(this.readonly, this.element, this.elementRef.nativeElement.offsetWidth, this.config.mode);\n this.cdr.detectChanges();\n }\n\n /* 给标题行的左/右加阴影 */\n setHeaderRowShadow() {\n // 固定标题行遮盖\n this.renderer.setStyle(this.tableWrapper.nativeElement, 'z-index', this.isStickyTop ? '3' : '0');\n if (this.isLeftShadow || this.isRightShadow) {\n let { height, top } = this.calcHeaderRowShadow();\n let { left, width } = this.nativeElement.getBoundingClientRect();\n if (this.isRightShadow && this.headerRowRightShadow) {\n const headerRowRightShadow = this.headerRowRightShadow.nativeElement;\n this.renderer.setStyle(headerRowRightShadow, 'height', `${height}px`);\n this.renderer.setStyle(headerRowRightShadow, 'top', `${top}px`);\n this.renderer.setStyle(headerRowRightShadow, 'left', `${left + width - 8}px`);\n }\n if (this.isLeftShadow && this.headerRowLeftShadow) {\n const headerRowLeftShadow = this.headerRowLeftShadow.nativeElement;\n this.renderer.setStyle(headerRowLeftShadow, 'height', `${height}px`);\n this.renderer.setStyle(headerRowLeftShadow, 'top', `${top}px`);\n this.renderer.setStyle(headerRowLeftShadow, 'left', `${left + this.getColControlButtonWidth()}px`);\n }\n }\n }\n\n calcHeaderRowShadow() {\n const headerRowHeight = calculateRowControls(this.editor, this.element)[0]?.height;\n let height = headerRowHeight;\n // 默认(没有聚焦)的 top 值:滚动容器高度 + 表格的padding(8)\n let top = this.scrollContainerTop + TABLE_PADDING;\n // 聚焦状态下: 高度 + control(11),top 加一个 mask(19)\n if (this.isCollapsedAndNonReadonly) {\n height = height + TABLE_CONTROL;\n top = top + TABLE_INSERT_MASK - 1;\n }\n return { height, top };\n }\n\n subscribeScrollContainerScroll() {\n this.ngZone.runOutsideAngular(() => {\n this.contextService.containerScrolled$\n .pipe(\n takeUntil(this.destroy$),\n map(entires => {\n const { event, direction } = entires;\n if (direction === ScrollDirection.X) {\n const { left } = this.nativeElement.getBoundingClientRect();\n this.isScrollX = this.tableRectLeft !== left;\n this.setHeaderRowLeftStyle();\n }\n if (direction === ScrollDirection.Y) {\n this.scrollContainerTop = (event.target as HTMLElement).getBoundingClientRect().top;\n const clientRect = (this.theTableElement.nativeElement as HTMLElement).getBoundingClientRect();\n const headerTopHeight = this.isInTable ? -19 : 11;\n const headerRowHeight = calculateRowControls(this.editor, this.element)[0]?.height;\n const top = clientRect.top + headerTopHeight;\n this.isStickyTop =\n top <= this.scrollContainerTop + 8 &&\n clientRect.bottom - this.scrollContainerTop >= headerRowHeight &&\n this.freezeRowPipe.transform(this.element, this.headerRow, this.tablePluginOptions);\n // 标题行内容超过固定高度时移除冻结\n if (this.isStickyTop) {\n const maxHeaderRowHeight = (24 + 8) * 11; // 超出 11 行,取消冻结\n this.isStickyTop = headerRowHeight <= maxHeaderRowHeight;\n }\n }\n return this.isStickyTop;\n }),\n distinctUntilChanged()\n )\n .subscribe(() => {\n this.setHeaderRowStyle();\n });\n });\n }\n\n setHeaderCellStyle() {\n let headerRowCells = this.element.children[0].children;\n let headerColumnCells = this.element.children.map(item => item.children[0]);\n if (!this.headerRow) {\n this.removeHeaderCellStyle(headerRowCells);\n headerRowCells = [];\n }\n if (!this.element.options?.headerColumn) {\n this.removeHeaderCellStyle(headerColumnCells);\n headerColumnCells = [];\n }\n let headerCells = headerRowCells.concat(headerColumnCells).filter(item => !item.hidden);\n if (this.headerRow && this.element.options?.headerColumn) {\n headerCells.shift();\n }\n if (headerCells.length) {\n headerCells.map(item => {\n const cellElement = TheEditor.toDOMNode(this.editor, item);\n this.renderer.addClass(cellElement, HEADER_CELL_CLASS);\n });\n }\n this.setHeaderColumnAndControlStyle(headerColumnCells);\n this.setHeaderRowStyle();\n }\n\n removeHeaderCellStyle(cells: TableCellElement[]) {\n cells.map(item => {\n const cellElement = TheEditor.toDOMNode(this.editor, item);\n this.renderer.removeClass(cellElement, HEADER_CELL_CLASS);\n });\n }\n\n setHeaderColumnAndControlStyle(cells: TableCellElement[]) {\n let headerColumnCells = [];\n if (cells.length === 0) {\n headerColumnCells = this.element.children.map(item => item.children[0]).filter(item => !item.hidden);\n } else {\n headerColumnCells = cells.filter(item => !item.hidden);\n }\n const headerColControl = this.columnControlsWrapper.nativeElement.firstElementChild;\n const headerColumnElements = headerColumnCells.map(item => {\n return TheEditor.toDOMNode(this.editor, item);\n });\n [...headerColumnElements, headerColControl].map(item => {\n if (this.freezeColumnPipe.transform(this.element, this.tablePluginOptions)) {\n this.renderer.addClass(item, 'the-sticky-cell');\n } else {\n this.renderer.removeClass(item, 'the-sticky-cell');\n }\n });\n }\n\n setHeaderRowStyle() {\n this.setGridColumnsStyle();\n this.setStickyRowStyle();\n this.setHeaderRowShadow();\n this.setHeaderRowLeftStyle();\n }\n\n setGridColumnsStyle() {\n const colControl = this.columnControlsWrapper.nativeElement;\n if (this.freezeRowPipe.transform(this.element, this.headerRow, this.tablePluginOptions)) {\n const headerRow = (this.tbodyElement.nativeElement as HTMLElement).childNodes[0] as HTMLElement;\n const cellsWidth =\n this.element?.columns && this.colgroup?.nativeElement\n ? getColumnsWidth(this.colgroup.nativeElement, true)\n : this.getDefaultCellWidth();\n\n const gridColumns = getGridColumns(headerRow, cellsWidth);\n const tablePadding = 44;\n let tableWidth = this.elementRef.nativeElement.getBoundingClientRect().width;\n\n // 序号列存在时, 表格宽度加序号列宽度\n // 只读模式下, 表格宽度不变\n tableWidth = !this.readonly && this.element?.options?.numberedColumn ? tableWidth - tablePadding : tableWidth;\n\n const stickyRows = this.isInTable ? [colControl, headerRow] : [headerRow];\n stickyRows.map(item => {\n this.renderer.setStyle(item, 'grid-template-columns', gridColumns);\n this.renderer.setStyle(item, 'width', tableWidth + 'px');\n });\n }\n }\n\n setStickyRowStyle() {\n const colControl = this.columnControlsWrapper.nativeElement;\n const headerRow = this.nativeElement.querySelector('tbody tr');\n const rowControlInner = this.rowControlsInner.nativeElement;\n const tableCornerBtn = this.cornerControl.nativeElement;\n const headerRowHeight = calculateRowControls(this.editor, this.element)[0]?.height;\n const numberedColumn = this.element?.options?.numberedColumn;\n\n if (this.isStickyTop) {\n this.renderer.addClass(this.nativeElement, TableWithStickyRowClass);\n this.updateStickyRowScrollLeft();\n const top = this.isInTable ? this.scrollContainerTop + 36 : this.scrollContainerTop;\n this.renderer.setStyle(headerRow, 'top', top + 'px');\n this.renderer.setStyle(headerRow, 'height', `${headerRowHeight}px`);\n if (this.isInTable || numberedColumn) {\n [colControl, tableCornerBtn].map(item => {\n item && this.renderer.setStyle(item, 'top', this.scrollContainerTop + 'px');\n });\n }\n // 优化:table 的 padding-top 应该动态变化(与阴影同变)\n const tablePaddingTop = headerRowHeight + 11; // 标题行高 + ctrl btn(11px)高度\n this.renderer.setStyle(this.theTableElement.nativeElement, 'padding-top', tablePaddingTop + 'px');\n this.renderer.setStyle(rowControlInner, 'padding-top', tablePaddingTop + 'px');\n this.renderer.setStyle(this.tableRowControlsWrapper.nativeElement, 'z-index', '4');\n } else {\n this.renderer.removeClass(this.nativeElement, TableWithStickyRowClass);\n [headerRow, colControl, tableCornerBtn].map(item => {\n item && this.renderer.setStyle(item, 'top', null);\n });\n this.renderer.setStyle(this.theTableElement.nativeElement, 'padding-top', null);\n this.renderer.setStyle(rowControlInner, 'padding-top', null);\n this.renderer.setStyle(this.tableRowControlsWrapper.nativeElement, 'z-index', '1');\n }\n\n const rowControlButton = this.rowControlsButtonWrapper.first?.nativeElement;\n if (this.initialized && rowControlButton) {\n this.setRowControlButtonStyle(rowControlButton);\n } else {\n // setTimeout: 需要等待 rowControls 在 dom 中渲染完毕后才能获取到 rowControlButton\n setTimeout(() => this.setRowControlButtonStyle(rowControlButton));\n }\n }\n\n setRowControlButtonStyle(rowControlButton: HTMLElement) {\n const numberedColumn = this.element?.options?.numberedColumn;\n if (!rowControlButton) {\n rowControlButton = this.rowControlsButtonWrapper.first?.nativeElement;\n }\n if (this.isStickyTop) {\n if ((this.isInTable || numberedColumn) && rowControlButton) {\n this.renderer.setStyle(rowControlButton, 'top', this.scrollContainerTop + 'px');\n }\n } else {\n rowControlButton && this.renderer.setStyle(rowControlButton, 'top', null);\n }\n }\n\n bindTableScrollingShadow() {\n const nativeElement = this.tableWrapper.nativeElement;\n const scrollLeft = nativeElement.scrollLeft;\n const scrollWidth = nativeElement.scrollWidth;\n const clientWidth = nativeElement.clientWidth;\n this.isLeftShadow = scrollLeft > 0;\n this.isRightShadow = scrollLeft + clientWidth < scrollWidth;\n const rows = nativeElement.querySelectorAll(`tr`);\n const stickyCells = Array.from(rows).map(\n item => item.querySelector('th.the-table-col-controls') || item.querySelector('td.slate-element-table-cell')\n );\n const isColumnHeader = this.freezeColumnPipe.transform(this.element, this.tablePluginOptions);\n const elements = isColumnHeader ? stickyCells : [nativeElement.parentElement];\n if (this.isLeftShadow) {\n elements.forEach(element => {\n element.classList.add('the-table-left-shadow');\n });\n } else {\n elements.forEach(item => {\n item.classList.remove('the-table-left-shadow');\n });\n }\n if (this.isRightShadow) {\n nativeElement.parentElement.classList.add('the-table-right-shadow');\n } else {\n nativeElement.parentElement.classList.remove('the-table-right-shadow');\n }\n }\n\n subscribeCellPositionChange() {\n this.tableStore\n .cellsPositionChange()\n .pipe(debounceTime(100), takeUntil(this.destroy$))\n .subscribe(() => {\n this.cdr.detectChanges();\n });\n }\n\n subscribeCellsChange() {\n this.tableStore\n .dangerousOrSelectedCellsChange()\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.cdr.detectChanges();\n });\n }\n\n useRowControls() {\n if (\n (this.selection && !this.readonly) ||\n this.element?.options?.numberedColumn ||\n this.tableStore.isRightClicking ||\n this.tableStore.isFocusedInput\n ) {\n this.rowControls = calculateRowControls(this.editor, this.element);\n }\n }\n\n detectChanges() {\n this.cdr.detectChanges();\n }\n\n resolveImage() {\n const imageElements = this.nativeElement.querySelectorAll('img');\n if (imageElements.length) {\n const imageResolves: Promise<any>[] = [];\n imageElements.forEach(item => {\n const image = new Image();\n const imageLoad = new Promise(resolve => {\n image.onload = () => {\n resolve(true);\n };\n image.onerror = () => {\n resolve(true);\n };\n image.src = item.getAttribute('src');\n });\n imageResolves.push(imageLoad);\n });\n return Promise.all(imageResolves);\n }\n return Promise.resolve(true);\n }\n\n getColControls() {\n this.colControls = this.element?.children[0]?.children || [];\n }\n\n getIsInTable() {\n if (this.selection && !this.readonly) {\n const opts = new TableOptions();\n const selection = this.editor.selection;\n const startPosition = createTablePosition(this.editor);\n const endPosition = createTablePosition(this.editor, selection.focus.path);\n this.isInTable = startPosition.isInTable() && endPosition.isInTable();\n } else {\n this.isInTable = false;\n }\n }\n\n getDefaultCellWidth(): number[] {\n const tr = this.element.children[0] as TableRowElement;\n let width = this.elementRef.nativeElement.getBoundingClientRect().width;\n if (this.rowControlsInner) {\n width -= this.rowControlsInner.nativeElement.getBoundingClientRect().width;\n if (this.isCollapsedAndNonReadonly) {\n // 聚焦之后会向左偏移一个 control(-11),见 .the-table-row-controls-wrapper\n width += TABLE_CONTROL;\n }\n }\n\n let cellsWidth = [];\n // 只读模式,如果有序号列,需要减去序号列的宽度\n if (this.readonly && this.element?.options?.numberedColumn) {\n width -= TABLE_NUMBER_COLUMN;\n cellsWidth.push(TABLE_NUMBER_COLUMN);\n }\n tr.children.forEach(() => {\n cellsWidth.push(Number((width / tr.children.length).toFixed(2)));\n });\n\n return cellsWidth;\n }\n\n initializeColumns() {\n if (this.element.columns) {\n const columns = [];\n this.tableWrapper.nativeElement.querySelectorAll('col').forEach((ele: HTMLElement) => {\n // Compatible with the problem that the width cannot be obtained under safari #WIK-9643\n columns.push({ width: ele.clientWidth || coercePixelsFromCssValue(ele.style.width) });\n });\n // Editor container width changes, resulting in column widths no longer valid #WIK-6766\n const warning = this.element.columns.some((col, index) => col.width !== columns[index]?.width);\n if (warning) {\n TheTransforms.setNode(this.editor, { columns }, this.element);\n }\n } else {\n const tr = this.element.children[0] as TableRowElement;\n const tableWidth = AngularEditor.toDOMNode(this.editor, tr).offsetWidth;\n const columns = tr.children.map(cell => {\n return { width: Number((tableWidth / tr.children.length - tr.children.length).toFixed(2)) };\n });\n TheTransforms.setNode(this.editor, { columns }, this.element);\n }\n }\n\n initializeRows() {\n this.element.children.map((row, index) => {\n if (!row.height) {\n const element = TheEditor.toDOMNode(this.editor, row);\n let height = getElementHeight(element);\n TheTransforms.setNode(this.editor, { height }, row);\n }\n });\n }\n\n transformRowHeight() {\n const rowElements = this.nativeElement.querySelector('tbody').children;\n if (rowElements) {\n ([...rowElements] as HTMLTableRowElement[]).map((row, index) => {\n let height = getElementHeight(row);\n TheTransforms.setNode(this.editor, { height }, this.element.children[index]);\n });\n }\n }\n\n transformColumnsWidth() {\n const cols = [...this.nativeElement.querySelector('colgroup').children] as HTMLTableColElement[];\n const columns: TheTableColumn[] = cols.map(col => {\n return { width: getElementWidth(col) };\n });\n TheTransforms.setNode(this.editor, { columns }, this.element);\n }\n\n onColMousedown(event: MouseEvent, index: number) {\n event.stopPropagation();\n event.preventDefault();\n if (!!this.selection && this.isInTable) {\n this.tableStore.clearDangerousCells();\n this.tableStore.selectColumn(this.editor, index);\n this.tableService.afterSelectedCells(event.target as HTMLElement, this.element);\n }\n }\n\n onRowMousedown(event: MouseEvent, index: number) {\n if (this.readonly) return;\n event.stopPropagation();\n event.preventDefault();\n if (!this.isInTable) {\n const path = TheEditor.findPath(this.editor, this.element);\n Transforms.select(this.editor, path);\n }\n this.tableStore.selectRow(this.editor, index);\n this.tableService.afterSelectedCells(event.target as HTMLElement, this.element);\n }\n\n onSelectTable(event: MouseEvent) {\n event.stopPropagation();\n event.preventDefault();\n this.tableStore.selectTable(this.editor);\n this.tableService.afterSelectedCells(event.target as HTMLElement, this.element);\n }\n\n listenTableContextMenuEvent() {\n this.ngZone.runOutsideAngular(() => {\n fromEvent<MouseEvent>(this.theTableElement.nativeElement, 'contextmenu')\n .pipe(takeUntil(this.destroy$))\n .subscribe(event => {\n if (this.readonly) {\n return;\n }\n event.preventDefault();\n this.tableStore.isRightClicking = true;\n const cell = (event.target as HTMLElement).closest(SLA_TABLE_CELL_SELECTOR) as HTMLTableCellElement;\n if (!cell) {\n return;\n } else {\n if (!cell.classList.contains('selected-cell')) {\n this.tableStore.selectCell(cell, this.editor);\n }\n }\n if (this.theTableContextMenuService.isOpened) {\n this.theTableContextMenuService\n .closeContextMenu()\n .pipe(take(1))\n .subscribe(() => {\n this.theTableContextMenuService.openMenuList(event);\n });\n } else if (this.tableService.isOpened) {\n this.tableService\n .closeToolbar()\n .pipe(take(1))\n .subscribe(() => {\n this.theTableContextMenuService.openMenuList(event);\n });\n } else {\n this.cdr.markForCheck();\n this.theTableContextMenuService.openMenuList(event);\n }\n\n // patch for right click select next cell\n setTimeout(() => {\n Transforms.select(this.editor, Editor.start(this.editor, this.editor.selection));\n });\n });\n });\n }\n\n listenOnSelectedCells() {\n merge(\n fromEvent<MouseEvent>(document, 'mousedown').pipe(filter((e: MouseEvent) => e.button !== 2)),\n fromEvent<KeyboardEvent>(document, 'keydown').pipe(\n filter((e: KeyboardEvent) => {\n return !isVirtualKey(e) && !this.theTableContextMenuService.isOpened;\n })\n )\n )\n .pipe(\n filter((event: Event) => {\n if (isColorInput(event.target as HTMLElement)) {\n this.tableStore.isFocusedInput = true;\n return false;\n }\n if (isColorPanel(event.target as HTMLElement)) {\n return false;\n }\n const selectedCellPositions = this.tableStore.getSelectedCellPositions();\n return selectedCellPositions?.length > 0;\n }),\n takeUntil(this.destroy$)\n )\n .subscribe((e: MouseEvent) => {\n if (e.type === 'keydown') {\n this.tableStore.clearSelectedCellsContent();\n }\n const isCurrentTableElement = this.nativeElement.contains(e.target as HTMLElement);\n if (!isCurrentTableElement || (!this.tableStore.pointerSelection && !this.tableStore.areaSelection)) {\n this.tableStore.clearSelectedCells();\n }\n if (!isCurrentTableElement) {\n this.tableStore.clearLastFocusPath();\n }\n this.theTableContextMenuService.closeContextMenu();\n });\n }\n\n listenKeydownEvent() {\n this.ngZone.runOutsideAngular(() => {\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeUntil(this.destroy$),\n filter((e: KeyboardEvent) => !!e)\n )\n .subscribe((event: KeyboardEvent) => {\n if (!this.readonly && isKeyHotkey('mod', event)) {\n this.tableService.handleKeydownForPointerSelection(event, this.tbodyNativeElement);\n }\n if (!this.readonly && isKeyHotkey('shift', event)) {\n this.tableService.handleKeydownForAreaSelection(event, this.tbodyNativeElement);\n }\n });\n });\n }\n\n listenKeyupEvent() {\n this.ngZone.runOutsideAngular(() => {\n fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(\n takeUntil(this.destroy$),\n filter((e: KeyboardEvent) => !!e)\n )\n .subscribe(() => {\n this.tableService.cancelPointerSelection();\n this.tableService.cancelAreaSelection();\n });\n });\n }\n\n private listenSelectstartEvent() {\n this.ngZone.runOutsideAngular(() => {\n fromEvent<Event>(document, 'selectstart')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: KeyboardEvent) => {\n this.tableService.selectStartPreventDefault(event);\n });\n });\n }\n\n listenTableWrapperScroll() {\n const stickyRows = this.elementRef.nativeElement.querySelectorAll('.the-sticky-row');\n\n const setStickyRowPointerEvents = (pointerEventsStyle: string) => {\n for (const stiRow of stickyRows) {\n this.renderer.setStyle(stiRow, 'pointer-events', pointerEventsStyle);\n }\n };\n\n let timer;\n fromEvent(this.tableWrapper.nativeElement, 'wheel')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n // 处理标题行固定时的滚动跟随\n setStickyRowPointerEvents('none');\n timer && clearTimeout(timer);\n timer = setTimeout(() => {\n setStickyRowPointerEvents('auto');\n timer = null;\n }, 200);\n });\n\n fromEvent(this.tableWrapper.nativeElement, 'scroll')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.bindTableScrollingShadow();\n this.updateStickyRowScrollLeft();\n this.setHeaderRowShadow();\n });\n }\n\n updateStickyRowScrollLeft() {\n // 判断是否出现固定标题行\n if (this.isStickyTop) {\n const stickyRows = this.elementRef.nativeElement.querySelectorAll('.the-sticky-row');\n for (const stiRow of stickyRows) {\n // 修复获取 scrollLeft 属性引起的浏览器重绘,导致跳动问题 #WIK-11038\n requestAnimationFrame(() => {\n // 同步滚动状态到 .the-sticky-row\n stiRow.scrollLeft = this.tableWrapper.nativeElement.scrollLeft;\n });\n }\n }\n }\n\n setHeaderRowLeftStyle() {\n const stickyRows = this.elementRef.nativeElement.querySelectorAll('.the-sticky-row');\n const cornerControl = this.cornerControl.nativeElement as HTMLElement;\n const rowControl = this.rowControlsButtonWrapper.first?.nativeElement as HTMLElement;\n const stickyElements = [...stickyRows, cornerControl, rowControl];\n const { left } = this.nativeElement.getBoundingClientRect();\n const buffer = this.isInTable ? -TABLE_CONTROL : 0;\n if (this.isStickyTop && this.isScrollX) {\n this.setHeaderRowShadow();\n stickyRows.forEach((element: HTMLElement) => {\n this.renderer.setStyle(element, 'left', `${left + this.getColControlButtonWidth()}px`);\n });\n this.renderer.setStyle(cornerControl, 'left', `${left + buffer}px`);\n rowControl && this.renderer.setStyle(rowControl, 'left', `${left + buffer}px`);\n } else {\n stickyElements.forEach((element: HTMLElement) => {\n element && this.renderer.setStyle(element, 'left', null);\n });\n }\n }\n\n getColControlButtonWidth = () => {\n let result = 0;\n result += this.element?.options?.numberedColumn ? TABLE_NUMBER_COLUMN : 0;\n return result;\n };\n\n trackByFnRowControls(index: number) {\n return index;\n }\n\n trackByFnColControls(index: number) {\n return index;\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<div class=\"the-table-container\" theColumnResize>\n <div #tableRowControlsWrapper class=\"the-table-row-controls-wrapper\">\n <div\n class=\"the-table-corner-controls the-sticky-corner-controls\"\n #cornerControl\n [ngClass]=\"{\n visible: !readonly && (isInTable || tableStore.isRightClicking || tableStore.isFocusedInput),\n 'control-active': isSelectedAllCell,\n dangerous: tableStore.isSelectedTable && tableStore.dangerousCells.length > 0\n }\"\n >\n <div class=\"the-table-corner-button\" (mousedown)=\"onSelectTable($event)\"></div>\n <div class=\"the-table-corner-controls-insert-row-marker\" *ngIf=\"!headerRow\">\n <the-table-insert-mark type=\"row\" [at]=\"0\" [tableStore]=\"tableStore\"></the-table-insert-mark>\n </div>\n <div class=\"the-table-corner-controls-insert-column-marker\" *ngIf=\"!element?.options?.headerColumn\">\n <the-table-insert-mark type=\"column\" [at]=\"0\" [tableStore]=\"tableStore\"></the-table-insert-mark>\n </div>\n </div>\n <div class=\"the-table-row-controls\">\n <div class=\"the-table-row-controls-inner\" #rowControlsInner>\n <div\n class=\"the-table-row-controls-button-wrap\"\n #rowControlsButtonWrapper\n *ngFor=\"let control of rowControls; let i = index; trackBy: trackByFnRowControls\"\n [ngClass]=\"{\n 'control-active': tableStore.selectedRowsIndex.includes(control.rowIndex),\n dangerous: tableStore.dangerousRowsIndex.includes(control.rowIndex) && tableStore.dangerousCells.length > 0\n }\"\n >\n <ng-container\n *ngIf=\"!readonly && (isInTable || tableStore.isRightClicking || tableStore.isFocusedInput) && !element?.options?.numberedColumn\"\n >\n <button\n (mousedown)=\"onRowMousedown($event, control.rowIndex)\"\n type=\"button\"\n [ngStyle]=\"{ height: control.height + 1 + 'px' }\"\n class=\"the-table-row-controls-button the-table-controls-button\"\n ></button>\n </ng-container>\n <ng-container *ngIf=\"element?.options?.numberedColumn\">\n <div\n [contentEditable]=\"false\"\n contenteditable=\"false\"\n (mousedown)=\"onRowMousedown($event, control.rowIndex)\"\n class=\"the-table-numbered-controls-button\"\n [ngStyle]=\"{ height: control.height + 1 + 'px' }\"\n >\n <p class=\"row-number d-flex align-items-center\">{{ headerRow && i === 0 ? '' : headerRow ? i : i + 1 }}</p>\n </div>\n </ng-container>\n <the-table-insert-mark type=\"row\" [at]=\"control.rowIndex + 1\" [tableStore]=\"tableStore\"> </the-table-insert-mark>\n </div>\n </div>\n </div>\n </div>\n <div class=\"the-table-wrapper\" #tableWrapper [ngClass]=\"{ 'the-table-numbered': element?.options?.numberedColumn }\">\n <table class=\"the-table\" #theTable>\n <colgroup #colgroup *ngIf=\"columns\">\n <col *ngIf=\"readonly && element?.options?.numberedColumn\" class=\"the-table-number-col\" />\n <col *ngFor=\"let col of columns\" [ngStyle]=\"{ width: col.width + 'px' }\" />\n </colgroup>\n <thead>\n <tr class=\"the-table-col-controls-wrapper the-sticky-row\" #columnControlsWrapper>\n <th *ngIf=\"readonly && element?.options?.numberedColumn\" class=\"the-table-number-col\"></th>\n <th\n #colControl\n class=\"the-table-col-controls\"\n *ngFor=\"let control of colControls; let i = index; trackBy: trackByFnColControls\"\n [ngClass]=\"{\n 'control-active': tableStore.selectedColumnsIndex.includes(i),\n dangerous: tableStore.dangerousColumnsIndex.includes(i) && tableStore.dangerousCells.length > 0\n }\"\n (mousedown)=\"onColMousedown($event, i)\"\n >\n <the-table-insert-mark\n *ngIf=\"isInTable || tableStore.isRightClicking || tableStore.isFocusedInput\"\n type=\"column\"\n [at]=\"i + 1\"\n [tableStore]=\"tableStore\"\n [parentElement]=\"colControl\"\n >\n </the-table-insert-mark>\n </th>\n </tr>\n </thead>\n <tbody #tbody>\n <slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"> </slate-children>\n </tbody>\n <div\n *ngIf=\"!element?.options?.headerColumn\"\n #headerRowLeftShadow\n class=\"header-row-shadow header-row-left-shadow\"\n contenteditable=\"false\"\n ></div>\n <div class=\"header-row-shadow header-row-right-shadow\" #headerRowRightShadow contenteditable=\"false\"></div>\n </table>\n </div>\n</div>\n","import { Editor, Transforms, Range } from 'slate';\nimport { createCell } from '../utils/create-cell';\nimport { TableOptions } from '../table.types';\nimport { createTablePosition } from '../utils/create-table-position';\n\n/**\n * Clear the content of the given node\n */\nexport function clearTableNode(opts: TableOptions, editor: Editor, isTopToBot?: boolean) {\n const { selection } = editor;\n const element = createTablePosition(editor, selection.focus.path);\n const rowIndex = element.getRowIndex();\n const colIndex = element.getColumnIndex();\n const removeRow = isTopToBot ? 0 : rowIndex + 1;\n for (let i = 0; i < element.getWidth(); i++) {\n const inColRange = Range.includes(selection, [...element.tableEntry[1], rowIndex, i]);\n if (inColRange && i !== colIndex) {\n Transforms.removeNodes(editor, { at: [...element.tableEntry[1], rowIndex, i] });\n Transforms.insertNodes(editor, createCell(opts), { at: [...element.tableEntry[1], rowIndex, i] });\n }\n }\n for (let i = 0; i < element.getHeight(); i++) {\n const inRowRange = Range.includes(selection, [...element.tableEntry[1], i]);\n if (inRowRange && i !== rowIndex) {\n Transforms.removeNodes(editor, { at: [...element.tableEntry[1], removeRow] });\n }\n }\n}\n","import { Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport * as TheQueries from '../../../queries';\n\nexport function calculateAnchorPositionInCell(editor: Editor) {\n let isFirstLine = false;\n let isLastLine = false;\n const anchorBlock = TheQueries.anchorBlock(editor);\n const anchorBlockPath = TheQueries.findPath(editor, anchorBlock);\n const anchorBlockDom = AngularEditor.toDOMNode(editor, anchorBlock);\n const valueRangeRect = anchorBlockDom.getBoundingClientRect();\n const anchorBlockHeight = window.getComputedStyle(anchorBlockDom).lineHeight;\n const nativeSelection = window.getSelection();\n const nativeRange = nativeSelection && nativeSelection.getRangeAt(0);\n const nativeRangeRect = nativeRange && nativeRange.getBoundingClientRect();\n if (valueRangeRect && nativeRangeRect && anchorBlockHeight) {\n const lineHeight = parseInt(anchorBlockHeight, 10);\n isFirstLine = nativeRangeRect.top - valueRangeRect.top < lineHeight;\n isLastLine = valueRangeRect.bottom - nativeRangeRect.bottom < lineHeight;\n }\n return {\n isFirstLine,\n isLastLine,\n anchorBlockPath\n };\n}\n","import { ChangeDetectorRef, Component, ElementRef, HostBinding, OnInit, Renderer2 } from '@angular/core';\nimport { TableRowElement } from '../../../../custom-types';\nimport { TheBaseElementComponent } from '../../../../interfaces/view-base';\nimport { TheEditor } from '../../../../interfaces/editor';\nimport { createTablePosition } from '../../utils/create-table-position';\nimport { isHeaderRow } from '../../utils/is-header-row';\nimport { TablePosition } from '../../utils';\n\n@Component({\n selector: 'tr[theTableRow]',\n template: `\n <td *ngIf=\"readonly && numberedColumn\" class=\"the-table-number-column align-middle\" thePreventDefault>\n {{ rowNumber }}\n </td>\n <slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>\n `\n})\nexport class TheTableRowComponent extends TheBaseElementComponent<TableRowElement> implements OnInit {\n @HostBinding('style.height') height: string;\n\n numberedColumn = false;\n\n rowNumber: number | string = '';\n\n constructor(public elementRef: ElementRef<HTMLElement>, public cdr: ChangeDetectorRef, private renderer: Renderer2) {\n super(elementRef, cdr);\n }\n\n onContextChange() {\n super.onContextChange();\n const path = TheEditor.findPath(this.editor, this.element);\n const tablePosition = createTablePosition(this.editor, path.concat(0));\n const rowIndex = tablePosition.getRowIndex();\n if (rowIndex === 0) {\n this.renderer.addClass(this.elementRef.nativeElement, 'the-sticky-row');\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, 'the-sticky-row');\n }\n if (this.initialized) {\n this.useHeight();\n }\n this.setNumberColumn(tablePosition, rowIndex);\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.useHeight();\n }\n\n useHeight() {\n if (this.element.height) {\n this.height = this.element.height + 'px';\n }\n }\n\n setNumberColumn(ps: TablePosition, rowIndex: number) {\n const headerRow = isHeaderRow(ps.table);\n this.numberedColumn = ps.table?.options?.numberedColumn;\n this.rowNumber = headerRow && rowIndex === 0 ? '' : headerRow ? rowIndex : rowIndex + 1;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { getElementWidth, coercePixelsFromCssValue, getColsTotalWidth, getElementHeight, getRowsTotalHeight } from '../../utils/dom';\nimport { coerceCssPixelValue } from '@angular/cdk/coercion';\n\n@Injectable()\nexport class ColumnResizingStore {\n constructor() {\n this.resizeCols = [];\n this.resizeRows = [];\n }\n private direction: 'left' | 'right' | 'top' | 'bottom';\n private resizeCols: { colElement: HTMLTableColElement; baseWidth: number }[];\n private resizeRows: { rowElement: HTMLTableRowElement; baseHeight: number }[];\n private tableCols: { cols: HTMLTableColElement[]; baseWidth: number };\n private tableRows: { rows: HTMLTableRowElement[]; baseHeight: number };\n\n storeResizingCol(colElement: HTMLTableColElement) {\n if (this.resizeCols.some(cache => cache.colElement === colElement)) {\n return;\n }\n this.resizeCols.push({ colElement, baseWidth: getElementWidth(colElement) });\n }\n\n storeResizingRow(rowElement: HTMLTableRowElement) {\n if (this.resizeRows.some(cache => cache.rowElement === rowElement)) {\n return;\n }\n this.resizeRows.push({ rowElement, baseHeight: getElementHeight(rowElement) });\n }\n\n storeTableWidth(cols: HTMLTableColElement[]) {\n if (!this.tableCols) {\n this.tableCols = { cols, baseWidth: getColsTotalWidth(cols) };\n }\n }\n\n storeTableHeight(rows: HTMLTableRowElement[]) {\n if (!this.tableRows) {\n this.tableRows = { rows, baseHeight: getRowsTotalHeight(rows) };\n }\n }\n\n cleanResizing() {\n this.tableCols = null;\n this.tableRows = null;\n this.resizeCols = [];\n this.resizeRows = [];\n this.direction = null;\n }\n\n restoreLeftCols(deltaX: number) {\n let index = this.resizeCols.length - 1;\n while (index >= 0 && deltaX > 0) {\n const currentWidth = coercePixelsFromCssValue(this.resizeCols[index].colElement.style.width);\n if (this.resizeCols[index].baseWidth > currentWidth) {\n if (this.resizeCols[index].baseWidth > currentWidth + deltaX) {\n this.resizeCols[index].colElement.style.width = coerceCssPixelValue(currentWidth + deltaX);\n deltaX = 0;\n } else {\n deltaX -= this.resizeCols[index].baseWidth - currentWidth;\n this.resizeCols[index].colElement.style.width = coerceCssPixelValue(this.resizeCols[index].baseWidth);\n this.popCol();\n }\n }\n index--;\n }\n return deltaX;\n }\n\n restoreTopRows(deltaY: number) {\n let index = this.resizeRows.length - 1;\n while (index >= 0 && deltaY > 0) {\n const currentHeight = this.resizeRows[index].rowElement.getBoundingClientRect().height;\n if (this.resizeRows[index].baseHeight > currentHeight) {\n if (this.resizeRows[index].baseHeight > currentHeight + deltaY) {\n this.resizeRows[index].rowElement.style.height = coerceCssPixelValue(currentHeight + deltaY);\n deltaY = 0;\n } else {\n deltaY -= this.resizeRows[index].baseHeight - currentHeight;\n this.resizeRows[index].rowElement.style.height = coerceCssPixelValue(this.resizeRows[index].baseHeight);\n this.popRow();\n }\n }\n index--;\n }\n return deltaY;\n }\n\n restoreBottomRows(deltaY: number) {\n let index = this.resizeRows.length - 1;\n while (index >= 0 && deltaY < 0) {\n const currentHeight = coercePixelsFromCssValue(this.resizeRows[index].rowElement.style.height);\n if (this.resizeRows[index].baseHeight > currentHeight) {\n if (this.resizeRows[index].baseHeight > currentHeight + Math.abs(deltaY)) {\n this.resizeRows[index].rowElement.style.height = coerceCssPixelValue(currentHeight + Math.abs(deltaY));\n deltaY = 0;\n } else {\n deltaY += this.resizeRows[index].baseHeight - currentHeight;\n this.resizeRows[index].rowElement.style.height = coerceCssPixelValue(this.resizeRows[index].baseHeight);\n this.popRow();\n }\n }\n index--;\n }\n return deltaY;\n }\n\n restoreRightCols(deltaX: number) {\n let index = this.resizeCols.length - 1;\n while (index >= 0 && deltaX < 0) {\n const currentWidth = coercePixelsFromCssValue(this.resizeCols[index].colElement.style.width);\n if (this.resizeCols[index].baseWidth > currentWidth) {\n if (this.resizeCols[index].baseWidth > currentWidth + Math.abs(deltaX)) {\n this.resizeCols[index].colElement.style.width = coerceCssPixelValue(currentWidth + Math.abs(deltaX));\n deltaX = 0;\n } else {\n deltaX += this.resizeCols[index].baseWidth - currentWidth;\n this.resizeCols[index].colElement.style.width = coerceCssPixelValue(this.resizeCols[index].baseWidth);\n this.popCol();\n }\n }\n index--;\n }\n return deltaX;\n }\n\n getScrollWidth(deltaX: number) {\n if (this.tableCols) {\n return getColsTotalWidth(this.tableCols.cols) - this.tableCols.baseWidth - Math.abs(deltaX);\n }\n }\n\n getAddTableHeight(deltaY: number) {\n if (this.tableRows) {\n return getRowsTotalHeight(this.tableRows.rows) - this.tableRows.baseHeight - Math.abs(deltaY);\n }\n }\n\n isRestoring(deltaValue, isXAxis = true) {\n return !this.isResizing(deltaValue, isXAxis);\n }\n\n isResizing(deltaValue, isXAxis = true) {\n return this.direction === this.getDirection(deltaValue, isXAxis);\n }\n\n initDirection(deltaValue: number, isXAxis = true) {\n if (this.resizeCols.length > 0) {\n return;\n }\n if (this.resizeRows.length > 0) {\n return;\n }\n this.direction = this.getDirection(deltaValue, isXAxis);\n }\n\n private getDirection(deltaValue, isXAxis = true) {\n return isXAxis ? (deltaValue > 0 ? 'right' : 'left') : deltaValue > 0 ? 'bottom' : 'top';\n }\n\n private popCol() {\n this.resizeCols.pop();\n }\n\n private popRow() {\n this.resizeRows.pop();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { ElementRef } from '@angular/core';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { Position } from './event-dispatcher';\n\n/** Tracks state of resize events in progress. */\nexport class ResizeRef {\n direction: 'X' | 'Y';\n position: Position;\n constructor(\n readonly origin: ElementRef,\n readonly overlayRef: OverlayRef,\n readonly minWidthPx: number,\n readonly maxWidthPx: number,\n readonly minHeightPx: number,\n readonly maxHeightPx: number,\n readonly updateSizeAndOffset: () => void\n ) {}\n\n setDirection(direction: 'X' | 'Y') {\n this.direction = direction;\n }\n\n setPosition(position: Position) {\n this.position = position;\n }\n}\n","import {\n Component,\n OnDestroy,\n ElementRef,\n AfterViewInit,\n ChangeDetectionStrategy,\n ViewContainerRef,\n ChangeDetectorRef,\n NgZone,\n Inject\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { fromEvent, ReplaySubject } from 'rxjs';\nimport { takeUntil, mapTo, map, filter, startWith, pairwise, distinctUntilChanged, take } from 'rxjs/operators';\nimport { ResizeRef } from './resize-ref';\nimport { TableCellEventDispatcher } from './event-dispatcher';\nimport { ColumnResizeNotifierSource } from './column-resize-notifier';\n\n@Component({\n host: { class: 'the-table-resize-overlay-thumb' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: ''\n})\nexport class TheColumnResizeOverlayHandleComponent implements AfterViewInit, OnDestroy {\n protected readonly destroyed = new ReplaySubject<void>();\n\n constructor(\n public elementRef: ElementRef<HTMLElement>,\n public viewContainerRef: ViewContainerRef,\n public cdr: ChangeDetectorRef,\n public ngZone: NgZone,\n public resizeRef: ResizeRef,\n public eventDispatcher: TableCellEventDispatcher,\n @Inject(DOCUMENT) public document: any,\n public resizeNotifier: ColumnResizeNotifierSource\n ) {}\n\n ngAfterViewInit() {\n this._listenForMouseEvents();\n const overlayPane = this.elementRef.nativeElement.closest('.cdk-overlay-pane') as HTMLElement;\n // 解决鼠标 hover 在拖拽线上阻断浏览器滚动\n fromEvent(overlayPane, 'wheel')\n .pipe(take(1))\n .subscribe(() => {\n overlayPane.style.pointerEvents = 'none';\n });\n }\n\n private _listenForMouseEvents() {\n this.ngZone.runOutsideAngular(() => {\n const takeUntilDestroyed = takeUntil<MouseEvent>(this.destroyed);\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mouseenter')\n .pipe(takeUntilDestroyed, mapTo(this.resizeRef.origin.nativeElement))\n .subscribe(cell => {\n this.eventDispatcher.tableCellHovered.next({ cell, position: this.resizeRef.position });\n this.resizeRef.updateSizeAndOffset();\n });\n\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mousedown')\n .pipe(takeUntilDestroyed)\n .subscribe(mousedownEvent => {\n mousedownEvent.preventDefault();\n this._dragStarted(mousedownEvent);\n });\n });\n }\n\n private _dragStarted(mousedownEvent: MouseEvent) {\n if (mousedownEvent.button !== 0) {\n return;\n }\n const mouseup = fromEvent<MouseEvent>(this.document, 'mouseup');\n const mousemove = fromEvent<MouseEvent>(this.document, 'mousemove');\n const escape = fromEvent<KeyboardEvent>(this.document, 'keyup').pipe(filter((event: KeyboardEvent) => event.key === 'Escape'));\n\n const startX = mousedownEvent.clientX;\n const startY = mousedownEvent.clientY;\n\n const initialWidthSize = this._getOriginWidth();\n const initialHeightSize = this._getOriginHeight();\n const isXAxis = this._isXAxis();\n let overlayOffset = this._getOverlayOffset();\n let originOffset = this._getOriginOffset();\n let size = isXAxis ? initialWidthSize : initialHeightSize;\n this.updateResizeActive(true);\n this._notifyResizeStarted();\n\n mouseup.pipe(takeUntil(escape), takeUntil(this.destroyed)).subscribe(({ clientX, clientY }) => {\n this._notifyResizeEnded(size, isXAxis ? clientX !== startX : clientY !== startY);\n });\n\n escape.pipe(takeUntil(mouseup), takeUntil(this.destroyed)).subscribe(() => {\n this._notifyResizeEnded(size);\n });\n\n mousemove\n .pipe(\n map(({ clientX, clientY }) => {\n return {\n clientX,\n clientY\n };\n }),\n startWith({\n clientX: startX,\n clientY: startY\n }),\n distinctUntilChanged(),\n pairwise(),\n takeUntil(mouseup),\n takeUntil(escape),\n takeUntil(this.destroyed)\n )\n .subscribe(([prev, curr]) => {\n let deltaSize = isXAxis ? curr.clientX - prev.clientX : curr.clientY - prev.clientY;\n this.resizeNotifier.triggerResize.next({\n tableCell: this.resizeRef.origin.nativeElement,\n deltaSize,\n previousSize: size\n });\n });\n }\n\n protected updateResizeActive(active: boolean): void {\n this.eventDispatcher.overlayHandleActiveForCell.next(\n active ? { cell: this.resizeRef.origin.nativeElement!, position: this.resizeRef.position } : null\n );\n }\n\n private _isXAxis(): boolean {\n return this.resizeRef.direction === 'X';\n }\n\n private _getOriginHeight(): number {\n return this.resizeRef.origin.nativeElement!.offsetHeight;\n }\n\n private _getOriginWidth(): number {\n return this.resizeRef.origin.nativeElement!.offsetWidth;\n }\n\n private _getOriginOffset(): number {\n return this.resizeRef.origin.nativeElement!.offsetLeft;\n }\n\n private _getOverlayOffset(): number {\n return parseInt(this.resizeRef.overlayRef.overlayElement.style.left!, 10);\n }\n\n private _isLtr(): boolean {\n return true;\n }\n\n private _notifyResizeEnded(size: number, completedSuccessfully = false): void {\n this.updateResizeActive(false);\n\n this.ngZone.run(() => {\n const sizeMessage = { tableCell: this.resizeRef.origin.nativeElement };\n if (completedSuccessfully) {\n this.resizeNotifier.resizeCompleted.next(sizeMessage);\n } else {\n this.resizeNotifier.resizeCanceled.next(sizeMessage);\n }\n });\n }\n\n private _notifyResizeStarted(): void {\n this.ngZone.run(() => {\n const sizeMessage = { tableCell: this.resizeRef.origin.nativeElement };\n this.resizeNotifier.resizeStarted.next(sizeMessage);\n });\n }\n\n ngOnDestroy() {\n this.destroyed.next();\n this.destroyed.complete();\n }\n}\n","import {\n Component,\n OnInit,\n ElementRef,\n OnDestroy,\n ChangeDetectorRef,\n NgZone,\n HostBinding,\n Renderer2,\n ViewContainerRef,\n AfterViewInit,\n Injector\n} from '@angular/core';\nimport { filter, map, take, takeUntil } from 'rxjs/operators';\nimport { Editor } from 'slate';\nimport { ELEMENT_TO_COMPONENT } from 'slate-angular';\nimport { fromEvent, merge, Subject } from 'rxjs';\nimport { ConnectedPosition, Overlay, OverlayRef, ScrollDispatcher } from '@angular/cdk/overlay';\nimport { ComponentPortal, PortalInjector } from '@angular/cdk/portal';\nimport { coerceCssPixelValue } from '@angular/cdk/coercion';\nimport { ColumnResizingStore } from '../../../../components/column-resize/resizing.store';\nimport { Position, TableCellEventDispatcher } from '../../../../components/column-resize/event-dispatcher';\nimport { ColumnResizeNotifierSource, ColumnSizeAction } from '../../../../components/column-resize/column-resize-notifier';\nimport { TheColumnResizeOverlayHandleComponent } from '../../../../components/column-resize/overlay-handle.component';\nimport { ResizeRef } from '../../../../components/column-resize/resize-ref';\nimport { coercePixelsFromCssValue, getElementHeight, getElementWidth, useElementStyle } from '../../../../utils/dom';\nimport { TheBaseElementComponent } from '../../../../interfaces/view-base';\nimport { SLA_TABLE_CELL_SELECTOR } from '../../../../constants/selector';\nimport { DEFAULT_SCROLL_CONTAINER } from '../../../../constants';\nimport { TheEditor } from '../../../../interfaces/editor';\nimport { TableCellElement } from '../../../../custom-types';\nimport * as TheQueries from '../../../../queries';\nimport { TableOptions, TableWithStickyRowClass } from '../../table.types';\nimport { TableFreezeColumnPipe } from '../../table.pipe';\nimport { isUndefined } from 'ngx-tethys/util';\nimport { TheTableComponent } from '../table.component';\nimport { TablePosition, createTablePosition, getSelectCellNode } from '../../utils';\n\nconst OVERLAY_ACTIVE_CLASS = 'the-resizable-overlay-thumb-active';\nconst OVERLAY_INIT_SIZE = 16;\nconst TABLE_INSERT_MASK = 19;\nconst TABLE_BORDER = 1;\nconst TABLE_PADDING = 8;\nexport const POSITION_MAP: { [key: string]: ConnectedPosition } = {\n top: {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'center'\n },\n bottom: {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'center'\n },\n right: {\n originX: 'end',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'top'\n },\n left: {\n originX: 'start',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'top'\n }\n};\n\n@Component({\n selector: 'td[theTd]',\n templateUrl: './td.component.html',\n providers: [ColumnResizingStore]\n})\nexport class TheTdComponent extends TheBaseElementComponent<TableCellElement, Editor> implements OnInit, AfterViewInit, OnDestroy {\n destroy$ = new Subject<void>();\n\n public tablePosition: TablePosition;\n\n public tableComponent: TheTableComponent;\n\n protected overlayRef?: OverlayRef;\n\n public hoveredDirection: Position | null;\n\n public tableOptions: TableOptions = new TableOptions();\n\n public cellInnerMinHeight: number = null;\n\n get tableStore() {\n return this.tableComponent?.tableStore;\n }\n\n get tableService() {\n return this.tableComponent?.tableService;\n }\n\n get eventDispatcher() {\n return this.tableComponent?.eventDispatcher;\n }\n\n get resizeNotifier() {\n return this.tableComponent?.resizeNotifier;\n }\n\n get tableElement(): HTMLElement {\n return this.tableComponent?.theTableElement?.nativeElement;\n }\n\n get scrollableElementTop() {\n const containerElement: HTMLElement = this.elementRef.nativeElement.closest(\n this.editor.options?.scrollContainer || DEFAULT_SCROLL_CONTAINER\n );\n if (containerElement) {\n return containerElement.getBoundingClientRect().top;\n }\n return -window.scrollY;\n }\n\n get scrollableElementBottom() {\n const containerElement: HTMLElement = this.elementRef.nativeElement.closest(\n this.editor.options?.scrollContainer || DEFAULT_SCROLL_CONTAINER\n );\n if (containerElement) {\n return containerElement.getBoundingClientRect().bottom;\n }\n return -window.scrollY;\n }\n\n get scrollableElementLeft() {\n return this.tableComponent.tableWrapper.nativeElement.scrollLeft;\n }\n\n get isXAxisHover() {\n return [Position.left, Position.right].includes(this.hoveredDirection);\n }\n\n get rowResizeClass() {\n return [\n 'the-row-resize-handle-panel',\n this.tablePosition.table && this.tablePosition.table.options?.numberedColumn ? 'the-numbered-resize-handle-panel' : ''\n ];\n }\n\n public dotWrapperHovered: boolean;\n\n public resizeRef: ResizeRef;\n\n @HostBinding('style.backgroundColor') backgroundColor: string;\n\n @HostBinding('attr.colspan') colspan: number;\n\n @HostBinding('attr.rowspan') rowspan: number;\n\n @HostBinding('style.display') display: string;\n\n onContextChange() {\n super.onContextChange();\n if (this.initialized) {\n this.useState();\n }\n }\n\n constructor(\n public elementRef: ElementRef,\n public cdr: ChangeDetectorRef,\n private renderer: Renderer2,\n private viewContainerRef: ViewContainerRef,\n private ngZone: NgZone,\n public injector: Injector,\n public overlay: Overlay,\n public resizingStore: ColumnResizingStore,\n public scrollDispatcher: ScrollDispatcher,\n public freezeColumnPipe: TableFreezeColumnPipe\n ) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.useState();\n }\n\n ngAfterViewInit() {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.useTablePosition();\n this.getInjectionService();\n this.subscribeSelectedCellsChange();\n this.subscribeDangerousCellsChange();\n this.subscribeTableChange();\n this.listenCellSelectEvents();\n this.listenForCellHoverEvents();\n this.listenForResizeEvents();\n });\n }\n\n getInjectionService() {\n this.tableComponent = ELEMENT_TO_COMPONENT.get(this.tablePosition.table) as TheTableComponent;\n }\n\n // 选中\n subscribeSelectedCellsChange() {\n this.tableStore\n .selectedCellsChange()\n .pipe(takeUntil(this.destroy$))\n .subscribe(cellElements => {\n if (cellElements.length === 0) {\n this.renderer.removeClass(this.elementRef.nativeElement, 'selected-cell');\n } else {\n const isSelectedCell = cellElements.find(cell => cell === this.element);\n\n if (isSelectedCell) {\n this.renderer.addClass(this.elementRef.nativeElement, 'selected-cell');\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, 'selected-cell');\n }\n }\n this.cdr.detectChanges();\n });\n }\n\n subscribeDangerousCellsChange() {\n this.tableStore\n .dangerousCellsChange()\n .pipe(takeUntil(this.destroy$))\n .subscribe(x => {\n if (x.length === 0) {\n this.renderer.removeClass(this.elementRef.nativeElement, 'dangerous-cell');\n } else {\n const selectCellNodes = getSelectCellNode(this.editor, x);\n const isSelectedCell = selectCellNodes.find(cell => cell.node === this.element);\n\n if (isSelectedCell) {\n this.renderer.addClass(this.elementRef.nativeElement, 'dangerous-cell');\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, 'dangerous-cell');\n }\n }\n this.cdr.detectChanges();\n });\n }\n\n subscribeTableChange() {\n this.tableStore\n .tableChange()\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.useTablePosition();\n });\n }\n\n useState() {\n this.useBackground();\n this.useSpan();\n this.useDisplay();\n this.useFocus();\n useElementStyle(this.elementRef.nativeElement, this.element);\n }\n\n useTablePosition() {\n const path = TheEditor.findPath(this.editor, this.element);\n // must be path of cell's children\n this.tablePosition = createTablePosition(this.editor, path.concat(0));\n }\n\n useBackground() {\n if (this.element.backgroundColor !== this.backgroundColor) {\n this.backgroundColor = this.element.backgroundColor as string;\n }\n }\n\n useSpan() {\n this.colspan = undefined;\n this.rowspan = undefined;\n if (this.element.colspan) {\n this.colspan = this.element.colspan;\n }\n if (this.element.rowspan) {\n this.rowspan = this.element.rowspan;\n }\n }\n\n useDisplay() {\n this.display = this.element.hidden ? 'none' : '';\n }\n\n // 聚焦\n useFocus() {\n if (this.isCollapsedAndNonReadonly && TheQueries.isGlobalCollapsed(this.editor)) {\n this.renderer.addClass(this.elementRef.nativeElement, 'focused-cell');\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, 'focused-cell');\n }\n }\n\n //#region cell-select\n listenCellSelectEvents() {\n this.ngZone.runOutsideAngular(() => {\n const element = this.elementRef.nativeElement!;\n fromEvent<MouseEvent>(element, 'mousedown')\n .pipe(\n takeUntil(this.destroy$),\n filter((e: MouseEvent) => e.button !== 2),\n map(event => (event.target as HTMLElement).closest(SLA_TABLE_CELL_SELECTOR)),\n filter(cell => !!cell)\n )\n .subscribe((cell: HTMLTableCellElement) => {\n if (!this.readonly) {\n if (this.tableStore.pointerSelection) {\n this.tableStore.selectCell(cell, this.editor);\n }\n if (this.tableStore.areaSelection) {\n this.tableStore.setAreaSelectionCells(this.element);\n } else {\n this.tableStore.selectCellStart(cell, this.editor);\n }\n if (this.overlayRef) {\n this.overlayRef.detach();\n }\n // 拖选\n this.listenCellMouseEvents();\n }\n });\n });\n }\n\n // 鼠标移入事件\n listenCellMouseEvents() {\n const mouseoverObservable = fromEvent<MouseEvent>(document, 'mouseover')\n .pipe(\n takeUntil(this.destroy$),\n map(event => {\n event.preventDefault();\n const cell = (event.target as HTMLElement).closest(SLA_TABLE_CELL_SELECTOR);\n return cell;\n }),\n filter((cell: HTMLTableCellElement) => !!cell)\n )\n .subscribe((cell: HTMLTableCellElement) => {\n this.tableStore.selectCellOngoing(cell, this.editor);\n });\n\n fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(take(1), takeUntil(this.destroy$))\n .subscribe(() => {\n if (this.tableStore.isCellSelecting || this.tableStore.pointerSelection) {\n this.ngZone.run(() => {\n this.tableComponent.tableService.afterSelectedCells(this.tableStore.focusCellElement, this.tableComponent.element);\n });\n }\n if (!this.tableStore.areaSelection) {\n this.tableStore.selectCellEnd(this.editor);\n }\n mouseoverObservable.unsubscribe();\n });\n }\n\n //#region resizable\n private listenForCellHoverEvents() {\n const element = this.elementRef.nativeElement!;\n this.eventDispatcher\n .resizeOverlayVisibleForTableCell(element)\n .pipe(\n takeUntil(this.destroy$),\n map(value => {\n // 禁止第一列左侧\n if (value && value.position === Position.left && this.tablePosition.getColumnIndex() === 0) {\n return null;\n }\n // 禁止第一行顶部\n if (value && value.position === Position.top && this.tablePosition.getRowIndex() === 0) {\n return null;\n }\n return value;\n })\n )\n .subscribe(hoveredCellInfo => {\n if (hoveredCellInfo && hoveredCellInfo.position) {\n this.hoveredDirection = hoveredCellInfo.position;\n } else {\n this.hoveredDirection = null;\n }\n if (hoveredCellInfo) {\n this.hoveredDirection = hoveredCellInfo.position;\n if (!this.overlayRef || !this.overlayRef.hasAttached()) {\n this.overlayRef = this._createOverlayForHandle();\n this._showHandleOverlay();\n } else {\n this.resizeRef.setDirection(this.isXAxisHover ? 'X' : 'Y');\n this.updateOverlayHandleSizeAndOffset();\n }\n } else if (this.overlayRef) {\n this.overlayRef.detach();\n }\n });\n }\n\n private listenForResizeEvents() {\n const takeUntilDestroyed = takeUntil<ColumnSizeAction>(this.destroy$);\n\n merge(this.resizeNotifier.resizeCanceled, this.resizeNotifier.triggerResize)\n .pipe(\n takeUntilDestroyed,\n filter(columnSize => columnSize.tableCell === this.elementRef.nativeElement)\n )\n .subscribe(({ deltaSize, previousSize, completeImmediately }) => {\n // 如果偏移的值不存在就不要进行后续的计算了\n if (isUndefined(deltaSize) || isUndefined(previousSize)) {\n return;\n }\n const { top, left, height, width } = this.elementRef.nativeElement.getBoundingClientRect();\n const { clientY, clientX } = event as MouseEvent;\n let isPreventApplySize = false;\n // 向下,或者向右移动(deltaSize > 0),鼠标位置不在当前单元格拖拽线上,阻止应用拖拽尺寸\n if (this.isXAxisHover) {\n const cellWidth = this.hoveredDirection === Position.left ? 0 : width;\n isPreventApplySize = deltaSize > 0 && left + cellWidth - clientX > 0;\n } else {\n const cellHeight = this.hoveredDirection === Position.top ? 0 : height;\n isPreventApplySize = deltaSize > 0 && top + cellHeight - clientY > 0;\n }\n if (isPreventApplySize) {\n return;\n }\n this.elementRef.nativeElement!.classList.add(OVERLAY_ACTIVE_CLASS);\n this.applySize(deltaSize, previousSize);\n if (completeImmediately) {\n this._completeResizeOperation();\n }\n });\n\n merge(this.resizeNotifier.resizeCanceled, this.resizeNotifier.resizeCompleted)\n .pipe(takeUntilDestroyed)\n .subscribe(columnSize => {\n this._cleanUpAfterResize(columnSize);\n this.resizingStore.cleanResizing();\n });\n }\n\n private _completeResizeOperation(): void {\n this.ngZone.run(() => {\n this.resizeNotifier.resizeCompleted.next({\n tableCell: this.elementRef.nativeElement\n });\n });\n }\n\n private _cleanUpAfterResize(columnSize: ColumnSizeAction): void {\n this.elementRef.nativeElement!.classList.remove(OVERLAY_ACTIVE_CLASS);\n }\n\n private _createHandlePortal(): ComponentPortal<TheColumnResizeOverlayHandleComponent> {\n const customTokens = new WeakMap();\n this.resizeRef = new ResizeRef(\n this.elementRef,\n this.overlayRef!,\n this.tableOptions.minWidthPx,\n this.tableOptions.maxWidthPx,\n this.tableOptions.minHeightPx,\n this.tableOptions.maxHeightPx,\n () => {\n this.updateOverlayHandleSizeAndOffset();\n }\n );\n customTokens.set(ResizeRef, this.resizeRef);\n customTokens.set(TableCellEventDispatcher, this.eventDispatcher);\n customTokens.set(ColumnResizeNotifierSource, this.resizeNotifier);\n const injector = new PortalInjector(this.injector, customTokens);\n return new ComponentPortal(TheColumnResizeOverlayHandleComponent, this.viewContainerRef, injector);\n }\n\n private _showHandleOverlay(): void {\n this.overlayRef!.attach(this._createHandlePortal()).changeDetectorRef.markForCheck();\n this.updateOverlayHandleSizeAndOffset();\n }\n\n private updateOverlayHandleSizeAndOffset() {\n this.overlayRef?.removePanelClass(['the-column-resize-handle-panel', ...this.rowResizeClass]);\n this.isXAxisHover ? this.updateOverlayHandleColumnSize() : this.updateOverlayHandleRowSize();\n this.overlayRef?.updatePositionStrategy(this.createPositionStrategy());\n this.resizeRef.setDirection(this.isXAxisHover ? 'X' : 'Y');\n this.resizeRef.setPosition(this.hoveredDirection);\n }\n\n private updateOverlayHandleColumnSize() {\n let height = 0;\n const tableElementRect = this.tableElement.getBoundingClientRect();\n const tableElementTop = tableElementRect.top;\n const tableElementBottom = tableElementRect.bottom;\n if (this.getIsStickyTopRow()) {\n height = tableElementBottom - this.scrollableElementTop - TABLE_INSERT_MASK - TABLE_PADDING + TABLE_BORDER;\n } else if (tableElementTop < this.scrollableElementTop) {\n height = this.tableElement.offsetHeight - (this.scrollableElementTop - tableElementTop);\n const editor: HTMLElement = this.elementRef.nativeElement.closest('the-editor');\n const toolbar = editor.querySelector('.the-global-toolbar') as HTMLElement;\n // 处理 toolbar 存在的时候减去内嵌工具栏高度\n if (toolbar) {\n height = height - toolbar.offsetHeight;\n (this.overlayRef.hostElement as HTMLElement).style.marginTop = `${toolbar.offsetHeight}px`;\n }\n } else if (tableElementBottom > this.scrollableElementBottom) {\n height = this.tableElement.offsetHeight - (tableElementBottom - this.scrollableElementBottom);\n } else {\n height = this.tableElement.offsetHeight;\n }\n this.overlayRef!.updateSize({ height, width: OVERLAY_INIT_SIZE, maxHeight: 'inherit' });\n }\n\n private getIsStickyTopRow() {\n const newTableElement = this.tableComponent.nativeElement;\n return newTableElement.className.includes(TableWithStickyRowClass);\n }\n\n private updateOverlayHandleRowSize() {\n const width = this.tableComponent.tableWrapper.nativeElement.offsetWidth;\n this.overlayRef!.addPanelClass(this.rowResizeClass);\n this.overlayRef!.updateSize({ width: width - 2, height: OVERLAY_INIT_SIZE });\n }\n\n private applySize(deltaSize: number, previousSize?: number): void {\n // update col width and table width\n if (this.isXAxisHover) {\n this.applyColumnSize(deltaSize);\n } else {\n this.applyRowSize(deltaSize);\n }\n this.tableComponent.useRowControls();\n this.tableComponent.detectChanges();\n this.updateOverlayHandleSizeAndOffset();\n this.tableComponent.setGridColumnsStyle();\n }\n\n private _createOverlayForHandle(): OverlayRef {\n // Use of overlays allows us to properly capture click events spanning parts\n // of two table cells and is also useful for displaying a resize thumb\n // over both cells and extending it down the table as needed.\n const overlayOption = this.isXAxisHover\n ? {\n width: OVERLAY_INIT_SIZE + 'px',\n panelClass: 'the-column-resize-handle-panel'\n }\n : {\n height: OVERLAY_INIT_SIZE + 'px',\n panelClass: this.rowResizeClass\n };\n return this.overlay.create({\n // Always position the overlay based on left-indexed coordinates.\n disposeOnNavigation: true,\n positionStrategy: this.createPositionStrategy(),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n ...overlayOption\n });\n }\n\n private createPositionStrategy() {\n let offsetY = this.calculateOverlayHandleOffsetY();\n let offsetX = this.calculateOverlayHandleOffsetX();\n const position: ConnectedPosition = this.isXAxisHover\n ? { ...POSITION_MAP[this.hoveredDirection], offsetY }\n : { ...POSITION_MAP[this.hoveredDirection], offsetX };\n return this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef.nativeElement)\n .withFlexibleDimensions(false)\n .withGrowAfterOpen(false)\n .withPush(false)\n .withPositions([position]);\n }\n\n private calculateOverlayHandleOffsetY() {\n const tableElementTop = this.tableElement.getBoundingClientRect().top;\n if (this.getIsStickyTopRow()) {\n /* 设置固定标题行后,第一个表格元素实际是第二行,第二行和第一行偏移的位置差一个 mask 和与顶部 padding 的位置,所以需要补齐 */\n return (\n this.scrollableElementTop -\n this.elementRef.nativeElement.getBoundingClientRect().top +\n TABLE_INSERT_MASK +\n TABLE_PADDING -\n TABLE_BORDER\n );\n }\n if (tableElementTop < this.scrollableElementTop) {\n return this.scrollableElementTop - this.elementRef.nativeElement.getBoundingClientRect().top;\n } else {\n return tableElementTop - this.elementRef.nativeElement.getBoundingClientRect().top;\n }\n }\n\n private calculateOverlayHandleOffsetX() {\n const cellElementLeft = this.elementRef.nativeElement.getBoundingClientRect().left;\n const tableElementLeft = this.tableElement.getBoundingClientRect().left;\n return tableElementLeft - cellElementLeft + this.scrollableElementLeft;\n }\n\n applyColumnSize(deltaX: number): void {\n const cols = [...this.tableElement.querySelector('colgroup').children] as HTMLTableColElement[];\n this.resizingStore.storeTableWidth(cols);\n this.resizingStore.initDirection(deltaX);\n let cellIndex = this.elementRef.nativeElement.cellIndex;\n if (this.hoveredDirection === 'left') {\n cellIndex = cellIndex - 1;\n }\n const colspan = (this.elementRef.nativeElement as HTMLElement).getAttribute('colspan') || 1;\n cellIndex = cellIndex + (colspan as number) / 1 - 1;\n if (deltaX > 0) {\n this.applyRightCols(cols, deltaX, cellIndex + 1);\n if (this.resizingStore.isRestoring(deltaX)) {\n deltaX = this.resizingStore.restoreLeftCols(deltaX);\n }\n if (deltaX > 0) {\n cols[cellIndex].style.width = coerceCssPixelValue(coercePixelsFromCssValue(cols[cellIndex].style.width) + deltaX);\n }\n } else {\n const nextCol = cols[cellIndex + 1];\n if (nextCol) {\n let leftDeltaX = this.resizingStore.getScrollWidth(deltaX);\n const _delta = this.applyLeftCols(cols, deltaX, cellIndex);\n if (_delta === deltaX) {\n // can not resize\n return;\n }\n deltaX = deltaX - _delta;\n if (this.resizingStore.isRestoring(deltaX)) {\n if (leftDeltaX < 0) {\n leftDeltaX = this.resizingStore.restoreRightCols(leftDeltaX);\n }\n if (leftDeltaX < 0) {\n nextCol.style.width = coerceCssPixelValue(getElementWidth(nextCol) + Math.abs(leftDeltaX));\n }\n } else {\n nextCol.style.width = coerceCssPixelValue(getElementWidth(nextCol) + Math.abs(deltaX));\n }\n } else {\n const scrollWidth = getElementWidth(this.tableElement) - this.tableComponent.getWrapperWidth();\n if (scrollWidth > 0) {\n if (scrollWidth > Math.abs(deltaX)) {\n this.applyLeftCols(cols, deltaX, cellIndex);\n } else {\n this.applyLeftCols(cols, -scrollWidth, cellIndex);\n }\n }\n }\n }\n }\n\n applyLeftCols(cols: HTMLTableColElement[], deltaX: number, colIndex: number): number {\n while (deltaX < 0 && cols[colIndex]) {\n const currentWidth = getElementWidth(cols[colIndex]);\n if (currentWidth > this.tableOptions.minWidthPx) {\n if (this.resizingStore.isResizing(deltaX)) {\n this.resizingStore.storeResizingCol(cols[colIndex]);\n }\n if (currentWidth > this.tableOptions.minWidthPx + Math.abs(deltaX)) {\n cols[colIndex].style.width = coerceCssPixelValue(currentWidth - Math.abs(deltaX));\n deltaX = 0;\n } else {\n deltaX += currentWidth - this.tableOptions.minWidthPx;\n cols[colIndex].style.width = coerceCssPixelValue(this.tableOptions.minWidthPx);\n }\n }\n colIndex--;\n }\n return deltaX;\n }\n\n applyRightCols(cols: HTMLTableColElement[], deltaX: number, colIndex: number) {\n while (deltaX > 0 && cols[colIndex]) {\n const currentWidth = getElementWidth(cols[colIndex]);\n if (currentWidth > this.tableOptions.minWidthPx) {\n if (this.resizingStore.isResizing(deltaX)) {\n this.resizingStore.storeResizingCol(cols[colIndex]);\n }\n if (currentWidth > deltaX + this.tableOptions.minWidthPx) {\n cols[colIndex].style.width = coerceCssPixelValue(currentWidth - deltaX);\n deltaX = 0;\n } else {\n deltaX -= currentWidth - this.tableOptions.minWidthPx;\n cols[colIndex].style.width = coerceCssPixelValue(this.tableOptions.minWidthPx);\n }\n }\n colIndex++;\n }\n return deltaX;\n }\n\n applyRowSize(deltaY: number): void {\n const rows = [...this.tableElement.querySelector('tbody').children] as HTMLTableRowElement[];\n this.resizingStore.storeTableHeight(rows);\n this.resizingStore.initDirection(deltaY, this.isXAxisHover);\n let rowIndex = this.elementRef.nativeElement.parentElement.rowIndex - 1; // subtract thead's tr\n if (this.hoveredDirection === Position.top) {\n rowIndex = rowIndex - 1;\n }\n const rowSpan = (this.elementRef.nativeElement as HTMLTableCellElement).rowSpan;\n const bottomRowIndex = rowIndex + (rowSpan - 1) + 1;\n if (deltaY > 0) {\n this.applyBottomRows(rows, deltaY, bottomRowIndex);\n if (this.resizingStore.isRestoring(deltaY, this.isXAxisHover)) {\n deltaY = this.resizingStore.restoreTopRows(deltaY);\n }\n if (deltaY > 0) {\n let initHeight = getElementHeight(rows[rowIndex]);\n rows[rowIndex].style.height = coerceCssPixelValue(initHeight + deltaY);\n }\n } else {\n let addDeltaY = this.resizingStore.getAddTableHeight(deltaY);\n const _delta = this.applyTopRows(rows, deltaY, rowIndex);\n if (_delta === deltaY) {\n // can not resize\n return;\n }\n deltaY = deltaY - _delta;\n if (this.resizingStore.isRestoring(deltaY, this.isXAxisHover)) {\n if (addDeltaY < 0) {\n deltaY = this.resizingStore.restoreBottomRows(deltaY);\n }\n }\n }\n }\n\n applyTopRows(rows: HTMLTableRowElement[], deltaY: number, rowIndex: number): number {\n while (deltaY < 0 && rows[rowIndex]) {\n const rowOffsetHeight = getElementHeight(rows[rowIndex]);\n if (rowOffsetHeight > this.tableOptions.minHeightPx) {\n if (this.resizingStore.isResizing(deltaY, this.isXAxisHover)) {\n this.resizingStore.storeResizingRow(rows[rowIndex]);\n }\n if (rowOffsetHeight > this.tableOptions.minHeightPx + Math.abs(deltaY)) {\n rows[rowIndex].style.height = coerceCssPixelValue(rowOffsetHeight - Math.abs(deltaY));\n deltaY = 0;\n } else {\n deltaY += rowOffsetHeight - this.tableOptions.minHeightPx;\n rows[rowIndex].style.height = coerceCssPixelValue(this.tableOptions.minHeightPx);\n }\n }\n rowIndex--;\n }\n return deltaY;\n }\n\n applyBottomRows(rows: HTMLTableRowElement[], deltaY: number, rowIndex: number): number {\n while (rows[rowIndex] && deltaY > 0) {\n const rowOffsetHeight = getElementHeight(rows[rowIndex]);\n if (rowOffsetHeight > this.tableOptions.minHeightPx) {\n if (this.resizingStore.isResizing(deltaY, this.isXAxisHover)) {\n this.resizingStore.storeResizingRow(rows[rowIndex]);\n }\n if (rowOffsetHeight > deltaY + this.tableOptions.minHeightPx) {\n rows[rowIndex].style.height = coerceCssPixelValue(rowOffsetHeight - deltaY);\n deltaY = 0;\n } else {\n deltaY -= rowOffsetHeight - this.tableOptions.minHeightPx;\n rows[rowIndex].style.height = coerceCssPixelValue(this.tableOptions.minHeightPx);\n }\n }\n rowIndex++;\n }\n return deltaY;\n }\n\n //#region\n\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this.overlayRef) {\n this.overlayRef.detach();\n }\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<div #cellInner>\n <slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children>\n</div>\n","import { TableCellElement, TableElement, TableRowElement } from '../../../custom-types';\nimport { getOriginCell } from './calc-span';\n\nexport const normalizeTable = (table: TableElement) => {\n const normalizedNodes = [];\n const rowHeight = table.children.length;\n const columnWidth = table.children[0].children.length;\n table.children.forEach((row: TableRowElement, rowIndex) => {\n row.children.forEach((cell: TableCellElement, columnIndex) => {\n // case 1\n if (cell.colspan || cell.rowspan) {\n const rowspan = cell.rowspan || 1;\n const colspan = cell.colspan || 1;\n if (rowspan > rowHeight - rowIndex) {\n cell.rowspan = rowHeight - rowIndex;\n }\n if (colspan > columnWidth - columnIndex) {\n cell.colspan = columnWidth - columnIndex;\n }\n return;\n }\n // case 2\n if (cell.hidden && !normalizedNodes.includes(cell)) {\n const origin = getOriginCell(table, rowIndex, columnIndex);\n if (!origin) {\n delete table.children[rowIndex].children[columnIndex].hidden;\n }\n }\n });\n });\n return table;\n};\n","import { Overlay } from '@angular/cdk/overlay';\nimport { Component } from '@angular/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { TheBaseToolbarItem } from '../../core/toolbar-item/base-toolbar-item';\nimport { TheTableSelectComponent } from '../../components/table-select/table-select.component';\nimport { TableOptions } from './table.types';\n\n@Component({\n selector: 'the-table-toolbar-item',\n template: `\n <a\n href=\"javascript:;\"\n class=\"link-with-down\"\n thyAction\n [thyActionIcon]=\"toolbarItem.icon\"\n [thyActionActive]=\"active\"\n [thyTooltip]=\"toolbarItem?.name\"\n thyTooltipPlacement=\"top\"\n (mousedown)=\"preventDefault($event)\"\n (click)=\"execute($event)\"\n >\n <thy-icon class=\"link-down-icon font-size-sm text-desc ml-1\" thyIconName=\"caret-down\"> </thy-icon>\n </a>\n `,\n host: {\n class: 'the-toolbar-dropdown-container'\n }\n})\nexport class TheTableToolbarItemComponent extends TheBaseToolbarItem {\n tableSelectRef: ThyPopoverRef<TheTableSelectComponent>;\n\n get isOpenTableSelect() {\n return this.tableSelectRef && this.tableSelectRef.componentInstance;\n }\n\n constructor(private thyPopover: ThyPopover, private overlay: Overlay) {\n super();\n }\n\n preventDefault(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n execute(event: MouseEvent) {\n super.execute(event);\n\n if (this.editor?.disabled) {\n return;\n }\n this.toggleTableSelect(event);\n }\n\n toggleTableSelect(event: MouseEvent, optionsParam?: TableOptions) {\n if (this.isOpenTableSelect) {\n this.tableSelectRef.close();\n return;\n }\n this.tableSelectRef = this.thyPopover.open(TheTableSelectComponent, {\n origin: event.currentTarget as HTMLElement,\n initialState: {\n editor: this.editor,\n optionsParam\n },\n minWidth: 0,\n backdropClosable: false,\n hasBackdrop: false,\n outsideClosable: true,\n insideClosable: false,\n placement: 'bottomLeft',\n offset: 0,\n panelClass: 'the-table-selector-panel',\n scrollStrategy: this.overlay.scrollStrategies.reposition()\n });\n return this.tableSelectRef;\n }\n}\n","import { TableOptions } from '../table.types';\nimport { TableCellElement, TableRowElement } from '../../../custom-types';\nimport { TablePosition } from './table-position';\nimport { Path } from 'slate';\nimport { TheEditor } from '../../../interfaces';\nimport { ElementKinds } from '../../../constants';\n\nexport const isLegalTable = (editor: TheEditor, element: TableRowElement | TableCellElement, path?: Path) => {\n try {\n const nodePath = path || TheEditor.findPath(editor, element);\n const opts = new TableOptions();\n const tablePosition = TablePosition.create(opts, editor, nodePath.concat(0));\n return element.type === ElementKinds.tableCell ? tablePosition.table && tablePosition.row : tablePosition.table;\n } catch (error) {\n return false;\n }\n};\n","import { Transforms, Point, Node, Range, Editor, NodeEntry, Element, Path, Operation, Text } from 'slate';\nimport { AngularEditor, ELEMENT_TO_COMPONENT, hotkeys } from 'slate-angular';\nimport { TableOptions, ThePluginTableOption } from './table.types';\nimport { isRangeInTable, isSelectionInTable, TablePosition } from './utils';\nimport { PluginKeys, TheEditor } from '../../interfaces';\nimport { ElementKinds } from '../../constants/node-types';\nimport { CustomElement, TableCellElement, TableElement, TableRowElement } from '../../custom-types';\nimport { TheTableComponent } from './components/table.component';\nimport { TableEditor } from './table.editor';\nimport { clearTableNode } from './transforms/clear-table-node';\nimport { isVirtualKey } from './utils/is-virtual-key';\nimport { insertColumnAtRow } from './transforms/insert-column';\nimport { calculateAnchorPositionInCell } from './utils/calc-anchor-position';\nimport { CLIPBOARD_FORMAT_KEY } from '../../constants/default';\nimport { getOriginCell } from './utils/calc-span';\nimport { resetTableCell } from './utils/split-cell';\nimport { removeColumns } from './utils/remove-columns';\nimport { addColumns } from './utils/add-columns';\nimport { TheTableRowComponent } from './components/row/row.component';\nimport { TheTdComponent } from './components/td/td.component';\nimport { extractFragment } from '../../utils/fragment';\nimport * as TheQueries from '../../queries';\nimport { normalizeTable } from './utils/normalize-table';\nimport { cloneDeep } from '../../utils/lodash';\nimport { createPluginFactory } from '../../core';\nimport { TheTableToolbarItemComponent } from './toolbar-item.component';\nimport { PluginMenuIcons, ThePluginMenuItemType } from '../../constants/plugin-menu';\nimport { isSelectedCellMerged } from './utils/merge-cell';\nimport { timer } from 'rxjs';\nimport { isLegalTable } from './utils/is-legal-table';\nimport { createEmptyParagraph } from '../../utils/create-empty-paragraph';\nimport { createTablePosition } from './utils/create-table-position';\n\nexport const withTable = <T extends Editor>(editor: T): T => {\n const {\n deleteBackward,\n deleteForward,\n onKeydown,\n setFragmentData,\n insertData,\n normalizeNode,\n isBlockCard,\n renderElement,\n deleteCutData,\n isContainer,\n onChange,\n onClick\n } = editor;\n\n editor.deleteBackward = unit => {\n const opts = new TableOptions();\n if (!isSelectionInTable(opts, editor)) {\n deleteBackward(unit);\n return;\n }\n const { selection } = editor;\n\n const [, startBlockPath] = Editor.above<Element>(editor, {\n match: n => Editor.isBlock(editor, n)\n });\n const startPosition = createTablePosition(editor);\n if (\n startBlockPath.length <= startPosition.cellEntry[1].length + 1 &&\n startBlockPath.pop() === 0 &&\n selection.anchor.offset === 0 &&\n TheQueries.isStart(editor, selection.anchor, startBlockPath) &&\n !Editor.isVoid(editor, TheQueries.anchorBlock(editor))\n ) {\n return;\n }\n deleteBackward(unit);\n };\n\n editor.deleteForward = unit => {\n const opts = new TableOptions();\n const afterPoint = Editor.after(editor, editor.selection);\n if (afterPoint && isRangeInTable(opts, editor, { anchor: afterPoint, focus: afterPoint })) {\n const beforePosition = createTablePosition(editor);\n const afterPosition = createTablePosition(editor, afterPoint.path);\n if (beforePosition.cell && beforePosition.cell !== afterPosition.cell) {\n return;\n }\n }\n deleteForward(unit);\n };\n\n editor.onClick = (event: MouseEvent) => {\n if (event.detail === 3) {\n const isMergedCell = isSelectedCellMerged(editor);\n const domSelection = window.getSelection();\n if (domSelection && !domSelection.isCollapsed && editor.selection) {\n const slateSelection = AngularEditor.toSlateRange(editor, domSelection);\n const opts = new TableOptions();\n const startPosition = TablePosition.create(opts, editor, slateSelection.anchor.path);\n const endPosition = TablePosition.create(opts, editor, slateSelection.focus.path);\n if (isMergedCell && startPosition.cell !== endPosition.cell) {\n timer(81).subscribe(() => {\n Transforms.select(editor, slateSelection.anchor.path);\n });\n }\n }\n }\n onClick(event);\n };\n\n editor.onKeydown = (event: KeyboardEvent) => {\n const opts = new TableOptions();\n const isMoveUp = hotkeys.isMoveUp(event);\n const isMoveDown = hotkeys.isMoveDown(event);\n const isMoveBackward = hotkeys.isMoveBackward(event);\n const isMoveForward = hotkeys.isMoveForward(event);\n const { selection } = editor;\n if (!selection || !selection.anchor || !selection.focus) {\n onKeydown(event);\n return;\n }\n const startPosition = createTablePosition(editor);\n const endPosition = createTablePosition(editor, selection.focus.path);\n const isCollapsed = Range.isCollapsed(selection);\n if (startPosition && endPosition && endPosition.isInTable()) {\n // for keyboard up and down key in the table\n if (isMoveUp || isMoveDown) {\n const cellPath = endPosition.cellEntry[1];\n const startPath = Editor.start(editor, cellPath).path;\n const endPath = Editor.end(editor, cellPath).path;\n const { isFirstLine, isLastLine } = calculateAnchorPositionInCell(editor);\n startPath.pop();\n endPath.pop();\n\n if ((TheQueries.anchorBlockEntry(editor)[1].toString() !== startPath.toString() || !isFirstLine) && isMoveUp) {\n onKeydown(event);\n return;\n }\n\n if ((TheQueries.anchorBlockEntry(editor)[1].toString() !== endPath.toString() || !isLastLine) && isMoveDown) {\n onKeydown(event);\n return;\n }\n\n event.preventDefault();\n let at: Point;\n if (isMoveUp) {\n const aboveRow = startPosition.table.children[startPosition.getRowIndex() - 1];\n const aboveCell = aboveRow && aboveRow.children[startPosition.getColumnIndex()];\n if (aboveCell) {\n if (aboveCell.hidden) {\n TableEditor.selectOriginCell(\n editor,\n startPosition.table,\n startPosition.getRowIndex() - 1,\n startPosition.getColumnIndex(),\n false\n );\n return;\n } else {\n at = Editor.end(editor, TheEditor.findPath(editor, aboveCell));\n }\n } else {\n const previousNodeEntry = Editor.previous(editor, { at: startPosition.tableEntry[1] });\n const beforePoint = Editor.before(editor, startPosition.tableEntry[1]);\n Editor.next(editor, { at: startPosition.tableEntry[1] });\n\n if (previousNodeEntry) {\n at = Editor.end(editor, previousNodeEntry[1]);\n }\n\n if (!previousNodeEntry && beforePoint) {\n at = Editor.end(editor, beforePoint.path);\n }\n\n if (!previousNodeEntry && !beforePoint) {\n AngularEditor.moveBlockCard(editor, startPosition.tableEntry[0], { direction: 'left' });\n return;\n }\n }\n Transforms.select(editor, at);\n } else {\n let belowRowIndex = startPosition.getRowIndex() + 1;\n if (startPosition.cell.rowspan > 1) {\n belowRowIndex = startPosition.getRowIndex() + startPosition.cell.rowspan;\n }\n const belowRow = startPosition.table.children[belowRowIndex];\n const belowCell = belowRow && belowRow.children[startPosition.getColumnIndex()];\n if (belowCell) {\n if (belowCell.hidden) {\n TableEditor.selectOriginCell(\n editor,\n startPosition.table,\n startPosition.getRowIndex() + 1,\n startPosition.getColumnIndex(),\n true\n );\n return;\n } else {\n at = Editor.start(editor, TheEditor.findPath(editor, belowCell));\n }\n } else {\n const nextNodeEntry = Editor.next(editor, { at: startPosition.tableEntry[1] });\n const movePath = nextNodeEntry ? nextNodeEntry[1] : Editor.after(editor, startPosition.tableEntry[1]).path;\n at = Editor.start(editor, movePath);\n }\n Transforms.select(editor, at);\n }\n return;\n }\n\n if (isMoveBackward) {\n const beforePoint = Editor.before(editor, editor.selection);\n const beforePosition = beforePoint && createTablePosition(editor, beforePoint.path);\n if (beforePosition && beforePosition.cell && beforePosition.cell.hidden) {\n event.preventDefault();\n const at = Editor.end(editor, TheEditor.findPath(editor, beforePosition.findPrevious()));\n Transforms.select(editor, at);\n }\n }\n\n if (isMoveForward) {\n const afterPoint = Editor.after(editor, editor.selection);\n const afterPosition = afterPoint && createTablePosition(editor, afterPoint.path);\n if (afterPosition.cell && afterPosition.cell.hidden) {\n event.preventDefault();\n const nextCell = afterPosition.findNext();\n if (nextCell) {\n const at = Editor.start(editor, TheEditor.findPath(editor, afterPosition.findNext()));\n Transforms.select(editor, at);\n event.preventDefault();\n } else {\n AngularEditor.moveBlockCard(editor, startPosition.tableEntry[0], { direction: 'right' });\n event.preventDefault();\n }\n return;\n }\n }\n\n // Prevent deleting cells in the table\n if (!isCollapsed && !startPosition.isInTable() && !isVirtualKey(event)) {\n event.preventDefault();\n let tableOutPath: Point;\n Editor.withoutNormalizing(editor, () => {\n if (Range.isForward(selection)) {\n tableOutPath = Editor.end(editor, [selection.focus.path[0] - 1]);\n clearTableNode(opts, editor, true);\n } else {\n tableOutPath = Editor.start(editor, [selection.focus.path[0] + 1]);\n clearTableNode(opts, editor);\n }\n const tableOutRange = Editor.range(editor, selection.anchor, tableOutPath);\n Transforms.delete(editor, { at: tableOutRange });\n });\n // new range\n const cellRange = Editor.range(editor, editor.selection.focus.path.slice(0, 3));\n const focusRange = Range.intersection(editor.selection, cellRange);\n Transforms.select(editor, focusRange);\n Editor.deleteFragment(editor);\n return;\n }\n }\n onKeydown(event);\n return;\n };\n\n editor.setFragmentData = unit => {\n const opts = new TableOptions();\n if (!isSelectionInTable(opts, editor)) {\n setFragmentData(unit);\n return;\n }\n const tablePosition = createTablePosition(editor);\n const tableComponent = ELEMENT_TO_COMPONENT.get(tablePosition.table) as TheTableComponent;\n const selectedCellPositions = tableComponent.tableStore.getSelectedCellPositions();\n let tableFragment = null;\n if (tableComponent.tableStore.selectedRowsIndex.length > 0) {\n const rows = tablePosition.table.children.slice(\n tableComponent.tableStore.selectedRowsIndex[0],\n tableComponent.tableStore.selectedRowsIndex[tableComponent.tableStore.selectedRowsIndex.length - 1] + 1\n );\n tableFragment = {\n ...tablePosition.table,\n children: rows\n };\n } else if (selectedCellPositions.length > 0) {\n const tempRows = {};\n for (const cell of selectedCellPositions) {\n const { row, col } = cell;\n const cellPath = [...tablePosition.tableEntry[1], row, col];\n const cellNode = Node.get(editor, cellPath) as TableCellElement;\n if (!tempRows[row]) {\n tempRows[row] = [];\n }\n tempRows[row].push(cellNode);\n }\n const rows: TableRowElement[] = Object.values(tempRows).map((item: TableCellElement[]) => {\n return {\n type: ElementKinds.tableRow,\n children: item\n };\n });\n tableFragment = {\n type: ElementKinds.table,\n children: rows\n };\n }\n if (tableFragment) {\n tableFragment = normalizeTable(cloneDeep(tableFragment));\n const plainText = Node.string(tableFragment);\n tableFragment = [tableFragment];\n const stringObj = JSON.stringify(tableFragment);\n const encoded = window.btoa(encodeURIComponent(stringObj));\n unit.setData(`application/${CLIPBOARD_FORMAT_KEY}`, encoded);\n unit.setData('text/plain', plainText);\n return;\n }\n setFragmentData(unit);\n };\n\n editor.insertData = data => {\n const fragment = extractFragment(data);\n if (fragment) {\n const opts = new TableOptions();\n const { selection } = editor;\n if (\n isSelectionInTable(opts, editor) &&\n fragment.length === 1 &&\n Element.isElement(fragment[0]) &&\n fragment[0].type === ElementKinds.table\n ) {\n const tablePosition = createTablePosition(editor);\n const clipboardTable = fragment[0].children as Node[];\n const clipboardRow = (clipboardTable[0] as Element).children;\n const selectRowIndex = tablePosition.getRowIndex();\n const selectColIndex = tablePosition.getColumnIndex();\n const lastRowIndex = selectRowIndex + clipboardTable.length - 1;\n const lastColIndex = selectColIndex + clipboardRow.length - 1;\n\n for (let i = selectRowIndex; i <= lastRowIndex; i++) {\n for (let j = selectColIndex; j <= lastColIndex; j++) {\n const row = tablePosition.table.children[i];\n if (row && row.children[j]) {\n const originCell = getOriginCell(tablePosition.table, i, j);\n if (originCell && (originCell.colspan || originCell.rowspan)) {\n const path = TheEditor.findPath(editor, originCell).slice(-2);\n resetTableCell(editor, tablePosition.table, originCell, path[0], path[1]);\n }\n }\n }\n }\n\n Editor.withoutNormalizing(editor, () => {\n if (lastColIndex > tablePosition.getWidth() - 1) {\n const addColCount = lastColIndex - (tablePosition.getWidth() - 1);\n TableEditor.insertColumn(editor, addColCount, tablePosition.getWidth());\n }\n if (lastRowIndex > tablePosition.getHeight() - 1) {\n const addRowCount = lastRowIndex - (tablePosition.getHeight() - 1);\n TableEditor.insertRow(editor, addRowCount, tablePosition.getHeight());\n }\n clipboardTable.forEach((row: TableElement, i: number) => {\n row.children.forEach((col: Node, j: number) => {\n const at = [...tablePosition.tableEntry[1], selectRowIndex + i, selectColIndex + j];\n Transforms.removeNodes(editor, { at });\n Transforms.insertNodes(editor, col, { at });\n });\n });\n });\n const target = Editor.start(editor, [...tablePosition.tableEntry[1], selectRowIndex, selectColIndex]);\n Transforms.select(editor, target);\n return;\n }\n\n // when pasting data, the last one is a table, and the focus position is specially handled\n // * this is to focus after withTrailingNode.normalizeNode() to avoid incorrect focus element.\n // * if there is a node below, the focus will be on the left side of the node below.\n // * if there is no node below, the focus will be on the right side of the current table.\n const lastInsertNode = fragment[fragment.length - 1];\n const isTable = (lastInsertNode as Element).type === ElementKinds.table;\n if (isTable) {\n setTimeout(() => {\n Editor.withoutNormalizing(editor, () => {\n const [, currentPath] = TheQueries.findNode(editor, {\n match: n => Element.isElement(n) && n.type === ElementKinds.table\n });\n const nextPath = Path.next(currentPath);\n const hasNextNode = Node.has(editor, nextPath);\n const focusPath = hasNextNode ? nextPath : currentPath;\n const focusNode = Node.get(editor, focusPath);\n const isBlockCard = editor.isBlockCard(focusNode);\n const cursorPath = {\n path: focusPath,\n offset: isBlockCard ? (hasNextNode ? -1 : -2) : 0\n };\n Transforms.select(editor, cursorPath);\n });\n });\n }\n }\n insertData(data);\n };\n\n editor.normalizeNode = ([node, path]: NodeEntry<Node>) => {\n if (Element.isElement(node) && node.type === ElementKinds.table) {\n const table = node as TableElement;\n const maxWidth = Math.max(...table.children.map(row => row.children.length));\n const invalidRows = table.children.filter(row => row.children.length < maxWidth);\n if (invalidRows.length > 0) {\n const opts = new TableOptions();\n Editor.withoutNormalizing(editor, () => {\n table.children.map((row, rowIndex) => {\n row.children.map((cell, cellIndex) => {\n if (cell.hidden || cell.colspan || cell.rowspan) {\n Transforms.setNodes(\n editor,\n { hidden: null, colspan: null, rowspan: null },\n { at: [...path, rowIndex, cellIndex] }\n );\n }\n });\n });\n invalidRows.forEach(row => {\n const count = maxWidth - row.children.length;\n insertColumnAtRow(\n opts,\n editor,\n count,\n [node, path] as NodeEntry<TableElement>,\n table.children.indexOf(row),\n row.children.length\n );\n });\n });\n }\n if (table.columns && table.columns.length !== maxWidth) {\n const columns = table.columns.length > maxWidth ? removeColumns(table, maxWidth) : addColumns(table, maxWidth);\n Transforms.setNodes(editor, { columns }, { at: path });\n }\n }\n\n // noramlize illegal cell and row to be paragraph\n if (Element.isElement(node) && [ElementKinds.tableCell, ElementKinds.tableRow].includes(node.type)) {\n if (!isLegalTable(editor, node as TableRowElement | TableCellElement, path)) {\n try {\n const rootPath = [path[0]];\n const offset = editor.selection.focus.offset;\n // find all tableCell and tableRow\n const nodes = Editor.nodes(editor, {\n at: rootPath,\n mode: 'lowest',\n match: (node: CustomElement) => {\n return node.type === ElementKinds.tableCell;\n }\n });\n let cursorPath = path[0];\n if (nodes) {\n let index = 0;\n // noramlize to be paragraph\n for (const [targetNode, targetPath] of nodes) {\n index++;\n const paragraph = createEmptyParagraph();\n const text = Node.string(targetNode);\n (paragraph.children[0] as Text).text = text;\n if ((targetNode as CustomElement).key === node.key) {\n cursorPath = rootPath[0] + index;\n }\n Transforms.insertNodes(editor, paragraph, { at: [rootPath[0] + index] });\n }\n }\n const cursor = { path: [cursorPath, 0], offset: offset };\n Transforms.select(editor, { anchor: cursor, focus: cursor });\n // remove root node\n Transforms.removeNodes(editor, {\n at: rootPath\n });\n } catch (error) {}\n return;\n }\n }\n\n // adjust selection when selection is in hidden cell\n if (Element.isElement(node) && node.type === ElementKinds.tableCell) {\n if (\n editor.selection &&\n Range.isCollapsed(editor.selection) &&\n Path.isAncestor(path, editor.selection.anchor.path) &&\n node.hidden\n ) {\n setTimeout(() => {\n const opts = new TableOptions();\n const tablePosition = createTablePosition(editor);\n const origin = getOriginCell(tablePosition.table, tablePosition.getRowIndex(), tablePosition.getColumnIndex());\n if (origin) {\n const path = AngularEditor.findPath(editor, origin);\n Transforms.select(editor, Editor.end(editor, path));\n }\n }, 0);\n return;\n }\n }\n\n normalizeNode([node, path]);\n };\n\n editor.isBlockCard = (element: Element) => {\n if (element && element.type === ElementKinds.table) {\n return true;\n }\n return isBlockCard(element);\n };\n\n editor.renderElement = (element: Element) => {\n if (element.type === ElementKinds.table) {\n return TheTableComponent;\n }\n if (element.type === ElementKinds.tableRow && isLegalTable(editor, element)) {\n return TheTableRowComponent;\n }\n if (element.type === ElementKinds.tableCell && isLegalTable(editor, element)) {\n return TheTdComponent;\n }\n return renderElement(element);\n };\n\n editor.deleteCutData = () => {\n const opts = new TableOptions();\n if (!isSelectionInTable(opts, editor)) {\n deleteCutData();\n return;\n }\n const element = createTablePosition(editor);\n const tableComponent = ELEMENT_TO_COMPONENT.get(element.table) as TheTableComponent;\n const selectedCellPositions = tableComponent.tableStore.getSelectedCellPositions();\n if (selectedCellPositions.length > 0) {\n Editor.withoutNormalizing(editor, () => {\n if (tableComponent.tableStore.isSelectedTable) {\n if (tableComponent.tableStore.isFullscreen) {\n return;\n }\n TableEditor.removeTable(editor);\n } else {\n tableComponent.tableStore.clearSelectedCellsContent();\n }\n tableComponent.tableService.closeToolbar();\n });\n return;\n }\n deleteCutData();\n };\n\n editor.isContainer = (element: Element) => {\n return element.type === ElementKinds.tableCell ? true : isContainer(element);\n };\n\n editor.onChange = () => {\n onChange();\n // adujst selection when selection is in hidden cell\n // just hook set_selection\n try {\n const isCollapsed = editor.selection && Range.isCollapsed(editor.selection);\n const isSelectionOperation = editor.operations.every(op => Operation.isSelectionOperation(op));\n if (isCollapsed && isSelectionOperation) {\n const opts = new TableOptions();\n const tablePosition = createTablePosition(editor);\n if (tablePosition.isInTable() && tablePosition.cell.hidden) {\n TableEditor.selectOriginCell(\n editor,\n tablePosition.table,\n tablePosition.getRowIndex(),\n tablePosition.getColumnIndex(),\n false\n );\n }\n }\n } catch (error) {}\n };\n\n return editor;\n};\n\nexport const createTablePlugin = createPluginFactory<ThePluginTableOption>({\n key: PluginKeys.table,\n withOverrides: withTable,\n nestedStructureByKey: {\n [ElementKinds.table]: ElementKinds.tableRow,\n [ElementKinds.tableRow]: ElementKinds.tableCell\n },\n toolbarItems: [\n {\n key: ElementKinds.table,\n icon: 'table-border-all',\n name: '表格',\n iconComponent: TheTableToolbarItemComponent,\n execute: editor => TableEditor.insertTable(editor),\n active: editor => TableEditor.isActive(editor)\n }\n ],\n menuItems: [\n {\n key: ElementKinds.table,\n keywords: 'biaoge,bg,table,表格',\n execute: editor => TableEditor.insertTable(editor),\n active: editor => TableEditor.isActive(editor),\n name: '表格',\n type: ThePluginMenuItemType.group,\n menuIcon: PluginMenuIcons.table,\n description: '支持插入表格',\n displayKey: '/bg'\n }\n ],\n options: {\n showFullscreen: false,\n freezeColumnHeader: false,\n freezeRowHeader: false,\n setFullscreen: (editor: Editor, event: MouseEvent, element: Element) => {\n event.preventDefault();\n }\n }\n});\n","import { Component, ElementRef, HostBinding, ChangeDetectorRef, OnInit } from '@angular/core';\nimport { Editor } from 'slate';\nimport * as TheTransforms from '../../transforms';\nimport { PluginKeys, TheBaseElementComponent } from '../../interfaces';\nimport { TodoItemElement } from '../../custom-types';\nimport { TheContextService } from '../../services/context.service';\nimport { getPluginOptions } from '../../core/utils/get-plugin-options';\nimport { TodoItemPluginOptions } from './todo-item.plugin';\n\n@Component({\n selector: 'div[theTodoItem]',\n template: `\n <span contenteditable=\"false\" class=\"todo-item-status\">\n <input #checkbox type=\"checkbox\" [checked]=\"element.checked\" (click)=\"onCheck(checkbox.checked)\" />\n </span>\n <span><slate-children [children]=\"children\" [context]=\"childrenContext\" [viewContext]=\"viewContext\"></slate-children></span>\n `\n})\nexport class TheTodoItemComponent extends TheBaseElementComponent<TodoItemElement, Editor> implements OnInit {\n checked: boolean;\n\n @HostBinding('class.the-check-item') checkItemClass = true;\n\n @HostBinding('class.the-todo-item-selectable') get checkItemSelectable() {\n return this.editableWithReadonly && this.readonly;\n }\n\n @HostBinding('attr.the-level')\n get level() {\n return this.element?.indent || null;\n }\n\n get editableWithReadonly() {\n return getPluginOptions<TodoItemPluginOptions>(this.editor, PluginKeys.checkItem)?.editableWithReadonly;\n }\n\n constructor(public elementRef: ElementRef, public cdr: ChangeDetectorRef, private ctxService: TheContextService) {\n super(elementRef, cdr);\n }\n\n ngOnInit() {\n super.ngOnInit();\n }\n\n onCheck(checked: boolean) {\n if (this.readonly && !this.editableWithReadonly) {\n return false;\n }\n TheTransforms.setNode(this.editor, { checked }, this.element);\n }\n}\n","import { Transforms, Range, Editor, Element, Descendant } from 'slate';\nimport { createPluginFactory } from '../../core';\nimport { PluginKeys } from '../../interfaces';\nimport { ElementKinds, PluginMenuIcons, ThePluginMenuItemType } from '../../constants';\nimport { TheTodoItemComponent } from './todo-item.component';\nimport { TodoItemEditor } from './todo-item.editor';\nimport * as TheQueries from '../../queries';\n\nexport interface TodoItemPluginOptions {\n editableWithReadonly?: boolean;\n}\n\nexport const withTodoItem = <T extends Editor>(editor: T): T => {\n const { insertBreak, deleteBackward, renderElement } = editor;\n\n editor.insertBreak = () => {\n const { selection } = editor;\n\n if (selection && Range.isCollapsed(selection)) {\n const [match] = Editor.nodes(editor, {\n match: n => Element.isElement(n) && n.type === ElementKinds.checkItem\n });\n\n if (match) {\n const [, path] = match;\n const block = TheQueries.anchorBlock(editor);\n\n if (block && Editor.isStart(editor, selection.anchor, path) && Editor.isEmpty(editor, block)) {\n Transforms.setNodes(\n editor,\n {\n type: ElementKinds.default,\n checked: undefined\n } as Partial<Descendant>,\n {\n match: n => Element.isElement(n) && n.type === ElementKinds.checkItem\n }\n );\n return;\n }\n }\n }\n insertBreak();\n\n const anchorBlock = TheQueries.anchorBlock(editor);\n if (anchorBlock && anchorBlock.type === ElementKinds.checkItem) {\n Transforms.setNodes(editor, { checked: false });\n }\n };\n\n editor.deleteBackward = unit => {\n const { selection } = editor;\n if (selection && Range.isCollapsed(selection)) {\n const [match] = Editor.nodes(editor, {\n match: n => Element.isElement(n) && n.type === ElementKinds.checkItem\n });\n\n if (match) {\n const [, path] = match;\n\n if (Editor.isStart(editor, selection.anchor, path)) {\n Transforms.setNodes(editor, { type: ElementKinds.default, checked: undefined } as Partial<Descendant>, {\n match: n => Element.isElement(n) && n.type === ElementKinds.checkItem\n });\n return;\n }\n }\n }\n deleteBackward(unit);\n };\n\n editor.renderElement = (element: Element) => {\n if (element.type === ElementKinds.checkItem) {\n return TheTodoItemComponent;\n }\n return renderElement(element);\n };\n\n return editor;\n};\n\nexport const createTodoItemPlugin = createPluginFactory<TodoItemPluginOptions>({\n key: PluginKeys.checkItem,\n withOverrides: withTodoItem,\n toolbarItems: [\n {\n key: ElementKinds.checkItem,\n icon: 'list-check',\n name: '待办事项',\n execute: editor => TodoItemEditor.insertTodoItem(editor),\n active: editor => TodoItemEditor.isActive(editor)\n }\n ],\n menuItems: [\n {\n key: ElementKinds.checkItem,\n keywords: 'dbsx,daibanshixiang,to do list,todolist,待办事项',\n description: '插入待办事项',\n execute: editor => TodoItemEditor.insertTodoItem(editor),\n active: editor => TodoItemEditor.isActive(editor),\n type: ThePluginMenuItemType.icon,\n name: '待办事项',\n displayKey: '/dbsx',\n icon: 'list-check',\n menuIcon: PluginMenuIcons.checkItem\n }\n ],\n options: {\n allowParentTypes: [ElementKinds.tableCell, ElementKinds.blockquote],\n editableWithReadonly: false\n }\n});\n","import * as Types from '../types';\nimport { createAlignPlugin } from './align/align.plugin';\nimport { createAutoFormatPlugin } from './autoformat/autoformat.plugin';\nimport { createBlockquotePlugin } from './blockquote/blockquote.plugin';\nimport { createCodePlugin } from './code/code.plugin';\nimport { createColorPlugin } from './color/color.plugin';\nimport { createInsertDataByInvalidTypePlugin } from './common/insert-data-by-invalid-type';\nimport { createBlockCardPlugin } from './common/block-card.plugin';\nimport { createCommonPlugin } from './common/common.plugin';\nimport { createGetFragmentPlugin } from './common/get-fragment.plugin';\nimport { createTheHistoryPlugin } from './common/history.plugin';\nimport { createMoveSelectionPlugin } from './common/move-selection.plugin';\nimport { createRemoveEmptyPlugin } from './common/remove-empty.plugin';\nimport { createRemoveVoidPlugin } from './common/remove-void.plugin';\nimport { createResetTypePlugin } from './common/reset-type.plugin';\nimport { createTransformsPlugin } from './common/transforms.plugin';\nimport { createDeserializeHTMLPlugin } from './deserialize/deserialize-html.plugin';\nimport { createDeserializeMdPlugin } from './deserialize/deserialize-md.plugin';\nimport { createFontSizePlugin } from './font-size/font-size.editor';\nimport { createHeadingPlugin } from './heading/heading.plugin';\nimport { createHrPlugin } from './hr/hr.plugin';\nimport { createImagePlugin } from './image/image.plugin';\nimport { createIndentPlugin } from './indent/indent.plugin';\nimport { createInlineCodePlugin } from './inline-code/inline-code.plugin';\nimport { createLinkPlugin } from './link/link.plugin';\nimport { createListPlugin } from './list/list.plugin';\nimport { createMarkPlugin } from './mark/mark.plugin';\nimport { createMentionPlugin } from './mention/mention.plugin';\nimport { createNodeIDPlugin } from './node-id/node-id.plugin';\nimport { createInsertParagraphNodesPlugin } from './normalizers/insert-paragraph-nodes';\nimport { createTrailingNodePlugin } from './normalizers/trailing-node.plugin';\nimport { createPaintFormatPlugin } from './paint-format/paint-format.editor';\nimport { createQuickInsertPlugin } from './quick-insert/quick-insert.plugin';\nimport { createSoftBreakPlugin } from './soft-break/soft-break.plugin';\nimport { createTablePlugin } from './table/table.plugin';\nimport { createTodoItemPlugin } from './todo-item/todo-item.plugin';\nimport { createVerticalAlignPlugin } from './vertical-align/vertical-align.editor';\n\nexport const internalPlugins = () => [\n createTheHistoryPlugin(),\n createCommonPlugin(),\n createInsertDataByInvalidTypePlugin(),\n createRemoveEmptyPlugin(),\n createRemoveVoidPlugin(),\n createBlockCardPlugin(), // should in the front of list、resettype、todo、deserialize-html\n createResetTypePlugin(),\n createIndentPlugin(), // should in the front of list\n createListPlugin(),\n createLinkPlugin(),\n createTablePlugin(),\n createTodoItemPlugin(),\n createHrPlugin(),\n createAlignPlugin(),\n createCodePlugin(),\n createHeadingPlugin(),\n createVerticalAlignPlugin(),\n createMarkPlugin(),\n createFontSizePlugin(),\n createColorPlugin(),\n createSoftBreakPlugin(),\n createBlockquotePlugin(),\n createNodeIDPlugin(),\n createAutoFormatPlugin(),\n createPaintFormatPlugin(),\n createTransformsPlugin(),\n createTrailingNodePlugin(),\n createMoveSelectionPlugin(),\n createInsertParagraphNodesPlugin(),\n createGetFragmentPlugin(),\n createImagePlugin(), // must be before withDeserializeHTML\n createDeserializeHTMLPlugin(),\n createDeserializeMdPlugin(),\n createQuickInsertPlugin(), // must be before plugins that include onkeydown events\n createInlineCodePlugin(),\n createMentionPlugin()\n];\n","import { isKeyHotkey } from 'is-hotkey';\nimport { Editor } from 'slate';\nimport { InlineCodeEditor } from '../plugins/inline-code/inline-code.editor';\nimport { ElementKinds, MarkTypes } from '../constants/node-types';\nimport { MarkEditor } from '../plugins/mark/mark.editor';\n\nconst HOTKEYS = {\n 'mod+b': MarkTypes.bold,\n 'mod+i': MarkTypes.italic,\n 'mod+u': MarkTypes.underline,\n 'mod+e': ElementKinds.inlineCode\n};\nexport const markShortcuts = (editor: Editor, event: KeyboardEvent) => {\n for (const hotkey in HOTKEYS) {\n if (isKeyHotkey(hotkey, event)) {\n event.preventDefault();\n const mark = HOTKEYS[hotkey];\n if (mark === ElementKinds.inlineCode) {\n InlineCodeEditor.toggleInlineCode(editor);\n } else {\n MarkEditor.toggleMark(editor, mark);\n }\n }\n }\n};\n","import { Editor } from 'slate';\nimport { markShortcuts } from './mark';\n\nexport const shortcuts = (editor: Editor, event: KeyboardEvent) => {\n markShortcuts(editor, event);\n};\n","import {\n Component,\n OnInit,\n OnDestroy,\n ChangeDetectorRef,\n Input,\n ElementRef,\n NgZone,\n ChangeDetectionStrategy,\n ViewChild\n} from '@angular/core';\nimport { ScrollDispatcher } from '@angular/cdk/overlay';\nimport { merge, fromEvent, Subject } from 'rxjs';\nimport { takeUntil, filter, debounceTime } from 'rxjs/operators';\nimport { Range as slateRange, Editor } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport * as TheQueries from '../../queries';\nimport { THE_INLINE_TOOLBAR_TYPES } from '../../constants';\nimport { ToolbarItem } from '../../interfaces';\nimport { TheToolbarComponent } from '../toolbar/toolbar.component';\nimport { TheContextService } from '../../services/context.service';\n\n@Component({\n selector: 'the-inline-toolbar',\n template: `<the-toolbar\n #inlineToolbar\n class=\"the-inline-toolbar\"\n [editor]=\"editor\"\n [toolbarItems]=\"toolbarItems\"\n [isMore]=\"false\"\n ></the-toolbar> `,\n host: {\n '[class.hide]': 'toolbarItems.length === 0'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheInlineToolbarComponent implements OnInit, OnDestroy {\n @Input() editor: Editor;\n @Input() toolbarItems: ToolbarItem[];\n @ViewChild('inlineToolbar') inlineToolbar: TheToolbarComponent;\n\n destroy$ = new Subject<void>();\n\n constructor(\n private elementRef: ElementRef<any>,\n private scrollDispatcher: ScrollDispatcher,\n private cdr: ChangeDetectorRef,\n private ngZone: NgZone,\n private contextService: TheContextService\n ) {}\n\n ngOnInit() {\n this.scrollDispatcher\n .scrolled()\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.updateInlineToolbar();\n this.cdr.detectChanges();\n });\n this.ngZone.runOutsideAngular(() => {\n merge(\n fromEvent(document, 'mouseup').pipe(filter((e: MouseEvent) => e.button !== 2)),\n fromEvent(document, 'keyup').pipe(filter((e: KeyboardEvent) => !e.shiftKey))\n )\n .pipe(debounceTime(200), takeUntil(this.destroy$))\n .subscribe(() => {\n this.updateInlineToolbar();\n });\n });\n }\n\n updateInlineToolbar() {\n const inlineToolbar = this.elementRef.nativeElement.firstElementChild;\n\n if (!this.editor.selection) {\n inlineToolbar.removeAttribute('style');\n return;\n }\n const anchorBlock = TheQueries.anchorBlock(this.editor);\n if (!inlineToolbar || !anchorBlock) {\n return;\n }\n const { editor } = this;\n const { selection } = editor;\n\n if (\n !selection ||\n !AngularEditor.isFocused(editor) ||\n slateRange.isCollapsed(selection) ||\n Editor.string(editor, selection) === ''\n ) {\n inlineToolbar.removeAttribute('style');\n return;\n }\n\n if (!THE_INLINE_TOOLBAR_TYPES.includes(anchorBlock.type)) {\n return;\n }\n const native = window.getSelection();\n if (native.type !== 'None') {\n const range = native.getRangeAt(0);\n this.updatePosition(inlineToolbar, range);\n this.inlineToolbar?.selectionChange(this.editor);\n }\n this.cdr.detectChanges();\n }\n\n updatePosition(toolbarElement: HTMLElement, range) {\n let boundary = range.getBoundingClientRect();\n\n if (!boundary || (boundary.height === 0 && boundary.width === 0 && range.startContainer === range.endContainer)) {\n if (range.startContainer.nodeType === 1 && range.startContainer.querySelector('img')) {\n boundary = range.startContainer.querySelector('img').getBoundingClientRect();\n } else {\n boundary = range.startContainer.getBoundingClientRect();\n }\n }\n const editableElement = this.contextService.getEditableElement();\n const editableRect = editableElement.getBoundingClientRect();\n const toolbarHeight = toolbarElement.offsetHeight;\n const toolbarWidth = toolbarElement.offsetWidth;\n const halfOffsetWidth = toolbarWidth / 2;\n const defaultLeft = -halfOffsetWidth;\n const offsetLeft = boundary.left - editableRect.left;\n const isTopLeft = offsetLeft - 30 > halfOffsetWidth; // 30: editable padding left\n const isTopRight = editableRect.width - offsetLeft - boundary.width / 2 < halfOffsetWidth;\n const positions: any = {};\n\n positions.top = boundary.top - toolbarHeight;\n positions.right = 'initial';\n positions.left = boundary.left;\n\n if (isTopLeft) {\n positions.left = boundary.left + boundary.width / 2 + defaultLeft;\n }\n\n if (isTopRight) {\n positions.left = boundary.right - toolbarWidth;\n }\n\n for (let key of Object.keys(positions)) {\n toolbarElement.style[key] = positions[key] + (isNaN(positions[key]) ? '' : 'px');\n }\n toolbarElement.style.opacity = '1';\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","import { Component, ElementRef, Input, HostListener, Renderer2, ChangeDetectorRef, ViewChild, OnInit, HostBinding } from '@angular/core';\nimport { Editor, Node } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { MarkTypes } from '../../../constants/node-types';\nimport { isCleanEmptyParagraph } from '../../../utils/is-clean-empty-paragraph';\nimport { QuickInsertEditor } from '../quick-insert.editor';\nimport * as TheQueries from '../../../queries';\nimport { ToolbarItem } from '../../../interfaces/toolbar';\n\n@Component({\n selector: '[theQuickInsert]',\n templateUrl: './quick-insert.component.html'\n})\nexport class TheQuickInsertComponent implements OnInit {\n @HostBinding('class')\n className = 'the-quick-insert';\n\n @Input() editor: Editor;\n\n @Input() isVisible = false;\n\n defaultIconName = 'plus-circle-thin';\n\n iconNameFill = 'plus-circle-thin-fill';\n\n displayIconName = this.defaultIconName;\n\n @ViewChild('iconElement', { read: ElementRef, static: false })\n iconElement: ElementRef<any>;\n\n @HostListener('mousedown', ['$event'])\n handleMousedownNativeElement(event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n constructor(private renderer: Renderer2, private elementRef: ElementRef<HTMLElement>, private cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n const { onChange } = this.editor;\n this.editor.onChange = () => {\n onChange();\n\n if (this.editor && this.editor.options && !this.editor.options.readonly) {\n // wait isOpenedMenu is updated\n setTimeout(() => {\n this.checkStatus();\n }, 0);\n }\n };\n this.checkStatus();\n }\n\n public checkStatus() {\n const { editor } = this;\n if (\n this.isVisible &&\n !QuickInsertEditor.isOpenedMenu(editor) &&\n isCleanEmptyParagraph(editor) &&\n !this.hasExcludeAttribute() &&\n !this.isRichMediaScope()\n ) {\n const block = Node.ancestor(editor, [editor?.selection?.anchor.path[0]]);\n const rootNode: HTMLElement = AngularEditor.toDOMNode(editor, block);\n this.updatePosition(rootNode.offsetLeft, rootNode.offsetTop);\n return;\n }\n\n this.addHiddenClass();\n }\n\n private addHiddenClass() {\n this.elementRef.nativeElement.classList.add('d-none');\n }\n\n private removeHiddenClass() {\n this.elementRef.nativeElement.classList.remove('d-none');\n }\n\n private isRichMediaScope() {\n const { editor } = this;\n if (editor?.selection) {\n const block = Node.ancestor(editor, [editor?.selection?.anchor.path[0]]);\n const rootElement = AngularEditor.toDOMNode(editor, block);\n const leafElement = rootElement.querySelector('[data-slate-leaf=\"true\"]');\n const rootElementRect = rootElement.getBoundingClientRect();\n const leafElementRect = leafElement.getBoundingClientRect();\n return leafElementRect?.x !== rootElementRect?.x;\n }\n return false;\n }\n\n private hasExcludeAttribute() {\n const marks = TheQueries.getSelectionMarks(this.editor);\n const fontSizeMark: number = marks[MarkTypes.fontSize];\n\n return fontSizeMark;\n }\n\n private updatePosition(left: number, top?: number) {\n this.renderer.setStyle(this.elementRef.nativeElement, 'top', `${top}px`);\n this.renderer.setStyle(this.elementRef.nativeElement, 'left', `${left}px`);\n this.removeHiddenClass();\n }\n\n mouseEnter(event: MouseEvent) {\n this.displayIconName = this.iconNameFill;\n this.cdr.markForCheck();\n }\n\n mouseLeave(event: MouseEvent) {\n this.displayIconName = this.defaultIconName;\n this.cdr.markForCheck();\n }\n\n handleClick(event: MouseEvent) {\n event.stopPropagation();\n event.preventDefault();\n // avoid popover is closed immediately\n setTimeout(() => {\n QuickInsertEditor.openMenu(this.editor)\n .afterClosed()\n .subscribe(() => {\n this.checkStatus();\n });\n this.checkStatus();\n }, 100);\n }\n}\n","<thy-icon\n #iconElement\n [thyIconName]=\"displayIconName\"\n class=\"quick-insert-icon text-desc font-size-xlg\"\n (mouseenter)=\"mouseEnter($event)\"\n (mouseleave)=\"mouseLeave($event)\"\n (mousedown)=\"handleClick($event)\"\n></thy-icon>\n","import {\n OnInit,\n OnDestroy,\n Component,\n Input,\n ViewContainerRef,\n ViewChild,\n ElementRef,\n forwardRef,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n NgZone,\n ChangeDetectionStrategy,\n ChangeDetectorRef\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { mixinUnsubscribe, MixinBase } from 'ngx-tethys/core';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { Editor, Text, Transforms, createEditor, Element, Descendant, Range, Path, NodeEntry } from 'slate';\nimport { withHistory } from 'slate-history';\nimport { AngularEditor, DOMRange, SlateError, defaultScrollSelectionIntoView, withAngular } from 'slate-angular';\nimport { TheOptions, DomEventDataInfo, TheEditor, TheDataMode, ToolbarEntity, PluginKeys } from './interfaces';\nimport { MarkTypes, CLIPBOARD_FORMAT_KEY, initializeDefaultMenuIcons } from './constants';\nimport { TheTemplateComponent } from './components/template/template.component';\nimport { TheToolbarComponent } from './components/toolbar/toolbar.component';\nimport { TheTextComponent } from './components/text/text.component';\nimport { TheContextService } from './services/context.service';\nimport {\n autoFocus,\n dataDeserialize,\n dataSerializing,\n idCreator,\n setEditorUUID,\n coercePixelsFromCssValue,\n THE_EDITOR_PREVIOUS_SELECTION\n} from './utils';\nimport { withTheia, createToolbar, getPluginOptions } from './core';\nimport { internalPlugins } from './plugins';\nimport { shortcuts } from './shortcuts';\nimport * as TheTransforms from './transforms';\nimport * as TheQueries from './queries';\nimport { ThePlugin } from './interfaces/plugins/plugins';\nimport { QuickInsertPluginOptions } from './plugins/quick-insert/quick-insert.plugin';\nimport { ThyIconRegistry } from 'ngx-tethys/icon';\nimport { isEqual } from './utils/lodash';\nimport { fromEvent, takeUntil } from 'rxjs';\n\n@Component({\n selector: 'the-editor, theEditor',\n templateUrl: 'editor.component.html',\n providers: [\n TheContextService,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TheEditorComponent),\n multi: true\n }\n ],\n host: {\n class: 'the-editor',\n '[class.the-editor-readonly]': 'theOptions?.readonly'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TheEditorComponent extends mixinUnsubscribe(MixinBase) implements OnInit, OnChanges, OnDestroy {\n visibleQuickInsertPlus = true;\n\n @Input() theOptions: TheOptions;\n\n @Input() thePlugins: ThePlugin[] = [];\n\n @Input() theGlobalToolbar?: TheToolbarComponent;\n\n @Input() theDecorate: (editor: TheEditor, nodeEntry: NodeEntry) => Range[];\n\n @Input() theOnError?: (error: SlateError) => void;\n\n @Output() theOnSave: EventEmitter<Descendant[]> = new EventEmitter<Descendant[]>();\n\n @Output() theOnDOMEvent: EventEmitter<{ nativeEvent: Event; data?: DomEventDataInfo }> = new EventEmitter();\n\n @Output() theEditorCreated: EventEmitter<Editor> = new EventEmitter();\n\n @Output() theUploadingStatus: EventEmitter<boolean> = new EventEmitter(); // true 上传结束 false 上传中\n\n @ViewChild('templateInstance', { static: true })\n templateInstance: TheTemplateComponent;\n\n @ViewChild('theEditableContainer', { static: true, read: ElementRef })\n theEditableContainer: ElementRef<HTMLElement>;\n\n @ViewChild('globalToolbar')\n globalToolbarInstance: TheToolbarComponent;\n\n toolbarEntity: ToolbarEntity;\n\n editor: TheEditor;\n\n editorValue: Descendant[];\n\n globalToolbarClass: string[];\n\n decorate: (nodeEntry: NodeEntry) => Range[];\n\n get theGlobalToolbarInstance(): TheToolbarComponent {\n return this.theGlobalToolbar ? this.theGlobalToolbar : this.globalToolbarInstance;\n }\n\n get maxHeight() {\n return this.theOptions?.maxHeight ? `${this.theOptions?.maxHeight}px` : null;\n }\n\n elementToHtml: WeakMap<Element, string> = new WeakMap();\n\n private onChangeCallback: (_: any) => void = () => {};\n\n private onTouchedCallback: () => void = () => {};\n\n constructor(\n private theContextService: TheContextService,\n private viewContainerRef: ViewContainerRef,\n private elementRef: ElementRef,\n private ngZone: NgZone,\n private cdr: ChangeDetectorRef,\n private iconRegistry: ThyIconRegistry\n ) {\n super();\n }\n\n ngOnInit() {\n this.initialize();\n this.initializeEvents();\n initializeDefaultMenuIcons(this.iconRegistry);\n this.theContextService.uploadingStatus$.subscribe(isUploading => {\n if (isUploading) {\n this.theUploadingStatus.emit(true);\n } else {\n if (this.theContextService.uploadingFiles.length === 0) {\n this.theUploadingStatus.emit(false);\n }\n }\n });\n this.onErrorHandler();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const options = changes.theOptions;\n\n if (options && !options.firstChange && !isEqual(options.currentValue?.toolbar, options.previousValue?.toolbar)) {\n this.toolbarCalculate();\n }\n if (options && options.currentValue?.readonly !== options.previousValue?.readonly) {\n this.applyAutoFocus();\n }\n if (changes['theDecorate']) {\n this.generateDecorate();\n }\n if (this.editor?.selection && (options?.currentValue?.readonly || options?.currentValue?.disabled)) {\n Transforms.deselect(this.editor);\n }\n }\n\n ngOnDestroy() {\n super.ngOnDestroy();\n THE_EDITOR_PREVIOUS_SELECTION.delete(this.editor);\n }\n\n initialize() {\n const defaultPlugins = internalPlugins();\n const plugins = [...defaultPlugins, ...this.thePlugins];\n this.editor = withTheia(withHistory(withAngular(createEditor(), CLIPBOARD_FORMAT_KEY)), plugins);\n this.generateDecorate();\n this.editor.disabled = this.theOptions?.disabled;\n this.editor.extraElementOptions = this.theOptions?.extraElementOptions;\n this.editor.options = this.theOptions;\n setEditorUUID(this.editor, idCreator());\n this.theContextService.initialize({\n theOptions: this.theOptions,\n nativeElement: this.elementRef.nativeElement,\n viewContainerRef: this.viewContainerRef\n });\n this.initializeOptions();\n this.toolbarCalculate();\n setTimeout(() => {\n // You need to wait for the editor rendering to complete\n // before triggering the external toolbar assignment detection\n this.globalToolbarInit();\n this.theEditorCreated.emit(this.editor);\n this.applyAutoFocus();\n });\n const quickInsertPlugin = getPluginOptions<QuickInsertPluginOptions>(this.editor, PluginKeys.quickInsert);\n // quickInsert\n if (quickInsertPlugin.disabled || quickInsertPlugin.disabledPlus) {\n this.visibleQuickInsertPlus = false;\n }\n }\n\n initializeOptions() {\n if (!this.theOptions) {\n this.theOptions = {\n readonly: false,\n mode: TheDataMode.html,\n neededScrollIntoView: () => true\n };\n }\n if (!this.theOptions.mode) {\n this.theOptions = {\n ...this.theOptions,\n mode: TheDataMode.html\n };\n }\n }\n\n initializeEvents() {\n this.ngZone.runOutsideAngular(() => {\n fromEvent<MouseEvent>(document, 'mousedown')\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe((event: MouseEvent) => {\n this.editor.globalMousedown(event);\n });\n });\n }\n\n applyAutoFocus() {\n if (!this.theOptions?.disabled && !this.theOptions?.readonly) {\n autoFocus(this.editor, this.theOptions?.autoFocus);\n }\n }\n\n toolbarCalculate() {\n const { globalToolbarClass, toolbarEntity } = createToolbar(this.editor, this?.theOptions?.toolbar);\n this.globalToolbarClass = globalToolbarClass;\n this.toolbarEntity = toolbarEntity;\n }\n\n globalToolbarInit() {\n if (this.theGlobalToolbar) {\n this.theGlobalToolbarInstance.editor = this.editor;\n this.theGlobalToolbarInstance.toolbarItems = this.toolbarEntity.global;\n this.theGlobalToolbarInstance.containerClass = this.globalToolbarClass;\n this.theGlobalToolbarInstance.align = this?.theOptions?.toolbar?.align;\n this.theGlobalToolbarInstance.setToolbarClass();\n this.theGlobalToolbarInstance.renderToolbarView();\n }\n }\n\n writeValue(value: string | Descendant[]) {\n const data = dataDeserialize(this.theOptions?.mode, value);\n // data-deserialize\n this.editorValue = data;\n this.cdr.markForCheck();\n setTimeout(() => {\n if (!this.theOptions.readonly && AngularEditor.isFocused(this.editor) && this.editor.selection) {\n const selection = this.editor.selection;\n Transforms.deselect(this.editor);\n Transforms.select(this.editor, selection);\n }\n });\n }\n\n registerOnChange(fn: any) {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any) {\n this.onTouchedCallback = fn;\n }\n\n scrollSelectionIntoView = (e: TheEditor, domRange: DOMRange) => {\n const { neededScrollIntoView } = this.theOptions;\n if (neededScrollIntoView && !neededScrollIntoView(this.editor)) {\n return;\n }\n defaultScrollSelectionIntoView(e, domRange);\n };\n\n valueChange(value: Descendant[]) {\n this.theGlobalToolbarInstance?.selectionChange(this.editor);\n\n if (this.editorValue === value) {\n return;\n }\n this.editorValue = value;\n\n // serializing\n let newValue = this.serializingValue(value);\n this.onChangeCallback(newValue);\n }\n\n serializingValue(value: Descendant[]): string | Descendant[] {\n if (this.theOptions?.mode === TheDataMode.html) {\n let htmlValue = '';\n const isEmptyContent = TheQueries.isEmptyContent(value);\n value.forEach((element: Element) => {\n let elementHtml = this.elementToHtml.get(element);\n if (elementHtml === undefined) {\n // serializing\n elementHtml = dataSerializing(this.theOptions?.mode, [element]) as string;\n htmlValue += elementHtml;\n this.elementToHtml.set(element, elementHtml);\n return;\n }\n htmlValue += elementHtml;\n });\n return isEmptyContent ? '' : htmlValue;\n }\n return value;\n }\n\n onErrorHandler() {\n this.editor.onError = (errorData: SlateError) => {\n if (this.theOnError) {\n this.theOnError(errorData);\n return;\n }\n if (errorData.nativeError) {\n console.error(errorData.nativeError);\n }\n };\n }\n\n renderElement = (element: Element) => {\n const template = this.templateInstance.renderElement(element);\n const component = this.editor.renderElement(element);\n return component ? component : template;\n };\n\n renderLeaf = (text: Text) => {\n const leaf = this.editor.renderLeaf(text);\n return leaf ? leaf : null;\n };\n\n renderText = (text: Text) => {\n for (const key in MarkTypes) {\n if (text[MarkTypes[key]]) {\n return TheTextComponent;\n }\n }\n if (text.text.length === 0) {\n return;\n }\n };\n\n generateDecorate() {\n this.decorate = (nodeEntry: NodeEntry) => {\n const decorations = [];\n\n if (this.theDecorate) {\n decorations.push(...this.theDecorate(this.editor, nodeEntry));\n }\n\n return decorations;\n };\n }\n\n onKeyDown = (event: KeyboardEvent) => {\n shortcuts(this.editor, event);\n this.theOnDOMEvent.emit({\n nativeEvent: event,\n data: {\n key: event.key\n }\n });\n\n AngularEditor.onKeydown(this.editor, event);\n\n if (isKeyHotkey('mod+s', event) && !event.defaultPrevented) {\n this.ngZone.run(() => {\n this.theOnSave.emit(this.editorValue);\n });\n event.preventDefault();\n return;\n }\n\n if (isKeyHotkey('mod+a', event) && !event.defaultPrevented) {\n this.handleSelectAll();\n }\n };\n\n mousedown(event: MouseEvent) {\n const editableElement = AngularEditor.toDOMNode(this.editor, this.editor);\n const rectEditable = editableElement.getBoundingClientRect();\n const absoluteElement = document.elementFromPoint(event.x, event.y);\n if (!editableElement.isEqualNode(absoluteElement)) {\n const blockCardElement = absoluteElement.querySelector('.slate-block-card');\n if (!blockCardElement) return;\n }\n let { paddingRight } = window.getComputedStyle(editableElement, null);\n const paddingRightPixels = coercePixelsFromCssValue(paddingRight);\n const fakeRightX = rectEditable.right - paddingRightPixels - 50;\n let relativeElement = document.elementFromPoint(fakeRightX, event.y);\n let relativeBlockCardElement = relativeElement.closest('.slate-block-card');\n if (relativeBlockCardElement) {\n const centerX = rectEditable.x + rectEditable.width / 2;\n const blockCardEntry = AngularEditor.toSlateCardEntry(this.editor, relativeBlockCardElement.firstElementChild);\n if (blockCardEntry && this.editor.isBlockCard(blockCardEntry[0])) {\n event.preventDefault();\n AngularEditor.moveBlockCard(this.editor, blockCardEntry[0], { direction: event.x < centerX ? 'left' : 'right' });\n }\n }\n }\n\n handleSelectAll() {\n let node;\n if (!this.editor.selection) {\n TheTransforms.setEndSelection(this.editor);\n }\n const [start, end] = Range.edges(this.editor.selection);\n const selectionRange = Editor.range(this.editor, start, end);\n const containerBlocks = TheQueries.getContainerBlocks(this.editor);\n for (let i = 0; i < containerBlocks.length; i++) {\n [node] = TheQueries.getNodesByType(this.editor, containerBlocks[i]);\n if (node) {\n const [, path] = node;\n const isStartParent = Path.equals(path, start.path.slice(0, path.length));\n const isEndParent = Path.equals(path, end.path.slice(0, path.length));\n if (isStartParent && isEndParent) {\n const nodeRange = Editor.range(this.editor, path);\n if (!Range.equals(nodeRange, selectionRange)) {\n Transforms.select(this.editor, nodeRange);\n break;\n }\n node = null;\n }\n }\n }\n if (!node) {\n Transforms.select(this.editor, []);\n }\n event.preventDefault();\n return;\n }\n\n onClick = (event: MouseEvent) => {\n AngularEditor.onClick(this.editor, event);\n this.theOnDOMEvent.emit({\n nativeEvent: event\n });\n };\n\n onSlaPaste = (event: ClipboardEvent) => {\n this.theOnDOMEvent.emit({\n data: {\n ...this.getTextAndJSON(event.clipboardData)\n },\n nativeEvent: event\n });\n };\n\n onSlaBeforeInput = (\n event: Event & {\n inputType: string;\n data: string | null;\n dataTransfer: DataTransfer | null;\n }\n ) => {\n let data = {\n inputType: event.inputType,\n text: (event.data || event.dataTransfer) as string\n };\n if (event.inputType === 'insertFromPaste') {\n data = {\n ...data,\n ...this.getTextAndJSON((event.data || event.dataTransfer) as DataTransfer)\n };\n }\n this.theOnDOMEvent.emit({\n data,\n nativeEvent: event\n });\n };\n\n onSlaBlur = (event: FocusEvent) => {\n this.theOnDOMEvent.emit({\n nativeEvent: event\n });\n };\n\n onSlaFocus = (event: Event) => {\n this.theOnDOMEvent.emit({\n nativeEvent: event\n });\n };\n\n onSlaCut = (event: ClipboardEvent) => {\n this.theOnDOMEvent.emit({\n nativeEvent: event\n });\n };\n\n onSlaCopy = (event: ClipboardEvent) => {};\n\n onSlaCompositionStart = (event: CompositionEvent) => {};\n\n onSlaCompositionEnd = (event: CompositionEvent) => {};\n\n onSlaDragStart = (event: DragEvent) => {};\n\n onSlaDragOver = (event: DragEvent) => {};\n\n onDrop = (event: DragEvent) => {\n this.theOnDOMEvent.emit({\n nativeEvent: event\n });\n };\n\n getTextAndJSON(data: DataTransfer) {\n const fragment = data.getData(`application/${CLIPBOARD_FORMAT_KEY}`);\n let json = [];\n if (fragment) {\n json = JSON.parse(decodeURIComponent(window.atob(fragment)));\n }\n const text = data.getData('text/plain');\n return {\n json,\n text\n };\n }\n}\n","<the-toolbar\n *ngIf=\"!theOptions?.readonly && !theGlobalToolbar\"\n [ngClass]=\"{\n 'the-toolbar-disabled': theOptions?.disabled\n }\"\n #globalToolbar\n [editor]=\"editor\"\n [toolbarItems]=\"toolbarEntity.global\"\n [containerClass]=\"globalToolbarClass\"\n [align]=\"theOptions?.toolbar?.align\"\n></the-toolbar>\n\n<div\n #theEditableContainer\n class=\"the-editable-container\"\n thyImageGroup\n [ngClass]=\"{\n 'the-editor-disabled': theOptions?.disabled,\n 'max-height': maxHeight\n }\"\n [ngStyle]=\"{ 'max-height': maxHeight }\"\n>\n <slate-editable\n class=\"the-editor-typo\"\n [editor]=\"editor\"\n [ngModel]=\"editorValue\"\n (ngModelChange)=\"valueChange($event)\"\n [decorate]=\"decorate\"\n [placeholder]=\"theOptions?.placeholder\"\n [placeholderDecorate]=\"theOptions?.placeholderDecorate ? theOptions?.placeholderDecorate : null\"\n [renderElement]=\"renderElement\"\n [renderText]=\"renderText\"\n [renderLeaf]=\"renderLeaf\"\n [readonly]=\"theOptions?.readonly || theOptions?.disabled\"\n [keydown]=\"onKeyDown\"\n [click]=\"onClick\"\n [paste]=\"onSlaPaste\"\n [beforeInput]=\"onSlaBeforeInput\"\n [blur]=\"onSlaBlur\"\n [focus]=\"onSlaFocus\"\n [copy]=\"onSlaCopy\"\n [cut]=\"onSlaCut\"\n [isStrictDecorate]=\"false\"\n [compositionStart]=\"onSlaCompositionStart\"\n [compositionEnd]=\"onSlaCompositionEnd\"\n [dragStart]=\"onSlaDragStart\"\n [dragOver]=\"onSlaDragOver\"\n [drop]=\"onDrop\"\n (mousedown)=\"mousedown($event)\"\n [scrollSelectionIntoView]=\"scrollSelectionIntoView\"\n ></slate-editable>\n <the-inline-toolbar\n *ngIf=\"!theOptions?.readonly && theOptions?.inlineToolbarVisible\"\n [editor]=\"editor\"\n [toolbarItems]=\"toolbarEntity.inline\"\n ></the-inline-toolbar>\n <div *ngIf=\"!theOptions?.readonly\" theQuickInsert [editor]=\"editor\" [isVisible]=\"visibleQuickInsertPlus\"></div>\n <the-template #templateInstance></the-template>\n</div>\n","import { NgModule } from '@angular/core';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { TheColumnResizeOverlayHandleComponent } from './overlay-handle.component';\nimport { TheColumnResizeDirective } from './column-resize.directive';\n\nconst ENTRY_COMMON_COMPONENTS = [TheColumnResizeOverlayHandleComponent];\nconst DIRECTIVES = [TheColumnResizeDirective];\n\n@NgModule({\n declarations: ENTRY_COMMON_COMPONENTS,\n exports: ENTRY_COMMON_COMPONENTS\n})\nexport class TheColumnResizeCommonModule {}\n\n@NgModule({\n imports: [OverlayModule, TheColumnResizeCommonModule],\n declarations: DIRECTIVES,\n exports: DIRECTIVES\n})\nexport class TheColumnSizeModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SlateModule } from 'slate-angular';\nimport { TheDefaultElementComponent } from './components/element/element.component';\nimport { TheTemplateComponent } from './components/template/template.component';\nimport { TheTextComponent } from './components/text/text.component';\nimport { TheToolbarDropdownComponent } from './components/toolbar-dropdown/toolbar-dropdown.component';\nimport { TheToolbarItemComponent } from './components/toolbar-item/toolbar-item.component';\nimport { TheToolbarComponent } from './components/toolbar/toolbar.component';\nimport { TheEditorComponent } from './editor.component';\nimport { ElementClassPipe, ElementStylePipe, PluginMenuPipe } from './pipes';\nimport { TheBlockquoteComponent } from './plugins/blockquote/blockquote.component';\nimport { TheHrComponent } from './plugins/hr/hr.component';\nimport { TheImageComponent } from './plugins/image/image.component';\nimport { TheBulletedListComponent } from './plugins/list/components/bulleted-list.component';\nimport { TheListItemComponent } from './plugins/list/components/list-item.component';\nimport { TheNumberedListComponent } from './plugins/list/components/numbered-list.component';\nimport { TheTodoItemComponent } from './plugins/todo-item/todo-item.component';\n\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CodemirrorModule } from 'ng-codemirror';\nimport { ThyActionModule } from 'ngx-tethys/action';\nimport { ThyAlertModule } from 'ngx-tethys/alert';\nimport { ThyAutocompleteModule } from 'ngx-tethys/autocomplete';\nimport { ThyAvatarModule } from 'ngx-tethys/avatar';\nimport { ThyButtonModule } from 'ngx-tethys/button';\nimport { ThyDialogModule } from 'ngx-tethys/dialog';\nimport { ThyDividerModule } from 'ngx-tethys/divider';\nimport { ThyDropdownModule } from 'ngx-tethys/dropdown';\nimport { ThyFormModule } from 'ngx-tethys/form';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyImageModule } from 'ngx-tethys/image';\nimport { ThyInputModule } from 'ngx-tethys/input';\nimport { ThyListModule } from 'ngx-tethys/list';\nimport { ThyNavModule } from 'ngx-tethys/nav';\nimport { ThyNotifyModule } from 'ngx-tethys/notify';\nimport { ThyProgressModule } from 'ngx-tethys/progress';\nimport { ThyResizableModule } from 'ngx-tethys/resizable';\nimport { ThySelectModule } from 'ngx-tethys/select';\nimport { ThySharedModule } from 'ngx-tethys/shared';\nimport { ThySwitchModule } from 'ngx-tethys/switch';\nimport { ThyTooltipModule } from 'ngx-tethys/tooltip';\nimport { ThyInputNumberModule } from 'ngx-tethys/input-number';\nimport { TheColumnSizeModule } from './components/column-resize/column-resize.module';\nimport { TheContextMenuComponent } from './components/contextmenu/contextmenu.component';\nimport { TheConversionHintComponent } from './components/conversion-hint/conversion-hint.component';\nimport { TheInlineToolbarComponent } from './components/inline-toolbar/inline-toolbar.component';\nimport { TheTableSelectComponent } from './components/table-select/table-select.component';\nimport { TheToolbarGroupComponent } from './components/toolbar-group/toolbar-group.component';\nimport { TheToolbarGroupToken } from './constants/toolbar';\nimport { THE_MODE_PROVIDER } from './interfaces';\nimport { TheCodeComponent } from './plugins/code/code.component';\nimport { TheColorToolbarItemComponent } from './plugins/color/toolbar-item.component';\nimport { TheInlineCodeComponent } from './plugins/inline-code/inline-code.component';\nimport { TheLinkEditComponent } from './plugins/link/edit/link-edit.component';\nimport { TheLinkHoverComponent } from './plugins/link/hover/link-hover.component';\nimport { TheLinkComponent } from './plugins/link/link.component';\nimport { TheQuickInsertComponent } from './plugins/quick-insert/components/quick-insert.component';\nimport { TheInsertMarkComponent } from './plugins/table/components/insert-mark/insert-mark.component';\nimport { TheTableRowComponent } from './plugins/table/components/row/row.component';\nimport { TheTableComponent } from './plugins/table/components/table.component';\nimport { TheTdComponent } from './plugins/table/components/td/td.component';\nimport { TheTableOptionsComponent } from './plugins/table/components/toolbar/table-options.component';\nimport { TheTableToolbarComponent } from './plugins/table/components/toolbar/table-toolbar.component';\nimport { TheTableToolbarItemComponent } from './plugins/table/toolbar-item.component';\nimport { TheVerticalToolbarItemComponent } from './plugins/vertical-align/toolbar-item.component';\nimport { ThePluginMenuComponent } from './components/plugin-menu/plugin-menu.component';\nimport { ThyMenuModule } from 'ngx-tethys/menu';\nimport { TheListboxDirective, TheListboxOptionDirective, TheListboxGroupDirective } from './components/listbox/listbox';\nimport { ThyEmptyModule } from 'ngx-tethys/empty';\nimport { ThePreventDefaultDirective } from './components/action/prevent-default';\nimport { ThyPopoverModule } from 'ngx-tethys/popover';\nimport { TableFreezeColumnPipe, TableFreezeRowPipe } from './plugins/table/table.pipe';\nimport { ThyColorPickerModule } from 'ngx-tethys/color-picker';\n\nconst TETHYS = [\n ThyIconModule,\n ThyAvatarModule,\n ThyNavModule,\n ThyFormModule,\n ThySharedModule,\n ThyListModule,\n ThyTooltipModule,\n ThyProgressModule,\n ThyAutocompleteModule,\n ThyInputModule,\n ThySelectModule,\n ThyButtonModule,\n ThyNotifyModule,\n ThyAlertModule,\n ThyResizableModule,\n ThySwitchModule,\n ThyImageModule,\n ThyDialogModule,\n ThyActionModule,\n ThyDividerModule,\n ThyDropdownModule,\n ThyMenuModule,\n ThyEmptyModule,\n ThyPopoverModule,\n ThyInputNumberModule,\n ThyColorPickerModule\n];\n\nexport const COMPONENTS = [\n TheToolbarComponent,\n TheToolbarDropdownComponent,\n TheToolbarGroupComponent,\n TheToolbarItemComponent,\n TheInlineToolbarComponent,\n TheTextComponent,\n TheDefaultElementComponent,\n TheQuickInsertComponent,\n ThePluginMenuComponent,\n TheColorToolbarItemComponent,\n TheContextMenuComponent,\n TheInsertMarkComponent,\n TheTableSelectComponent,\n TheTableToolbarItemComponent,\n TheConversionHintComponent,\n TheVerticalToolbarItemComponent,\n TheTableOptionsComponent,\n TheListboxOptionDirective,\n TheListboxGroupDirective,\n TheListboxDirective,\n ThePreventDefaultDirective\n];\n\nexport const PLUGIN_COMPONENTS = [\n TheImageComponent,\n TheTemplateComponent,\n TheHrComponent,\n TheBlockquoteComponent,\n TheTodoItemComponent,\n TheListItemComponent,\n TheBulletedListComponent,\n TheNumberedListComponent,\n TheCodeComponent,\n TheLinkComponent,\n TheLinkEditComponent,\n TheLinkHoverComponent,\n TheTableToolbarComponent,\n TheTableComponent,\n TheTableRowComponent,\n TheTdComponent,\n TheInlineCodeComponent\n];\n\nconst PIPES = [ElementStylePipe, ElementClassPipe, TableFreezeColumnPipe, TableFreezeRowPipe, PluginMenuPipe];\n\n@NgModule({\n declarations: [TheEditorComponent, ...PIPES, ...COMPONENTS, ...PLUGIN_COMPONENTS],\n imports: [CommonModule, ScrollingModule, SlateModule, FormsModule, ...TETHYS, CodemirrorModule, TheColumnSizeModule],\n exports: [\n TheEditorComponent,\n TheToolbarComponent,\n TheToolbarDropdownComponent,\n TheToolbarItemComponent,\n TheDefaultElementComponent,\n ThePluginMenuComponent,\n TheListboxOptionDirective,\n TheListboxGroupDirective,\n TheListboxDirective,\n ThePreventDefaultDirective\n ],\n providers: [\n {\n provide: TheToolbarGroupToken,\n useValue: TheToolbarGroupComponent\n },\n THE_MODE_PROVIDER\n ]\n})\nexport class TheEditorModule {}\n","import { Injectable } from '@angular/core';\nimport { DefaultGlobalToolbarDefinition, DefaultInlineToolbarDefinition } from '../constants';\nimport { ToolbarKey, ToolbarItem, ToolbarDefinition, ToolbarEntity, ToolbarInitOption } from '../interfaces';\n\n@Injectable()\nexport class TheToolbarService {\n initialize(\n toolbarItems: ToolbarItem[],\n global: string[] = DefaultGlobalToolbarDefinition,\n inline: string[] = DefaultInlineToolbarDefinition\n ): ToolbarInitOption {\n const toolbarDefinition = {\n global,\n inline\n };\n\n const toolbarOperations: Map<string, ToolbarItem> = new Map<string, ToolbarItem>();\n toolbarItems.forEach(i => toolbarOperations.set(i.key, i));\n\n const toolbarEntity = this.nextToolbarEntity(toolbarDefinition, toolbarOperations);\n\n return {\n toolbarDefinition,\n toolbarOperations,\n toolbarEntity\n };\n }\n\n nextToolbarEntity(toolbarDefinition: ToolbarDefinition, toolbarItems: Map<string, ToolbarItem>): ToolbarEntity {\n const entity: ToolbarEntity = {};\n for (const defKey in toolbarDefinition) {\n entity[defKey] = this.getToolbarItemByKeys(toolbarDefinition[defKey], toolbarItems);\n }\n return entity;\n }\n\n getToolbarItemByKeys(keys: ToolbarKey[], toolbarItems: Map<string, ToolbarItem>): ToolbarItem[] {\n return keys.map((key: ToolbarKey) => {\n if (key === `split`) {\n return { key: `split` };\n }\n const item = toolbarItems.get(key);\n if (!item) {\n throw new Error(`Read a non-existent toolbar key`);\n }\n if (item.includes) {\n return { ...item, includes: this.getToolbarItemByKeys(item.includes as ToolbarKey[], toolbarItems) };\n }\n return item;\n });\n }\n}\n","import { createEditor, Descendant } from 'slate';\nimport { withHistory } from 'slate-history';\nimport { withAngular } from 'slate-angular';\nimport { createEmptyParagraph } from '../../utils/create-empty-paragraph';\nimport { ThePlugin } from '../../interfaces';\nimport { withTheia } from '../../core';\n\nexport const withTestPlugin = (plugins: ThePlugin[], initValue: Descendant[]) => {\n let editor = withTheia(withHistory(withAngular(createEditor())), plugins);\n editor.children = initValue || [createEmptyParagraph()];\n\n return editor;\n};\n","/*\n * Public API Surface of editor\n */\nexport * from './editor.module';\nexport * from './interfaces';\nexport * from './constants';\nexport * from './core/index';\nexport * from './plugins';\nexport * from './plugins/public-api';\nexport * from './custom-types';\nexport * from './plugins/image/image.component';\nexport * from './services/toolbar.service';\nexport * from './editor.component';\nexport * from './core/toolbar-item/base-toolbar-item';\nexport * from './utils/index';\nexport * from './services/context.service';\nexport * from './test/index';\nexport * from './components/index';\nexport * as TheQueries from './queries/index';\nexport * as TheTransforms from './transforms/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.TheDefaultElementComponent","i3.ElementStylePipe","Element","getLastChild","TheQueries.getNode","TheQueries.isAcrossBlocks","TheQueries.getAboveByType","TheQueries.getInsertElementsPath","TheQueries.anchorBlockEntry","isEmptyParagraph","TheQueries.isEmptyParagraph","TheQueries.getPluginByToolbarItem","TheQueries.getToolbarItemDisabled","i2","i3","i5","TABLE_INSERT_MASK","TABLE_BORDER","TABLE_PADDING","TheQueries.findPath","TheQueries.isNodeTypeIn","TheQueries.isNodeType","TheQueries.isAncestor","TheQueries.anchorBlock","TheTransforms.insertElements","TheQueries.isBlockActive","TheTransforms.setMarks","TheTransforms.unwrapNodesByType","TheQueries.getNodesByType","i6","i8","i9","i11.TheTableSelectComponent","i12.TheListboxOptionDirective","i12.TheListboxGroupDirective","i12.TheListboxDirective","i13.ThePreventDefaultDirective","i14.PluginMenuPipe","i4","TheQueries.getPointBefore","TheQueries.getText","TheQueries.isParagraph","TheQueries.isCollapsed","TheQueries.getRangeFromBlockStart","TheQueries.someNode","TheQueries.getRangeBefore","TheQueries.getBlockAbove","TheTransforms.handleContinualDeleteBackward","TheTransforms.handleContinualInsertBreak","TheQueries.isGlobalCollapsed","TheTransforms.deleteElement","i7","i10","i11","i12","i14.TheToolbarDropdownComponent","i15.ThePreventDefaultDirective","TheTransforms.insertParagraph","TheQueries.isEmptyParagraphByPath","TheQueries.getBlockCardAbove","TheQueries.isBlockAboveEmpty","TheQueries.getContainerBlocks","TheQueries.getSelectionNodesByType","isCollapsed","anchorBlock","anchorBlockEntry","TheQueries.isAncestorEmpty","TheQueries.getAbove","TheTransforms.closeConversionHint","TheQueries.getSelectionMarks","TheQueries.getAnchorBlockEntry","map","i1.TheContextService","i3.ThePreventDefaultDirective","SlateNode","TheQueries.getParent","TheQueries.isStart","TheQueries.isRangeAtRoot","TheQueries.isBlockTextEmptyAfterSelection","TheQueries.getLastChildPath","TheTransforms.moveChildren","TheQueries.findDescendant","TheQueries.isFirstChild","TheTransforms.onKeyDownResetBlockType","getPlainText","TheQueries.getPreviousPath","TheQueries.isDescendant","TheTransforms.mergeDeepToNodes","TheQueries.getLastNode","i4.TheToolbarComponent","i1.TableStore","i3.TheContextService","TheTransforms.setNode","i3.TableStore","i4.TheContextService","index","i9.TheColumnResizeDirective","i10.TheInsertMarkComponent","i3.ColumnResizeNotifierSource","i2.ColumnResizingStore","i3.TableFreezeColumnPipe","TheQueries.findNode","slateRange","i2.TheContextService","i3.TheToolbarComponent","takeUntil","isEmptyContent","TheQueries.isEmptyContent","TheTransforms.setEndSelection","i7.TheToolbarComponent","i8.TheInlineToolbarComponent","i9.TheQuickInsertComponent","i10.TheTemplateComponent"],"mappings":"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"}