@opentiny/fluent-editor 4.0.0-alpha.10 → 4.0.0-alpha.11

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 (259) hide show
  1. package/es/config/editor.utils.es.js.map +1 -1
  2. package/es/config/i18n/en-us.es.js +2 -0
  3. package/es/config/i18n/en-us.es.js.map +1 -1
  4. package/es/config/i18n/zh-cn.es.js +2 -0
  5. package/es/config/i18n/zh-cn.es.js.map +1 -1
  6. package/es/config/index.es.js.map +1 -1
  7. package/es/core/fluent-editor.es.js.map +1 -1
  8. package/es/fluent-editor.es.js +17 -13
  9. package/es/fluent-editor.es.js.map +1 -1
  10. package/es/formats/soft-break.es.js.map +1 -1
  11. package/es/formats/video.es.js.map +1 -1
  12. package/es/index.es.js +4 -0
  13. package/es/index.es.js.map +1 -1
  14. package/es/modules/ai/constants.es.js.map +1 -1
  15. package/es/modules/ai/index.es.js +1 -1
  16. package/es/modules/ai/index.es.js.map +1 -1
  17. package/es/modules/collaborative-editing/awareness/awareness.es.js.map +1 -1
  18. package/es/modules/collaborative-editing/awareness/y-indexeddb.es.js.map +1 -1
  19. package/es/modules/collaborative-editing/collaborative-editing.es.js.map +1 -1
  20. package/es/modules/collaborative-editing/module.es.js.map +1 -1
  21. package/es/modules/collaborative-editing/provider/providerRegistry.es.js.map +1 -1
  22. package/es/modules/collaborative-editing/provider/webrtc.es.js.map +1 -1
  23. package/es/modules/collaborative-editing/provider/websocket.es.js.map +1 -1
  24. package/es/modules/counter.es.js.map +1 -1
  25. package/es/modules/custom-clipboard.es.js.map +1 -1
  26. package/es/modules/custom-image/actions/action.es.js.map +1 -1
  27. package/es/modules/custom-image/actions/custom-resize-action.es.js.map +1 -1
  28. package/es/modules/custom-image/actions/delete-action.es.js.map +1 -1
  29. package/es/modules/custom-image/actions/image-toolbar-buttons.es.js +1 -1
  30. package/es/modules/custom-image/actions/image-toolbar-buttons.es.js.map +1 -1
  31. package/es/modules/custom-image/actions/toolbar-action.es.js.map +1 -1
  32. package/es/modules/custom-image/actions/toolbar.es.js.map +1 -1
  33. package/es/modules/custom-image/blot-formatter.es.js.map +1 -1
  34. package/es/modules/custom-image/image.es.js.map +1 -1
  35. package/es/modules/custom-image/options.es.js.map +1 -1
  36. package/es/modules/custom-image/specs/blot-spec.es.js.map +1 -1
  37. package/es/modules/custom-image/specs/custom-image-spec.es.js.map +1 -1
  38. package/es/modules/custom-image/specs/image-spec.es.js.map +1 -1
  39. package/es/modules/custom-uploader.es.js.map +1 -1
  40. package/es/modules/divider.es.js.map +1 -1
  41. package/es/modules/emoji.es.js.map +1 -1
  42. package/es/modules/file/formats/file.es.js.map +1 -1
  43. package/es/modules/file/modules/file-bar.es.js.map +1 -1
  44. package/es/modules/file/modules/file-module.es.js.map +1 -1
  45. package/es/modules/flow-chart/config-utils.es.js +102 -0
  46. package/es/modules/flow-chart/config-utils.es.js.map +1 -0
  47. package/es/modules/flow-chart/formats/flow-chart-blot.es.js +369 -0
  48. package/es/modules/flow-chart/formats/flow-chart-blot.es.js.map +1 -0
  49. package/es/modules/flow-chart/i18n/en-us.es.js +30 -0
  50. package/es/modules/flow-chart/i18n/en-us.es.js.map +1 -0
  51. package/es/modules/flow-chart/i18n/index.es.js +12 -0
  52. package/es/modules/flow-chart/i18n/index.es.js.map +1 -0
  53. package/es/modules/flow-chart/i18n/zh-cn.es.js +30 -0
  54. package/es/modules/flow-chart/i18n/zh-cn.es.js.map +1 -0
  55. package/es/modules/flow-chart/icons.es.js +27 -0
  56. package/es/modules/flow-chart/icons.es.js.map +1 -0
  57. package/es/modules/flow-chart/index.es.js +45 -0
  58. package/es/modules/flow-chart/index.es.js.map +1 -0
  59. package/es/modules/flow-chart/modules/context-menu.es.js +184 -0
  60. package/es/modules/flow-chart/modules/context-menu.es.js.map +1 -0
  61. package/es/modules/flow-chart/modules/control-panel.es.js +286 -0
  62. package/es/modules/flow-chart/modules/control-panel.es.js.map +1 -0
  63. package/es/modules/flow-chart/modules/custom-resize-action.es.js +150 -0
  64. package/es/modules/flow-chart/modules/custom-resize-action.es.js.map +1 -0
  65. package/es/modules/flow-chart/style/flow-chart.css +185 -0
  66. package/es/modules/i18n.es.js.map +1 -1
  67. package/es/modules/index.es.js +4 -0
  68. package/es/modules/index.es.js.map +1 -1
  69. package/es/modules/link/formats/link.es.js.map +1 -1
  70. package/es/modules/link/modules/tooltip.es.js.map +1 -1
  71. package/es/modules/mathlive/formats.es.js.map +1 -1
  72. package/es/modules/mathlive/module.es.js.map +1 -1
  73. package/es/modules/mathlive/tooltip.es.js.map +1 -1
  74. package/es/modules/mention/mention-link.es.js.map +1 -1
  75. package/es/modules/mention/mention.es.js.map +1 -1
  76. package/es/modules/mind-map/config-utils.es.js +108 -0
  77. package/es/modules/mind-map/config-utils.es.js.map +1 -0
  78. package/es/modules/mind-map/formats/mind-map-blot.es.js +356 -0
  79. package/es/modules/mind-map/formats/mind-map-blot.es.js.map +1 -0
  80. package/es/modules/mind-map/i18n/en-us.es.js +29 -0
  81. package/es/modules/mind-map/i18n/en-us.es.js.map +1 -0
  82. package/es/modules/mind-map/i18n/index.es.js +12 -0
  83. package/es/modules/mind-map/i18n/index.es.js.map +1 -0
  84. package/es/modules/mind-map/i18n/zh-cn.es.js +29 -0
  85. package/es/modules/mind-map/i18n/zh-cn.es.js.map +1 -0
  86. package/es/modules/mind-map/icons.es.js +45 -0
  87. package/es/modules/mind-map/icons.es.js.map +1 -0
  88. package/es/modules/mind-map/index.es.js +56 -0
  89. package/es/modules/mind-map/index.es.js.map +1 -0
  90. package/es/modules/mind-map/modules/context-menu.es.js +128 -0
  91. package/es/modules/mind-map/modules/context-menu.es.js.map +1 -0
  92. package/es/modules/mind-map/modules/control-panel.es.js +424 -0
  93. package/es/modules/mind-map/modules/control-panel.es.js.map +1 -0
  94. package/es/modules/mind-map/modules/custom-resize-action.es.js +161 -0
  95. package/es/modules/mind-map/modules/custom-resize-action.es.js.map +1 -0
  96. package/es/modules/mind-map/style/mind-map.css +224 -0
  97. package/es/modules/shortcut-key/index.es.js +16 -0
  98. package/es/modules/shortcut-key/index.es.js.map +1 -1
  99. package/es/modules/syntax.es.js.map +1 -1
  100. package/es/modules/table-up/index.es.js.map +1 -1
  101. package/es/modules/toolbar/better-picker.es.js.map +1 -1
  102. package/es/modules/toolbar/better-toolbar.es.js.map +1 -1
  103. package/es/modules/toolbar/toolbar-tip.es.js.map +1 -1
  104. package/es/themes/snow.es.js.map +1 -1
  105. package/es/tools/format-painter.es.js.map +1 -1
  106. package/es/tools/fullscreen.es.js.map +1 -1
  107. package/es/tools/screenshot.es.js.map +1 -1
  108. package/es/ui/icons.config.es.js +4 -0
  109. package/es/ui/icons.config.es.js.map +1 -1
  110. package/es/ui/icons.es.js +4 -2
  111. package/es/ui/icons.es.js.map +1 -1
  112. package/es/utils/debounce.es.js.map +1 -1
  113. package/es/utils/image.es.js.map +1 -1
  114. package/es/utils/is.es.js.map +1 -1
  115. package/es/utils/method.es.js.map +1 -1
  116. package/es/utils/scroll-lock.es.js.map +1 -1
  117. package/lib/config/editor.utils.cjs.js.map +1 -1
  118. package/lib/config/i18n/en-us.cjs.js +2 -0
  119. package/lib/config/i18n/en-us.cjs.js.map +1 -1
  120. package/lib/config/i18n/zh-cn.cjs.js +2 -0
  121. package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
  122. package/lib/config/index.cjs.js.map +1 -1
  123. package/lib/core/fluent-editor.cjs.js.map +1 -1
  124. package/lib/fluent-editor.cjs.js +23 -19
  125. package/lib/fluent-editor.cjs.js.map +1 -1
  126. package/lib/formats/soft-break.cjs.js.map +1 -1
  127. package/lib/formats/video.cjs.js.map +1 -1
  128. package/lib/index.cjs.js +9 -5
  129. package/lib/index.cjs.js.map +1 -1
  130. package/lib/modules/ai/constants.cjs.js.map +1 -1
  131. package/lib/modules/ai/index.cjs.js.map +1 -1
  132. package/lib/modules/collaborative-editing/awareness/awareness.cjs.js.map +1 -1
  133. package/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js.map +1 -1
  134. package/lib/modules/collaborative-editing/collaborative-editing.cjs.js.map +1 -1
  135. package/lib/modules/collaborative-editing/module.cjs.js.map +1 -1
  136. package/lib/modules/collaborative-editing/provider/providerRegistry.cjs.js.map +1 -1
  137. package/lib/modules/collaborative-editing/provider/webrtc.cjs.js.map +1 -1
  138. package/lib/modules/collaborative-editing/provider/websocket.cjs.js.map +1 -1
  139. package/lib/modules/counter.cjs.js.map +1 -1
  140. package/lib/modules/custom-clipboard.cjs.js.map +1 -1
  141. package/lib/modules/custom-image/actions/action.cjs.js.map +1 -1
  142. package/lib/modules/custom-image/actions/custom-resize-action.cjs.js.map +1 -1
  143. package/lib/modules/custom-image/actions/delete-action.cjs.js.map +1 -1
  144. package/lib/modules/custom-image/actions/image-toolbar-buttons.cjs.js.map +1 -1
  145. package/lib/modules/custom-image/actions/toolbar-action.cjs.js.map +1 -1
  146. package/lib/modules/custom-image/actions/toolbar.cjs.js.map +1 -1
  147. package/lib/modules/custom-image/blot-formatter.cjs.js.map +1 -1
  148. package/lib/modules/custom-image/image.cjs.js.map +1 -1
  149. package/lib/modules/custom-image/options.cjs.js.map +1 -1
  150. package/lib/modules/custom-image/specs/blot-spec.cjs.js.map +1 -1
  151. package/lib/modules/custom-image/specs/custom-image-spec.cjs.js.map +1 -1
  152. package/lib/modules/custom-image/specs/image-spec.cjs.js.map +1 -1
  153. package/lib/modules/custom-uploader.cjs.js.map +1 -1
  154. package/lib/modules/divider.cjs.js.map +1 -1
  155. package/lib/modules/emoji.cjs.js.map +1 -1
  156. package/lib/modules/file/formats/file.cjs.js.map +1 -1
  157. package/lib/modules/file/modules/file-bar.cjs.js.map +1 -1
  158. package/lib/modules/file/modules/file-module.cjs.js.map +1 -1
  159. package/lib/modules/flow-chart/config-utils.cjs.js +102 -0
  160. package/lib/modules/flow-chart/config-utils.cjs.js.map +1 -0
  161. package/lib/modules/flow-chart/formats/flow-chart-blot.cjs.js +369 -0
  162. package/lib/modules/flow-chart/formats/flow-chart-blot.cjs.js.map +1 -0
  163. package/lib/modules/flow-chart/i18n/en-us.cjs.js +30 -0
  164. package/lib/modules/flow-chart/i18n/en-us.cjs.js.map +1 -0
  165. package/lib/modules/flow-chart/i18n/index.cjs.js +12 -0
  166. package/lib/modules/flow-chart/i18n/index.cjs.js.map +1 -0
  167. package/lib/modules/flow-chart/i18n/zh-cn.cjs.js +30 -0
  168. package/lib/modules/flow-chart/i18n/zh-cn.cjs.js.map +1 -0
  169. package/lib/modules/flow-chart/icons.cjs.js +27 -0
  170. package/lib/modules/flow-chart/icons.cjs.js.map +1 -0
  171. package/lib/modules/flow-chart/index.cjs.js +45 -0
  172. package/lib/modules/flow-chart/index.cjs.js.map +1 -0
  173. package/lib/modules/flow-chart/modules/context-menu.cjs.js +184 -0
  174. package/lib/modules/flow-chart/modules/context-menu.cjs.js.map +1 -0
  175. package/lib/modules/flow-chart/modules/control-panel.cjs.js +286 -0
  176. package/lib/modules/flow-chart/modules/control-panel.cjs.js.map +1 -0
  177. package/lib/modules/flow-chart/modules/custom-resize-action.cjs.js +150 -0
  178. package/lib/modules/flow-chart/modules/custom-resize-action.cjs.js.map +1 -0
  179. package/lib/modules/flow-chart/style/flow-chart.css +185 -0
  180. package/lib/modules/i18n.cjs.js.map +1 -1
  181. package/lib/modules/index.cjs.js +9 -5
  182. package/lib/modules/index.cjs.js.map +1 -1
  183. package/lib/modules/link/formats/link.cjs.js.map +1 -1
  184. package/lib/modules/link/modules/tooltip.cjs.js.map +1 -1
  185. package/lib/modules/mathlive/formats.cjs.js.map +1 -1
  186. package/lib/modules/mathlive/module.cjs.js.map +1 -1
  187. package/lib/modules/mathlive/tooltip.cjs.js.map +1 -1
  188. package/lib/modules/mention/mention-link.cjs.js.map +1 -1
  189. package/lib/modules/mention/mention.cjs.js.map +1 -1
  190. package/lib/modules/mind-map/config-utils.cjs.js +108 -0
  191. package/lib/modules/mind-map/config-utils.cjs.js.map +1 -0
  192. package/lib/modules/mind-map/formats/mind-map-blot.cjs.js +356 -0
  193. package/lib/modules/mind-map/formats/mind-map-blot.cjs.js.map +1 -0
  194. package/lib/modules/mind-map/i18n/en-us.cjs.js +29 -0
  195. package/lib/modules/mind-map/i18n/en-us.cjs.js.map +1 -0
  196. package/lib/modules/mind-map/i18n/index.cjs.js +12 -0
  197. package/lib/modules/mind-map/i18n/index.cjs.js.map +1 -0
  198. package/lib/modules/mind-map/i18n/zh-cn.cjs.js +29 -0
  199. package/lib/modules/mind-map/i18n/zh-cn.cjs.js.map +1 -0
  200. package/lib/modules/mind-map/icons.cjs.js +45 -0
  201. package/lib/modules/mind-map/icons.cjs.js.map +1 -0
  202. package/lib/modules/mind-map/index.cjs.js +56 -0
  203. package/lib/modules/mind-map/index.cjs.js.map +1 -0
  204. package/lib/modules/mind-map/modules/context-menu.cjs.js +128 -0
  205. package/lib/modules/mind-map/modules/context-menu.cjs.js.map +1 -0
  206. package/lib/modules/mind-map/modules/control-panel.cjs.js +424 -0
  207. package/lib/modules/mind-map/modules/control-panel.cjs.js.map +1 -0
  208. package/lib/modules/mind-map/modules/custom-resize-action.cjs.js +161 -0
  209. package/lib/modules/mind-map/modules/custom-resize-action.cjs.js.map +1 -0
  210. package/lib/modules/mind-map/style/mind-map.css +224 -0
  211. package/lib/modules/shortcut-key/index.cjs.js +16 -0
  212. package/lib/modules/shortcut-key/index.cjs.js.map +1 -1
  213. package/lib/modules/syntax.cjs.js.map +1 -1
  214. package/lib/modules/table-up/index.cjs.js.map +1 -1
  215. package/lib/modules/toolbar/better-picker.cjs.js.map +1 -1
  216. package/lib/modules/toolbar/better-toolbar.cjs.js.map +1 -1
  217. package/lib/modules/toolbar/toolbar-tip.cjs.js.map +1 -1
  218. package/lib/themes/snow.cjs.js.map +1 -1
  219. package/lib/tools/format-painter.cjs.js.map +1 -1
  220. package/lib/tools/fullscreen.cjs.js.map +1 -1
  221. package/lib/tools/screenshot.cjs.js.map +1 -1
  222. package/lib/ui/icons.cjs.js +3 -1
  223. package/lib/ui/icons.cjs.js.map +1 -1
  224. package/lib/ui/icons.config.cjs.js +4 -0
  225. package/lib/ui/icons.config.cjs.js.map +1 -1
  226. package/lib/utils/debounce.cjs.js.map +1 -1
  227. package/lib/utils/image.cjs.js.map +1 -1
  228. package/lib/utils/is.cjs.js.map +1 -1
  229. package/lib/utils/method.cjs.js.map +1 -1
  230. package/lib/utils/scroll-lock.cjs.js.map +1 -1
  231. package/package.json +5 -1
  232. package/style.css +3 -1
  233. package/types/config/i18n/en-us.d.ts +2 -0
  234. package/types/config/i18n/zh-cn.d.ts +2 -0
  235. package/types/config/types/editor-modules.interface.d.ts +4 -0
  236. package/types/modules/flow-chart/config-utils.d.ts +10 -0
  237. package/types/modules/flow-chart/formats/flow-chart-blot.d.ts +43 -0
  238. package/types/modules/flow-chart/i18n/en-us.d.ts +26 -0
  239. package/types/modules/flow-chart/i18n/index.d.ts +1 -0
  240. package/types/modules/flow-chart/i18n/zh-cn.d.ts +26 -0
  241. package/types/modules/flow-chart/icons.d.ts +12 -0
  242. package/types/modules/flow-chart/index.d.ts +10 -0
  243. package/types/modules/flow-chart/modules/context-menu.d.ts +3 -0
  244. package/types/modules/flow-chart/modules/control-panel.d.ts +3 -0
  245. package/types/modules/flow-chart/modules/custom-resize-action.d.ts +22 -0
  246. package/types/modules/flow-chart/options.d.ts +29 -0
  247. package/types/modules/index.d.ts +2 -0
  248. package/types/modules/mind-map/config-utils.d.ts +12 -0
  249. package/types/modules/mind-map/formats/mind-map-blot.d.ts +44 -0
  250. package/types/modules/mind-map/i18n/en-us.d.ts +25 -0
  251. package/types/modules/mind-map/i18n/index.d.ts +1 -0
  252. package/types/modules/mind-map/i18n/zh-cn.d.ts +25 -0
  253. package/types/modules/mind-map/icons.d.ts +21 -0
  254. package/types/modules/mind-map/index.d.ts +10 -0
  255. package/types/modules/mind-map/modules/context-menu.d.ts +3 -0
  256. package/types/modules/mind-map/modules/control-panel.d.ts +3 -0
  257. package/types/modules/mind-map/modules/custom-resize-action.d.ts +23 -0
  258. package/types/modules/mind-map/options.d.ts +26 -0
  259. package/types/ui/icons.config.d.ts +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"mention.es.js","sources":["../../../../src/modules/mention/mention.ts"],"sourcesContent":["import Quill from 'quill'\nimport { isNullOrUndefined } from '../../config/editor.utils'\nimport { DEFAULT_MENTION_CHAR, ON_MENTION_LINK_REMOVE } from './constants'\nimport { MentionLink } from './mention-link'\n\nconst Delta = Quill.import('delta')\nconst Parchment = Quill.import('parchment')\nconst { Scope } = Parchment\n\nexport interface MentionOption {\n containerClass?: string\n // dataAttributes?: string[]\n defaultLink?: string\n itemActiveClass?: string\n itemKey: string\n itemClass?: string\n listClass?: string\n listHideClass?: string\n maxHeight?: number\n mentionChar?: string\n remove?: (data: any) => void\n renderMentionItem?: (data: any) => string | HTMLElement\n renderMentionText?: (data: any) => string | HTMLElement\n search?: (term: string) => Promise<any[]> | any[]\n searchKey: string\n select?: (data: any) => void\n target?: string\n}\n\nexport class Mention {\n private readonly options: MentionOption\n private readonly mentionListEL: HTMLUListElement\n private activeMentionIndex = 0\n private latestMentionList: any[]\n private latestMentionCharPos: number\n private latestCaretPos: number\n private searchTerm = ''\n private needInsertBr = true\n private readonly defaultOptions: MentionOption = {\n defaultLink: '#',\n target: '_blank',\n mentionChar: DEFAULT_MENTION_CHAR,\n maxHeight: 200,\n renderMentionItem(data: any) {\n let mentionItem = data.name || data.id\n if (this.itemKey) {\n mentionItem = data[this.itemKey]\n }\n const dom = document.createElement('SPAN')\n dom.textContent = mentionItem\n return dom\n },\n renderMentionText(data: any) {\n let mentionText = data.name || data.id\n if (this.itemKey) {\n mentionText = data[this.itemKey]\n }\n return `${mentionText}`\n },\n containerClass: 'ql-mention-list-container',\n listClass: 'ql-mention-list',\n listHideClass: 'ql-mention-list--hide',\n itemClass: 'ql-mention-item',\n itemActiveClass: 'ql-mention-item--active',\n itemKey: 'name',\n searchKey: 'name',\n // dataAttributes: ['id'],\n select(_data: any) {},\n remove(_data: any) {},\n }\n\n static register() {\n Quill.register(MentionLink)\n }\n\n // @ts-ignore\n constructor(private quill: Quill, options: MentionOption) {\n if (!options.search) {\n console.warn('please provide a search function!')\n return\n }\n\n this.options = Object.assign(this.defaultOptions, options)\n const container = document.createElement('div')\n container.classList.add('ql-mention-list-container')\n if (this.options.containerClass !== 'ql-mention-list-container') {\n container.classList.add(this.options.containerClass)\n }\n this.mentionListEL = document.createElement('ul')\n this.mentionListEL.classList.add(this.options.listClass, this.options.listHideClass)\n this.mentionListEL.style.cssText += `\n max-height: ${this.options.maxHeight}px;\n `\n\n quill.on(Quill.events.TEXT_CHANGE, this.handleTextChange)\n quill.keyboard.addBinding({ key: 'ArrowUp' }, this.handleArrowUpKey)\n quill.keyboard.addBinding({ key: 'ArrowDown' }, this.handleArrowDownKey)\n quill.keyboard.addBinding({ key: 'Enter' }, this.handleEnterKey)\n quill.keyboard.addBinding({ key: 'Tab' }, this.handleEnterKey)\n quill.keyboard.addBinding({ key: 'Escape' }, this.handleEscapeKey)\n quill.keyboard.bindings.Enter.unshift(quill.keyboard.bindings.Enter.pop())\n quill.keyboard.bindings.Tab.unshift(quill.keyboard.bindings.Tab.pop())\n quill.keyboard.bindings.Escape.unshift(quill.keyboard.bindings.Escape.pop())\n\n const customKeyboardEnter = {\n key: 'Enter',\n shiftKey: null,\n handler: (range, context) => {\n const lineFormats = Object.keys(context.format).reduce(\n (formats, format) => {\n if (\n this.quill.scroll.query(format, Scope.BLOCK)\n && !Array.isArray(context.format[format])\n ) {\n formats[format] = context.format[format]\n }\n return formats\n },\n {},\n )\n\n // fix: 解决@提醒之后插入多余空行和光标位置不对的问题\n let selectionIndex = range.index - this.searchTerm.length\n let delta = new Delta()\n .retain(range.index)\n .delete(range.length)\n if (this.needInsertBr) {\n delta = delta.insert('\\n', lineFormats)\n selectionIndex = range.index + 1\n }\n\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(selectionIndex, Quill.sources.SILENT)\n this.quill.focus()\n\n Object.keys(context.format).forEach((name) => {\n if (!isNullOrUndefined(lineFormats[name])) return\n if (Array.isArray(context.format[name])) return\n if (name === 'code' || name === 'link') return\n this.quill.format(name, context.format[name], Quill.sources.USER)\n })\n\n this.needInsertBr = true // 标记是否是输入@提醒的Enter\n },\n }\n\n // 用自定义的Enter替换内置的Enter\n quill.keyboard.bindings.Enter = quill.keyboard.bindings.Enter.map((item) => {\n const buildinKeyboardEnter = item.format === undefined && item.shiftKey === null\n if (buildinKeyboardEnter) {\n return customKeyboardEnter\n }\n else {\n return item\n }\n })\n\n this.on('click', this.handleMouseClick)\n this.on('mouseover', this.handleMouseEnter)\n quill.emitter.on(ON_MENTION_LINK_REMOVE, async ({ mention, name }) => {\n const [result] = (mention && [mention]) || (await this.options.search(name))\n this.options.remove(result)\n })\n container.appendChild(this.mentionListEL)\n quill.container.parentElement.insertBefore(container, quill.container)\n }\n\n on(eventName, callback) {\n this.mentionListEL.addEventListener(eventName, (evt) => {\n let\n target = evt.target\n let targetItemEL\n\n while (this.mentionListEL.contains(target) && target !== this.mentionListEL) {\n if (target.classList.contains(this.options.itemClass)) {\n targetItemEL = target\n }\n target = target.parentElement\n }\n\n if (targetItemEL) {\n callback.call(this, targetItemEL, this.getMentionItemIndex(targetItemEL))\n }\n })\n }\n\n getMentionItemIndex(itemEl: Element) {\n return [].reduce.call(this.mentionListEL.children, (index, item, idx) => item === itemEl ? idx : index, -1)\n }\n\n handleTextChange = (_delta, _oldDelta, source) => {\n // defer handler to make sure that we can get correct quill selection range.\n setTimeout(() => {\n if (Quill.sources.USER === source) {\n const range = this.quill.getSelection()\n if (!range) {\n return\n }\n\n const caretPos = this.latestCaretPos = range.index\n // beforeCaretText的计算有问题,没有把图片内容和@提醒内容的非字符内容算进去\n const content = this.quill.getContents()\n const beforeCaretText = content.reduce((newText, op) => {\n if (typeof op.insert === 'string') {\n return (newText += op.insert)\n }\n else {\n return (newText += ' ') // 将图片内容和@提醒内容的非字符内容置为' ',算一个位置\n }\n }, '')\n const mentionCharPos = beforeCaretText.lastIndexOf(this.options.mentionChar)\n\n if (mentionCharPos > -1) {\n const searchTerm = beforeCaretText.substring(mentionCharPos + this.options.mentionChar.length, caretPos)\n this.searchTerm = searchTerm\n if (!''.startsWith.call(searchTerm, ' ')) {\n this.latestMentionCharPos = mentionCharPos\n this.searchMentionListByTerm(searchTerm)\n }\n else {\n this.hideMentionList()\n }\n }\n else {\n this.hideMentionList()\n }\n }\n })\n }\n\n handleMouseClick(_itemEl: HTMLLIElement, index: number) {\n this.selectMentionItem(index, true)\n this.quill.focus()\n }\n\n handleMouseEnter(_itemEl: HTMLLIElement, index: number) {\n this.activeMentionIndex = index\n this.highlightMentionItem(index)\n }\n\n handleArrowUpKey = () => {\n if (this.isOpen()) {\n this.activeMentionIndex\n = (this.activeMentionIndex + this.latestMentionList.length - 1) % this.latestMentionList.length\n this.highlightMentionItem(this.activeMentionIndex)\n return false\n }\n return true\n }\n\n handleArrowDownKey = () => {\n if (this.isOpen()) {\n this.activeMentionIndex = (this.activeMentionIndex + 1) % this.latestMentionList.length\n this.highlightMentionItem(this.activeMentionIndex)\n return false\n }\n return true\n }\n\n handleEnterKey = () => {\n if (this.isOpen()) {\n this.selectMentionItem()\n this.needInsertBr = false\n }\n return true\n }\n\n handleEscapeKey = () => {\n if (this.isOpen()) {\n this.hideMentionList()\n return false\n }\n return true\n }\n\n getActiveMentionItem() {\n return this.mentionListEL.querySelector(`.${this.options.itemActiveClass}`)\n }\n\n isOpen() {\n return !this.mentionListEL.classList.contains(this.options.listHideClass)\n }\n\n async searchMentionListByTerm(term: string) {\n const mentionList = await this.options.search(term)\n this.latestMentionList = mentionList\n if (!mentionList || mentionList.length === 0) {\n return this.hideMentionList()\n }\n\n this.showMentionList(mentionList)\n }\n\n showMentionList(mentionList: any[]) {\n if (!this.isOpen()) {\n this.mentionListEL.classList.remove(this.options.listHideClass)\n }\n this.activeMentionIndex = 0\n this.setMentionListPos()\n this.render(mentionList)\n }\n\n hideMentionList() {\n if (this.isOpen()) {\n this.activeMentionIndex = 0\n this.mentionListEL.classList.add(this.options.listHideClass)\n }\n }\n\n setMentionListPos() {\n const cursorIndex = this.quill.selection.savedRange.index\n const cursorBounds = this.quill.getBounds(cursorIndex)\n const { left, top } = cursorBounds\n const container = this.quill.container\n const hostElement = container.parentNode as HTMLDivElement\n const { left: editorLeft, top: editorTop } = container.getBoundingClientRect()\n const { left: hostElementLeft, top: hostElementTop } = hostElement.getBoundingClientRect()\n const relativeLeft = editorLeft - hostElementLeft\n const relativeTop = editorTop - hostElementTop\n const menuLeft = left + relativeLeft - 5\n const menuTop = top + relativeTop + 20\n this.mentionListEL.style.cssText += `\n left: ${menuLeft}px;\n top: ${menuTop}px;\n `\n }\n\n render(mentionList: any[]) {\n const wrapEl = document.createElement('div');\n\n [].forEach.call(mentionList, (mentionItem, index) => {\n const mentionItemEl = document.createElement('li')\n mentionItemEl.classList.add(this.options.itemClass)\n if (index === this.activeMentionIndex) {\n mentionItemEl.classList.add(this.options.itemActiveClass)\n }\n const renderResult = this.options.renderMentionItem(mentionItem)\n if (typeof renderResult === 'string') {\n mentionItemEl.insertAdjacentHTML('afterbegin', renderResult)\n }\n else {\n mentionItemEl.insertAdjacentElement('afterbegin', renderResult)\n }\n wrapEl.appendChild(mentionItemEl)\n })\n\n this.mentionListEL.innerHTML = wrapEl.innerHTML\n }\n\n highlightMentionItem(index: number) {\n const oldActiveItem = this.getActiveMentionItem()\n if (oldActiveItem) {\n oldActiveItem.classList.remove(this.options.itemActiveClass)\n }\n\n const newActiveItem = this.mentionListEL.querySelector(`.${this.options.itemClass}:nth-of-type(${index + 1})`)\n if (newActiveItem) {\n newActiveItem.classList.add(this.options.itemActiveClass)\n this.scrollIntoView(newActiveItem)\n }\n }\n\n scrollIntoView(node: Element): void {\n const nodeAsAny: any = node\n if (nodeAsAny.scrollIntoViewIfNeeded) {\n nodeAsAny.scrollIntoViewIfNeeded(false)\n return\n }\n if (node.scrollIntoView) {\n node.scrollIntoView(false)\n }\n }\n\n selectMentionItem(index = this.activeMentionIndex, isClick?: boolean) {\n const activeMentionItem = this.latestMentionList[index]\n this.insertMentionBlot(activeMentionItem, isClick)\n this.options.select(activeMentionItem)\n this.hideMentionList()\n }\n\n insertMentionBlot(activeMentionItem: any, isClick?: boolean) {\n const mention = this.options.renderMentionText(activeMentionItem)\n const delta = new Delta()\n .retain(this.latestMentionCharPos)\n .delete(this.latestCaretPos - this.latestMentionCharPos)\n .insert({\n [MentionLink.blotName]: {\n char: this.options.mentionChar,\n text: mention,\n mention: activeMentionItem,\n link: activeMentionItem.link || this.options.defaultLink,\n target: activeMentionItem.target || this.options.target,\n searchKey: this.options.searchKey,\n },\n })\n if (isClick) {\n this.quill.updateContents(delta, Quill.sources.USER)\n }\n else {\n this.quill.updateContents(delta, Quill.sources.API)\n }\n this.quill.setSelection(this.latestMentionCharPos + 1, Quill.sources.API)\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mention.es.js","sources":["../../../../src/modules/mention/mention.ts"],"sourcesContent":["import Quill from 'quill'\nimport { isNullOrUndefined } from '../../config/editor.utils'\nimport { DEFAULT_MENTION_CHAR, ON_MENTION_LINK_REMOVE } from './constants'\nimport { MentionLink } from './mention-link'\n\nconst Delta = Quill.import('delta')\nconst Parchment = Quill.import('parchment')\nconst { Scope } = Parchment\n\nexport interface MentionOption {\n containerClass?: string\n // dataAttributes?: string[]\n defaultLink?: string\n itemActiveClass?: string\n itemKey: string\n itemClass?: string\n listClass?: string\n listHideClass?: string\n maxHeight?: number\n mentionChar?: string\n remove?: (data: any) => void\n renderMentionItem?: (data: any) => string | HTMLElement\n renderMentionText?: (data: any) => string | HTMLElement\n search?: (term: string) => Promise<any[]> | any[]\n searchKey: string\n select?: (data: any) => void\n target?: string\n}\n\nexport class Mention {\n private readonly options: MentionOption\n private readonly mentionListEL: HTMLUListElement\n private activeMentionIndex = 0\n private latestMentionList: any[]\n private latestMentionCharPos: number\n private latestCaretPos: number\n private searchTerm = ''\n private needInsertBr = true\n private readonly defaultOptions: MentionOption = {\n defaultLink: '#',\n target: '_blank',\n mentionChar: DEFAULT_MENTION_CHAR,\n maxHeight: 200,\n renderMentionItem(data: any) {\n let mentionItem = data.name || data.id\n if (this.itemKey) {\n mentionItem = data[this.itemKey]\n }\n const dom = document.createElement('SPAN')\n dom.textContent = mentionItem\n return dom\n },\n renderMentionText(data: any) {\n let mentionText = data.name || data.id\n if (this.itemKey) {\n mentionText = data[this.itemKey]\n }\n return `${mentionText}`\n },\n containerClass: 'ql-mention-list-container',\n listClass: 'ql-mention-list',\n listHideClass: 'ql-mention-list--hide',\n itemClass: 'ql-mention-item',\n itemActiveClass: 'ql-mention-item--active',\n itemKey: 'name',\n searchKey: 'name',\n // dataAttributes: ['id'],\n select(_data: any) {},\n remove(_data: any) {},\n }\n\n static register() {\n Quill.register(MentionLink)\n }\n\n // @ts-ignore\n constructor(private quill: Quill, options: MentionOption) {\n if (!options.search) {\n console.warn('please provide a search function!')\n return\n }\n\n this.options = Object.assign(this.defaultOptions, options)\n const container = document.createElement('div')\n container.classList.add('ql-mention-list-container')\n if (this.options.containerClass !== 'ql-mention-list-container') {\n container.classList.add(this.options.containerClass)\n }\n this.mentionListEL = document.createElement('ul')\n this.mentionListEL.classList.add(this.options.listClass, this.options.listHideClass)\n this.mentionListEL.style.cssText += `\n max-height: ${this.options.maxHeight}px;\n `\n\n quill.on(Quill.events.TEXT_CHANGE, this.handleTextChange)\n quill.keyboard.addBinding({ key: 'ArrowUp' }, this.handleArrowUpKey)\n quill.keyboard.addBinding({ key: 'ArrowDown' }, this.handleArrowDownKey)\n quill.keyboard.addBinding({ key: 'Enter' }, this.handleEnterKey)\n quill.keyboard.addBinding({ key: 'Tab' }, this.handleEnterKey)\n quill.keyboard.addBinding({ key: 'Escape' }, this.handleEscapeKey)\n quill.keyboard.bindings.Enter.unshift(quill.keyboard.bindings.Enter.pop())\n quill.keyboard.bindings.Tab.unshift(quill.keyboard.bindings.Tab.pop())\n quill.keyboard.bindings.Escape.unshift(quill.keyboard.bindings.Escape.pop())\n\n const customKeyboardEnter = {\n key: 'Enter',\n shiftKey: null,\n handler: (range, context) => {\n const lineFormats = Object.keys(context.format).reduce(\n (formats, format) => {\n if (\n this.quill.scroll.query(format, Scope.BLOCK)\n && !Array.isArray(context.format[format])\n ) {\n formats[format] = context.format[format]\n }\n return formats\n },\n {},\n )\n\n // fix: 解决@提醒之后插入多余空行和光标位置不对的问题\n let selectionIndex = range.index - this.searchTerm.length\n let delta = new Delta()\n .retain(range.index)\n .delete(range.length)\n if (this.needInsertBr) {\n delta = delta.insert('\\n', lineFormats)\n selectionIndex = range.index + 1\n }\n\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(selectionIndex, Quill.sources.SILENT)\n this.quill.focus()\n\n Object.keys(context.format).forEach((name) => {\n if (!isNullOrUndefined(lineFormats[name])) return\n if (Array.isArray(context.format[name])) return\n if (name === 'code' || name === 'link') return\n this.quill.format(name, context.format[name], Quill.sources.USER)\n })\n\n this.needInsertBr = true // 标记是否是输入@提醒的Enter\n },\n }\n\n // 用自定义的Enter替换内置的Enter\n quill.keyboard.bindings.Enter = quill.keyboard.bindings.Enter.map((item) => {\n const buildinKeyboardEnter = item.format === undefined && item.shiftKey === null\n if (buildinKeyboardEnter) {\n return customKeyboardEnter\n }\n else {\n return item\n }\n })\n\n this.on('click', this.handleMouseClick)\n this.on('mouseover', this.handleMouseEnter)\n quill.emitter.on(ON_MENTION_LINK_REMOVE, async ({ mention, name }) => {\n const [result] = (mention && [mention]) || (await this.options.search(name))\n this.options.remove(result)\n })\n container.appendChild(this.mentionListEL)\n quill.container.parentElement.insertBefore(container, quill.container)\n }\n\n on(eventName, callback) {\n this.mentionListEL.addEventListener(eventName, (evt) => {\n let\n target = evt.target\n let targetItemEL\n\n while (this.mentionListEL.contains(target) && target !== this.mentionListEL) {\n if (target.classList.contains(this.options.itemClass)) {\n targetItemEL = target\n }\n target = target.parentElement\n }\n\n if (targetItemEL) {\n callback.call(this, targetItemEL, this.getMentionItemIndex(targetItemEL))\n }\n })\n }\n\n getMentionItemIndex(itemEl: Element) {\n return [].reduce.call(this.mentionListEL.children, (index, item, idx) => item === itemEl ? idx : index, -1)\n }\n\n handleTextChange = (_delta, _oldDelta, source) => {\n // defer handler to make sure that we can get correct quill selection range.\n setTimeout(() => {\n if (Quill.sources.USER === source) {\n const range = this.quill.getSelection()\n if (!range) {\n return\n }\n\n const caretPos = this.latestCaretPos = range.index\n // beforeCaretText的计算有问题,没有把图片内容和@提醒内容的非字符内容算进去\n const content = this.quill.getContents()\n const beforeCaretText = content.reduce((newText, op) => {\n if (typeof op.insert === 'string') {\n return (newText += op.insert)\n }\n else {\n return (newText += ' ') // 将图片内容和@提醒内容的非字符内容置为' ',算一个位置\n }\n }, '')\n const mentionCharPos = beforeCaretText.lastIndexOf(this.options.mentionChar)\n\n if (mentionCharPos > -1) {\n const searchTerm = beforeCaretText.substring(mentionCharPos + this.options.mentionChar.length, caretPos)\n this.searchTerm = searchTerm\n if (!''.startsWith.call(searchTerm, ' ')) {\n this.latestMentionCharPos = mentionCharPos\n this.searchMentionListByTerm(searchTerm)\n }\n else {\n this.hideMentionList()\n }\n }\n else {\n this.hideMentionList()\n }\n }\n })\n }\n\n handleMouseClick(_itemEl: HTMLLIElement, index: number) {\n this.selectMentionItem(index, true)\n this.quill.focus()\n }\n\n handleMouseEnter(_itemEl: HTMLLIElement, index: number) {\n this.activeMentionIndex = index\n this.highlightMentionItem(index)\n }\n\n handleArrowUpKey = () => {\n if (this.isOpen()) {\n this.activeMentionIndex\n = (this.activeMentionIndex + this.latestMentionList.length - 1) % this.latestMentionList.length\n this.highlightMentionItem(this.activeMentionIndex)\n return false\n }\n return true\n }\n\n handleArrowDownKey = () => {\n if (this.isOpen()) {\n this.activeMentionIndex = (this.activeMentionIndex + 1) % this.latestMentionList.length\n this.highlightMentionItem(this.activeMentionIndex)\n return false\n }\n return true\n }\n\n handleEnterKey = () => {\n if (this.isOpen()) {\n this.selectMentionItem()\n this.needInsertBr = false\n }\n return true\n }\n\n handleEscapeKey = () => {\n if (this.isOpen()) {\n this.hideMentionList()\n return false\n }\n return true\n }\n\n getActiveMentionItem() {\n return this.mentionListEL.querySelector(`.${this.options.itemActiveClass}`)\n }\n\n isOpen() {\n return !this.mentionListEL.classList.contains(this.options.listHideClass)\n }\n\n async searchMentionListByTerm(term: string) {\n const mentionList = await this.options.search(term)\n this.latestMentionList = mentionList\n if (!mentionList || mentionList.length === 0) {\n return this.hideMentionList()\n }\n\n this.showMentionList(mentionList)\n }\n\n showMentionList(mentionList: any[]) {\n if (!this.isOpen()) {\n this.mentionListEL.classList.remove(this.options.listHideClass)\n }\n this.activeMentionIndex = 0\n this.setMentionListPos()\n this.render(mentionList)\n }\n\n hideMentionList() {\n if (this.isOpen()) {\n this.activeMentionIndex = 0\n this.mentionListEL.classList.add(this.options.listHideClass)\n }\n }\n\n setMentionListPos() {\n const cursorIndex = this.quill.selection.savedRange.index\n const cursorBounds = this.quill.getBounds(cursorIndex)\n const { left, top } = cursorBounds\n const container = this.quill.container\n const hostElement = container.parentNode as HTMLDivElement\n const { left: editorLeft, top: editorTop } = container.getBoundingClientRect()\n const { left: hostElementLeft, top: hostElementTop } = hostElement.getBoundingClientRect()\n const relativeLeft = editorLeft - hostElementLeft\n const relativeTop = editorTop - hostElementTop\n const menuLeft = left + relativeLeft - 5\n const menuTop = top + relativeTop + 20\n this.mentionListEL.style.cssText += `\n left: ${menuLeft}px;\n top: ${menuTop}px;\n `\n }\n\n render(mentionList: any[]) {\n const wrapEl = document.createElement('div');\n\n [].forEach.call(mentionList, (mentionItem, index) => {\n const mentionItemEl = document.createElement('li')\n mentionItemEl.classList.add(this.options.itemClass)\n if (index === this.activeMentionIndex) {\n mentionItemEl.classList.add(this.options.itemActiveClass)\n }\n const renderResult = this.options.renderMentionItem(mentionItem)\n if (typeof renderResult === 'string') {\n mentionItemEl.insertAdjacentHTML('afterbegin', renderResult)\n }\n else {\n mentionItemEl.insertAdjacentElement('afterbegin', renderResult)\n }\n wrapEl.appendChild(mentionItemEl)\n })\n\n this.mentionListEL.innerHTML = wrapEl.innerHTML\n }\n\n highlightMentionItem(index: number) {\n const oldActiveItem = this.getActiveMentionItem()\n if (oldActiveItem) {\n oldActiveItem.classList.remove(this.options.itemActiveClass)\n }\n\n const newActiveItem = this.mentionListEL.querySelector(`.${this.options.itemClass}:nth-of-type(${index + 1})`)\n if (newActiveItem) {\n newActiveItem.classList.add(this.options.itemActiveClass)\n this.scrollIntoView(newActiveItem)\n }\n }\n\n scrollIntoView(node: Element): void {\n const nodeAsAny: any = node\n if (nodeAsAny.scrollIntoViewIfNeeded) {\n nodeAsAny.scrollIntoViewIfNeeded(false)\n return\n }\n if (node.scrollIntoView) {\n node.scrollIntoView(false)\n }\n }\n\n selectMentionItem(index = this.activeMentionIndex, isClick?: boolean) {\n const activeMentionItem = this.latestMentionList[index]\n this.insertMentionBlot(activeMentionItem, isClick)\n this.options.select(activeMentionItem)\n this.hideMentionList()\n }\n\n insertMentionBlot(activeMentionItem: any, isClick?: boolean) {\n const mention = this.options.renderMentionText(activeMentionItem)\n const delta = new Delta()\n .retain(this.latestMentionCharPos)\n .delete(this.latestCaretPos - this.latestMentionCharPos)\n .insert({\n [MentionLink.blotName]: {\n char: this.options.mentionChar,\n text: mention,\n mention: activeMentionItem,\n link: activeMentionItem.link || this.options.defaultLink,\n target: activeMentionItem.target || this.options.target,\n searchKey: this.options.searchKey,\n },\n })\n if (isClick) {\n this.quill.updateContents(delta, Quill.sources.USER)\n }\n else {\n this.quill.updateContents(delta, Quill.sources.API)\n }\n this.quill.setSelection(this.latestMentionCharPos + 1, Quill.sources.API)\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ function getBackgroundConfig(quill) {
2
+ var _a;
3
+ const MindMapModule = (_a = quill == null ? void 0 : quill.options.modules) == null ? void 0 : _a["mind-map"];
4
+ if (!MindMapModule || typeof MindMapModule !== "object") {
5
+ return false;
6
+ }
7
+ if ("background" in MindMapModule) {
8
+ const background = MindMapModule.background;
9
+ if (background === false || background === void 0) {
10
+ return false;
11
+ }
12
+ if (typeof background === "object" && background !== null) {
13
+ const typedBackground = background;
14
+ const backgroundConfig = {};
15
+ if (typedBackground.color) {
16
+ backgroundConfig.backgroundColor = typedBackground.color;
17
+ }
18
+ if (typedBackground.image) {
19
+ backgroundConfig.backgroundImage = typedBackground.image;
20
+ }
21
+ if (typedBackground.repeat) {
22
+ backgroundConfig.backgroundRepeat = typedBackground.repeat;
23
+ }
24
+ if (typedBackground.position) {
25
+ backgroundConfig.backgroundPosition = typedBackground.position;
26
+ }
27
+ if (typedBackground.size) {
28
+ backgroundConfig.backgroundSize = typedBackground.size;
29
+ }
30
+ return backgroundConfig;
31
+ }
32
+ }
33
+ return false;
34
+ }
35
+ function getLineConfig(quill) {
36
+ var _a;
37
+ const MindMapModule = (_a = quill == null ? void 0 : quill.options.modules) == null ? void 0 : _a["mind-map"];
38
+ if (!MindMapModule || typeof MindMapModule !== "object") {
39
+ return false;
40
+ }
41
+ if ("line" in MindMapModule) {
42
+ const line = MindMapModule.line;
43
+ if (line === false || line === void 0) {
44
+ return false;
45
+ }
46
+ if (typeof line === "object" && line !== null) {
47
+ const typedLine = line;
48
+ const lineConfig = {};
49
+ if (typedLine.color) {
50
+ lineConfig.lineColor = typedLine.color;
51
+ }
52
+ if (typedLine.width) {
53
+ lineConfig.lineWidth = typedLine.width;
54
+ }
55
+ if (typedLine.dasharray) {
56
+ lineConfig.lineDasharray = typedLine.dasharray;
57
+ }
58
+ if (typedLine.style) {
59
+ lineConfig.lineStyle = typedLine.style;
60
+ }
61
+ return lineConfig;
62
+ }
63
+ }
64
+ return false;
65
+ }
66
+ function getResizeConfig(quill) {
67
+ var _a;
68
+ const MindMapModule = (_a = quill == null ? void 0 : quill.options.modules) == null ? void 0 : _a["mind-map"];
69
+ if (!MindMapModule || typeof MindMapModule !== "object") {
70
+ return false;
71
+ }
72
+ if ("resize" in MindMapModule) {
73
+ const resize = MindMapModule.resize;
74
+ return resize === true;
75
+ }
76
+ return false;
77
+ }
78
+ function getThemeConfig(quill) {
79
+ var _a;
80
+ const MindMapModule = (_a = quill == null ? void 0 : quill.options.modules) == null ? void 0 : _a["mind-map"];
81
+ if (!MindMapModule || typeof MindMapModule !== "object") {
82
+ return "default";
83
+ }
84
+ if ("theme" in MindMapModule) {
85
+ const theme = MindMapModule.theme;
86
+ return theme || "default";
87
+ }
88
+ return "default";
89
+ }
90
+ function getAllConfigs(quill) {
91
+ var _a, _b;
92
+ const deps = (_b = (_a = quill == null ? void 0 : quill.options.modules) == null ? void 0 : _a["mind-map"]) == null ? void 0 : _b.deps;
93
+ return {
94
+ backgroundConfig: getBackgroundConfig(quill),
95
+ resizeConfig: getResizeConfig(quill),
96
+ lineConfig: getLineConfig(quill),
97
+ themeConfig: getThemeConfig(quill),
98
+ deps
99
+ };
100
+ }
101
+ export {
102
+ getAllConfigs,
103
+ getBackgroundConfig,
104
+ getLineConfig,
105
+ getResizeConfig,
106
+ getThemeConfig
107
+ };
108
+ //# sourceMappingURL=config-utils.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-utils.es.js","sources":["../../../../src/modules/mind-map/config-utils.ts"],"sourcesContent":["import type Quill from 'quill'\nimport type { BackgroundConfig, LineConfig } from './options'\n\nexport function getBackgroundConfig(quill: Quill | null): false | object {\n const MindMapModule = quill?.options.modules?.['mind-map']\n if (!MindMapModule || typeof MindMapModule !== 'object') {\n return false\n }\n if ('background' in MindMapModule) {\n const background = MindMapModule.background as BackgroundConfig | boolean | undefined\n\n if (background === false || background === undefined) {\n return false\n }\n if (typeof background === 'object' && background !== null) {\n const typedBackground = background as BackgroundConfig\n const backgroundConfig: any = {}\n\n if (typedBackground.color) {\n backgroundConfig.backgroundColor = typedBackground.color\n }\n if (typedBackground.image) {\n backgroundConfig.backgroundImage = typedBackground.image\n }\n if (typedBackground.repeat) {\n backgroundConfig.backgroundRepeat = typedBackground.repeat\n }\n if (typedBackground.position) {\n backgroundConfig.backgroundPosition = typedBackground.position\n }\n if (typedBackground.size) {\n backgroundConfig.backgroundSize = typedBackground.size\n }\n return backgroundConfig\n }\n }\n return false\n}\n\nexport function getLineConfig(quill: Quill | null): false | object {\n const MindMapModule = quill?.options.modules?.['mind-map']\n if (!MindMapModule || typeof MindMapModule !== 'object') {\n return false\n }\n if ('line' in MindMapModule) {\n const line = MindMapModule.line as LineConfig | boolean | undefined\n\n if (line === false || line === undefined) {\n return false\n }\n if (typeof line === 'object' && line !== null) {\n const typedLine = line as LineConfig\n const lineConfig: any = {}\n\n if (typedLine.color) {\n lineConfig.lineColor = typedLine.color\n }\n if (typedLine.width) {\n lineConfig.lineWidth = typedLine.width\n }\n if (typedLine.dasharray) {\n lineConfig.lineDasharray = typedLine.dasharray\n }\n if (typedLine.style) {\n lineConfig.lineStyle = typedLine.style\n }\n return lineConfig\n }\n }\n return false\n}\n\nexport function getResizeConfig(quill: Quill | null): boolean {\n const MindMapModule = quill?.options.modules?.['mind-map']\n if (!MindMapModule || typeof MindMapModule !== 'object') {\n return false\n }\n if ('resize' in MindMapModule) {\n const resize = (MindMapModule as any).resize as boolean | undefined\n return resize === true\n }\n return false\n}\n\nexport function getThemeConfig(quill: Quill | null): string {\n const MindMapModule = quill?.options.modules?.['mind-map']\n if (!MindMapModule || typeof MindMapModule !== 'object') {\n return 'default'\n }\n if ('theme' in MindMapModule) {\n const theme = MindMapModule.theme as string | undefined\n return theme || 'default'\n }\n return 'default'\n}\n\nexport function getAllConfigs(quill: Quill | null): {\n backgroundConfig: false | object\n resizeConfig: boolean\n lineConfig: false | object\n themeConfig: string\n deps?: any\n} {\n const deps = (quill?.options.modules?.['mind-map'] as any)?.deps\n return {\n backgroundConfig: getBackgroundConfig(quill),\n resizeConfig: getResizeConfig(quill),\n lineConfig: getLineConfig(quill),\n themeConfig: getThemeConfig(quill),\n deps,\n }\n}\n"],"names":[],"mappings":"AAGO,SAAS,oBAAoB,OAAqC;AAAlE;AACL,QAAM,iBAAgB,oCAAO,QAAQ,YAAf,mBAAyB;AAC/C,MAAI,CAAC,iBAAiB,OAAO,kBAAkB,UAAU;AACvD,WAAO;AAAA,EACT;AACA,MAAI,gBAAgB,eAAe;AACjC,UAAM,aAAa,cAAc;AAEjC,QAAI,eAAe,SAAS,eAAe,QAAW;AACpD,aAAO;AAAA,IACT;AACA,QAAI,OAAO,eAAe,YAAY,eAAe,MAAM;AACzD,YAAM,kBAAkB;AACxB,YAAM,mBAAwB,CAAA;AAE9B,UAAI,gBAAgB,OAAO;AACzB,yBAAiB,kBAAkB,gBAAgB;AAAA,MACrD;AACA,UAAI,gBAAgB,OAAO;AACzB,yBAAiB,kBAAkB,gBAAgB;AAAA,MACrD;AACA,UAAI,gBAAgB,QAAQ;AAC1B,yBAAiB,mBAAmB,gBAAgB;AAAA,MACtD;AACA,UAAI,gBAAgB,UAAU;AAC5B,yBAAiB,qBAAqB,gBAAgB;AAAA,MACxD;AACA,UAAI,gBAAgB,MAAM;AACxB,yBAAiB,iBAAiB,gBAAgB;AAAA,MACpD;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,cAAc,OAAqC;AApC5D;AAqCL,QAAM,iBAAgB,oCAAO,QAAQ,YAAf,mBAAyB;AAC/C,MAAI,CAAC,iBAAiB,OAAO,kBAAkB,UAAU;AACvD,WAAO;AAAA,EACT;AACA,MAAI,UAAU,eAAe;AAC3B,UAAM,OAAO,cAAc;AAE3B,QAAI,SAAS,SAAS,SAAS,QAAW;AACxC,aAAO;AAAA,IACT;AACA,QAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC7C,YAAM,YAAY;AAClB,YAAM,aAAkB,CAAA;AAExB,UAAI,UAAU,OAAO;AACnB,mBAAW,YAAY,UAAU;AAAA,MACnC;AACA,UAAI,UAAU,OAAO;AACnB,mBAAW,YAAY,UAAU;AAAA,MACnC;AACA,UAAI,UAAU,WAAW;AACvB,mBAAW,gBAAgB,UAAU;AAAA,MACvC;AACA,UAAI,UAAU,OAAO;AACnB,mBAAW,YAAY,UAAU;AAAA,MACnC;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,gBAAgB,OAA8B;AArEvD;AAsEL,QAAM,iBAAgB,oCAAO,QAAQ,YAAf,mBAAyB;AAC/C,MAAI,CAAC,iBAAiB,OAAO,kBAAkB,UAAU;AACvD,WAAO;AAAA,EACT;AACA,MAAI,YAAY,eAAe;AAC7B,UAAM,SAAU,cAAsB;AACtC,WAAO,WAAW;AAAA,EACpB;AACA,SAAO;AACT;AAEO,SAAS,eAAe,OAA6B;AAjFrD;AAkFL,QAAM,iBAAgB,oCAAO,QAAQ,YAAf,mBAAyB;AAC/C,MAAI,CAAC,iBAAiB,OAAO,kBAAkB,UAAU;AACvD,WAAO;AAAA,EACT;AACA,MAAI,WAAW,eAAe;AAC5B,UAAM,QAAQ,cAAc;AAC5B,WAAO,SAAS;AAAA,EAClB;AACA,SAAO;AACT;AAEO,SAAS,cAAc,OAM5B;AAnGK;AAoGL,QAAM,QAAQ,0CAAO,QAAQ,YAAf,mBAAyB,gBAAzB,mBAA8C;AAC5D,SAAO;AAAA,IACL,kBAAkB,oBAAoB,KAAK;AAAA,IAC3C,cAAc,gBAAgB,KAAK;AAAA,IACnC,YAAY,cAAc,KAAK;AAAA,IAC/B,aAAa,eAAe,KAAK;AAAA,IACjC;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,356 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
+ import Quill from "quill";
5
+ import { getAllConfigs } from "../config-utils.es.js";
6
+ import { expandIcon, contractIcon } from "../icons.es.js";
7
+ import { initContextMenu } from "../modules/context-menu.es.js";
8
+ import { createControlPanel } from "../modules/control-panel.es.js";
9
+ import { MindMapResizeAction } from "../modules/custom-resize-action.es.js";
10
+ /* empty css */
11
+ const BlockEmbed = Quill.import("blots/embed");
12
+ const _MindMapPlaceholderBlot = class _MindMapPlaceholderBlot extends BlockEmbed {
13
+ constructor(scroll, domNode) {
14
+ super(scroll, domNode);
15
+ __publicField(this, "quill", null);
16
+ __publicField(this, "mindMap", null);
17
+ __publicField(this, "data");
18
+ __publicField(this, "zoomCount", 0);
19
+ __publicField(this, "contextMenu", null);
20
+ __publicField(this, "currentNode", null);
21
+ __publicField(this, "width", 100);
22
+ __publicField(this, "height", 500);
23
+ __publicField(this, "parentObserver", null);
24
+ __publicField(this, "nextPObserver", null);
25
+ const data = _MindMapPlaceholderBlot.value(domNode);
26
+ this.width = data.width || 100;
27
+ this.height = data.height || 500;
28
+ this.domNode.style.width = `${this.width}${data.width ? "px" : "%"}`;
29
+ this.domNode.style.height = `${this.height}px`;
30
+ this.domNode.style.maxWidth = "100%";
31
+ this.domNode.style.border = "1px solid #e8e8e8";
32
+ this.domNode.setAttribute("contenteditable", "false");
33
+ this.data = _MindMapPlaceholderBlot.value(domNode);
34
+ this.initMindMap();
35
+ }
36
+ static value(domNode) {
37
+ const dataStr = JSON.parse(domNode.getAttribute("data-mind-map"));
38
+ const value = dataStr;
39
+ if (domNode.hasAttribute("width")) {
40
+ value.width = Number.parseInt(domNode.getAttribute("width"), 10);
41
+ }
42
+ if (domNode.hasAttribute("height")) {
43
+ value.height = Number.parseInt(domNode.getAttribute("height"), 10);
44
+ }
45
+ return dataStr;
46
+ }
47
+ static create(value) {
48
+ const node = super.create();
49
+ if (value) {
50
+ node.setAttribute("data-mind-map", JSON.stringify(value));
51
+ }
52
+ if (value.width) {
53
+ node.setAttribute("width", String(value.width));
54
+ node.style.width = `${value.width}%`;
55
+ }
56
+ if (value.height) {
57
+ node.setAttribute("height", String(value.height));
58
+ node.style.height = `${value.height}px`;
59
+ }
60
+ node.setAttribute("contenteditable", "false");
61
+ return node;
62
+ }
63
+ static findQuill(el) {
64
+ let cur = el;
65
+ while (cur) {
66
+ const q = cur.__quillInstance;
67
+ if (q) return q;
68
+ cur = cur.parentElement;
69
+ }
70
+ return null;
71
+ }
72
+ attach() {
73
+ super.attach();
74
+ this.quill = _MindMapPlaceholderBlot.findQuill(this.domNode);
75
+ }
76
+ initMindMap() {
77
+ if (this.domNode.isConnected) {
78
+ this.insertMindMapEditor();
79
+ } else {
80
+ const observer = new MutationObserver(() => {
81
+ if (this.domNode.isConnected) {
82
+ this.insertMindMapEditor();
83
+ observer.disconnect();
84
+ }
85
+ });
86
+ observer.observe(document.body, { childList: true, subtree: true });
87
+ }
88
+ }
89
+ insertMindMapEditor() {
90
+ this.domNode.style.width = `${this.width}${this.data.width ? "px" : "%"}`;
91
+ this.domNode.style.height = `${this.height}px`;
92
+ while (this.domNode.firstChild) {
93
+ this.domNode.removeChild(this.domNode.firstChild);
94
+ }
95
+ this.updateAlignmentStyle();
96
+ this.observeParentAlignment();
97
+ const { backgroundConfig, resizeConfig, lineConfig, themeConfig, deps } = getAllConfigs(this.quill);
98
+ const { SimpleMindMap, Themes, Drag, Export } = deps || window;
99
+ Themes.init(SimpleMindMap);
100
+ SimpleMindMap.usePlugin(Drag).usePlugin(Export);
101
+ this.mindMap = new SimpleMindMap({
102
+ el: this.domNode,
103
+ mousewheelAction: "zoom",
104
+ disableMouseWheelZoom: true,
105
+ layout: this.data.layout,
106
+ theme: themeConfig,
107
+ data: this.data.root ? this.data.root : this.data
108
+ });
109
+ const styleConfig = { ...backgroundConfig };
110
+ if (lineConfig && typeof lineConfig === "object") {
111
+ Object.assign(styleConfig, lineConfig);
112
+ }
113
+ this.mindMap.setThemeConfig(styleConfig);
114
+ const handleScroll = () => {
115
+ if (this.mindMap && this.domNode && this.domNode.isConnected) {
116
+ this.mindMap.getElRectInfo();
117
+ }
118
+ };
119
+ window.addEventListener("scroll", handleScroll, { passive: true });
120
+ this.domNode.addEventListener("remove", () => {
121
+ window.removeEventListener("scroll", handleScroll);
122
+ });
123
+ if (resizeConfig) {
124
+ new MindMapResizeAction(this);
125
+ }
126
+ createControlPanel(this, this.quill);
127
+ initContextMenu(this, this.quill);
128
+ this.observeOwnParentChange();
129
+ this.observeNextPElement();
130
+ this.addMouseHoverEvents();
131
+ this.mindMap.on("node_tree_render_end", () => {
132
+ this.data = this.mindMap.getData({});
133
+ this.domNode.setAttribute("data-mind-map", JSON.stringify(this.data));
134
+ });
135
+ this.mindMap.on("node_dblclick", this.handleNodeDblClick.bind(this));
136
+ this.domNode.addEventListener("click", (e) => {
137
+ if (this.quill) {
138
+ this.mindMap.getElRectInfo();
139
+ const mindMapBlot = Quill.find(this.domNode);
140
+ const index = this.quill.getIndex(mindMapBlot);
141
+ if (index && typeof index === "number") {
142
+ this.quill.setSelection(index + 1, 0);
143
+ }
144
+ }
145
+ });
146
+ }
147
+ addMouseHoverEvents() {
148
+ this.domNode.addEventListener("mouseenter", () => {
149
+ this.showControlPanel();
150
+ });
151
+ this.domNode.addEventListener("mouseleave", () => {
152
+ this.mindMap.execCommand("CLEAR_ACTIVE_NODE");
153
+ this.hideControlPanel();
154
+ });
155
+ }
156
+ getControlElements() {
157
+ const leftUpControl = this.domNode.querySelector(".ql-mind-map-left-up-control");
158
+ const control = this.domNode.querySelector(".ql-mind-map-control");
159
+ const panelStatusIcon = this.domNode.querySelector('[data-control-type="panel-status"]');
160
+ return { leftUpControl, control, panelStatusIcon };
161
+ }
162
+ showControlPanel() {
163
+ const { leftUpControl, control, panelStatusIcon } = this.getControlElements();
164
+ if (!leftUpControl || !control) return;
165
+ leftUpControl.style.display = "inline-flex";
166
+ control.style.display = "flex";
167
+ if (panelStatusIcon) {
168
+ const iconElement = panelStatusIcon.querySelector("i") || panelStatusIcon;
169
+ iconElement.innerHTML = expandIcon;
170
+ }
171
+ }
172
+ hideControlPanel() {
173
+ const { leftUpControl, control, panelStatusIcon } = this.getControlElements();
174
+ if (!leftUpControl || !control) return;
175
+ leftUpControl.style.display = "none";
176
+ control.style.display = "none";
177
+ if (panelStatusIcon) {
178
+ const iconElement = panelStatusIcon.querySelector("i") || panelStatusIcon;
179
+ iconElement.innerHTML = contractIcon;
180
+ }
181
+ }
182
+ // 监听父元素变化
183
+ observeOwnParentChange() {
184
+ let currentParent = this.domNode.parentElement;
185
+ const observer = new MutationObserver(() => {
186
+ if (this.domNode.parentElement !== currentParent) {
187
+ currentParent = this.domNode.parentElement;
188
+ this.observeParentAlignment();
189
+ }
190
+ });
191
+ observer.observe(document.body, {
192
+ attributes: false,
193
+ childList: true,
194
+ subtree: true
195
+ });
196
+ }
197
+ // 监听父元素对齐变化
198
+ observeParentAlignment() {
199
+ if (this.parentObserver) {
200
+ this.parentObserver.disconnect();
201
+ }
202
+ const observer = new MutationObserver((mutations) => {
203
+ mutations.forEach((mutation) => {
204
+ if (mutation.attributeName === "class") {
205
+ this.updateAlignmentStyle();
206
+ }
207
+ });
208
+ });
209
+ this.parentObserver = observer;
210
+ const parent = this.domNode.parentElement;
211
+ if (parent) {
212
+ observer.observe(parent, {
213
+ attributes: true,
214
+ attributeFilter: ["class"]
215
+ });
216
+ this.updateAlignmentStyle();
217
+ }
218
+ }
219
+ // 更新对齐样式
220
+ updateAlignmentStyle() {
221
+ const parent = this.domNode.parentElement;
222
+ if (!parent) return;
223
+ this.domNode.style.margin = "";
224
+ this.domNode.style.display = "block";
225
+ if (parent.classList.contains("ql-align-center")) {
226
+ this.domNode.style.margin = "0 auto";
227
+ } else if (parent.classList.contains("ql-align-right")) {
228
+ this.domNode.style.marginLeft = "auto";
229
+ this.domNode.style.marginRight = "0";
230
+ } else {
231
+ this.domNode.style.marginLeft = "0";
232
+ this.domNode.style.marginRight = "auto";
233
+ }
234
+ }
235
+ observeNextPElement() {
236
+ if (this.nextPObserver) {
237
+ this.nextPObserver.disconnect();
238
+ }
239
+ const parentElement = this.domNode.parentElement;
240
+ if (!parentElement) {
241
+ return;
242
+ }
243
+ const trackedParentElement = parentElement;
244
+ const parentElementId = parentElement.getAttribute("id") || `mind-map-parent-${Date.now()}`;
245
+ parentElement.setAttribute("id", parentElementId);
246
+ const observer = new MutationObserver(() => {
247
+ if (!document.contains(trackedParentElement)) {
248
+ const elementById = document.getElementById(parentElementId);
249
+ if (!elementById) {
250
+ this.remove();
251
+ observer.disconnect();
252
+ }
253
+ }
254
+ });
255
+ observer.observe(document.body, {
256
+ childList: true,
257
+ subtree: true
258
+ });
259
+ this.nextPObserver = observer;
260
+ }
261
+ handleNodeDblClick(node, e) {
262
+ if (node && node.uid && e) {
263
+ this.currentNode = node;
264
+ this.createEditInput(node, e);
265
+ }
266
+ }
267
+ // 创建编辑输入框
268
+ createEditInput(node, e) {
269
+ const input = document.createElement("textarea");
270
+ input.className = "ql-mind-map-edit-input";
271
+ input.value = node.nodeData.data.text || "";
272
+ const autoResize = () => {
273
+ input.style.height = "auto";
274
+ input.style.height = `${input.scrollHeight}px`;
275
+ };
276
+ Object.assign(input.style, {
277
+ position: "absolute",
278
+ boxSizing: "border-box",
279
+ width: "100px",
280
+ height: "35px",
281
+ padding: "5px",
282
+ lineHeight: "1.2",
283
+ fontFamily: "微软雅黑",
284
+ fontSize: "16px",
285
+ whiteSpace: "pre",
286
+ textAlign: "center",
287
+ background: "#fff",
288
+ border: "1px solid #edefed",
289
+ borderRadius: "3px",
290
+ outline: "none",
291
+ transform: "translate(-50%, -50%)",
292
+ resize: "none",
293
+ zIndex: "1000",
294
+ left: `${e.pageX ? e.pageX : 100}px`,
295
+ top: `${e.pageY ? e.pageY : 100}px`,
296
+ overflow: "hidden"
297
+ });
298
+ document.body.appendChild(input);
299
+ autoResize();
300
+ input.addEventListener("keydown", (event) => {
301
+ if (event.key === "Enter" && event.shiftKey) {
302
+ autoResize();
303
+ }
304
+ });
305
+ input.focus();
306
+ const currentNode = node;
307
+ const handleDrawClick = () => {
308
+ this.updateNodeText(input.value, currentNode);
309
+ input.remove();
310
+ this.mindMap.off("draw_click", handleDrawClick);
311
+ };
312
+ this.mindMap.on("draw_click", handleDrawClick);
313
+ input.addEventListener("keydown", (event) => {
314
+ if (event.key === "Enter" && !event.shiftKey) {
315
+ event.preventDefault();
316
+ this.updateNodeText(input.value, currentNode);
317
+ input.remove();
318
+ this.mindMap.off("draw_click", handleDrawClick);
319
+ }
320
+ });
321
+ }
322
+ updateNodeText(text, node) {
323
+ if (node && this.mindMap) {
324
+ node.setText(text);
325
+ const editWraps = document.querySelectorAll(".smm-node-edit-wrap");
326
+ editWraps.forEach((editWrap) => {
327
+ const input = editWrap.querySelector("input, textarea");
328
+ if (input) {
329
+ input.value = text;
330
+ } else {
331
+ editWrap.textContent = text;
332
+ }
333
+ });
334
+ this.data = this.mindMap.getData({});
335
+ this.domNode.setAttribute("data-mind-map", JSON.stringify(this.data));
336
+ }
337
+ }
338
+ format(name, value) {
339
+ }
340
+ remove() {
341
+ this.mindMap.destroy();
342
+ if (this.nextPObserver) {
343
+ this.nextPObserver.disconnect();
344
+ this.nextPObserver = null;
345
+ }
346
+ super.remove();
347
+ }
348
+ };
349
+ __publicField(_MindMapPlaceholderBlot, "blotName", "mind-map");
350
+ __publicField(_MindMapPlaceholderBlot, "tagName", "div");
351
+ __publicField(_MindMapPlaceholderBlot, "className", "ql-mind-map-item");
352
+ let MindMapPlaceholderBlot = _MindMapPlaceholderBlot;
353
+ export {
354
+ MindMapPlaceholderBlot as default
355
+ };
356
+ //# sourceMappingURL=mind-map-blot.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mind-map-blot.es.js","sources":["../../../../../src/modules/mind-map/formats/mind-map-blot.ts"],"sourcesContent":["import type { Root } from 'parchment'\nimport type { BlockEmbed as TypeBlockEmbed } from 'quill/blots/block'\nimport type FluentEditor from '../../../core/fluent-editor'\nimport Quill from 'quill'\nimport { getAllConfigs } from '../config-utils'\nimport { contractIcon, expandIcon } from '../icons'\nimport { initContextMenu } from '../modules/context-menu'\nimport { createControlPanel } from '../modules/control-panel'\nimport { MindMapResizeAction } from '../modules/custom-resize-action'\nimport '../style/mind-map.scss'\n\nconst BlockEmbed = Quill.import('blots/embed') as typeof TypeBlockEmbed\n\nclass MindMapPlaceholderBlot extends BlockEmbed {\n static blotName = 'mind-map'\n static tagName = 'div'\n static className = 'ql-mind-map-item'\n quill: Quill | null = null\n mindMap: any | null = null\n data: any\n zoomCount = 0\n contextMenu: HTMLElement | null = null\n currentNode: any = null\n width: number = 100\n height: number = 500\n parentObserver: MutationObserver | null = null\n nextPObserver: MutationObserver | null = null\n\n constructor(scroll: Root, domNode: HTMLElement) {\n super(scroll, domNode)\n const data = MindMapPlaceholderBlot.value(domNode)\n this.width = data.width || 100\n this.height = data.height || 500\n this.domNode.style.width = `${this.width}${data.width ? 'px' : '%'}`\n this.domNode.style.height = `${this.height}px`\n this.domNode.style.maxWidth = '100%'\n this.domNode.style.border = '1px solid #e8e8e8'\n this.domNode.setAttribute('contenteditable', 'false')\n this.data = MindMapPlaceholderBlot.value(domNode)\n this.initMindMap()\n }\n\n static value(domNode: HTMLElement): any {\n const dataStr = JSON.parse(domNode.getAttribute('data-mind-map'))\n const value = dataStr\n if (domNode.hasAttribute('width')) {\n value.width = Number.parseInt(domNode.getAttribute('width'), 10)\n }\n if (domNode.hasAttribute('height')) {\n value.height = Number.parseInt(domNode.getAttribute('height'), 10)\n }\n return dataStr\n }\n\n static create(value: any): HTMLElement {\n const node = super.create() as HTMLElement\n if (value) {\n node.setAttribute('data-mind-map', JSON.stringify(value))\n }\n if (value.width) {\n node.setAttribute('width', String(value.width))\n node.style.width = `${value.width}%`\n }\n if (value.height) {\n node.setAttribute('height', String(value.height))\n node.style.height = `${value.height}px`\n }\n node.setAttribute('contenteditable', 'false')\n return node\n }\n\n private static findQuill(el: HTMLElement): Quill | null {\n let cur: HTMLElement | null = el\n while (cur) {\n const q = (cur as any).__quillInstance\n if (q) return q\n cur = cur.parentElement\n }\n return null\n }\n\n attach() {\n super.attach()\n this.quill = MindMapPlaceholderBlot.findQuill(this.domNode)\n }\n\n initMindMap(): void {\n if (this.domNode.isConnected) {\n this.insertMindMapEditor()\n }\n else {\n const observer = new MutationObserver(() => {\n if (this.domNode.isConnected) {\n this.insertMindMapEditor()\n observer.disconnect()\n }\n })\n observer.observe(document.body, { childList: true, subtree: true })\n }\n }\n\n insertMindMapEditor(): void {\n this.domNode.style.width = `${this.width}${this.data.width ? 'px' : '%'}`\n this.domNode.style.height = `${this.height}px`\n while (this.domNode.firstChild) {\n this.domNode.removeChild(this.domNode.firstChild)\n }\n this.updateAlignmentStyle()\n this.observeParentAlignment()\n const { backgroundConfig, resizeConfig, lineConfig, themeConfig, deps } = getAllConfigs(this.quill)\n const { SimpleMindMap, Themes, Drag, Export } = deps || window as any\n Themes.init(SimpleMindMap)\n SimpleMindMap.usePlugin(Drag).usePlugin(Export)\n this.mindMap = new SimpleMindMap ({\n el: this.domNode,\n mousewheelAction: 'zoom',\n disableMouseWheelZoom: true,\n layout: this.data.layout,\n theme: themeConfig,\n data: this.data.root ? this.data.root : this.data,\n } as any)\n\n const styleConfig = { ...backgroundConfig }\n if (lineConfig && typeof lineConfig === 'object') {\n Object.assign(styleConfig, lineConfig)\n }\n\n this.mindMap.setThemeConfig(styleConfig)\n\n const handleScroll = () => {\n if (this.mindMap && this.domNode && this.domNode.isConnected) {\n this.mindMap.getElRectInfo()\n }\n }\n\n window.addEventListener('scroll', handleScroll, { passive: true })\n\n this.domNode.addEventListener('remove', () => {\n window.removeEventListener('scroll', handleScroll)\n })\n\n if (resizeConfig) {\n new MindMapResizeAction(this)\n }\n createControlPanel(this, this.quill as FluentEditor) // 创建控制面板\n initContextMenu(this, this.quill as FluentEditor) // 初始化右键菜单\n this.observeOwnParentChange()\n this.observeNextPElement()\n this.addMouseHoverEvents()\n this.mindMap.on('node_tree_render_end', () => {\n this.data = this.mindMap.getData({})\n this.domNode.setAttribute('data-mind-map', JSON.stringify(this.data))\n })\n this.mindMap.on('node_dblclick', this.handleNodeDblClick.bind(this))\n this.domNode.addEventListener('click', (e) => {\n if (this.quill) {\n this.mindMap.getElRectInfo()\n const mindMapBlot = Quill.find(this.domNode)\n const index = this.quill.getIndex(mindMapBlot as MindMapPlaceholderBlot)\n if (index && typeof index === 'number') {\n this.quill.setSelection(index + 1, 0)\n }\n }\n })\n }\n\n addMouseHoverEvents(): void {\n this.domNode.addEventListener('mouseenter', () => {\n this.showControlPanel()\n })\n\n this.domNode.addEventListener('mouseleave', () => {\n this.mindMap.execCommand('CLEAR_ACTIVE_NODE')\n this.hideControlPanel()\n })\n }\n\n getControlElements(): { leftUpControl: HTMLElement | null, control: HTMLElement | null, panelStatusIcon: HTMLElement | null } {\n const leftUpControl = this.domNode.querySelector('.ql-mind-map-left-up-control') as HTMLElement | null\n const control = this.domNode.querySelector('.ql-mind-map-control') as HTMLElement | null\n const panelStatusIcon = this.domNode.querySelector('[data-control-type=\"panel-status\"]') as HTMLElement | null\n return { leftUpControl, control, panelStatusIcon }\n }\n\n showControlPanel(): void {\n const { leftUpControl, control, panelStatusIcon } = this.getControlElements()\n if (!leftUpControl || !control) return\n\n leftUpControl.style.display = 'inline-flex'\n control.style.display = 'flex'\n if (panelStatusIcon) {\n const iconElement = panelStatusIcon.querySelector('i') || panelStatusIcon\n iconElement.innerHTML = expandIcon\n }\n }\n\n hideControlPanel(): void {\n const { leftUpControl, control, panelStatusIcon } = this.getControlElements()\n if (!leftUpControl || !control) return\n\n leftUpControl.style.display = 'none'\n control.style.display = 'none'\n if (panelStatusIcon) {\n const iconElement = panelStatusIcon.querySelector('i') || panelStatusIcon\n iconElement.innerHTML = contractIcon\n }\n }\n\n // 监听父元素变化\n observeOwnParentChange(): void {\n let currentParent = this.domNode.parentElement\n const observer = new MutationObserver(() => {\n if (this.domNode.parentElement !== currentParent) {\n currentParent = this.domNode.parentElement\n this.observeParentAlignment()\n }\n })\n\n observer.observe(document.body, {\n attributes: false,\n childList: true,\n subtree: true,\n })\n }\n\n // 监听父元素对齐变化\n observeParentAlignment(): void {\n if (this.parentObserver) {\n this.parentObserver.disconnect()\n }\n\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.attributeName === 'class') {\n this.updateAlignmentStyle()\n }\n })\n })\n\n this.parentObserver = observer\n\n const parent = this.domNode.parentElement\n if (parent) {\n observer.observe(parent, {\n attributes: true,\n attributeFilter: ['class'],\n })\n this.updateAlignmentStyle()\n }\n }\n\n // 更新对齐样式\n updateAlignmentStyle(): void {\n const parent = this.domNode.parentElement\n if (!parent) return\n\n this.domNode.style.margin = ''\n this.domNode.style.display = 'block'\n\n if (parent.classList.contains('ql-align-center')) {\n this.domNode.style.margin = '0 auto'\n }\n else if (parent.classList.contains('ql-align-right')) {\n this.domNode.style.marginLeft = 'auto'\n this.domNode.style.marginRight = '0'\n }\n else {\n this.domNode.style.marginLeft = '0'\n this.domNode.style.marginRight = 'auto'\n }\n }\n\n observeNextPElement(): void {\n if (this.nextPObserver) {\n this.nextPObserver.disconnect()\n }\n const parentElement = this.domNode.parentElement\n if (!parentElement) {\n return\n }\n const trackedParentElement = parentElement\n const parentElementId = parentElement.getAttribute('id') || `mind-map-parent-${Date.now()}`\n parentElement.setAttribute('id', parentElementId)\n const observer = new MutationObserver(() => {\n if (!document.contains(trackedParentElement)) {\n const elementById = document.getElementById(parentElementId)\n if (!elementById) {\n this.remove()\n observer.disconnect()\n }\n }\n })\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n })\n this.nextPObserver = observer\n }\n\n handleNodeDblClick(node: any, e: any) {\n if (node && node.uid && e) {\n this.currentNode = node\n this.createEditInput(node, e)\n }\n }\n\n // 创建编辑输入框\n createEditInput(node: any, e: any) {\n const input = document.createElement('textarea')\n input.className = 'ql-mind-map-edit-input'\n input.value = node.nodeData.data.text || ''\n const autoResize = () => {\n input.style.height = 'auto'\n input.style.height = `${input.scrollHeight}px`\n }\n Object.assign(input.style, {\n position: 'absolute',\n boxSizing: 'border-box',\n width: '100px',\n height: '35px',\n padding: '5px',\n lineHeight: '1.2',\n fontFamily: '微软雅黑',\n fontSize: '16px',\n whiteSpace: 'pre',\n textAlign: 'center',\n background: '#fff',\n border: '1px solid #edefed',\n borderRadius: '3px',\n outline: 'none',\n transform: 'translate(-50%, -50%)',\n resize: 'none',\n zIndex: '1000',\n left: `${e.pageX ? e.pageX : 100}px`,\n top: `${e.pageY ? e.pageY : 100}px`,\n overflow: 'hidden',\n })\n\n document.body.appendChild(input)\n autoResize()\n input.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' && event.shiftKey) {\n autoResize()\n }\n })\n input.focus()\n\n const currentNode = node\n const handleDrawClick = () => {\n this.updateNodeText(input.value, currentNode)\n input.remove()\n this.mindMap.off('draw_click', handleDrawClick)\n }\n\n this.mindMap.on('draw_click', handleDrawClick)\n\n input.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault()\n this.updateNodeText(input.value, currentNode)\n input.remove()\n this.mindMap.off('draw_click', handleDrawClick)\n }\n })\n }\n\n updateNodeText(text: string, node: any) {\n if (node && this.mindMap) {\n node.setText(text)\n const editWraps = document.querySelectorAll('.smm-node-edit-wrap')\n editWraps.forEach((editWrap) => {\n const input = editWrap.querySelector('input, textarea')\n if (input) {\n (input as HTMLInputElement | HTMLTextAreaElement).value = text\n }\n else {\n editWrap.textContent = text\n }\n })\n this.data = this.mindMap.getData({})\n this.domNode.setAttribute('data-mind-map', JSON.stringify(this.data))\n }\n }\n\n format(name: string, value: any) {\n }\n\n remove() {\n this.mindMap.destroy()\n if (this.nextPObserver) {\n this.nextPObserver.disconnect()\n this.nextPObserver = null\n }\n super.remove()\n }\n}\n\nexport default MindMapPlaceholderBlot\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ const MIND_MAP_EN_US = {
2
+ "mindMap.controlPanel.zoomOutTitle": "Zoom Out View",
3
+ "mindMap.controlPanel.zoomInTitle": "Zoom In View",
4
+ "mindMap.controlPanel.fitTitle": "Fit View Size",
5
+ "mindMap.controlPanel.backTitle": "Step Back",
6
+ "mindMap.controlPanel.forwardTitle": "Step Forward",
7
+ "mindMap.controlPanel.inserChildNodeTitle": "Insert Child Node",
8
+ "mindMap.controlPanel.inserNodeTitle": "Insert Sibling Node",
9
+ "mindMap.controlPanel.inserParentNodeTitle": "Insert Parent Node",
10
+ "mindMap.controlPanel.removeNodeTitle": "Delete Current Node",
11
+ "mindMap.controlPanel.setLayoutTitle": "Set Layout",
12
+ "mindMap.layout.logicalStructure": "Logical Structure",
13
+ "mindMap.layout.catalogOrganization": "Catalog Organization",
14
+ "mindMap.layout.mindMap": "Mind Map",
15
+ "mindMap.layout.organizationStructure": "Organization Structure",
16
+ "mindMap.layout.timeline": "Timeline",
17
+ "mindMap.layout.fishbone": "Fishbone Diagram",
18
+ "mindMap.contextMenu.copy": "Copy",
19
+ "mindMap.contextMenu.cut": "Cut",
20
+ "mindMap.contextMenu.paste": "Paste",
21
+ "mindMap.contextMenu.deleteContent": "Delete",
22
+ "mindMap.controlPanel.panelStatusTitle": "Panel Status",
23
+ "mindMap.controlPanel.screenTypeTitle": "Screen Type",
24
+ "mindMap.controlPanel.insertIconTitle": "Insert Icon"
25
+ };
26
+ export {
27
+ MIND_MAP_EN_US
28
+ };
29
+ //# sourceMappingURL=en-us.es.js.map