@opentiny/fluent-editor 4.0.0-alpha.8 → 4.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (904) hide show
  1. package/es/config/editor.config.es.js +112 -0
  2. package/es/config/editor.config.es.js.map +1 -0
  3. package/es/config/editor.utils.es.js.map +1 -0
  4. package/es/config/i18n/en-us.es.js +131 -0
  5. package/es/config/i18n/en-us.es.js.map +1 -0
  6. package/es/config/i18n/zh-cn.es.js +131 -0
  7. package/es/config/i18n/zh-cn.es.js.map +1 -0
  8. package/es/config/index.es.js +67 -0
  9. package/es/config/index.es.js.map +1 -0
  10. package/es/core/fluent-editor.es.js.map +1 -0
  11. package/es/fluent-editor.es.js +88 -0
  12. package/es/fluent-editor.es.js.map +1 -0
  13. package/es/formats/soft-break.es.js.map +1 -0
  14. package/es/formats/video.es.js.map +1 -0
  15. package/es/index.es.js +137 -0
  16. package/es/index.es.js.map +1 -0
  17. package/es/modules/ai/constants.es.js.map +1 -0
  18. package/es/modules/ai/index.es.js +670 -0
  19. package/es/modules/ai/index.es.js.map +1 -0
  20. package/es/modules/collaborative-editing/awareness/awareness.es.js +92 -0
  21. package/es/modules/collaborative-editing/awareness/awareness.es.js.map +1 -0
  22. package/es/modules/collaborative-editing/awareness/y-indexeddb.es.js +16 -0
  23. package/es/modules/collaborative-editing/awareness/y-indexeddb.es.js.map +1 -0
  24. package/es/modules/collaborative-editing/collaborative-editing.es.js +110 -0
  25. package/es/modules/collaborative-editing/collaborative-editing.es.js.map +1 -0
  26. package/es/modules/collaborative-editing/module.es.js.map +1 -0
  27. package/es/modules/collaborative-editing/provider/providerRegistry.es.js.map +1 -0
  28. package/es/modules/collaborative-editing/provider/webrtc.es.js +103 -0
  29. package/es/modules/collaborative-editing/provider/webrtc.es.js.map +1 -0
  30. package/es/modules/collaborative-editing/provider/websocket.es.js +113 -0
  31. package/es/modules/collaborative-editing/provider/websocket.es.js.map +1 -0
  32. package/es/modules/counter.es.js.map +1 -0
  33. package/es/modules/custom-clipboard.es.js.map +1 -0
  34. package/es/modules/custom-image/actions/action.es.js.map +1 -0
  35. package/es/modules/custom-image/actions/custom-resize-action.es.js.map +1 -0
  36. package/es/modules/custom-image/actions/delete-action.es.js.map +1 -0
  37. package/es/modules/custom-image/actions/image-toolbar-buttons.es.js +137 -0
  38. package/es/modules/custom-image/actions/image-toolbar-buttons.es.js.map +1 -0
  39. package/es/modules/custom-image/actions/toolbar-action.es.js.map +1 -0
  40. package/es/modules/custom-image/actions/toolbar.es.js.map +1 -0
  41. package/es/modules/custom-image/blot-formatter.es.js +140 -0
  42. package/es/modules/custom-image/blot-formatter.es.js.map +1 -0
  43. package/es/modules/custom-image/image.es.js.map +1 -0
  44. package/es/modules/custom-image/options.es.js.map +1 -0
  45. package/es/modules/custom-image/specs/blot-spec.es.js.map +1 -0
  46. package/es/modules/custom-image/specs/custom-image-spec.es.js.map +1 -0
  47. package/es/modules/custom-image/specs/image-spec.es.js.map +1 -0
  48. package/es/modules/custom-uploader.es.js.map +1 -0
  49. package/es/modules/divider.es.js.map +1 -0
  50. package/es/modules/emoji.es.js +167 -0
  51. package/es/modules/emoji.es.js.map +1 -0
  52. package/es/modules/file/formats/file.es.js.map +1 -0
  53. package/es/modules/file/modules/file-bar.es.js.map +1 -0
  54. package/es/modules/file/modules/file-module.es.js.map +1 -0
  55. package/es/modules/flow-chart/config-utils.es.js +102 -0
  56. package/es/modules/flow-chart/config-utils.es.js.map +1 -0
  57. package/es/modules/flow-chart/formats/flow-chart-blot.es.js +369 -0
  58. package/es/modules/flow-chart/formats/flow-chart-blot.es.js.map +1 -0
  59. package/es/modules/flow-chart/i18n/en-us.es.js +30 -0
  60. package/es/modules/flow-chart/i18n/en-us.es.js.map +1 -0
  61. package/es/modules/flow-chart/i18n/index.es.js +12 -0
  62. package/es/modules/flow-chart/i18n/index.es.js.map +1 -0
  63. package/es/modules/flow-chart/i18n/zh-cn.es.js +30 -0
  64. package/es/modules/flow-chart/i18n/zh-cn.es.js.map +1 -0
  65. package/es/modules/flow-chart/icons.es.js +27 -0
  66. package/es/modules/flow-chart/icons.es.js.map +1 -0
  67. package/es/modules/flow-chart/index.es.js +45 -0
  68. package/es/modules/flow-chart/index.es.js.map +1 -0
  69. package/es/modules/flow-chart/modules/context-menu.es.js +184 -0
  70. package/es/modules/flow-chart/modules/context-menu.es.js.map +1 -0
  71. package/es/modules/flow-chart/modules/control-panel.es.js +286 -0
  72. package/es/modules/flow-chart/modules/control-panel.es.js.map +1 -0
  73. package/es/modules/flow-chart/modules/custom-resize-action.es.js +150 -0
  74. package/es/modules/flow-chart/modules/custom-resize-action.es.js.map +1 -0
  75. package/es/modules/i18n.es.js.map +1 -0
  76. package/es/modules/index.es.js +31 -0
  77. package/es/modules/index.es.js.map +1 -0
  78. package/es/modules/link/formats/link.es.js.map +1 -0
  79. package/es/modules/link/modules/tooltip.es.js.map +1 -0
  80. package/es/modules/mathlive/formats.es.js.map +1 -0
  81. package/es/modules/mathlive/module.es.js.map +1 -0
  82. package/es/modules/mathlive/tooltip.es.js.map +1 -0
  83. package/es/modules/mention/mention-link.es.js.map +1 -0
  84. package/es/modules/mention/mention.es.js.map +1 -0
  85. package/es/modules/mind-map/config-utils.es.js +108 -0
  86. package/es/modules/mind-map/config-utils.es.js.map +1 -0
  87. package/es/modules/mind-map/formats/mind-map-blot.es.js +356 -0
  88. package/es/modules/mind-map/formats/mind-map-blot.es.js.map +1 -0
  89. package/es/modules/mind-map/i18n/en-us.es.js +29 -0
  90. package/es/modules/mind-map/i18n/en-us.es.js.map +1 -0
  91. package/es/modules/mind-map/i18n/index.es.js +12 -0
  92. package/es/modules/mind-map/i18n/index.es.js.map +1 -0
  93. package/es/modules/mind-map/i18n/zh-cn.es.js +29 -0
  94. package/es/modules/mind-map/i18n/zh-cn.es.js.map +1 -0
  95. package/es/modules/mind-map/icons.es.js +45 -0
  96. package/es/modules/mind-map/icons.es.js.map +1 -0
  97. package/es/modules/mind-map/index.es.js +56 -0
  98. package/es/modules/mind-map/index.es.js.map +1 -0
  99. package/es/modules/mind-map/modules/context-menu.es.js +128 -0
  100. package/es/modules/mind-map/modules/context-menu.es.js.map +1 -0
  101. package/es/modules/mind-map/modules/control-panel.es.js +425 -0
  102. package/es/modules/mind-map/modules/control-panel.es.js.map +1 -0
  103. package/es/modules/mind-map/modules/custom-resize-action.es.js +161 -0
  104. package/es/modules/mind-map/modules/custom-resize-action.es.js.map +1 -0
  105. package/es/modules/shortcut-key/index.es.js +245 -0
  106. package/es/modules/shortcut-key/index.es.js.map +1 -0
  107. package/es/modules/syntax.es.js.map +1 -0
  108. package/es/modules/table-up/index.es.js.map +1 -0
  109. package/es/modules/toolbar/better-picker.es.js.map +1 -0
  110. package/es/modules/toolbar/better-toolbar.es.js.map +1 -0
  111. package/es/modules/toolbar/toolbar-tip.es.js.map +1 -0
  112. package/es/themes/snow.es.js.map +1 -0
  113. package/es/tools/format-painter.es.js.map +1 -0
  114. package/es/tools/fullscreen.es.js.map +1 -0
  115. package/es/tools/screenshot.es.js.map +1 -0
  116. package/es/ui/icons.config.es.js +369 -0
  117. package/es/ui/icons.config.es.js.map +1 -0
  118. package/es/ui/icons.es.js +52 -0
  119. package/es/ui/icons.es.js.map +1 -0
  120. package/es/utils/debounce.es.js.map +1 -0
  121. package/es/utils/image.es.js.map +1 -0
  122. package/es/utils/is.es.js.map +1 -0
  123. package/es/utils/merge.es.js +27 -0
  124. package/es/utils/merge.es.js.map +1 -0
  125. package/es/utils/method.es.js.map +1 -0
  126. package/es/utils/scroll-lock.es.js.map +1 -0
  127. package/flow-chart.css +185 -0
  128. package/lib/config/editor.config.cjs.js +112 -0
  129. package/lib/config/editor.config.cjs.js.map +1 -0
  130. package/lib/config/editor.utils.cjs.js.map +1 -0
  131. package/lib/config/i18n/en-us.cjs.js +131 -0
  132. package/lib/config/i18n/en-us.cjs.js.map +1 -0
  133. package/lib/config/i18n/zh-cn.cjs.js +131 -0
  134. package/lib/config/i18n/zh-cn.cjs.js.map +1 -0
  135. package/lib/config/index.cjs.js +66 -0
  136. package/lib/config/index.cjs.js.map +1 -0
  137. package/lib/core/fluent-editor.cjs.js.map +1 -0
  138. package/lib/fluent-editor.cjs.js +88 -0
  139. package/lib/fluent-editor.cjs.js.map +1 -0
  140. package/lib/formats/soft-break.cjs.js.map +1 -0
  141. package/lib/formats/video.cjs.js.map +1 -0
  142. package/lib/index.cjs.js +158 -0
  143. package/lib/index.cjs.js.map +1 -0
  144. package/lib/modules/ai/constants.cjs.js.map +1 -0
  145. package/lib/modules/ai/index.cjs.js.map +1 -0
  146. package/lib/modules/collaborative-editing/awareness/awareness.cjs.js +92 -0
  147. package/lib/modules/collaborative-editing/awareness/awareness.cjs.js.map +1 -0
  148. package/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js +16 -0
  149. package/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js.map +1 -0
  150. package/lib/modules/collaborative-editing/collaborative-editing.cjs.js +110 -0
  151. package/lib/modules/collaborative-editing/collaborative-editing.cjs.js.map +1 -0
  152. package/lib/modules/collaborative-editing/module.cjs.js.map +1 -0
  153. package/lib/modules/collaborative-editing/provider/providerRegistry.cjs.js.map +1 -0
  154. package/lib/modules/collaborative-editing/provider/webrtc.cjs.js +103 -0
  155. package/lib/modules/collaborative-editing/provider/webrtc.cjs.js.map +1 -0
  156. package/lib/modules/collaborative-editing/provider/websocket.cjs.js +113 -0
  157. package/lib/modules/collaborative-editing/provider/websocket.cjs.js.map +1 -0
  158. package/lib/modules/counter.cjs.js.map +1 -0
  159. package/lib/modules/custom-clipboard.cjs.js.map +1 -0
  160. package/lib/modules/custom-image/actions/action.cjs.js.map +1 -0
  161. package/lib/modules/custom-image/actions/custom-resize-action.cjs.js.map +1 -0
  162. package/lib/modules/custom-image/actions/delete-action.cjs.js.map +1 -0
  163. package/lib/modules/custom-image/actions/image-toolbar-buttons.cjs.js.map +1 -0
  164. package/lib/modules/custom-image/actions/toolbar-action.cjs.js.map +1 -0
  165. package/lib/modules/custom-image/actions/toolbar.cjs.js.map +1 -0
  166. package/lib/modules/custom-image/blot-formatter.cjs.js +140 -0
  167. package/lib/modules/custom-image/blot-formatter.cjs.js.map +1 -0
  168. package/lib/modules/custom-image/image.cjs.js.map +1 -0
  169. package/lib/modules/custom-image/options.cjs.js.map +1 -0
  170. package/lib/modules/custom-image/specs/blot-spec.cjs.js.map +1 -0
  171. package/lib/modules/custom-image/specs/custom-image-spec.cjs.js.map +1 -0
  172. package/lib/modules/custom-image/specs/image-spec.cjs.js.map +1 -0
  173. package/lib/modules/custom-uploader.cjs.js.map +1 -0
  174. package/lib/modules/divider.cjs.js.map +1 -0
  175. package/lib/modules/emoji.cjs.js +167 -0
  176. package/lib/modules/emoji.cjs.js.map +1 -0
  177. package/lib/modules/file/formats/file.cjs.js.map +1 -0
  178. package/lib/modules/file/modules/file-bar.cjs.js.map +1 -0
  179. package/lib/modules/file/modules/file-module.cjs.js.map +1 -0
  180. package/lib/modules/flow-chart/config-utils.cjs.js +102 -0
  181. package/lib/modules/flow-chart/config-utils.cjs.js.map +1 -0
  182. package/lib/modules/flow-chart/formats/flow-chart-blot.cjs.js +369 -0
  183. package/lib/modules/flow-chart/formats/flow-chart-blot.cjs.js.map +1 -0
  184. package/lib/modules/flow-chart/i18n/en-us.cjs.js +30 -0
  185. package/lib/modules/flow-chart/i18n/en-us.cjs.js.map +1 -0
  186. package/lib/modules/flow-chart/i18n/index.cjs.js +12 -0
  187. package/lib/modules/flow-chart/i18n/index.cjs.js.map +1 -0
  188. package/lib/modules/flow-chart/i18n/zh-cn.cjs.js +30 -0
  189. package/lib/modules/flow-chart/i18n/zh-cn.cjs.js.map +1 -0
  190. package/lib/modules/flow-chart/icons.cjs.js +27 -0
  191. package/lib/modules/flow-chart/icons.cjs.js.map +1 -0
  192. package/lib/modules/flow-chart/index.cjs.js +45 -0
  193. package/lib/modules/flow-chart/index.cjs.js.map +1 -0
  194. package/lib/modules/flow-chart/modules/context-menu.cjs.js +184 -0
  195. package/lib/modules/flow-chart/modules/context-menu.cjs.js.map +1 -0
  196. package/lib/modules/flow-chart/modules/control-panel.cjs.js +286 -0
  197. package/lib/modules/flow-chart/modules/control-panel.cjs.js.map +1 -0
  198. package/lib/modules/flow-chart/modules/custom-resize-action.cjs.js +150 -0
  199. package/lib/modules/flow-chart/modules/custom-resize-action.cjs.js.map +1 -0
  200. package/lib/modules/i18n.cjs.js.map +1 -0
  201. package/lib/modules/index.cjs.js +31 -0
  202. package/lib/modules/index.cjs.js.map +1 -0
  203. package/lib/modules/link/formats/link.cjs.js.map +1 -0
  204. package/lib/modules/link/modules/tooltip.cjs.js.map +1 -0
  205. package/lib/modules/mathlive/formats.cjs.js.map +1 -0
  206. package/lib/modules/mathlive/module.cjs.js.map +1 -0
  207. package/lib/modules/mathlive/tooltip.cjs.js.map +1 -0
  208. package/lib/modules/mention/mention-link.cjs.js.map +1 -0
  209. package/lib/modules/mention/mention.cjs.js.map +1 -0
  210. package/lib/modules/mind-map/config-utils.cjs.js +108 -0
  211. package/lib/modules/mind-map/config-utils.cjs.js.map +1 -0
  212. package/lib/modules/mind-map/formats/mind-map-blot.cjs.js +356 -0
  213. package/lib/modules/mind-map/formats/mind-map-blot.cjs.js.map +1 -0
  214. package/lib/modules/mind-map/i18n/en-us.cjs.js +29 -0
  215. package/lib/modules/mind-map/i18n/en-us.cjs.js.map +1 -0
  216. package/lib/modules/mind-map/i18n/index.cjs.js +12 -0
  217. package/lib/modules/mind-map/i18n/index.cjs.js.map +1 -0
  218. package/lib/modules/mind-map/i18n/zh-cn.cjs.js +29 -0
  219. package/lib/modules/mind-map/i18n/zh-cn.cjs.js.map +1 -0
  220. package/lib/modules/mind-map/icons.cjs.js +45 -0
  221. package/lib/modules/mind-map/icons.cjs.js.map +1 -0
  222. package/lib/modules/mind-map/index.cjs.js +56 -0
  223. package/lib/modules/mind-map/index.cjs.js.map +1 -0
  224. package/lib/modules/mind-map/modules/context-menu.cjs.js +128 -0
  225. package/lib/modules/mind-map/modules/context-menu.cjs.js.map +1 -0
  226. package/lib/modules/mind-map/modules/control-panel.cjs.js +425 -0
  227. package/lib/modules/mind-map/modules/control-panel.cjs.js.map +1 -0
  228. package/lib/modules/mind-map/modules/custom-resize-action.cjs.js +161 -0
  229. package/lib/modules/mind-map/modules/custom-resize-action.cjs.js.map +1 -0
  230. package/lib/modules/shortcut-key/index.cjs.js +245 -0
  231. package/lib/modules/shortcut-key/index.cjs.js.map +1 -0
  232. package/lib/modules/syntax.cjs.js.map +1 -0
  233. package/lib/modules/table-up/index.cjs.js.map +1 -0
  234. package/lib/modules/toolbar/better-picker.cjs.js.map +1 -0
  235. package/lib/modules/toolbar/better-toolbar.cjs.js.map +1 -0
  236. package/lib/modules/toolbar/toolbar-tip.cjs.js.map +1 -0
  237. package/lib/themes/snow.cjs.js.map +1 -0
  238. package/lib/tools/format-painter.cjs.js.map +1 -0
  239. package/lib/tools/fullscreen.cjs.js.map +1 -0
  240. package/lib/tools/screenshot.cjs.js.map +1 -0
  241. package/lib/ui/icons.cjs.js +52 -0
  242. package/lib/ui/icons.cjs.js.map +1 -0
  243. package/lib/ui/icons.config.cjs.js +369 -0
  244. package/lib/ui/icons.config.cjs.js.map +1 -0
  245. package/lib/utils/debounce.cjs.js.map +1 -0
  246. package/lib/utils/image.cjs.js.map +1 -0
  247. package/lib/utils/is.cjs.js.map +1 -0
  248. package/lib/utils/merge.cjs.js +27 -0
  249. package/lib/utils/merge.cjs.js.map +1 -0
  250. package/lib/utils/method.cjs.js.map +1 -0
  251. package/lib/utils/scroll-lock.cjs.js.map +1 -0
  252. package/mind-map.css +224 -0
  253. package/package.json +15 -37
  254. package/patches/quill@2.0.3.patch +33 -0
  255. package/scripts/apply-patches.cjs +248 -0
  256. package/style.css +3465 -0
  257. package/types/config/editor.config.d.ts +55 -0
  258. package/types/config/i18n/en-us.d.ts +125 -0
  259. package/types/config/i18n/zh-cn.d.ts +125 -0
  260. package/types/config/types/editor-modules.interface.d.ts +45 -0
  261. package/types/index.d.ts +8 -0
  262. package/types/modules/collaborative-editing/awareness/awareness.d.ts +28 -0
  263. package/types/modules/collaborative-editing/awareness/y-indexeddb.d.ts +3 -0
  264. package/types/modules/collaborative-editing/collaborative-editing.d.ts +25 -0
  265. package/types/modules/collaborative-editing/provider/providerRegistry.d.ts +26 -0
  266. package/types/modules/collaborative-editing/provider/webrtc.d.ts +37 -0
  267. package/types/modules/collaborative-editing/provider/websocket.d.ts +41 -0
  268. package/types/modules/collaborative-editing/types.d.ts +53 -0
  269. package/types/modules/flow-chart/config-utils.d.ts +10 -0
  270. package/types/modules/flow-chart/formats/flow-chart-blot.d.ts +43 -0
  271. package/types/modules/flow-chart/i18n/en-us.d.ts +26 -0
  272. package/types/modules/flow-chart/i18n/index.d.ts +1 -0
  273. package/types/modules/flow-chart/i18n/zh-cn.d.ts +26 -0
  274. package/types/modules/flow-chart/icons.d.ts +12 -0
  275. package/types/modules/flow-chart/index.d.ts +10 -0
  276. package/types/modules/flow-chart/modules/context-menu.d.ts +3 -0
  277. package/types/modules/flow-chart/modules/control-panel.d.ts +3 -0
  278. package/types/modules/flow-chart/modules/custom-resize-action.d.ts +22 -0
  279. package/types/modules/flow-chart/options.d.ts +29 -0
  280. package/types/modules/index.d.ts +18 -0
  281. package/types/modules/mind-map/config-utils.d.ts +12 -0
  282. package/types/modules/mind-map/formats/mind-map-blot.d.ts +44 -0
  283. package/types/modules/mind-map/i18n/en-us.d.ts +25 -0
  284. package/types/modules/mind-map/i18n/index.d.ts +1 -0
  285. package/types/modules/mind-map/i18n/zh-cn.d.ts +25 -0
  286. package/types/modules/mind-map/icons.d.ts +21 -0
  287. package/types/modules/mind-map/index.d.ts +10 -0
  288. package/types/modules/mind-map/modules/context-menu.d.ts +3 -0
  289. package/types/modules/mind-map/modules/control-panel.d.ts +3 -0
  290. package/types/modules/mind-map/modules/custom-resize-action.d.ts +23 -0
  291. package/types/modules/mind-map/options.d.ts +27 -0
  292. package/types/ui/icons.config.d.ts +40 -0
  293. package/types/utils/merge.d.ts +7 -0
  294. package/LICENSE +0 -21
  295. package/dist/es/config/editor.config.es.js +0 -85
  296. package/dist/es/config/editor.config.es.js.map +0 -1
  297. package/dist/es/config/editor.utils.es.js.map +0 -1
  298. package/dist/es/config/i18n/en-us.es.js +0 -129
  299. package/dist/es/config/i18n/en-us.es.js.map +0 -1
  300. package/dist/es/config/i18n/zh-cn.es.js +0 -129
  301. package/dist/es/config/i18n/zh-cn.es.js.map +0 -1
  302. package/dist/es/config/index.es.js +0 -65
  303. package/dist/es/config/index.es.js.map +0 -1
  304. package/dist/es/core/fluent-editor.es.js.map +0 -1
  305. package/dist/es/fluent-editor.es.js +0 -84
  306. package/dist/es/fluent-editor.es.js.map +0 -1
  307. package/dist/es/formats/soft-break.es.js.map +0 -1
  308. package/dist/es/formats/video.es.js.map +0 -1
  309. package/dist/es/index.es.js +0 -104
  310. package/dist/es/index.es.js.map +0 -1
  311. package/dist/es/modules/ai/constants.es.js.map +0 -1
  312. package/dist/es/modules/ai/index.es.js +0 -670
  313. package/dist/es/modules/ai/index.es.js.map +0 -1
  314. package/dist/es/modules/collaborative-editing/awareness/awareness.es.js +0 -93
  315. package/dist/es/modules/collaborative-editing/awareness/awareness.es.js.map +0 -1
  316. package/dist/es/modules/collaborative-editing/awareness/y-indexeddb.es.js +0 -12
  317. package/dist/es/modules/collaborative-editing/awareness/y-indexeddb.es.js.map +0 -1
  318. package/dist/es/modules/collaborative-editing/collaborative-editing.es.js +0 -105
  319. package/dist/es/modules/collaborative-editing/collaborative-editing.es.js.map +0 -1
  320. package/dist/es/modules/collaborative-editing/module.es.js.map +0 -1
  321. package/dist/es/modules/collaborative-editing/provider/providerRegistry.es.js.map +0 -1
  322. package/dist/es/modules/collaborative-editing/provider/webrtc.es.js +0 -99
  323. package/dist/es/modules/collaborative-editing/provider/webrtc.es.js.map +0 -1
  324. package/dist/es/modules/collaborative-editing/provider/websocket.es.js +0 -111
  325. package/dist/es/modules/collaborative-editing/provider/websocket.es.js.map +0 -1
  326. package/dist/es/modules/counter.es.js.map +0 -1
  327. package/dist/es/modules/custom-clipboard.es.js.map +0 -1
  328. package/dist/es/modules/custom-image/actions/action.es.js.map +0 -1
  329. package/dist/es/modules/custom-image/actions/custom-resize-action.es.js.map +0 -1
  330. package/dist/es/modules/custom-image/actions/delete-action.es.js.map +0 -1
  331. package/dist/es/modules/custom-image/actions/image-toolbar-buttons.es.js +0 -137
  332. package/dist/es/modules/custom-image/actions/image-toolbar-buttons.es.js.map +0 -1
  333. package/dist/es/modules/custom-image/actions/toolbar-action.es.js.map +0 -1
  334. package/dist/es/modules/custom-image/actions/toolbar.es.js.map +0 -1
  335. package/dist/es/modules/custom-image/blot-formatter.es.js +0 -140
  336. package/dist/es/modules/custom-image/blot-formatter.es.js.map +0 -1
  337. package/dist/es/modules/custom-image/image.es.js.map +0 -1
  338. package/dist/es/modules/custom-image/options.es.js.map +0 -1
  339. package/dist/es/modules/custom-image/specs/blot-spec.es.js.map +0 -1
  340. package/dist/es/modules/custom-image/specs/custom-image-spec.es.js.map +0 -1
  341. package/dist/es/modules/custom-image/specs/image-spec.es.js.map +0 -1
  342. package/dist/es/modules/custom-uploader.es.js.map +0 -1
  343. package/dist/es/modules/divider.es.js.map +0 -1
  344. package/dist/es/modules/emoji.es.js +0 -167
  345. package/dist/es/modules/emoji.es.js.map +0 -1
  346. package/dist/es/modules/file/formats/file.es.js.map +0 -1
  347. package/dist/es/modules/file/modules/file-bar.es.js.map +0 -1
  348. package/dist/es/modules/file/modules/file-module.es.js.map +0 -1
  349. package/dist/es/modules/i18n.es.js.map +0 -1
  350. package/dist/es/modules/index.es.js +0 -27
  351. package/dist/es/modules/index.es.js.map +0 -1
  352. package/dist/es/modules/link/formats/link.es.js.map +0 -1
  353. package/dist/es/modules/link/modules/tooltip.es.js.map +0 -1
  354. package/dist/es/modules/mathlive/formats.es.js.map +0 -1
  355. package/dist/es/modules/mathlive/module.es.js.map +0 -1
  356. package/dist/es/modules/mathlive/tooltip.es.js.map +0 -1
  357. package/dist/es/modules/mention/mention-link.es.js.map +0 -1
  358. package/dist/es/modules/mention/mention.es.js.map +0 -1
  359. package/dist/es/modules/shortcut-key/index.es.js +0 -229
  360. package/dist/es/modules/shortcut-key/index.es.js.map +0 -1
  361. package/dist/es/modules/syntax.es.js.map +0 -1
  362. package/dist/es/modules/table-up/index.es.js.map +0 -1
  363. package/dist/es/modules/toolbar/better-picker.es.js.map +0 -1
  364. package/dist/es/modules/toolbar/better-toolbar.es.js.map +0 -1
  365. package/dist/es/modules/toolbar/toolbar-tip.es.js.map +0 -1
  366. package/dist/es/themes/snow.es.js.map +0 -1
  367. package/dist/es/tools/format-painter.es.js.map +0 -1
  368. package/dist/es/tools/fullscreen.es.js.map +0 -1
  369. package/dist/es/tools/screenshot.es.js.map +0 -1
  370. package/dist/es/ui/icons.config.es.js +0 -365
  371. package/dist/es/ui/icons.config.es.js.map +0 -1
  372. package/dist/es/ui/icons.es.js +0 -50
  373. package/dist/es/ui/icons.es.js.map +0 -1
  374. package/dist/es/utils/debounce.es.js.map +0 -1
  375. package/dist/es/utils/image.es.js.map +0 -1
  376. package/dist/es/utils/is.es.js.map +0 -1
  377. package/dist/es/utils/method.es.js.map +0 -1
  378. package/dist/es/utils/scroll-lock.es.js.map +0 -1
  379. package/dist/lib/config/editor.config.cjs.js +0 -85
  380. package/dist/lib/config/editor.config.cjs.js.map +0 -1
  381. package/dist/lib/config/editor.utils.cjs.js.map +0 -1
  382. package/dist/lib/config/i18n/en-us.cjs.js +0 -129
  383. package/dist/lib/config/i18n/en-us.cjs.js.map +0 -1
  384. package/dist/lib/config/i18n/zh-cn.cjs.js +0 -129
  385. package/dist/lib/config/i18n/zh-cn.cjs.js.map +0 -1
  386. package/dist/lib/config/index.cjs.js +0 -64
  387. package/dist/lib/config/index.cjs.js.map +0 -1
  388. package/dist/lib/core/fluent-editor.cjs.js.map +0 -1
  389. package/dist/lib/fluent-editor.cjs.js +0 -84
  390. package/dist/lib/fluent-editor.cjs.js.map +0 -1
  391. package/dist/lib/formats/soft-break.cjs.js.map +0 -1
  392. package/dist/lib/formats/video.cjs.js.map +0 -1
  393. package/dist/lib/index.cjs.js +0 -125
  394. package/dist/lib/index.cjs.js.map +0 -1
  395. package/dist/lib/modules/ai/constants.cjs.js.map +0 -1
  396. package/dist/lib/modules/ai/index.cjs.js.map +0 -1
  397. package/dist/lib/modules/collaborative-editing/awareness/awareness.cjs.js +0 -110
  398. package/dist/lib/modules/collaborative-editing/awareness/awareness.cjs.js.map +0 -1
  399. package/dist/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js +0 -12
  400. package/dist/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js.map +0 -1
  401. package/dist/lib/modules/collaborative-editing/collaborative-editing.cjs.js +0 -122
  402. package/dist/lib/modules/collaborative-editing/collaborative-editing.cjs.js.map +0 -1
  403. package/dist/lib/modules/collaborative-editing/module.cjs.js.map +0 -1
  404. package/dist/lib/modules/collaborative-editing/provider/providerRegistry.cjs.js.map +0 -1
  405. package/dist/lib/modules/collaborative-editing/provider/webrtc.cjs.js +0 -116
  406. package/dist/lib/modules/collaborative-editing/provider/webrtc.cjs.js.map +0 -1
  407. package/dist/lib/modules/collaborative-editing/provider/websocket.cjs.js +0 -128
  408. package/dist/lib/modules/collaborative-editing/provider/websocket.cjs.js.map +0 -1
  409. package/dist/lib/modules/counter.cjs.js.map +0 -1
  410. package/dist/lib/modules/custom-clipboard.cjs.js.map +0 -1
  411. package/dist/lib/modules/custom-image/actions/action.cjs.js.map +0 -1
  412. package/dist/lib/modules/custom-image/actions/custom-resize-action.cjs.js.map +0 -1
  413. package/dist/lib/modules/custom-image/actions/delete-action.cjs.js.map +0 -1
  414. package/dist/lib/modules/custom-image/actions/image-toolbar-buttons.cjs.js.map +0 -1
  415. package/dist/lib/modules/custom-image/actions/toolbar-action.cjs.js.map +0 -1
  416. package/dist/lib/modules/custom-image/actions/toolbar.cjs.js.map +0 -1
  417. package/dist/lib/modules/custom-image/blot-formatter.cjs.js +0 -140
  418. package/dist/lib/modules/custom-image/blot-formatter.cjs.js.map +0 -1
  419. package/dist/lib/modules/custom-image/image.cjs.js.map +0 -1
  420. package/dist/lib/modules/custom-image/options.cjs.js.map +0 -1
  421. package/dist/lib/modules/custom-image/specs/blot-spec.cjs.js.map +0 -1
  422. package/dist/lib/modules/custom-image/specs/custom-image-spec.cjs.js.map +0 -1
  423. package/dist/lib/modules/custom-image/specs/image-spec.cjs.js.map +0 -1
  424. package/dist/lib/modules/custom-uploader.cjs.js.map +0 -1
  425. package/dist/lib/modules/divider.cjs.js.map +0 -1
  426. package/dist/lib/modules/emoji.cjs.js +0 -167
  427. package/dist/lib/modules/emoji.cjs.js.map +0 -1
  428. package/dist/lib/modules/file/formats/file.cjs.js.map +0 -1
  429. package/dist/lib/modules/file/modules/file-bar.cjs.js.map +0 -1
  430. package/dist/lib/modules/file/modules/file-module.cjs.js.map +0 -1
  431. package/dist/lib/modules/i18n.cjs.js.map +0 -1
  432. package/dist/lib/modules/index.cjs.js +0 -27
  433. package/dist/lib/modules/index.cjs.js.map +0 -1
  434. package/dist/lib/modules/link/formats/link.cjs.js.map +0 -1
  435. package/dist/lib/modules/link/modules/tooltip.cjs.js.map +0 -1
  436. package/dist/lib/modules/mathlive/formats.cjs.js.map +0 -1
  437. package/dist/lib/modules/mathlive/module.cjs.js.map +0 -1
  438. package/dist/lib/modules/mathlive/tooltip.cjs.js.map +0 -1
  439. package/dist/lib/modules/mention/mention-link.cjs.js.map +0 -1
  440. package/dist/lib/modules/mention/mention.cjs.js.map +0 -1
  441. package/dist/lib/modules/shortcut-key/index.cjs.js +0 -229
  442. package/dist/lib/modules/shortcut-key/index.cjs.js.map +0 -1
  443. package/dist/lib/modules/syntax.cjs.js.map +0 -1
  444. package/dist/lib/modules/table-up/index.cjs.js.map +0 -1
  445. package/dist/lib/modules/toolbar/better-picker.cjs.js.map +0 -1
  446. package/dist/lib/modules/toolbar/better-toolbar.cjs.js.map +0 -1
  447. package/dist/lib/modules/toolbar/toolbar-tip.cjs.js.map +0 -1
  448. package/dist/lib/themes/snow.cjs.js.map +0 -1
  449. package/dist/lib/tools/format-painter.cjs.js.map +0 -1
  450. package/dist/lib/tools/fullscreen.cjs.js.map +0 -1
  451. package/dist/lib/tools/screenshot.cjs.js.map +0 -1
  452. package/dist/lib/ui/icons.cjs.js +0 -50
  453. package/dist/lib/ui/icons.cjs.js.map +0 -1
  454. package/dist/lib/ui/icons.config.cjs.js +0 -365
  455. package/dist/lib/ui/icons.config.cjs.js.map +0 -1
  456. package/dist/lib/utils/debounce.cjs.js.map +0 -1
  457. package/dist/lib/utils/image.cjs.js.map +0 -1
  458. package/dist/lib/utils/is.cjs.js.map +0 -1
  459. package/dist/lib/utils/method.cjs.js.map +0 -1
  460. package/dist/lib/utils/scroll-lock.cjs.js.map +0 -1
  461. package/dist/package.json +0 -67
  462. package/dist/style.css +0 -3463
  463. package/dist/types/config/editor.config.d.ts +0 -11
  464. package/dist/types/config/i18n/en-us.d.ts +0 -123
  465. package/dist/types/config/i18n/zh-cn.d.ts +0 -123
  466. package/dist/types/config/types/editor-modules.interface.d.ts +0 -41
  467. package/dist/types/index.d.ts +0 -8
  468. package/dist/types/modules/collaborative-editing/awareness/awareness.d.ts +0 -28
  469. package/dist/types/modules/collaborative-editing/awareness/y-indexeddb.d.ts +0 -2
  470. package/dist/types/modules/collaborative-editing/collaborative-editing.d.ts +0 -24
  471. package/dist/types/modules/collaborative-editing/provider/providerRegistry.d.ts +0 -25
  472. package/dist/types/modules/collaborative-editing/provider/webrtc.d.ts +0 -36
  473. package/dist/types/modules/collaborative-editing/provider/websocket.d.ts +0 -40
  474. package/dist/types/modules/collaborative-editing/types.d.ts +0 -37
  475. package/dist/types/modules/index.d.ts +0 -16
  476. package/dist/types/ui/icons.config.d.ts +0 -38
  477. package/scripts/pre-release.cjs +0 -35
  478. package/src/assets/ai.scss +0 -451
  479. package/src/assets/common/config.scss +0 -4
  480. package/src/assets/common.scss +0 -132
  481. package/src/assets/counter.scss +0 -16
  482. package/src/assets/custom-image.scss +0 -19
  483. package/src/assets/editor.scss +0 -351
  484. package/src/assets/fileBar.scss +0 -107
  485. package/src/assets/font.scss +0 -18
  486. package/src/assets/fullscreen.scss +0 -50
  487. package/src/assets/iconfont/iconfont.ttf +0 -0
  488. package/src/assets/iconfont/iconfont.woff +0 -0
  489. package/src/assets/iconfont/iconfont.woff2 +0 -0
  490. package/src/assets/imageBar.scss +0 -98
  491. package/src/assets/lineHeight.scss +0 -15
  492. package/src/assets/link.scss +0 -120
  493. package/src/assets/mathlive.scss +0 -40
  494. package/src/assets/mention.scss +0 -48
  495. package/src/assets/screenshot.scss +0 -78
  496. package/src/assets/size.scss +0 -11
  497. package/src/assets/style.scss +0 -46
  498. package/src/assets/svgs/align-center.svg +0 -41
  499. package/src/assets/svgs/align-justify.svg +0 -8
  500. package/src/assets/svgs/arrow-down.svg +0 -6
  501. package/src/assets/svgs/background-color.svg +0 -7
  502. package/src/assets/svgs/clean.svg +0 -8
  503. package/src/assets/svgs/code-block.svg +0 -5
  504. package/src/assets/svgs/code.svg +0 -25
  505. package/src/assets/svgs/color.svg +0 -7
  506. package/src/assets/svgs/direction-ltr.svg +0 -8
  507. package/src/assets/svgs/direction-rtl.svg +0 -8
  508. package/src/assets/svgs/divider.svg +0 -4
  509. package/src/assets/svgs/emoji.svg +0 -53
  510. package/src/assets/svgs/file.svg +0 -12
  511. package/src/assets/svgs/format-painter.svg +0 -10
  512. package/src/assets/svgs/formula.svg +0 -6
  513. package/src/assets/svgs/fullscreen.svg +0 -43
  514. package/src/assets/svgs/image.svg +0 -17
  515. package/src/assets/svgs/italic.svg +0 -6
  516. package/src/assets/svgs/link.svg +0 -9
  517. package/src/assets/svgs/list-bullet.svg +0 -16
  518. package/src/assets/svgs/list-ordered.svg +0 -18
  519. package/src/assets/svgs/list-task.svg +0 -5
  520. package/src/assets/svgs/redo.svg +0 -8
  521. package/src/assets/svgs/screenshot.svg +0 -17
  522. package/src/assets/svgs/script-sub.svg +0 -15
  523. package/src/assets/svgs/script-super.svg +0 -15
  524. package/src/assets/svgs/strike.svg +0 -6
  525. package/src/assets/svgs/underline.svg +0 -13
  526. package/src/assets/svgs/undo.svg +0 -8
  527. package/src/assets/svgs/video.svg +0 -10
  528. package/src/assets/tasklist.scss +0 -76
  529. package/src/assets/toolbar.scss +0 -385
  530. package/src/assets/variable.scss +0 -9
  531. package/src/assets/video.scss +0 -5
  532. package/src/attributors/font-size.ts +0 -6
  533. package/src/attributors/font-style.ts +0 -6
  534. package/src/attributors/index.ts +0 -4
  535. package/src/attributors/line-height.ts +0 -6
  536. package/src/attributors/text-indent.ts +0 -6
  537. package/src/config/base64-image.ts +0 -5
  538. package/src/config/editor.config.ts +0 -86
  539. package/src/config/editor.utils.ts +0 -193
  540. package/src/config/i18n/en-us.ts +0 -138
  541. package/src/config/i18n/zh-cn.ts +0 -137
  542. package/src/config/index.ts +0 -44
  543. package/src/config/types/editor-config.interface.ts +0 -16
  544. package/src/config/types/editor-modules.interface.ts +0 -47
  545. package/src/config/types/index.ts +0 -3
  546. package/src/config/types/type.ts +0 -2
  547. package/src/core/fluent-editor.ts +0 -31
  548. package/src/fluent-editor.ts +0 -72
  549. package/src/formats/emoji.ts +0 -10
  550. package/src/formats/index.ts +0 -4
  551. package/src/formats/soft-break.ts +0 -27
  552. package/src/formats/strike.ts +0 -11
  553. package/src/formats/video.ts +0 -53
  554. package/src/index.ts +0 -9
  555. package/src/modules/ai/constants.ts +0 -43
  556. package/src/modules/ai/icons.ts +0 -333
  557. package/src/modules/ai/index.ts +0 -850
  558. package/src/modules/ai/types.ts +0 -18
  559. package/src/modules/collaborative-editing/awareness/awareness.ts +0 -141
  560. package/src/modules/collaborative-editing/awareness/index.ts +0 -2
  561. package/src/modules/collaborative-editing/awareness/y-indexeddb.ts +0 -12
  562. package/src/modules/collaborative-editing/collaborative-editing.ts +0 -115
  563. package/src/modules/collaborative-editing/index.ts +0 -2
  564. package/src/modules/collaborative-editing/module.ts +0 -32
  565. package/src/modules/collaborative-editing/provider/index.ts +0 -3
  566. package/src/modules/collaborative-editing/provider/providerRegistry.ts +0 -57
  567. package/src/modules/collaborative-editing/provider/webrtc.ts +0 -125
  568. package/src/modules/collaborative-editing/provider/websocket.ts +0 -142
  569. package/src/modules/collaborative-editing/types.ts +0 -44
  570. package/src/modules/counter.ts +0 -84
  571. package/src/modules/custom-clipboard.ts +0 -537
  572. package/src/modules/custom-image/actions/action.ts +0 -15
  573. package/src/modules/custom-image/actions/custom-resize-action.ts +0 -207
  574. package/src/modules/custom-image/actions/delete-action.ts +0 -32
  575. package/src/modules/custom-image/actions/image-toolbar-buttons.ts +0 -135
  576. package/src/modules/custom-image/actions/index.ts +0 -6
  577. package/src/modules/custom-image/actions/toolbar-action.ts +0 -32
  578. package/src/modules/custom-image/actions/toolbar.ts +0 -145
  579. package/src/modules/custom-image/blot-formatter.ts +0 -158
  580. package/src/modules/custom-image/image.ts +0 -132
  581. package/src/modules/custom-image/index.ts +0 -4
  582. package/src/modules/custom-image/options.ts +0 -139
  583. package/src/modules/custom-image/specs/blot-spec.ts +0 -30
  584. package/src/modules/custom-image/specs/custom-image-spec.ts +0 -131
  585. package/src/modules/custom-image/specs/image-spec.ts +0 -28
  586. package/src/modules/custom-image/specs/index.ts +0 -3
  587. package/src/modules/custom-uploader.ts +0 -101
  588. package/src/modules/divider.ts +0 -15
  589. package/src/modules/emoji.ts +0 -230
  590. package/src/modules/file/formats/file.ts +0 -61
  591. package/src/modules/file/index.ts +0 -3
  592. package/src/modules/file/modules/file-bar.ts +0 -146
  593. package/src/modules/file/modules/file-module.ts +0 -33
  594. package/src/modules/i18n.ts +0 -66
  595. package/src/modules/index.ts +0 -16
  596. package/src/modules/link/formats/link.ts +0 -43
  597. package/src/modules/link/index.ts +0 -2
  598. package/src/modules/link/modules/tooltip.ts +0 -341
  599. package/src/modules/mathlive/formats.ts +0 -39
  600. package/src/modules/mathlive/index.ts +0 -3
  601. package/src/modules/mathlive/module.ts +0 -37
  602. package/src/modules/mathlive/tooltip.ts +0 -87
  603. package/src/modules/mention/constants.ts +0 -3
  604. package/src/modules/mention/index.ts +0 -2
  605. package/src/modules/mention/mention-link.ts +0 -64
  606. package/src/modules/mention/mention.ts +0 -404
  607. package/src/modules/shortcut-key/index.ts +0 -237
  608. package/src/modules/syntax.ts +0 -35
  609. package/src/modules/table-up/index.ts +0 -83
  610. package/src/modules/toolbar/better-picker.ts +0 -67
  611. package/src/modules/toolbar/better-toolbar.ts +0 -176
  612. package/src/modules/toolbar/index.ts +0 -3
  613. package/src/modules/toolbar/toolbar-tip.ts +0 -142
  614. package/src/themes/snow.ts +0 -309
  615. package/src/tools/format-painter.ts +0 -85
  616. package/src/tools/fullscreen.ts +0 -66
  617. package/src/tools/screenshot.ts +0 -231
  618. package/src/ui/icons.config.ts +0 -361
  619. package/src/ui/icons.ts +0 -89
  620. package/src/utils/debounce.ts +0 -150
  621. package/src/utils/image.ts +0 -22
  622. package/src/utils/is.ts +0 -9
  623. package/src/utils/method.ts +0 -77
  624. package/src/utils/scroll-lock.ts +0 -52
  625. package/tsconfig.json +0 -25
  626. package/vite.config.ts +0 -83
  627. /package/{dist/README.md → README.md} +0 -0
  628. /package/{dist/es → es}/attributors/font-size.es.js +0 -0
  629. /package/{dist/es → es}/attributors/font-size.es.js.map +0 -0
  630. /package/{dist/es → es}/attributors/font-style.es.js +0 -0
  631. /package/{dist/es → es}/attributors/font-style.es.js.map +0 -0
  632. /package/{dist/es → es}/attributors/index.es.js +0 -0
  633. /package/{dist/es → es}/attributors/index.es.js.map +0 -0
  634. /package/{dist/es → es}/attributors/line-height.es.js +0 -0
  635. /package/{dist/es → es}/attributors/line-height.es.js.map +0 -0
  636. /package/{dist/es → es}/attributors/text-indent.es.js +0 -0
  637. /package/{dist/es → es}/attributors/text-indent.es.js.map +0 -0
  638. /package/{dist/es → es}/config/base64-image.es.js +0 -0
  639. /package/{dist/es → es}/config/base64-image.es.js.map +0 -0
  640. /package/{dist/es → es}/config/editor.utils.es.js +0 -0
  641. /package/{dist/es → es}/config/types/editor-config.interface.es.js +0 -0
  642. /package/{dist/es → es}/config/types/editor-config.interface.es.js.map +0 -0
  643. /package/{dist/es → es}/config/types/editor-modules.interface.es.js +0 -0
  644. /package/{dist/es → es}/config/types/editor-modules.interface.es.js.map +0 -0
  645. /package/{dist/es → es}/config/types/index.es.js +0 -0
  646. /package/{dist/es → es}/config/types/index.es.js.map +0 -0
  647. /package/{dist/es → es}/config/types/type.es.js +0 -0
  648. /package/{dist/es → es}/config/types/type.es.js.map +0 -0
  649. /package/{dist/es → es}/core/fluent-editor.es.js +0 -0
  650. /package/{dist/es → es}/formats/emoji.es.js +0 -0
  651. /package/{dist/es → es}/formats/emoji.es.js.map +0 -0
  652. /package/{dist/es → es}/formats/index.es.js +0 -0
  653. /package/{dist/es → es}/formats/index.es.js.map +0 -0
  654. /package/{dist/es → es}/formats/soft-break.es.js +0 -0
  655. /package/{dist/es → es}/formats/strike.es.js +0 -0
  656. /package/{dist/es → es}/formats/strike.es.js.map +0 -0
  657. /package/{dist/es → es}/formats/video.es.js +0 -0
  658. /package/{dist/es → es}/modules/ai/constants.es.js +0 -0
  659. /package/{dist/es → es}/modules/ai/icons.es.js +0 -0
  660. /package/{dist/es → es}/modules/ai/icons.es.js.map +0 -0
  661. /package/{dist/es → es}/modules/collaborative-editing/awareness/index.es.js +0 -0
  662. /package/{dist/es → es}/modules/collaborative-editing/awareness/index.es.js.map +0 -0
  663. /package/{dist/es → es}/modules/collaborative-editing/index.es.js +0 -0
  664. /package/{dist/es → es}/modules/collaborative-editing/index.es.js.map +0 -0
  665. /package/{dist/es → es}/modules/collaborative-editing/module.es.js +0 -0
  666. /package/{dist/es → es}/modules/collaborative-editing/provider/providerRegistry.es.js +0 -0
  667. /package/{dist/es → es}/modules/collaborative-editing/types.es.js +0 -0
  668. /package/{dist/es → es}/modules/collaborative-editing/types.es.js.map +0 -0
  669. /package/{dist/es → es}/modules/counter.es.js +0 -0
  670. /package/{dist/es → es}/modules/custom-clipboard.es.js +0 -0
  671. /package/{dist/es → es}/modules/custom-image/actions/action.es.js +0 -0
  672. /package/{dist/es → es}/modules/custom-image/actions/custom-resize-action.es.js +0 -0
  673. /package/{dist/es → es}/modules/custom-image/actions/delete-action.es.js +0 -0
  674. /package/{dist/es → es}/modules/custom-image/actions/index.es.js +0 -0
  675. /package/{dist/es → es}/modules/custom-image/actions/index.es.js.map +0 -0
  676. /package/{dist/es → es}/modules/custom-image/actions/toolbar-action.es.js +0 -0
  677. /package/{dist/es → es}/modules/custom-image/actions/toolbar.es.js +0 -0
  678. /package/{dist/es → es}/modules/custom-image/image.es.js +0 -0
  679. /package/{dist/es → es}/modules/custom-image/index.es.js +0 -0
  680. /package/{dist/es → es}/modules/custom-image/index.es.js.map +0 -0
  681. /package/{dist/es → es}/modules/custom-image/options.es.js +0 -0
  682. /package/{dist/es → es}/modules/custom-image/specs/blot-spec.es.js +0 -0
  683. /package/{dist/es → es}/modules/custom-image/specs/custom-image-spec.es.js +0 -0
  684. /package/{dist/es → es}/modules/custom-image/specs/image-spec.es.js +0 -0
  685. /package/{dist/es → es}/modules/custom-image/specs/index.es.js +0 -0
  686. /package/{dist/es → es}/modules/custom-image/specs/index.es.js.map +0 -0
  687. /package/{dist/es → es}/modules/custom-uploader.es.js +0 -0
  688. /package/{dist/es → es}/modules/divider.es.js +0 -0
  689. /package/{dist/es → es}/modules/file/formats/file.es.js +0 -0
  690. /package/{dist/es → es}/modules/file/index.es.js +0 -0
  691. /package/{dist/es → es}/modules/file/index.es.js.map +0 -0
  692. /package/{dist/es → es}/modules/file/modules/file-bar.es.js +0 -0
  693. /package/{dist/es → es}/modules/file/modules/file-module.es.js +0 -0
  694. /package/{dist/es → es}/modules/i18n.es.js +0 -0
  695. /package/{dist/es → es}/modules/link/formats/link.es.js +0 -0
  696. /package/{dist/es → es}/modules/link/index.es.js +0 -0
  697. /package/{dist/es → es}/modules/link/index.es.js.map +0 -0
  698. /package/{dist/es → es}/modules/link/modules/tooltip.es.js +0 -0
  699. /package/{dist/es → es}/modules/mathlive/formats.es.js +0 -0
  700. /package/{dist/es → es}/modules/mathlive/index.es.js +0 -0
  701. /package/{dist/es → es}/modules/mathlive/index.es.js.map +0 -0
  702. /package/{dist/es → es}/modules/mathlive/module.es.js +0 -0
  703. /package/{dist/es → es}/modules/mathlive/tooltip.es.js +0 -0
  704. /package/{dist/es → es}/modules/mention/constants.es.js +0 -0
  705. /package/{dist/es → es}/modules/mention/constants.es.js.map +0 -0
  706. /package/{dist/es → es}/modules/mention/index.es.js +0 -0
  707. /package/{dist/es → es}/modules/mention/index.es.js.map +0 -0
  708. /package/{dist/es → es}/modules/mention/mention-link.es.js +0 -0
  709. /package/{dist/es → es}/modules/mention/mention.es.js +0 -0
  710. /package/{dist/es → es}/modules/syntax.es.js +0 -0
  711. /package/{dist/es → es}/modules/table-up/index.es.js +0 -0
  712. /package/{dist/es → es}/modules/toolbar/better-picker.es.js +0 -0
  713. /package/{dist/es → es}/modules/toolbar/better-toolbar.es.js +0 -0
  714. /package/{dist/es → es}/modules/toolbar/index.es.js +0 -0
  715. /package/{dist/es → es}/modules/toolbar/index.es.js.map +0 -0
  716. /package/{dist/es → es}/modules/toolbar/toolbar-tip.es.js +0 -0
  717. /package/{dist/es → es}/themes/snow.es.js +0 -0
  718. /package/{dist/es → es}/tools/format-painter.es.js +0 -0
  719. /package/{dist/es → es}/tools/fullscreen.es.js +0 -0
  720. /package/{dist/es → es}/tools/screenshot.es.js +0 -0
  721. /package/{dist/es → es}/utils/debounce.es.js +0 -0
  722. /package/{dist/es → es}/utils/image.es.js +0 -0
  723. /package/{dist/es → es}/utils/is.es.js +0 -0
  724. /package/{dist/es → es}/utils/method.es.js +0 -0
  725. /package/{dist/es → es}/utils/scroll-lock.es.js +0 -0
  726. /package/{dist/lib → lib}/attributors/font-size.cjs.js +0 -0
  727. /package/{dist/lib → lib}/attributors/font-size.cjs.js.map +0 -0
  728. /package/{dist/lib → lib}/attributors/font-style.cjs.js +0 -0
  729. /package/{dist/lib → lib}/attributors/font-style.cjs.js.map +0 -0
  730. /package/{dist/lib → lib}/attributors/index.cjs.js +0 -0
  731. /package/{dist/lib → lib}/attributors/index.cjs.js.map +0 -0
  732. /package/{dist/lib → lib}/attributors/line-height.cjs.js +0 -0
  733. /package/{dist/lib → lib}/attributors/line-height.cjs.js.map +0 -0
  734. /package/{dist/lib → lib}/attributors/text-indent.cjs.js +0 -0
  735. /package/{dist/lib → lib}/attributors/text-indent.cjs.js.map +0 -0
  736. /package/{dist/lib → lib}/config/base64-image.cjs.js +0 -0
  737. /package/{dist/lib → lib}/config/base64-image.cjs.js.map +0 -0
  738. /package/{dist/lib → lib}/config/editor.utils.cjs.js +0 -0
  739. /package/{dist/lib → lib}/config/types/editor-config.interface.cjs.js +0 -0
  740. /package/{dist/lib → lib}/config/types/editor-config.interface.cjs.js.map +0 -0
  741. /package/{dist/lib → lib}/config/types/editor-modules.interface.cjs.js +0 -0
  742. /package/{dist/lib → lib}/config/types/editor-modules.interface.cjs.js.map +0 -0
  743. /package/{dist/lib → lib}/config/types/index.cjs.js +0 -0
  744. /package/{dist/lib → lib}/config/types/index.cjs.js.map +0 -0
  745. /package/{dist/lib → lib}/config/types/type.cjs.js +0 -0
  746. /package/{dist/lib → lib}/config/types/type.cjs.js.map +0 -0
  747. /package/{dist/lib → lib}/core/fluent-editor.cjs.js +0 -0
  748. /package/{dist/lib → lib}/formats/emoji.cjs.js +0 -0
  749. /package/{dist/lib → lib}/formats/emoji.cjs.js.map +0 -0
  750. /package/{dist/lib → lib}/formats/index.cjs.js +0 -0
  751. /package/{dist/lib → lib}/formats/index.cjs.js.map +0 -0
  752. /package/{dist/lib → lib}/formats/soft-break.cjs.js +0 -0
  753. /package/{dist/lib → lib}/formats/strike.cjs.js +0 -0
  754. /package/{dist/lib → lib}/formats/strike.cjs.js.map +0 -0
  755. /package/{dist/lib → lib}/formats/video.cjs.js +0 -0
  756. /package/{dist/lib → lib}/modules/ai/constants.cjs.js +0 -0
  757. /package/{dist/lib → lib}/modules/ai/icons.cjs.js +0 -0
  758. /package/{dist/lib → lib}/modules/ai/icons.cjs.js.map +0 -0
  759. /package/{dist/lib → lib}/modules/ai/index.cjs.js +0 -0
  760. /package/{dist/lib → lib}/modules/collaborative-editing/awareness/index.cjs.js +0 -0
  761. /package/{dist/lib → lib}/modules/collaborative-editing/awareness/index.cjs.js.map +0 -0
  762. /package/{dist/lib → lib}/modules/collaborative-editing/index.cjs.js +0 -0
  763. /package/{dist/lib → lib}/modules/collaborative-editing/index.cjs.js.map +0 -0
  764. /package/{dist/lib → lib}/modules/collaborative-editing/module.cjs.js +0 -0
  765. /package/{dist/lib → lib}/modules/collaborative-editing/provider/providerRegistry.cjs.js +0 -0
  766. /package/{dist/lib → lib}/modules/collaborative-editing/types.cjs.js +0 -0
  767. /package/{dist/lib → lib}/modules/collaborative-editing/types.cjs.js.map +0 -0
  768. /package/{dist/lib → lib}/modules/counter.cjs.js +0 -0
  769. /package/{dist/lib → lib}/modules/custom-clipboard.cjs.js +0 -0
  770. /package/{dist/lib → lib}/modules/custom-image/actions/action.cjs.js +0 -0
  771. /package/{dist/lib → lib}/modules/custom-image/actions/custom-resize-action.cjs.js +0 -0
  772. /package/{dist/lib → lib}/modules/custom-image/actions/delete-action.cjs.js +0 -0
  773. /package/{dist/lib → lib}/modules/custom-image/actions/image-toolbar-buttons.cjs.js +0 -0
  774. /package/{dist/lib → lib}/modules/custom-image/actions/index.cjs.js +0 -0
  775. /package/{dist/lib → lib}/modules/custom-image/actions/index.cjs.js.map +0 -0
  776. /package/{dist/lib → lib}/modules/custom-image/actions/toolbar-action.cjs.js +0 -0
  777. /package/{dist/lib → lib}/modules/custom-image/actions/toolbar.cjs.js +0 -0
  778. /package/{dist/lib → lib}/modules/custom-image/image.cjs.js +0 -0
  779. /package/{dist/lib → lib}/modules/custom-image/index.cjs.js +0 -0
  780. /package/{dist/lib → lib}/modules/custom-image/index.cjs.js.map +0 -0
  781. /package/{dist/lib → lib}/modules/custom-image/options.cjs.js +0 -0
  782. /package/{dist/lib → lib}/modules/custom-image/specs/blot-spec.cjs.js +0 -0
  783. /package/{dist/lib → lib}/modules/custom-image/specs/custom-image-spec.cjs.js +0 -0
  784. /package/{dist/lib → lib}/modules/custom-image/specs/image-spec.cjs.js +0 -0
  785. /package/{dist/lib → lib}/modules/custom-image/specs/index.cjs.js +0 -0
  786. /package/{dist/lib → lib}/modules/custom-image/specs/index.cjs.js.map +0 -0
  787. /package/{dist/lib → lib}/modules/custom-uploader.cjs.js +0 -0
  788. /package/{dist/lib → lib}/modules/divider.cjs.js +0 -0
  789. /package/{dist/lib → lib}/modules/file/formats/file.cjs.js +0 -0
  790. /package/{dist/lib → lib}/modules/file/index.cjs.js +0 -0
  791. /package/{dist/lib → lib}/modules/file/index.cjs.js.map +0 -0
  792. /package/{dist/lib → lib}/modules/file/modules/file-bar.cjs.js +0 -0
  793. /package/{dist/lib → lib}/modules/file/modules/file-module.cjs.js +0 -0
  794. /package/{dist/lib → lib}/modules/i18n.cjs.js +0 -0
  795. /package/{dist/lib → lib}/modules/link/formats/link.cjs.js +0 -0
  796. /package/{dist/lib → lib}/modules/link/index.cjs.js +0 -0
  797. /package/{dist/lib → lib}/modules/link/index.cjs.js.map +0 -0
  798. /package/{dist/lib → lib}/modules/link/modules/tooltip.cjs.js +0 -0
  799. /package/{dist/lib → lib}/modules/mathlive/formats.cjs.js +0 -0
  800. /package/{dist/lib → lib}/modules/mathlive/index.cjs.js +0 -0
  801. /package/{dist/lib → lib}/modules/mathlive/index.cjs.js.map +0 -0
  802. /package/{dist/lib → lib}/modules/mathlive/module.cjs.js +0 -0
  803. /package/{dist/lib → lib}/modules/mathlive/tooltip.cjs.js +0 -0
  804. /package/{dist/lib → lib}/modules/mention/constants.cjs.js +0 -0
  805. /package/{dist/lib → lib}/modules/mention/constants.cjs.js.map +0 -0
  806. /package/{dist/lib → lib}/modules/mention/index.cjs.js +0 -0
  807. /package/{dist/lib → lib}/modules/mention/index.cjs.js.map +0 -0
  808. /package/{dist/lib → lib}/modules/mention/mention-link.cjs.js +0 -0
  809. /package/{dist/lib → lib}/modules/mention/mention.cjs.js +0 -0
  810. /package/{dist/lib → lib}/modules/syntax.cjs.js +0 -0
  811. /package/{dist/lib → lib}/modules/table-up/index.cjs.js +0 -0
  812. /package/{dist/lib → lib}/modules/toolbar/better-picker.cjs.js +0 -0
  813. /package/{dist/lib → lib}/modules/toolbar/better-toolbar.cjs.js +0 -0
  814. /package/{dist/lib → lib}/modules/toolbar/index.cjs.js +0 -0
  815. /package/{dist/lib → lib}/modules/toolbar/index.cjs.js.map +0 -0
  816. /package/{dist/lib → lib}/modules/toolbar/toolbar-tip.cjs.js +0 -0
  817. /package/{dist/lib → lib}/themes/snow.cjs.js +0 -0
  818. /package/{dist/lib → lib}/tools/format-painter.cjs.js +0 -0
  819. /package/{dist/lib → lib}/tools/fullscreen.cjs.js +0 -0
  820. /package/{dist/lib → lib}/tools/screenshot.cjs.js +0 -0
  821. /package/{dist/lib → lib}/utils/debounce.cjs.js +0 -0
  822. /package/{dist/lib → lib}/utils/image.cjs.js +0 -0
  823. /package/{dist/lib → lib}/utils/is.cjs.js +0 -0
  824. /package/{dist/lib → lib}/utils/method.cjs.js +0 -0
  825. /package/{dist/lib → lib}/utils/scroll-lock.cjs.js +0 -0
  826. /package/{dist/types → types}/attributors/font-size.d.ts +0 -0
  827. /package/{dist/types → types}/attributors/font-style.d.ts +0 -0
  828. /package/{dist/types → types}/attributors/index.d.ts +0 -0
  829. /package/{dist/types → types}/attributors/line-height.d.ts +0 -0
  830. /package/{dist/types → types}/attributors/text-indent.d.ts +0 -0
  831. /package/{dist/types → types}/config/base64-image.d.ts +0 -0
  832. /package/{dist/types → types}/config/editor.utils.d.ts +0 -0
  833. /package/{dist/types → types}/config/index.d.ts +0 -0
  834. /package/{dist/types → types}/config/types/editor-config.interface.d.ts +0 -0
  835. /package/{dist/types → types}/config/types/index.d.ts +0 -0
  836. /package/{dist/types → types}/config/types/type.d.ts +0 -0
  837. /package/{dist/types → types}/core/fluent-editor.d.ts +0 -0
  838. /package/{dist/types → types}/fluent-editor.d.ts +0 -0
  839. /package/{dist/types → types}/formats/emoji.d.ts +0 -0
  840. /package/{dist/types → types}/formats/index.d.ts +0 -0
  841. /package/{dist/types → types}/formats/soft-break.d.ts +0 -0
  842. /package/{dist/types → types}/formats/strike.d.ts +0 -0
  843. /package/{dist/types → types}/formats/video.d.ts +0 -0
  844. /package/{dist/types → types}/modules/ai/constants.d.ts +0 -0
  845. /package/{dist/types → types}/modules/ai/icons.d.ts +0 -0
  846. /package/{dist/types → types}/modules/ai/index.d.ts +0 -0
  847. /package/{dist/types → types}/modules/ai/types.d.ts +0 -0
  848. /package/{dist/types → types}/modules/collaborative-editing/awareness/index.d.ts +0 -0
  849. /package/{dist/types → types}/modules/collaborative-editing/index.d.ts +0 -0
  850. /package/{dist/types → types}/modules/collaborative-editing/module.d.ts +0 -0
  851. /package/{dist/types → types}/modules/collaborative-editing/provider/index.d.ts +0 -0
  852. /package/{dist/types → types}/modules/counter.d.ts +0 -0
  853. /package/{dist/types → types}/modules/custom-clipboard.d.ts +0 -0
  854. /package/{dist/types → types}/modules/custom-image/actions/action.d.ts +0 -0
  855. /package/{dist/types → types}/modules/custom-image/actions/custom-resize-action.d.ts +0 -0
  856. /package/{dist/types → types}/modules/custom-image/actions/delete-action.d.ts +0 -0
  857. /package/{dist/types → types}/modules/custom-image/actions/image-toolbar-buttons.d.ts +0 -0
  858. /package/{dist/types → types}/modules/custom-image/actions/index.d.ts +0 -0
  859. /package/{dist/types → types}/modules/custom-image/actions/toolbar-action.d.ts +0 -0
  860. /package/{dist/types → types}/modules/custom-image/actions/toolbar.d.ts +0 -0
  861. /package/{dist/types → types}/modules/custom-image/blot-formatter.d.ts +0 -0
  862. /package/{dist/types → types}/modules/custom-image/image.d.ts +0 -0
  863. /package/{dist/types → types}/modules/custom-image/index.d.ts +0 -0
  864. /package/{dist/types → types}/modules/custom-image/options.d.ts +0 -0
  865. /package/{dist/types → types}/modules/custom-image/specs/blot-spec.d.ts +0 -0
  866. /package/{dist/types → types}/modules/custom-image/specs/custom-image-spec.d.ts +0 -0
  867. /package/{dist/types → types}/modules/custom-image/specs/image-spec.d.ts +0 -0
  868. /package/{dist/types → types}/modules/custom-image/specs/index.d.ts +0 -0
  869. /package/{dist/types → types}/modules/custom-uploader.d.ts +0 -0
  870. /package/{dist/types → types}/modules/divider.d.ts +0 -0
  871. /package/{dist/types → types}/modules/emoji.d.ts +0 -0
  872. /package/{dist/types → types}/modules/file/formats/file.d.ts +0 -0
  873. /package/{dist/types → types}/modules/file/index.d.ts +0 -0
  874. /package/{dist/types → types}/modules/file/modules/file-bar.d.ts +0 -0
  875. /package/{dist/types → types}/modules/file/modules/file-module.d.ts +0 -0
  876. /package/{dist/types → types}/modules/i18n.d.ts +0 -0
  877. /package/{dist/types → types}/modules/link/formats/link.d.ts +0 -0
  878. /package/{dist/types → types}/modules/link/index.d.ts +0 -0
  879. /package/{dist/types → types}/modules/link/modules/tooltip.d.ts +0 -0
  880. /package/{dist/types → types}/modules/mathlive/formats.d.ts +0 -0
  881. /package/{dist/types → types}/modules/mathlive/index.d.ts +0 -0
  882. /package/{dist/types → types}/modules/mathlive/module.d.ts +0 -0
  883. /package/{dist/types → types}/modules/mathlive/tooltip.d.ts +0 -0
  884. /package/{dist/types → types}/modules/mention/constants.d.ts +0 -0
  885. /package/{dist/types → types}/modules/mention/index.d.ts +0 -0
  886. /package/{dist/types → types}/modules/mention/mention-link.d.ts +0 -0
  887. /package/{dist/types → types}/modules/mention/mention.d.ts +0 -0
  888. /package/{dist/types → types}/modules/shortcut-key/index.d.ts +0 -0
  889. /package/{dist/types → types}/modules/syntax.d.ts +0 -0
  890. /package/{dist/types → types}/modules/table-up/index.d.ts +0 -0
  891. /package/{dist/types → types}/modules/toolbar/better-picker.d.ts +0 -0
  892. /package/{dist/types → types}/modules/toolbar/better-toolbar.d.ts +0 -0
  893. /package/{dist/types → types}/modules/toolbar/index.d.ts +0 -0
  894. /package/{dist/types → types}/modules/toolbar/toolbar-tip.d.ts +0 -0
  895. /package/{dist/types → types}/themes/snow.d.ts +0 -0
  896. /package/{dist/types → types}/tools/format-painter.d.ts +0 -0
  897. /package/{dist/types → types}/tools/fullscreen.d.ts +0 -0
  898. /package/{dist/types → types}/tools/screenshot.d.ts +0 -0
  899. /package/{dist/types → types}/ui/icons.d.ts +0 -0
  900. /package/{dist/types → types}/utils/debounce.d.ts +0 -0
  901. /package/{dist/types → types}/utils/image.d.ts +0 -0
  902. /package/{dist/types → types}/utils/is.d.ts +0 -0
  903. /package/{dist/types → types}/utils/method.d.ts +0 -0
  904. /package/{dist/types → types}/utils/scroll-lock.d.ts +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"blot-spec.cjs.js","sources":["../../../../../src/modules/custom-image/specs/blot-spec.ts"],"sourcesContent":["import type { BlotFormatter } from '../blot-formatter'\nimport { CustomResizeAction, DeleteAction, ImageToolbarAction } from '../actions'\n\nexport class BlotSpec {\n formatter: BlotFormatter\n\n constructor(formatter: BlotFormatter) {\n this.formatter = formatter\n }\n\n init(): void {}\n\n getActions() {\n return [ImageToolbarAction, CustomResizeAction, DeleteAction]\n }\n\n getTargetElement(): HTMLElement | null {\n return null\n }\n\n getOverlayElement() {\n return this.getTargetElement()\n }\n\n setSelection(): void {\n this.formatter.quill.setSelection(null)\n }\n\n onHide() {}\n}\n"],"names":["ImageToolbarAction","CustomResizeAction","DeleteAction"],"mappings":";;;;;;;;;AAGO,MAAM,SAAS;AAAA,EAGpB,YAAY,WAA0B;AAFtC;AAGE,SAAK,YAAY;AAAA,EAAA;AAAA,EAGnB,OAAa;AAAA,EAAA;AAAA,EAEb,aAAa;AACJ,WAAA,CAACA,cAAAA,oBAAoBC,mBAAA,oBAAoBC,yBAAY;AAAA,EAAA;AAAA,EAG9D,mBAAuC;AAC9B,WAAA;AAAA,EAAA;AAAA,EAGT,oBAAoB;AAClB,WAAO,KAAK,iBAAiB;AAAA,EAAA;AAAA,EAG/B,eAAqB;AACd,SAAA,UAAU,MAAM,aAAa,IAAI;AAAA,EAAA;AAAA,EAGxC,SAAS;AAAA,EAAA;AACX;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"custom-image-spec.cjs.js","sources":["../../../../../src/modules/custom-image/specs/custom-image-spec.ts"],"sourcesContent":["import type { BlotFormatter } from '../blot-formatter'\nimport { isInside } from '../../../config/editor.utils'\nimport { ImageSpec } from './image-spec'\n\nexport class CustomImageSpec extends ImageSpec {\n editorElem: HTMLElement | undefined\n observer: any\n oldRootScrollTop: number\n\n constructor(formatter: BlotFormatter) {\n super(formatter)\n this.formatter = formatter\n this.oldRootScrollTop = this.formatter.quill.root.scrollTop\n this.editorElem = this.formatter.quill.container\n this.formatter.quill.root.addEventListener('scroll', this.handleQuillRootScroll.bind(this))\n }\n\n handleQuillRootScroll() {\n if (this.formatter.overlay) {\n this.formatter.overlay.style.marginTop = `${this.oldRootScrollTop - this.formatter.quill.root.scrollTop}px`\n }\n }\n\n init(): void {\n this.editorElem.addEventListener('mouseover', this.imageMouseOver.bind(this))\n this.editorElem.addEventListener('mouseout', this.imageMouseout)\n\n super.init()\n }\n\n imageMouseOver(event) {\n const target = event.target\n const isBlotFormatter = target?.classList?.contains('blot-formatter__overlay')\n if (target.nodeName === 'IMG' || isBlotFormatter) {\n // this.addImagePreviewOverlay(event);\n }\n }\n\n imageMouseout = (event) => {\n if (event.target.nodeName === 'IMG'\n || event.target.classList.contains('blot-formatter__overlay')) {\n const imgDom = event.target\n if (!isInside(event, imgDom)) {\n this.removeImagePreviewOverlay()\n }\n }\n }\n\n addImagePreviewOverlay(event) {\n const target = event.target\n const {\n left: imgLeft,\n width: imgWidth,\n } = target.getBoundingClientRect()\n // fix: 解决 ql-container 容器设置 calc(100vh - 180px) 这样的视窗相对单位时,滚动视窗导致图片相对视窗的 top 相应改变,从而导致图片预览按钮的位置显示错误\n const imgTop = target.getBoundingClientRect().top + this.formatter.quill.container.scrollTop\n\n const {\n left: editorLeft,\n top: editorTop,\n } = event.currentTarget.getBoundingClientRect()\n\n const imgRelativeLeft = imgLeft - editorLeft\n const imgRelativeTop = imgTop - editorTop\n\n const maxmizeWidth = 24\n const maxmizePadding = 15\n const previewLeft = imgRelativeLeft + imgWidth - maxmizeWidth - maxmizePadding\n const previewTop = imgRelativeTop + maxmizePadding\n\n const previewStyle = `\n left: ${previewLeft}px;\n top: ${previewTop}px;\n width: ${maxmizeWidth}px;\n `\n const imageSrc = target.src || target.getAttribute('data-image')\n const imageId = target.getAttribute('data-image-id')\n\n const previewDom = event.currentTarget.querySelector('.image-preview__overlay')\n if (!previewDom) {\n event.currentTarget.insertAdjacentHTML('beforeend', `\n <div class=\"image-preview__overlay\" style=\"${previewStyle}\">\n <i class=\"icon-maxmize\" id=\"btn-image-preview\" data-image-id=\"${imageId}\"\n data-image=\"${imageSrc}\"></i>\n </div>\n `)\n }\n }\n\n removeImagePreviewOverlay() {\n const previewDom = this.editorElem.querySelector('.image-preview__overlay')\n if (previewDom) {\n previewDom.parentNode.removeChild(previewDom)\n }\n }\n\n onHide() {\n this.removeImagePreviewOverlay()\n super.onHide()\n }\n\n resetOverlayMarginTop() {\n if (this.formatter.overlay) {\n this.formatter.overlay.style.marginTop = '0px'\n }\n }\n\n onClick = (event: MouseEvent) => {\n const el = event.target\n const isReadonly = this.formatter.quill.options.readOnly\n if (!(el instanceof HTMLElement) || el.tagName !== 'IMG' || isReadonly) {\n return\n }\n\n this.img = el as HTMLImageElement\n this.oldRootScrollTop = this.formatter.quill.root.scrollTop\n this.resetOverlayMarginTop()\n this.formatter.show(this)\n\n // 通过图片dom获取图片选区用以复制,设置 current-select-img::selection 取消选区背景\n const imageDom = this.formatter.currentSpec?.getTargetElement()\n if (imageDom) {\n imageDom.classList.add('current-select-img')\n const quill = this.formatter.quill\n const imgBlot = quill.scroll.find(this.img)\n const index = quill.getIndex(imgBlot)\n const len = imgBlot.length()\n quill.setSelection(index, len)\n }\n }\n}\n"],"names":["ImageSpec","isInside"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-spec.cjs.js","sources":["../../../../../src/modules/custom-image/specs/image-spec.ts"],"sourcesContent":["import { BlotSpec } from './blot-spec'\n\nexport class ImageSpec extends BlotSpec {\n img: HTMLImageElement | null = null\n\n init() {\n this.formatter.quill.root.addEventListener('click', this.onClick)\n }\n\n getTargetElement() {\n return this.img\n }\n\n onHide() {\n this.img = null\n }\n\n onClick = (event: MouseEvent) => {\n const el = event.target\n if (!(el instanceof HTMLElement) || el.tagName !== 'IMG') {\n return\n }\n event.stopPropagation()\n\n this.img = el as HTMLImageElement\n this.formatter.show(this)\n }\n}\n"],"names":["BlotSpec"],"mappings":";;;;;;AAEO,MAAM,kBAAkBA,SAAAA,SAAS;AAAA,EAAjC;AAAA;AACL,+BAA+B;AAc/B,mCAAU,CAAC,UAAsB;AAC/B,YAAM,KAAK,MAAM;AACjB,UAAI,EAAE,cAAc,gBAAgB,GAAG,YAAY,OAAO;AACxD;AAAA,MAAA;AAEF,YAAM,gBAAgB;AAEtB,WAAK,MAAM;AACN,WAAA,UAAU,KAAK,IAAI;AAAA,IAC1B;AAAA;AAAA,EArBA,OAAO;AACL,SAAK,UAAU,MAAM,KAAK,iBAAiB,SAAS,KAAK,OAAO;AAAA,EAAA;AAAA,EAGlE,mBAAmB;AACjB,WAAO,KAAK;AAAA,EAAA;AAAA,EAGd,SAAS;AACP,SAAK,MAAM;AAAA,EAAA;AAaf;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"custom-uploader.cjs.js","sources":["../../../src/modules/custom-uploader.ts"],"sourcesContent":["import type { Range } from 'quill'\r\nimport type TypeUploader from 'quill/modules/uploader'\r\nimport type FluentEditor from '../core/fluent-editor'\r\nimport Quill from 'quill'\r\nimport { isString } from '../utils/is'\r\n\r\nconst Uploader = Quill.import('modules/uploader') as typeof TypeUploader\r\nconst Delta = Quill.import('delta')\r\n\r\ninterface UploaderOptions {\r\n mimetypes: string[]\r\n handler: (this: { quill: Quill }, range: Range, files: File[]) => void\r\n}\r\nexport interface FileUploaderOptions {\r\n mimetypes: string[]\r\n maxSize: number\r\n handler: (this: { quill: FluentEditor }, range: Range, files: File[]) => Promise<(string | false)[]> | (string | false)[]\r\n success: (this: { quill: FluentEditor }, file: File, range: Range) => void\r\n fail: (this: { quill: FluentEditor }, file: File, range: Range) => void\r\n}\r\nexport class FileUploader extends Uploader {\r\n static DEFAULTS = {} as any\r\n // Partial<UploaderOptions> for ts type\r\n declare options: Partial<UploaderOptions> & FileUploaderOptions\r\n constructor(public quill: FluentEditor, options: Partial<FileUploaderOptions>) {\r\n super(quill, options as any)\r\n this.options = this.resolveOptions(options)\r\n // paste handle in clipboard\r\n }\r\n\r\n resolveOptions(options: Partial<FileUploaderOptions> = {}) {\r\n return Object.assign({\r\n mimetypes: ['*'],\r\n maxSize: Number.POSITIVE_INFINITY,\r\n handler(range: Range, files: File[]) {\r\n return files.map(file => URL.createObjectURL(file))\r\n },\r\n success() {},\r\n fail() {},\r\n }, options)\r\n }\r\n\r\n validateFile(file: File) {\r\n return this.options.mimetypes.some(type => (file.type || 'text/plain').match(type.replaceAll('*', '.*'))) && file.size < this.options.maxSize\r\n }\r\n\r\n async getFileUrls(files: File[], range: Range) {\r\n const uploads = files.filter(file => this.validateFile(file))\r\n return this.options.handler.call(this, range, uploads)\r\n }\r\n\r\n async upload(range: Range, files: FileList | File[]) {\r\n const uploads = []\r\n const fails = []\r\n\r\n for (const file of Array.from(files)) {\r\n if (this.validateFile(file)) {\r\n uploads.push(file)\r\n }\r\n else {\r\n fails.push(file)\r\n }\r\n }\r\n\r\n const result = await this.options.handler.call(this, range, uploads)\r\n const updateDelta = result.reduce((delta, url, i) => {\r\n if (isString(url)) {\r\n const type = uploads[i].type\r\n if (type.startsWith('image/')) {\r\n delta.insert({ image: url })\r\n }\r\n else if (type.startsWith('video/')) {\r\n delta.insert({ video: { src: url } })\r\n }\r\n else {\r\n delta.insert({ file: { size: uploads[i].size, title: uploads[i].name, src: url } })\r\n }\r\n }\r\n else {\r\n delta.insert(' ')\r\n }\r\n return delta\r\n }, new Delta().retain(range.index).delete(range.length))\r\n\r\n this.quill.updateContents(updateDelta, Quill.sources.USER)\r\n this.quill.setSelection(range.index + result.length, Quill.sources.SILENT)\r\n\r\n for (const file of fails) {\r\n this.options.fail.call(this, file, range)\r\n }\r\n\r\n for (const [i, res] of result.entries()) {\r\n if (isString(res)) {\r\n this.options.success.call(this, files[i], { index: range.index + i, length: 0 })\r\n }\r\n else {\r\n this.options.fail.call(this, files[i], { index: range.index + i, length: 0 })\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["isString"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"divider.cjs.js","sources":["../../../src/modules/divider.ts"],"sourcesContent":["import type { BlockEmbed as TypeBlockEmbed } from 'quill/blots/block'\nimport Quill from 'quill'\n\nconst BlockEmbed = Quill.import('blots/block/embed') as typeof TypeBlockEmbed\n\nexport class DividerBlot extends BlockEmbed {\n static blotName = 'divider'\n static tagName = 'hr'\n\n static create() {\n const node = super.create() as HTMLElement\n node.setAttribute('contenteditable', 'false')\n return node\n }\n}\n"],"names":[],"mappings":";;;;;;AAGA,MAAM,aAAa,MAAM,OAAO,mBAAmB;AAE5C,MAAM,oBAAoB,WAAW;AAAA,EAI1C,OAAO,SAAS;AACR,UAAA,OAAO,MAAM,OAAO;AACrB,SAAA,aAAa,mBAAmB,OAAO;AACrC,WAAA;AAAA,EAAA;AAEX;AARE,cADW,aACJ,YAAW;AAClB,cAFW,aAEJ,WAAU;;"}
@@ -1,167 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
6
- const lodashEs = require("lodash-es");
7
- const DEFAULT_OPTIONS = {
8
- // @ts-ignore
9
- emojiData: window.emojiData,
10
- // @ts-ignore
11
- EmojiPicker: window.EmojiPicker,
12
- // @ts-ignore
13
- emojiPickerPosition: window.emojiPickerPosition,
14
- theme: "light",
15
- set: "native",
16
- skinTonePosition: "none",
17
- previewPosition: "bottom",
18
- searchPosition: "sticky",
19
- categories: ["frequent", "people", "nature", "foods", "activity", "places", "objects", "symbols", "flags"],
20
- maxFrequentRows: 2,
21
- perLine: 8,
22
- navPosition: "top",
23
- noCountryFlags: false,
24
- dynamicWidth: false
25
- };
26
- const PICKER_DOM_ID = "emoji-picker";
27
- const LOCALE_MAP = {
28
- "zh-CN": "zh",
29
- "en-US": "en"
30
- };
31
- class EmojiModule {
32
- constructor(quill, options = {}) {
33
- __publicField(this, "quill");
34
- __publicField(this, "options");
35
- __publicField(this, "picker", null);
36
- __publicField(this, "isPickerVisible", false);
37
- __publicField(this, "cleanupResizeObserver", null);
38
- this.quill = quill;
39
- this.options = { ...DEFAULT_OPTIONS, ...options };
40
- const toolbar = this.quill.getModule("toolbar");
41
- if (toolbar) {
42
- toolbar.addHandler("emoji", () => {
43
- if (this.isPickerVisible) {
44
- this.closeDialog();
45
- } else {
46
- this.openDialog();
47
- }
48
- });
49
- }
50
- }
51
- getEmojiButton() {
52
- return document.querySelector(".ql-emoji");
53
- }
54
- async updatePickerPosition() {
55
- const button = this.getEmojiButton();
56
- const pickerElement = document.getElementById(PICKER_DOM_ID);
57
- if (!button || !this.picker || !pickerElement) {
58
- return;
59
- }
60
- const { emojiPickerPosition } = this.options;
61
- try {
62
- const { x, y } = await emojiPickerPosition(button, pickerElement);
63
- this.picker.style.top = `${y}px`;
64
- this.picker.style.left = `${x}px`;
65
- } catch (error) {
66
- console.warn("Failed to compute picker position:", error);
67
- }
68
- }
69
- // 监听容器大小变化,更新表情选择弹窗位置
70
- setupContainerResizeObserver() {
71
- const container = this.quill.root.parentElement;
72
- if (!container) {
73
- return null;
74
- }
75
- const debouncedUpdate = lodashEs.debounce(() => {
76
- this.updatePickerPosition();
77
- }, 100);
78
- const resizeObserver = new ResizeObserver(() => {
79
- debouncedUpdate();
80
- });
81
- resizeObserver.observe(container);
82
- return () => {
83
- resizeObserver.disconnect();
84
- debouncedUpdate.cancel();
85
- };
86
- }
87
- // 创建表情选择弹窗
88
- createPicker() {
89
- const { EmojiPicker, emojiData, ...options } = this.options;
90
- const pickerConfig = {
91
- // emoji-mart 与 tiny-editor 国际化的的 locale 不一致使用 LOCALE_MAP 转换
92
- locale: LOCALE_MAP[this.quill.lang] ?? "en",
93
- data: emojiData,
94
- ...options,
95
- onEmojiSelect: this.handleEmojiSelect.bind(this),
96
- onClickOutside: this.handleClickOutside.bind(this)
97
- };
98
- const picker = new EmojiPicker(pickerConfig);
99
- picker.id = PICKER_DOM_ID;
100
- picker.style.position = "absolute";
101
- picker.style.zIndex = "1000";
102
- return picker;
103
- }
104
- // 打开表情弹窗
105
- openDialog() {
106
- if (this.picker) {
107
- return;
108
- }
109
- try {
110
- this.picker = this.createPicker();
111
- document.body.appendChild(this.picker);
112
- this.updatePickerPosition();
113
- this.cleanupResizeObserver = this.setupContainerResizeObserver();
114
- this.isPickerVisible = true;
115
- } catch (error) {
116
- console.error("Failed to open emoji picker:", error);
117
- this.closeDialog();
118
- }
119
- }
120
- // 关闭表情弹窗
121
- closeDialog() {
122
- var _a;
123
- if (!this.picker) {
124
- return;
125
- }
126
- this.isPickerVisible = false;
127
- this.picker.remove();
128
- this.picker = null;
129
- (_a = this.cleanupResizeObserver) == null ? void 0 : _a.call(this);
130
- this.cleanupResizeObserver = null;
131
- }
132
- // 处理表情选择事件
133
- handleEmojiSelect(emoji) {
134
- const selection = this.quill.getSelection(true);
135
- if (!selection) {
136
- console.warn("No selection available for emoji insertion");
137
- return;
138
- }
139
- try {
140
- const insertIndex = selection.index;
141
- this.quill.insertText(insertIndex, emoji.native, "user");
142
- this.closeDialog();
143
- this.quill.setSelection(insertIndex + emoji.native.length);
144
- } catch (error) {
145
- console.error("Failed to insert emoji:", error);
146
- }
147
- }
148
- // 处理外部点击事件
149
- handleClickOutside(event) {
150
- const button = this.getEmojiButton();
151
- const target = event.target;
152
- const isClickOnButton = target === button || target instanceof Element && (button == null ? void 0 : button.contains(target));
153
- if (isClickOnButton) {
154
- return;
155
- }
156
- this.closeDialog();
157
- }
158
- // 销毁模块,清理资源
159
- destroy() {
160
- var _a;
161
- (_a = this.cleanupResizeObserver) == null ? void 0 : _a.call(this);
162
- this.cleanupResizeObserver = null;
163
- this.closeDialog();
164
- }
165
- }
166
- exports.EmojiModule = EmojiModule;
167
- //# sourceMappingURL=emoji.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"emoji.cjs.js","sources":["../../../src/modules/emoji.ts"],"sourcesContent":["import type { EmojiMartData } from '@emoji-mart/data'\nimport type { computePosition } from '@floating-ui/dom'\nimport type { Picker } from 'emoji-mart'\nimport type TypeToolbar from 'quill/modules/toolbar'\nimport type FluentEditor from '../fluent-editor'\nimport { debounce } from 'lodash-es'\n\nexport interface EmojiModuleOptions {\n emojiData?: EmojiMartData\n EmojiPicker?: new (props: any) => Picker\n emojiPickerPosition?: typeof computePosition\n theme?: string\n locale?: string\n set?: string\n skinTonePosition?: string\n previewPosition?: string\n searchPosition?: string\n categories?: string[]\n maxFrequentRows?: number\n perLine?: number\n navPosition?: string\n noCountryFlags?: boolean\n dynamicWidth?: boolean\n}\n\nconst DEFAULT_OPTIONS: EmojiModuleOptions = {\n // @ts-ignore\n emojiData: window.emojiData,\n // @ts-ignore\n EmojiPicker: window.EmojiPicker,\n // @ts-ignore\n emojiPickerPosition: window.emojiPickerPosition,\n theme: 'light',\n set: 'native',\n skinTonePosition: 'none',\n previewPosition: 'bottom',\n searchPosition: 'sticky',\n categories: ['frequent', 'people', 'nature', 'foods', 'activity', 'places', 'objects', 'symbols', 'flags'],\n maxFrequentRows: 2,\n perLine: 8,\n navPosition: 'top',\n noCountryFlags: false,\n dynamicWidth: false,\n}\n\nconst PICKER_DOM_ID = 'emoji-picker'\n\nconst LOCALE_MAP = {\n 'zh-CN': 'zh',\n 'en-US': 'en',\n} as const\n\nclass EmojiModule {\n private readonly quill: FluentEditor\n private readonly options: EmojiModuleOptions\n private picker: HTMLElement | null = null\n private isPickerVisible = false\n private cleanupResizeObserver: (() => void) | null = null\n\n constructor(quill: FluentEditor, options: EmojiModuleOptions = {}) {\n this.quill = quill\n\n this.options = { ...DEFAULT_OPTIONS, ...options }\n\n const toolbar = this.quill.getModule('toolbar') as TypeToolbar\n\n if (toolbar) {\n toolbar.addHandler('emoji', () => {\n if (this.isPickerVisible) {\n this.closeDialog()\n }\n else {\n this.openDialog()\n }\n })\n }\n }\n\n private getEmojiButton() {\n return document.querySelector('.ql-emoji') as HTMLElement | null\n }\n\n private async updatePickerPosition() {\n const button = this.getEmojiButton()\n const pickerElement = document.getElementById(PICKER_DOM_ID)\n\n if (!button || !this.picker || !pickerElement) {\n return\n }\n\n const { emojiPickerPosition } = this.options\n\n try {\n const { x, y } = await emojiPickerPosition(button, pickerElement)\n this.picker.style.top = `${y}px`\n this.picker.style.left = `${x}px`\n }\n catch (error) {\n console.warn('Failed to compute picker position:', error)\n }\n }\n\n // 监听容器大小变化,更新表情选择弹窗位置\n private setupContainerResizeObserver() {\n const container = this.quill.root.parentElement\n if (!container) {\n return null\n }\n\n const debouncedUpdate = debounce(() => {\n this.updatePickerPosition()\n }, 100)\n\n const resizeObserver = new ResizeObserver(() => {\n debouncedUpdate()\n })\n\n resizeObserver.observe(container)\n\n return () => {\n resizeObserver.disconnect()\n debouncedUpdate.cancel()\n }\n }\n\n // 创建表情选择弹窗\n private createPicker() {\n const { EmojiPicker, emojiData, ...options } = this.options\n\n const pickerConfig = {\n // emoji-mart 与 tiny-editor 国际化的的 locale 不一致使用 LOCALE_MAP 转换\n locale: LOCALE_MAP[this.quill.lang] ?? 'en',\n data: emojiData,\n ...options,\n onEmojiSelect: this.handleEmojiSelect.bind(this),\n onClickOutside: this.handleClickOutside.bind(this),\n }\n\n const picker = new EmojiPicker(pickerConfig) as unknown as HTMLElement\n\n // 设置样式和属性\n picker.id = PICKER_DOM_ID\n picker.style.position = 'absolute'\n picker.style.zIndex = '1000'\n\n return picker\n }\n\n // 打开表情弹窗\n public openDialog() {\n if (this.picker) {\n return\n }\n\n try {\n this.picker = this.createPicker()\n document.body.appendChild(this.picker)\n\n this.updatePickerPosition()\n this.cleanupResizeObserver = this.setupContainerResizeObserver()\n this.isPickerVisible = true\n }\n catch (error) {\n console.error('Failed to open emoji picker:', error)\n this.closeDialog()\n }\n }\n\n // 关闭表情弹窗\n public closeDialog() {\n if (!this.picker) {\n return\n }\n\n this.isPickerVisible = false\n this.picker.remove()\n this.picker = null\n\n this.cleanupResizeObserver?.()\n this.cleanupResizeObserver = null\n }\n\n // 处理表情选择事件\n private handleEmojiSelect(emoji: { native: string }) {\n const selection = this.quill.getSelection(true)\n if (!selection) {\n console.warn('No selection available for emoji insertion')\n return\n }\n\n try {\n // 记录插入位置\n const insertIndex = selection.index\n this.quill.insertText(insertIndex, emoji.native, 'user')\n\n this.closeDialog()\n\n // 设置光标到表情符号后面\n this.quill.setSelection(insertIndex + emoji.native.length)\n }\n catch (error) {\n console.error('Failed to insert emoji:', error)\n }\n }\n\n // 处理外部点击事件\n private handleClickOutside(event: MouseEvent) {\n const button = this.getEmojiButton()\n\n const target = event.target\n\n const isClickOnButton = target === button || (target instanceof Element && button?.contains(target))\n\n // 如果点击的是表情符号按钮或其子元素,则不关闭选择器\n if (isClickOnButton) {\n return\n }\n\n this.closeDialog()\n }\n\n // 销毁模块,清理资源\n public destroy() {\n this.cleanupResizeObserver?.()\n this.cleanupResizeObserver = null\n this.closeDialog()\n }\n}\n\nexport { EmojiModule }\n"],"names":["debounce"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"file.cjs.js","sources":["../../../../../src/modules/file/formats/file.ts"],"sourcesContent":["import type TypeEmbed from 'quill/blots/embed'\nimport Quill from 'quill'\nimport { sanitize } from '../../../config/editor.utils'\n\nconst Embed = Quill.import('blots/embed') as typeof TypeEmbed\nconst FILE_ATTRIBUTES = ['id', 'title', 'size', 'lastModified']\n\nexport interface FileValue {\n size: number\n src: string\n title: string\n}\nexport class File extends Embed {\n static blotName = 'file'\n static tagName = 'A'\n static className = 'ql-file-item'\n static PROTOCOL_WHITELIST = ['http', 'https', 'blob']\n\n static create(value: FileValue) {\n const node = super.create(value) as HTMLAnchorElement\n const size = value.size / 1024\n const fixSize = !size ? 0 : size < 1 ? 1 : size.toFixed(0)\n node.classList.add('icon-file')\n node.setAttribute('contenteditable', 'false')\n const fileSvg = '<svg viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"><path d=\"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326z m1.8 562H232V136h302v216c0 23.2 18.8 42 42 42h216v494z\" p-id=\"2307\"></path></svg>'\n node.innerHTML = `${fileSvg} ${value.title} (${fixSize} KB)`\n const src = this.sanitize(value.src)\n if (src) {\n node.href = src\n node.target = '_blank'\n }\n FILE_ATTRIBUTES.forEach((key) => {\n if (value[key]) {\n node.dataset[key] = value[key]\n }\n })\n return node\n }\n\n static value(domNode: HTMLAnchorElement) {\n return this.getFormats(domNode)\n }\n\n static getFormats(domNode: HTMLAnchorElement) {\n const formats: Record<string, string> = {}\n const href = this.sanitize(domNode.href)\n if (href) {\n formats.src = href\n }\n FILE_ATTRIBUTES.forEach((key) => {\n if (domNode.dataset[key]) {\n formats[key] = domNode.dataset[key]\n }\n })\n return formats\n }\n\n static sanitize(url: string) {\n return (sanitize(url, this.PROTOCOL_WHITELIST) && url) || ''\n }\n}\n"],"names":["sanitize"],"mappings":";;;;;;;AAIA,MAAM,QAAQ,MAAM,OAAO,aAAa;AACxC,MAAM,kBAAkB,CAAC,MAAM,SAAS,QAAQ,cAAc;AAOvD,MAAM,aAAa,MAAM;AAAA,EAM9B,OAAO,OAAO,OAAkB;AACxB,UAAA,OAAO,MAAM,OAAO,KAAK;AACzB,UAAA,OAAO,MAAM,OAAO;AACpB,UAAA,UAAU,CAAC,OAAO,IAAI,OAAO,IAAI,IAAI,KAAK,QAAQ,CAAC;AACpD,SAAA,UAAU,IAAI,WAAW;AACzB,SAAA,aAAa,mBAAmB,OAAO;AAC5C,UAAM,UAAU;AAChB,SAAK,YAAY,GAAG,OAAO,IAAI,MAAM,KAAK,KAAK,OAAO;AACtD,UAAM,MAAM,KAAK,SAAS,MAAM,GAAG;AACnC,QAAI,KAAK;AACP,WAAK,OAAO;AACZ,WAAK,SAAS;AAAA,IAAA;AAEA,oBAAA,QAAQ,CAAC,QAAQ;AAC3B,UAAA,MAAM,GAAG,GAAG;AACd,aAAK,QAAQ,GAAG,IAAI,MAAM,GAAG;AAAA,MAAA;AAAA,IAC/B,CACD;AACM,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,MAAM,SAA4B;AAChC,WAAA,KAAK,WAAW,OAAO;AAAA,EAAA;AAAA,EAGhC,OAAO,WAAW,SAA4B;AAC5C,UAAM,UAAkC,CAAC;AACzC,UAAM,OAAO,KAAK,SAAS,QAAQ,IAAI;AACvC,QAAI,MAAM;AACR,cAAQ,MAAM;AAAA,IAAA;AAEA,oBAAA,QAAQ,CAAC,QAAQ;AAC3B,UAAA,QAAQ,QAAQ,GAAG,GAAG;AACxB,gBAAQ,GAAG,IAAI,QAAQ,QAAQ,GAAG;AAAA,MAAA;AAAA,IACpC,CACD;AACM,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,SAAS,KAAa;AAC3B,WAAQA,aAAAA,SAAS,KAAK,KAAK,kBAAkB,KAAK,OAAQ;AAAA,EAAA;AAE9D;AA/CE,cADW,MACJ,YAAW;AAClB,cAFW,MAEJ,WAAU;AACjB,cAHW,MAGJ,aAAY;AACnB,cAJW,MAIJ,sBAAqB,CAAC,QAAQ,SAAS,MAAM;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-bar.cjs.js","sources":["../../../../../src/modules/file/modules/file-bar.ts"],"sourcesContent":["import Quill from 'quill'\nimport { Range } from 'quill/core/selection'\nimport { unshiftString } from '../../../utils/method'\nimport { File } from '../formats/file'\n\nconst Delta = Quill.import('delta')\n\nexport class FileBar {\n quill: any\n file: any\n domNode: HTMLElement\n fileRange: any\n template: string\n\n constructor(quill, target) {\n this.quill = quill\n this.file = target\n const fileBlot = Quill.find(target)\n const index = this.quill.getIndex(fileBlot)\n const [fileItem, offset] = this.quill.scroll.descendant(File, index)\n const length = fileItem && fileItem.length()\n this.fileRange = new Range(index - offset, length)\n\n const timestamp = Number(this.file.dataset.lastModified)\n const _lastModifiedDate = this.formatDate(timestamp)\n this.template = [\n // `<a class=\"ql-last-modified-date\" href=\"${this.file.href}\" target=\"_blank\">${this.file.href}</a>`,\n // '<span class=\"ql-split\"></span>',\n // `<a class=\"ql-file-preview\"><i class=\"icon-preview\"></i></a>`,\n `<a class=\"ql-file-download\"><i class=\"icon-download\"></i></a>`,\n '<a class=\"ql-file-delete\"><i class=\"icon-delete\"></i></a>',\n ].join('')\n\n this.createFileBar()\n }\n\n createFileBar() {\n this.domNode = document.createElement('div')\n this.domNode.className = 'ql-file-bar'\n this.domNode.innerHTML = this.template\n // 查看文件\n const filePreview = this.domNode.querySelector('a.ql-file-preview')\n if (filePreview) {\n filePreview.addEventListener('click', (event) => {\n this.operateFile(event, 'view')\n })\n }\n // 下载文件\n const fileDownload = this.domNode.querySelector('a.ql-file-download')\n if (fileDownload) {\n fileDownload.addEventListener('click', (event) => {\n this.operateFile(event, 'download')\n })\n }\n // 删除文件\n const fileDelete = this.domNode.querySelector('a.ql-file-delete')\n if (fileDelete) {\n fileDelete.addEventListener('click', (event) => {\n this.operateFile(event, 'delete')\n const delta = new Delta()\n .retain(this.fileRange.index)\n .delete(this.fileRange.length)\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(this.fileRange.index)\n })\n }\n\n this.setPosition()\n this.quill.root.parentNode.appendChild(this.domNode)\n }\n\n destroy() {\n if (this.domNode) {\n this.domNode.remove()\n this.domNode = null\n this.file = null\n }\n }\n\n operateFile(event, operate) {\n event.preventDefault()\n const fileId = this.file.dataset.id || ''\n const fileName = this.file.dataset.title || ''\n const fileDownloadUrl = this.file.href || ''\n if (fileId) {\n this.quill.emitter.emit('file-change', {\n operation: operate,\n data: { fileId, fileDownloadUrl },\n })\n }\n if (operate === 'download') {\n const a = document.createElement('a')\n a.href = fileDownloadUrl\n a.target = '_blank'\n a.id = 'exppub'\n a.download = fileName\n document.body.appendChild(a)\n const alink = document.getElementById('exppub')\n alink.click()\n alink.parentNode.removeChild(a)\n }\n this.destroy()\n }\n\n setPosition() {\n if (this.domNode && this.file) {\n const parent = this.quill.root.parentNode\n const child = this.file.querySelector('span')\n const containerRect = parent.getBoundingClientRect()\n const fileRect = child.getBoundingClientRect()\n this.css(this.domNode, {\n left: `${fileRect.left - containerRect.left}px`,\n top: `${fileRect.top - containerRect.top + 10}px`,\n })\n }\n }\n\n css(domNode, rules) {\n if (typeof rules === 'object') {\n for (const prop in rules) {\n if (prop) {\n if (Array.isArray(rules[prop])) {\n // 兼容IE11浏览器\n rules[prop].forEach((val) => {\n domNode.style[prop] = val\n })\n }\n else {\n domNode.style[prop] = rules[prop]\n }\n }\n }\n }\n }\n\n formatDate(timestamp) {\n const date = new Date(timestamp)\n const year = date.getFullYear()\n // TODO\n const month = unshiftString(`${date.getMonth() + 1}`, 2, '0')\n const day = unshiftString(`${date.getDate()}`, 2, '0')\n const hour = unshiftString(`${date.getHours()}`, 2, '0')\n const minute = unshiftString(`${date.getMinutes()}`, 2, '0')\n return Number.isNaN(year) ? '--' : `${year}/${month}/${day} ${hour}:${minute}`\n }\n}\n"],"names":["File","Range","unshiftString"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-module.cjs.js","sources":["../../../../../src/modules/file/modules/file-module.ts"],"sourcesContent":["import type FluentEditor from '../../../core/fluent-editor'\nimport Quill from 'quill'\nimport { File } from '../formats/file'\nimport { FileBar } from './file-bar'\n\nexport class FileModule {\n fileBar: FileBar\n\n static register() {\n Quill.register('formats/file', File, true)\n }\n\n constructor(public quill: FluentEditor) {\n this.quill = quill\n quill.root.addEventListener('click', event => this.clickEvent(event), false)\n }\n\n clickEvent(event: MouseEvent) {\n event.preventDefault()\n const target = event.target as HTMLElement\n const fileDom = target.closest('a.ql-file-item')\n if (fileDom) {\n if (this.fileBar) {\n this.fileBar.destroy()\n }\n this.fileBar = new FileBar(this.quill, fileDom)\n }\n else if (this.fileBar && !target.closest('.ql-file-bar')) {\n this.fileBar.destroy()\n this.fileBar = null\n }\n }\n}\n"],"names":["File","FileBar"],"mappings":";;;;;;;;AAKO,MAAM,WAAW;AAAA,EAOtB,YAAmB,OAAqB;AANxC;AAMmB,SAAA,QAAA;AACjB,SAAK,QAAQ;AACP,UAAA,KAAK,iBAAiB,SAAS,CAAA,UAAS,KAAK,WAAW,KAAK,GAAG,KAAK;AAAA,EAAA;AAAA,EAN7E,OAAO,WAAW;AACV,UAAA,SAAS,gBAAgBA,KAAAA,MAAM,IAAI;AAAA,EAAA;AAAA,EAQ3C,WAAW,OAAmB;AAC5B,UAAM,eAAe;AACrB,UAAM,SAAS,MAAM;AACf,UAAA,UAAU,OAAO,QAAQ,gBAAgB;AAC/C,QAAI,SAAS;AACX,UAAI,KAAK,SAAS;AAChB,aAAK,QAAQ,QAAQ;AAAA,MAAA;AAEvB,WAAK,UAAU,IAAIC,QAAAA,QAAQ,KAAK,OAAO,OAAO;AAAA,IAAA,WAEvC,KAAK,WAAW,CAAC,OAAO,QAAQ,cAAc,GAAG;AACxD,WAAK,QAAQ,QAAQ;AACrB,WAAK,UAAU;AAAA,IAAA;AAAA,EACjB;AAEJ;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"i18n.cjs.js","sources":["../../../src/modules/i18n.ts"],"sourcesContent":["import type FluentEditor from '../fluent-editor'\r\nimport { CHANGE_LANGUAGE_EVENT, defaultLanguage } from '../config'\r\nimport { isUndefined } from '../utils/is'\r\n\r\nconst langs: Record<string, Record<string, string>> = {}\r\n\r\nexport interface I18NOptions {\r\n lang: string\r\n}\r\nexport class I18N {\r\n static register(inputLangs: Record<string, Record<string, string>>, isCover: boolean = true) {\r\n for (const lang in inputLangs) {\r\n const texts = inputLangs[lang]\r\n if (isCover) {\r\n langs[lang] = texts\r\n }\r\n else {\r\n if (!langs[lang]) langs[lang] = {}\r\n Object.assign(langs[lang], texts)\r\n }\r\n }\r\n }\r\n\r\n static parserText(text: string, lang: string): string {\r\n const i18nPattern = /^_i18n\"([^\"]*)\"/\r\n const match = text.match(i18nPattern)\r\n let key = text\r\n if (match) {\r\n key = match[1]\r\n }\r\n return langs[lang]?.[key] || key\r\n }\r\n\r\n options: I18NOptions = {\r\n lang: '',\r\n }\r\n\r\n constructor(public quill: FluentEditor, options: Partial<I18NOptions>) {\r\n this.options = Object.assign({}, options, this.resolveLanguageOption(options || {}))\r\n // wait until all module registed\r\n Promise.resolve().then(() => this.changeLanguage(this.options, true))\r\n }\r\n\r\n resolveLanguageOption(options: Partial<I18NOptions>): I18NOptions {\r\n if (isUndefined(options.lang)) {\r\n options.lang = defaultLanguage\r\n }\r\n if (!(options.lang in langs)) {\r\n console.warn(`The language ${options.lang} is not supported. Use the default language: ${defaultLanguage}`)\r\n options.lang = defaultLanguage\r\n }\r\n return {\r\n lang: options.lang,\r\n }\r\n }\r\n\r\n changeLanguage(options: Partial<I18NOptions>, force: boolean = false) {\r\n const currentLang = this.options.lang\r\n const langOps = this.resolveLanguageOption(options)\r\n if (langOps.lang === currentLang && !force) return\r\n this.options.lang = langOps.lang\r\n this.quill.emitter.emit(CHANGE_LANGUAGE_EVENT, this.options.lang, langs[langOps.lang])\r\n }\r\n}\r\n\r\nexport default I18N\r\n"],"names":["isUndefined","defaultLanguage","CHANGE_LANGUAGE_EVENT"],"mappings":";;;;;;;;AAIA,MAAM,QAAgD,CAAC;AAKhD,MAAM,KAAK;AAAA,EA4BhB,YAAmB,OAAqB,SAA+B;AAJvE,mCAAuB;AAAA,MACrB,MAAM;AAAA,IACR;AAEmB,SAAA,QAAA;AACZ,SAAA,UAAU,OAAO,OAAO,CAAC,GAAG,SAAS,KAAK,sBAAsB,WAAW,CAAA,CAAE,CAAC;AAE3E,YAAA,UAAU,KAAK,MAAM,KAAK,eAAe,KAAK,SAAS,IAAI,CAAC;AAAA,EAAA;AAAA,EA9BtE,OAAO,SAAS,YAAoD,UAAmB,MAAM;AAC3F,eAAW,QAAQ,YAAY;AACvB,YAAA,QAAQ,WAAW,IAAI;AAC7B,UAAI,SAAS;AACX,cAAM,IAAI,IAAI;AAAA,MAAA,OAEX;AACH,YAAI,CAAC,MAAM,IAAI,EAAS,OAAA,IAAI,IAAI,CAAC;AACjC,eAAO,OAAO,MAAM,IAAI,GAAG,KAAK;AAAA,MAAA;AAAA,IAClC;AAAA,EACF;AAAA,EAGF,OAAO,WAAW,MAAc,MAAsB;;AACpD,UAAM,cAAc;AACd,UAAA,QAAQ,KAAK,MAAM,WAAW;AACpC,QAAI,MAAM;AACV,QAAI,OAAO;AACT,YAAM,MAAM,CAAC;AAAA,IAAA;AAEf,aAAO,WAAM,IAAI,MAAV,mBAAc,SAAQ;AAAA,EAAA;AAAA,EAa/B,sBAAsB,SAA4C;AAC5D,QAAAA,GAAA,YAAY,QAAQ,IAAI,GAAG;AAC7B,cAAQ,OAAOC,cAAA;AAAA,IAAA;AAEb,QAAA,EAAE,QAAQ,QAAQ,QAAQ;AAC5B,cAAQ,KAAK,gBAAgB,QAAQ,IAAI,gDAAgDA,cAAe,eAAA,EAAE;AAC1G,cAAQ,OAAOA,cAAA;AAAA,IAAA;AAEV,WAAA;AAAA,MACL,MAAM,QAAQ;AAAA,IAChB;AAAA,EAAA;AAAA,EAGF,eAAe,SAA+B,QAAiB,OAAO;AAC9D,UAAA,cAAc,KAAK,QAAQ;AAC3B,UAAA,UAAU,KAAK,sBAAsB,OAAO;AAClD,QAAI,QAAQ,SAAS,eAAe,CAAC,MAAO;AACvC,SAAA,QAAQ,OAAO,QAAQ;AACvB,SAAA,MAAM,QAAQ,KAAKC,cAAAA,uBAAuB,KAAK,QAAQ,MAAM,MAAM,QAAQ,IAAI,CAAC;AAAA,EAAA;AAEzF;;;"}
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- require("./collaborative-editing/index.cjs.js");
4
- require("./counter.cjs.js");
5
- const customClipboard = require("./custom-clipboard.cjs.js");
6
- require("./custom-image/index.cjs.js");
7
- const customUploader = require("./custom-uploader.cjs.js");
8
- const divider = require("./divider.cjs.js");
9
- const emoji = require("./emoji.cjs.js");
10
- require("./file/index.cjs.js");
11
- const i18n = require("./i18n.cjs.js");
12
- require("./link/index.cjs.js");
13
- require("./mathlive/index.cjs.js");
14
- require("./mention/index.cjs.js");
15
- const index = require("./shortcut-key/index.cjs.js");
16
- require("./syntax.cjs.js");
17
- const index$1 = require("./table-up/index.cjs.js");
18
- require("./toolbar/index.cjs.js");
19
- exports.CustomClipboard = customClipboard.CustomClipboard;
20
- exports.FileUploader = customUploader.FileUploader;
21
- exports.DividerBlot = divider.DividerBlot;
22
- exports.EmojiModule = emoji.EmojiModule;
23
- exports.I18N = i18n.I18N;
24
- exports.ShortCutKey = index.ShortCutKey;
25
- exports.shortKey = index.shortKey;
26
- exports.generateTableUp = index$1.generateTableUp;
27
- //# sourceMappingURL=index.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"link.cjs.js","sources":["../../../../../src/modules/link/formats/link.ts"],"sourcesContent":["import type TypeInline from 'quill/blots/inline'\nimport Quill from 'quill'\nimport { hadProtocol, sanitize } from '../../../config/editor.utils'\n\nconst Inline = Quill.import('blots/inline') as typeof TypeInline\n\nexport class LinkBlot extends Inline {\n static blotName = 'link'\n static tagName = 'A'\n static SANITIZED_URL = 'about:blank'\n static PROTOCOL_WHITELIST = ['http', 'https', 'mailto', 'tel']\n static className = 'ql-normal-link'\n\n static autoProtocol: string = ''\n static create(value: string) {\n const node = super.create(value)\n let href = value\n if (!hadProtocol(href) && this.autoProtocol) {\n href = `${this.autoProtocol}://${value}`\n }\n href = this.sanitize(href)\n node.setAttribute('href', href)\n node.setAttribute('target', '_blank')\n return node\n }\n\n static formats(domNode: HTMLElement): string | null {\n return domNode.getAttribute('href')\n }\n\n static sanitize(url: string) {\n return sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL\n }\n\n format(name: string, value: any) {\n if (name !== this.statics.blotName || [false, null].includes(value)) {\n super.format(name, value)\n }\n else {\n this.domNode.setAttribute('href', LinkBlot.sanitize(value))\n }\n }\n}\n"],"names":["hadProtocol","sanitize"],"mappings":";;;;;;;AAIA,MAAM,SAAS,MAAM,OAAO,cAAc;AAEnC,MAAM,YAAN,MAAM,kBAAiB,OAAO;AAAA,EAQnC,OAAO,OAAO,OAAe;AACrB,UAAA,OAAO,MAAM,OAAO,KAAK;AAC/B,QAAI,OAAO;AACX,QAAI,CAACA,aAAAA,YAAY,IAAI,KAAK,KAAK,cAAc;AAC3C,aAAO,GAAG,KAAK,YAAY,MAAM,KAAK;AAAA,IAAA;AAEjC,WAAA,KAAK,SAAS,IAAI;AACpB,SAAA,aAAa,QAAQ,IAAI;AACzB,SAAA,aAAa,UAAU,QAAQ;AAC7B,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,QAAQ,SAAqC;AAC3C,WAAA,QAAQ,aAAa,MAAM;AAAA,EAAA;AAAA,EAGpC,OAAO,SAAS,KAAa;AAC3B,WAAOC,aAAAA,SAAS,KAAK,KAAK,kBAAkB,IAAI,MAAM,KAAK;AAAA,EAAA;AAAA,EAG7D,OAAO,MAAc,OAAY;AAC3B,QAAA,SAAS,KAAK,QAAQ,YAAY,CAAC,OAAO,IAAI,EAAE,SAAS,KAAK,GAAG;AAC7D,YAAA,OAAO,MAAM,KAAK;AAAA,IAAA,OAErB;AACH,WAAK,QAAQ,aAAa,QAAQ,UAAS,SAAS,KAAK,CAAC;AAAA,IAAA;AAAA,EAC5D;AAEJ;AAnCE,cADW,WACJ,YAAW;AAClB,cAFW,WAEJ,WAAU;AACjB,cAHW,WAGJ,iBAAgB;AACvB,cAJW,WAIJ,sBAAqB,CAAC,QAAQ,SAAS,UAAU,KAAK;AAC7D,cALW,WAKJ,aAAY;AAEnB,cAPW,WAOJ,gBAAuB;AAPzB,IAAM,WAAN;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tooltip.cjs.js","sources":["../../../../../src/modules/link/modules/tooltip.ts"],"sourcesContent":["import type { Parchment as TypeParchment } from 'quill'\nimport type FluentEditor from '../../../core/fluent-editor'\nimport Quill, { Range } from 'quill'\nimport Emitter from 'quill/core/emitter'\nimport { BaseTooltip } from 'quill/themes/base'\nimport { CHANGE_LANGUAGE_EVENT } from '../../../config'\nimport { hadProtocol, isNullOrUndefined } from '../../../config/editor.utils'\nimport { EN_US } from '../../../config/i18n/en-us'\nimport { debounce } from '../../../utils/debounce'\nimport { LinkBlot } from '../formats/link'\n\nexport class LinkTooltip extends BaseTooltip {\n static TEMPLATE: string = [\n `<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"${EN_US.linkplaceholder}\" data-video=\"Embed URL\" style=\"width: 225px;\">`,\n '<span class=\"ql-split\"></span>',\n '<a class=\"ql-preview\"><i class=\"icon-share\"></i></a>',\n '<a class=\"ql-remove\"><i class=\"icon-delete\"></i></a>',\n ].join('')\n\n isInputFocus: boolean\n isHover: boolean\n debouncedHideToolTip: any\n debouncedShowToolTip: any\n options: { autoProtocol: string } = {\n autoProtocol: 'https',\n }\n\n constructor(public quill: FluentEditor, bounds) {\n super(quill, bounds)\n this.setTemplate()\n this.isInputFocus = false\n this.isHover = false\n\n this.resolveOptions()\n LinkBlot.autoProtocol = this.options.autoProtocol\n this.debouncedHideToolTip = debounce(this.hideToolTip, 300)\n this.debouncedShowToolTip = debounce(this.showToolTip, 300)\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\n this.setTemplate()\n })\n }\n\n setTemplate() {\n this.root.innerHTML = [\n `<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"${this.quill.getLangText('linkplaceholder')}\" data-video=\"Embed URL\" style=\"width: 225px;\">`,\n '<span class=\"ql-split\"></span>',\n '<a class=\"ql-preview\"><i class=\"icon-share\"></i></a>',\n '<a class=\"ql-remove\"><i class=\"icon-delete\"></i></a>',\n ].join('')\n this.textbox = this.root.querySelector('input[type=\"text\"]')\n this.listen()\n }\n\n resolveOptions() {\n this.options = {\n autoProtocol: 'https',\n }\n const value = this.quill.options.autoProtocol\n if (value && typeof value === 'string') {\n this.options.autoProtocol = value\n }\n else if (typeof value === 'boolean' && !value) {\n this.options.autoProtocol = ''\n }\n }\n\n shouldHide() {\n return !this.isHover && !this.isInputFocus\n }\n\n hideToolTip() {\n if (this.shouldHide()) {\n this.hide()\n }\n }\n\n showToolTip(name, value, range) {\n if (!this.shouldHide()) {\n this.edit(name, value, range)\n }\n }\n\n handleMouseLeave() {\n this.isHover = false\n this.debouncedHideToolTip()\n }\n\n handleMouseEnter(event: MouseEvent) {\n const isTooltipShow = !this.root.classList.contains('ql-hidden')\n if (isTooltipShow) {\n return\n }\n\n if (this.isInputFocus) {\n this.save()\n }\n this.isHover = true\n const linkNode = event.target as HTMLElement\n const preview = LinkBlot.formats(linkNode)\n if (!preview || preview.startsWith('#')) {\n return\n }\n const linkBlot = Quill.find(linkNode) as TypeParchment.Blot\n const index = this.quill.getIndex(linkBlot)\n const [link, offset] = this.quill.scroll.descendant(\n LinkBlot,\n index,\n )\n const length = link && link.length()\n this.linkRange = new Range(index - offset, length)\n this.debouncedShowToolTip('link', preview, this.linkRange)\n }\n\n listen() {\n super.listen()\n this.root.querySelector('a.ql-remove').addEventListener('click', (event) => {\n if (!isNullOrUndefined(this.linkRange)) {\n const range = this.linkRange\n this.restoreFocus()\n this.quill.formatText(range, 'link', false, Emitter.sources.API)\n delete this.linkRange\n }\n event.preventDefault()\n this.hide()\n })\n\n this.quill.root.addEventListener(\n 'mouseover',\n (event) => {\n const target = event.target as HTMLElement\n if (\n (target.tagName.toUpperCase() !== 'A'\n || !target.classList.contains(LinkBlot.className))\n && !target.closest(`a.${LinkBlot.className}`)\n ) {\n return\n }\n this.handleMouseEnter(event)\n },\n false,\n )\n\n this.quill.root.addEventListener(\n 'mouseout',\n (event) => {\n const target = event.target as HTMLElement\n if (target.tagName.toUpperCase() !== 'A' && !target.closest(`a.${LinkBlot.className}`)) {\n return\n }\n this.handleMouseLeave()\n },\n false,\n )\n\n this.root.addEventListener(\n 'mouseenter',\n () => {\n this.isHover = true\n },\n false,\n )\n\n this.root.addEventListener('mouseleave', this.handleMouseLeave.bind(this), false)\n\n this.root.querySelector('a.ql-preview').addEventListener('click', (event) => {\n const link = LinkBlot.sanitize(this.textbox.value)\n window.open(link, '_blank')\n event.preventDefault()\n })\n this.root.querySelector('input[type=\"text\"]').addEventListener('focus', () => {\n this.isInputFocus = true\n })\n this.root.querySelector('input[type=\"text\"]').addEventListener('blur', () => {\n this.isInputFocus = false\n this.save()\n })\n this.quill.on(\n Emitter.events.SELECTION_CHANGE,\n (range, _oldRange, source) => {\n if (isNullOrUndefined(range)) return\n if (source === Emitter.sources.USER) {\n const [link, offset] = this.quill.scroll.descendant(\n LinkBlot,\n range.index,\n )\n\n if (!isNullOrUndefined(link)) {\n this.linkRange = new Range(range.index - offset, link.length())\n const preview = LinkBlot.formats(link.domNode)\n if (!preview.startsWith('#')) {\n this.edit('link', preview, this.linkRange)\n }\n return\n }\n }\n if (this.shouldHide()) {\n this.hide()\n }\n },\n )\n this.quill.on(\n Emitter.events.TEXT_CHANGE,\n () => {\n const selection = this.quill.getSelection()\n const index = selection && selection.index\n setTimeout(() => {\n const link = this.quill.scroll.descendant(\n LinkBlot,\n index,\n )[0]\n if (!link) {\n this.handleMouseLeave()\n }\n })\n },\n )\n }\n\n save() {\n let value = this.textbox.value\n if (!value) return\n this.textbox.value = ''\n switch (this.root.getAttribute('data-mode')) {\n case 'link': {\n const { scrollTop } = this.quill.root\n if (this.options.autoProtocol) {\n value = this.addHttpProtocol(value)\n }\n\n if (this.linkRange) {\n this.quill.formatText(\n this.linkRange,\n 'link',\n value,\n Emitter.sources.USER,\n )\n this.restoreFocus()\n }\n else {\n this.restoreFocus()\n this.quill.format('link', value, Emitter.sources.USER)\n }\n this.quill.root.scrollTop = scrollTop\n break\n }\n case 'formula': {\n const range = this.quill.getSelection(true)\n if (!isNullOrUndefined(range)) {\n const index = range.index + range.length\n this.quill.insertEmbed(\n index,\n this.root.getAttribute('data-mode'),\n value,\n Emitter.sources.USER,\n )\n if (this.root.getAttribute('data-mode') === 'formula') {\n this.quill.insertText(index + 1, ' ', Emitter.sources.USER)\n }\n this.quill.setSelection(index + 2, Emitter.sources.USER)\n }\n break\n }\n case 'video': {\n const range = this.quill.getSelection(true)\n this.quill.insertText(range.index, '\\n', Emitter.sources.USER)\n this.quill.insertEmbed(range.index + 1, 'video', { src: value }, Emitter.sources.USER)\n this.quill.insertText(range.index + 2, '\\n', Emitter.sources.USER)\n this.quill.setSelection(range.index + 3, Emitter.sources.SILENT)\n this.textbox.value = ''\n this.hide()\n break\n }\n default:\n }\n }\n\n position(reference) {\n const left = reference.left\n const top = reference.bottom + this.quill.root.scrollTop\n this.root.style.left = `${left}px`\n this.root.style.top = `${top}px`\n this.root.classList.remove('ql-flip')\n const containerBounds = this.boundsContainer.getBoundingClientRect()\n const rootBounds = this.root.getBoundingClientRect()\n let shift = 0\n if (rootBounds.right > containerBounds.right) {\n shift = containerBounds.right - rootBounds.right\n this.root.style.left = `${left + shift}px`\n }\n if (rootBounds.left < containerBounds.left) {\n shift = containerBounds.left - rootBounds.left\n this.root.style.left = `${left + shift}px`\n }\n if (rootBounds.bottom > containerBounds.bottom) {\n const height = rootBounds.bottom - rootBounds.top\n const verticalShift = reference.bottom - reference.top + height\n const fixedTop = top - verticalShift\n this.root.style.top = `${fixedTop < 0 ? this.quill.root.scrollTop + reference.top : fixedTop}px`\n this.root.classList.add('ql-flip')\n }\n return shift\n }\n\n // @ts-expect-error\n edit(mode: string = 'link', preview = null, range) {\n this.linkRange = range || this.quill.selection.savedRange\n this.root.classList.remove('ql-hidden')\n this.root.classList.add('ql-editing')\n if (!isNullOrUndefined(preview)) {\n this.textbox.value = preview\n }\n else if (mode !== this.root.getAttribute('data-mode')) {\n this.textbox.value = ''\n }\n this.position(this.quill.getBounds(range || this.quill.selection.savedRange))\n if (this.textbox.value === '') {\n this.textbox.focus()\n }\n this.textbox.setAttribute(\n 'placeholder',\n this.textbox.getAttribute(`data-${mode}`) || '',\n )\n this.root.setAttribute('data-mode', mode)\n }\n\n show() {\n super.show()\n this.root.removeAttribute('data-mode')\n }\n\n addHttpProtocol(url: string) {\n let result = url\n if (!url) {\n return ''\n }\n if (!hadProtocol(url)) {\n result = `${this.options.autoProtocol}://${url}`\n }\n return result\n }\n}\n"],"names":["BaseTooltip","LinkBlot","debounce","CHANGE_LANGUAGE_EVENT","link","Range","isNullOrUndefined","hadProtocol","EN_US"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"formats.cjs.js","sources":["../../../../src/modules/mathlive/formats.ts"],"sourcesContent":["import type { MathfieldElement } from 'mathlive'\nimport type { Root } from 'parchment'\nimport Quill from 'quill'\n\nconst Parchment = Quill.import('parchment')\nexport type MathliveBlotMode = 'dialog' | 'only-read'\nexport class MathliveBlot extends Parchment.EmbedBlot {\n static blotName = 'mathlive'\n static tagName = 'math-field'\n static className = 'ql-math-field'\n mode: MathliveBlotMode\n\n static create(obj: { value: string, mode: MathliveBlotMode }) {\n const el = super.create() as MathfieldElement\n el.setAttribute('mode', obj.mode)\n el.classList.add('view')\n el.innerHTML = obj.value\n el.setValue(obj.value)\n return el\n }\n\n static value(domNode: MathfieldElement) {\n return {\n value: domNode.value,\n mode: domNode.getAttribute('mode'),\n }\n }\n\n constructor(scroll: Root, public domNode: MathfieldElement) {\n super(scroll, domNode)\n domNode.setAttribute('contenteditable', 'false')\n this.mode = (domNode.getAttribute('mode') || 'only-read') as MathliveBlotMode\n }\n\n html() {\n const formula = this.domNode.value\n return `<math-field class=\"ql-math-field view\" contenteditable=\"false\" mode=\"${this.mode}\">${formula}</math-field>`\n }\n}\n"],"names":[],"mappings":";;;;;;AAIA,MAAM,YAAY,MAAM,OAAO,WAAW;AAE7B,MAAA,qBAAqB,UAAU,UAAU;AAAA,EAsBpD,YAAY,QAAqB,SAA2B;AAC1D,UAAM,QAAQ,OAAO;AAnBvB;AAkBiC,SAAA,UAAA;AAEvB,YAAA,aAAa,mBAAmB,OAAO;AAC/C,SAAK,OAAQ,QAAQ,aAAa,MAAM,KAAK;AAAA,EAAA;AAAA,EAnB/C,OAAO,OAAO,KAAgD;AACtD,UAAA,KAAK,MAAM,OAAO;AACrB,OAAA,aAAa,QAAQ,IAAI,IAAI;AAC7B,OAAA,UAAU,IAAI,MAAM;AACvB,OAAG,YAAY,IAAI;AAChB,OAAA,SAAS,IAAI,KAAK;AACd,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,MAAM,SAA2B;AAC/B,WAAA;AAAA,MACL,OAAO,QAAQ;AAAA,MACf,MAAM,QAAQ,aAAa,MAAM;AAAA,IACnC;AAAA,EAAA;AAAA,EASF,OAAO;AACC,UAAA,UAAU,KAAK,QAAQ;AAC7B,WAAO,wEAAwE,KAAK,IAAI,KAAK,OAAO;AAAA,EAAA;AAExG;AA/BE,cADW,cACJ,YAAW;AAClB,cAFW,cAEJ,WAAU;AACjB,cAHW,cAGJ,aAAY;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"module.cjs.js","sources":["../../../../src/modules/mathlive/module.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { MathliveBlot } from './formats'\r\nimport { MathliveTooltip } from './tooltip'\r\n\r\nexport class MathliveModule {\r\n tooltip: MathliveTooltip\r\n static register() {\r\n Quill.register({ [`formats/${MathliveBlot.blotName}`]: MathliveBlot }, true)\r\n }\r\n\r\n constructor(public quill: Quill) {\r\n this.tooltip = new MathliveTooltip(quill)\r\n\r\n this.quill.root.addEventListener(\r\n 'click',\r\n (e: MouseEvent) => {\r\n if (!this.quill.isEnabled()) return\r\n const path = e.composedPath() as HTMLElement[]\r\n if (!path || path.length <= 0) return\r\n\r\n const mathliveNode = path.find(node => node.tagName && node.tagName.toUpperCase() === MathliveBlot.tagName.toUpperCase() && node.classList.contains(MathliveBlot.className))\r\n const mathliveBlot = Quill.find(mathliveNode) as MathliveBlot | null\r\n if (mathliveBlot) {\r\n const { value, mode } = MathliveBlot.value(mathliveBlot.domNode)\r\n if (mode === 'dialog') {\r\n this.createDialog(value)\r\n }\r\n }\r\n },\r\n true,\r\n )\r\n }\r\n\r\n createDialog(value?: string) {\r\n this.tooltip.edit(value)\r\n }\r\n}\r\n"],"names":["MathliveTooltip","MathliveBlot"],"mappings":";;;;;;;;AAIO,MAAM,eAAe;AAAA,EAM1B,YAAmB,OAAc;AALjC;AAKmB,SAAA,QAAA;AACZ,SAAA,UAAU,IAAIA,QAAA,gBAAgB,KAAK;AAExC,SAAK,MAAM,KAAK;AAAA,MACd;AAAA,MACA,CAAC,MAAkB;AACjB,YAAI,CAAC,KAAK,MAAM,YAAa;AACvB,cAAA,OAAO,EAAE,aAAa;AAC5B,YAAI,CAAC,QAAQ,KAAK,UAAU,EAAG;AAE/B,cAAM,eAAe,KAAK,KAAK,UAAQ,KAAK,WAAW,KAAK,QAAQ,kBAAkBC,qBAAa,QAAQ,iBAAiB,KAAK,UAAU,SAASA,qBAAa,SAAS,CAAC;AACrK,cAAA,eAAe,MAAM,KAAK,YAAY;AAC5C,YAAI,cAAc;AAChB,gBAAM,EAAE,OAAO,SAASA,QAAa,aAAA,MAAM,aAAa,OAAO;AAC/D,cAAI,SAAS,UAAU;AACrB,iBAAK,aAAa,KAAK;AAAA,UAAA;AAAA,QACzB;AAAA,MAEJ;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAAA,EAxBF,OAAO,WAAW;AACV,UAAA,SAAS,EAAE,CAAC,WAAWA,qBAAa,QAAQ,EAAE,GAAGA,qBAAa,GAAG,IAAI;AAAA,EAAA;AAAA,EA0B7E,aAAa,OAAgB;AACtB,SAAA,QAAQ,KAAK,KAAK;AAAA,EAAA;AAE3B;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tooltip.cjs.js","sources":["../../../../src/modules/mathlive/tooltip.ts"],"sourcesContent":["import type { MathfieldElement } from 'mathlive'\nimport type { Bounds } from 'quill/core/selection'\nimport type TypeTooltip from 'quill/ui/tooltip'\nimport Quill from 'quill'\nimport { isString } from '../../utils/is'\n\nconst Delta = Quill.import('delta')\nconst Tooltip = Quill.import('ui/tooltip') as typeof TypeTooltip\nexport class MathliveTooltip extends Tooltip {\n static TEMPLATE = ``\n\n mathliveDom: MathfieldElement\n editValue?: string\n\n constructor(quill: Quill, boundsContainer?: HTMLElement) {\n super(quill, boundsContainer)\n this.mathliveDom = document.createElement('math-field') as MathfieldElement\n this.mathliveDom.classList.add('ql-math-field')\n this.root.appendChild(this.mathliveDom)\n this.root.classList.add('math-field-tooltip')\n this.listen()\n }\n\n listen() {\n this.mathliveDom.addEventListener('blur', (event) => {\n this.hide()\n })\n this.root.addEventListener('keydown', (event) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n this.save()\n }\n else if (event.key === 'Escape') {\n event.preventDefault()\n this.cancel()\n }\n })\n }\n\n cancel() {\n this.hide()\n this.restoreFocus()\n }\n\n edit(value?: string) {\n this.editValue = value\n this.root.classList.remove('ql-hidden')\n this.root.classList.add('ql-editing')\n this.mathliveDom.setValue(value || '')\n const range = this.quill.getSelection()\n const bounds = range ? this.quill.getBounds(range) : null\n if (bounds != null) {\n this.position(bounds)\n }\n this.show()\n this.mathliveDom.focus()\n }\n\n restoreFocus() {\n this.mathliveDom.blur()\n this.quill.focus({ preventScroll: true })\n }\n\n save() {\n const range = this.quill.getSelection(true)\n const inputValue = this.mathliveDom.value\n if (!inputValue) return\n const contentData = this.quill.getContents(range.index, 1).ops[0].insert\n let deleteCount = 0\n if (!isString(contentData) && contentData.mathlive) {\n deleteCount += 1\n }\n const delta = new Delta()\n .retain(range.index)\n .delete(Math.max(deleteCount, range.length))\n .insert({ mathlive: { value: inputValue, mode: 'dialog' } })\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT)\n this.hide()\n }\n\n position(reference: Bounds) {\n const adjustedReference = { ...reference }\n adjustedReference.left = reference.left + this.root.offsetWidth / 2 - reference.width / 2\n return super.position(adjustedReference)\n }\n}\n"],"names":["isString"],"mappings":";;;;;;;AAMA,MAAM,QAAQ,MAAM,OAAO,OAAO;AAClC,MAAM,UAAU,MAAM,OAAO,YAAY;AAClC,MAAM,wBAAwB,QAAQ;AAAA,EAM3C,YAAY,OAAc,iBAA+B;AACvD,UAAM,OAAO,eAAe;AAJ9B;AACA;AAIO,SAAA,cAAc,SAAS,cAAc,YAAY;AACjD,SAAA,YAAY,UAAU,IAAI,eAAe;AACzC,SAAA,KAAK,YAAY,KAAK,WAAW;AACjC,SAAA,KAAK,UAAU,IAAI,oBAAoB;AAC5C,SAAK,OAAO;AAAA,EAAA;AAAA,EAGd,SAAS;AACP,SAAK,YAAY,iBAAiB,QAAQ,CAAC,UAAU;AACnD,WAAK,KAAK;AAAA,IAAA,CACX;AACD,SAAK,KAAK,iBAAiB,WAAW,CAAC,UAAU;AAC3C,UAAA,MAAM,QAAQ,SAAS;AACzB,cAAM,eAAe;AACrB,aAAK,KAAK;AAAA,MAAA,WAEH,MAAM,QAAQ,UAAU;AAC/B,cAAM,eAAe;AACrB,aAAK,OAAO;AAAA,MAAA;AAAA,IACd,CACD;AAAA,EAAA;AAAA,EAGH,SAAS;AACP,SAAK,KAAK;AACV,SAAK,aAAa;AAAA,EAAA;AAAA,EAGpB,KAAK,OAAgB;AACnB,SAAK,YAAY;AACZ,SAAA,KAAK,UAAU,OAAO,WAAW;AACjC,SAAA,KAAK,UAAU,IAAI,YAAY;AAC/B,SAAA,YAAY,SAAS,SAAS,EAAE;AAC/B,UAAA,QAAQ,KAAK,MAAM,aAAa;AACtC,UAAM,SAAS,QAAQ,KAAK,MAAM,UAAU,KAAK,IAAI;AACrD,QAAI,UAAU,MAAM;AAClB,WAAK,SAAS,MAAM;AAAA,IAAA;AAEtB,SAAK,KAAK;AACV,SAAK,YAAY,MAAM;AAAA,EAAA;AAAA,EAGzB,eAAe;AACb,SAAK,YAAY,KAAK;AACtB,SAAK,MAAM,MAAM,EAAE,eAAe,MAAM;AAAA,EAAA;AAAA,EAG1C,OAAO;AACL,UAAM,QAAQ,KAAK,MAAM,aAAa,IAAI;AACpC,UAAA,aAAa,KAAK,YAAY;AACpC,QAAI,CAAC,WAAY;AACX,UAAA,cAAc,KAAK,MAAM,YAAY,MAAM,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE;AAClE,QAAI,cAAc;AAClB,QAAI,CAACA,GAAAA,SAAS,WAAW,KAAK,YAAY,UAAU;AACnC,qBAAA;AAAA,IAAA;AAEX,UAAA,QAAQ,IAAI,MAAA,EACf,OAAO,MAAM,KAAK,EAClB,OAAO,KAAK,IAAI,aAAa,MAAM,MAAM,CAAC,EAC1C,OAAO,EAAE,UAAU,EAAE,OAAO,YAAY,MAAM,SAAS,GAAG;AAC7D,SAAK,MAAM,eAAe,OAAO,MAAM,QAAQ,IAAI;AACnD,SAAK,MAAM,aAAa,MAAM,QAAQ,GAAG,MAAM,QAAQ,MAAM;AAC7D,SAAK,KAAK;AAAA,EAAA;AAAA,EAGZ,SAAS,WAAmB;AACpB,UAAA,oBAAoB,EAAE,GAAG,UAAU;AACvB,sBAAA,OAAO,UAAU,OAAO,KAAK,KAAK,cAAc,IAAI,UAAU,QAAQ;AACjF,WAAA,MAAM,SAAS,iBAAiB;AAAA,EAAA;AAE3C;AA7EE,cADW,iBACJ,YAAW;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mention-link.cjs.js","sources":["../../../../src/modules/mention/mention-link.ts"],"sourcesContent":["import type TypeEmbed from 'quill/blots/embed'\nimport type TypeScroll from 'quill/blots/scroll'\nimport Quill from 'quill'\nimport { DEFAULT_MENTION_CHAR, MENTION_CHAR, ON_MENTION_LINK_REMOVE } from './constants'\n\nconst Embed = Quill.import('blots/embed') as typeof TypeEmbed\n\nexport class MentionLink extends Embed {\n static blotName: string\n static tagName: string\n static className: string\n mentionData: any\n\n static create(data) {\n let node: HTMLElement\n if (data.link) {\n node = document.createElement('a')\n node.setAttribute('href', data.link)\n node.setAttribute('target', data.target)\n }\n else {\n node = document.createElement(this.tagName)\n }\n node.classList.add(this.className)\n node.dataset.mentionId = data.name || (data.mention && data.mention[data.searchKey || 'name']) || ''\n node.setAttribute('title', data.text)\n node.setAttribute(MENTION_CHAR, data.char)\n node.textContent = data.char + data.text\n return node\n }\n\n static value(domNode: HTMLElement) {\n const value: Record<string, any> = {\n char: domNode.getAttribute(MENTION_CHAR) || DEFAULT_MENTION_CHAR,\n text: domNode.getAttribute('title'),\n name: domNode.dataset.mentionId,\n }\n if (domNode.tagName.toLowerCase() === 'a' && domNode.hasAttribute('href')) {\n value.link = domNode.getAttribute('href')\n value.target = domNode.getAttribute('target')\n }\n return value\n }\n\n constructor(public scroll: TypeScroll, domNode, data) {\n super(scroll, domNode)\n this.mentionData = data\n }\n\n value() {\n // fix: 将@提醒内容加入到 Delta 里,以解决输入空格,@提醒内容被删除的问题\n // return ' ';\n return super.value()\n }\n\n remove() {\n this.scroll.emitter.emit(ON_MENTION_LINK_REMOVE, this.mentionData)\n return super.remove()\n }\n}\n\nMentionLink.blotName = 'mention'\nMentionLink.tagName = 'span'\nMentionLink.className = 'ql-mention-link'\n"],"names":["MENTION_CHAR","DEFAULT_MENTION_CHAR","ON_MENTION_LINK_REMOVE"],"mappings":";;;;;;;AAKA,MAAM,QAAQ,MAAM,OAAO,aAAa;AAEjC,MAAM,oBAAoB,MAAM;AAAA,EAqCrC,YAAmB,QAAoB,SAAS,MAAM;AACpD,UAAM,QAAQ,OAAO;AAlCvB;AAiCmB,SAAA,SAAA;AAEjB,SAAK,cAAc;AAAA,EAAA;AAAA,EAjCrB,OAAO,OAAO,MAAM;AACd,QAAA;AACJ,QAAI,KAAK,MAAM;AACN,aAAA,SAAS,cAAc,GAAG;AAC5B,WAAA,aAAa,QAAQ,KAAK,IAAI;AAC9B,WAAA,aAAa,UAAU,KAAK,MAAM;AAAA,IAAA,OAEpC;AACI,aAAA,SAAS,cAAc,KAAK,OAAO;AAAA,IAAA;AAEvC,SAAA,UAAU,IAAI,KAAK,SAAS;AAC5B,SAAA,QAAQ,YAAY,KAAK,QAAS,KAAK,WAAW,KAAK,QAAQ,KAAK,aAAa,MAAM,KAAM;AAC7F,SAAA,aAAa,SAAS,KAAK,IAAI;AAC/B,SAAA,aAAaA,wBAAc,KAAK,IAAI;AACpC,SAAA,cAAc,KAAK,OAAO,KAAK;AAC7B,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,MAAM,SAAsB;AACjC,UAAM,QAA6B;AAAA,MACjC,MAAM,QAAQ,aAAaA,UAAAA,YAAY,KAAKC,UAAA;AAAA,MAC5C,MAAM,QAAQ,aAAa,OAAO;AAAA,MAClC,MAAM,QAAQ,QAAQ;AAAA,IACxB;AACI,QAAA,QAAQ,QAAQ,YAAY,MAAM,OAAO,QAAQ,aAAa,MAAM,GAAG;AACnE,YAAA,OAAO,QAAQ,aAAa,MAAM;AAClC,YAAA,SAAS,QAAQ,aAAa,QAAQ;AAAA,IAAA;AAEvC,WAAA;AAAA,EAAA;AAAA,EAQT,QAAQ;AAGN,WAAO,MAAM,MAAM;AAAA,EAAA;AAAA,EAGrB,SAAS;AACP,SAAK,OAAO,QAAQ,KAAKC,UAAA,wBAAwB,KAAK,WAAW;AACjE,WAAO,MAAM,OAAO;AAAA,EAAA;AAExB;AAnDE,cADW,aACJ;AACP,cAFW,aAEJ;AACP,cAHW,aAGJ;AAmDT,YAAY,WAAW;AACvB,YAAY,UAAU;AACtB,YAAY,YAAY;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mention.cjs.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":["DEFAULT_MENTION_CHAR","isNullOrUndefined","ON_MENTION_LINK_REMOVE","MentionLink"],"mappings":"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"}