@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-clipboard.es.js","sources":["../../../src/modules/custom-clipboard.ts"],"sourcesContent":["import type TypeClipboard from 'quill/modules/clipboard'\nimport type FluentEditor from '../fluent-editor'\nimport Quill from 'quill'\nimport {\n ERROR_IMAGE_PLACEHOLDER_CN,\n ERROR_IMAGE_PLACEHOLDER_EN,\n} from '../config/base64-image'\nimport { BIG_DELTA_LIMIT } from '../config/editor.config'\nimport {\n hexToRgbA,\n imageUrlToFile,\n isNullOrUndefined,\n omit,\n replaceDeltaImage,\n splitWithBreak,\n} from '../config/editor.utils'\nimport { isString } from '../utils/is'\n\nconst Clipboard = Quill.import('modules/clipboard') as typeof TypeClipboard\nconst Delta = Quill.import('delta')\n\nexport class CustomClipboard extends Clipboard {\n declare quill: FluentEditor\n\n prepareMatching(container: HTMLElement, nodeMatches) {\n const elementMatchers = []\n const textMatchers = []\n this.matchers.forEach((pair) => {\n const [selector, matcher] = pair\n if (selector === Node.TEXT_NODE) {\n textMatchers.push(matcher)\n }\n else if (selector === Node.ELEMENT_NODE) {\n elementMatchers.push(matcher)\n }\n else if (isString(selector)) {\n // word 的 v:shape 系列标签只能通过 getElementsByTagName 获取\n const vRegex = /v:(.+)/\n const nodeList = Array.from(\n vRegex.test(selector)\n ? container.getElementsByTagName(selector)\n : container.querySelectorAll(selector),\n )\n nodeList.forEach((node) => {\n if (nodeMatches.has(node)) {\n const matches = nodeMatches.get(node)\n matches.push(matcher)\n }\n else {\n nodeMatches.set(node, [matcher])\n }\n })\n }\n })\n return [elementMatchers, textMatchers]\n }\n\n onCaptureCopy(e, isCut = false) {\n if (e.defaultPrevented) {\n return\n }\n e.preventDefault()\n const [range] = this.quill.selection.getRange()\n if (isNullOrUndefined(range)) {\n return\n }\n const { html, text } = this.onCopy(range, isCut)\n\n // 兼容IE11浏览器`\n if (!e.clipboardData) {\n e.clipboardData = {\n types: 'text/plain',\n setData: (_type, value) => {\n // @ts-ignore\n return window.clipboardData.setData('Text', value)\n },\n }\n }\n\n // 复制代码时移除utf8中产生的不间断空格\\u00A0\n let plainText = text\n if (html.startsWith('<pre>')) {\n plainText = text.replace(/\\u00A0/g, ' ')\n }\n\n e.clipboardData.setData('text/html', html)\n e.clipboardData.setData('text/plain', plainText)\n if (isCut) {\n this.quill.deleteText(range, Quill.sources.USER)\n }\n }\n\n onCapturePaste(e: ClipboardEvent) {\n if (e.defaultPrevented || !this.quill.isEnabled()) {\n return\n }\n e.preventDefault()\n const range = this.quill.getSelection(true)\n if (isNullOrUndefined(range)) {\n return\n }\n\n // 兼容IE11浏览器\n if (!e.clipboardData) {\n // @ts-ignore\n e.clipboardData = {\n types: 'text/plain',\n getData: () => {\n // @ts-ignore\n return window.clipboardData.getData('Text')\n },\n }\n }\n\n const html = e.clipboardData.getData('text/html')\n const text = e.clipboardData.getData('text/plain')\n const files = Array.from(e.clipboardData.files || [])\n const msExcelCheck = /<meta.*?Microsoft Excel\\s[\\d].*?>/\n\n if (html.search(msExcelCheck) === -1 && files.length > 0) {\n this.quill.uploader.upload(range, files)\n }\n else {\n const msWordCheck1\n = /<meta\\s*name=\"?generator\"?\\s*content=\"?microsoft\\s*word\\s*\\d+\"?\\/?>/i\n const msWordCheck2 = /xmlns:o=\"urn:schemas-microsoft-com/i\n const result = { html, text, files, rtf: null }\n if (html.search(msExcelCheck) !== -1) {\n result.html = renderStyles(html)\n }\n if (msWordCheck1.test(html) || msWordCheck2.test(html)) {\n // TODO: 当word文档包含heading时text/rtf读取为空,无法获取hex图片,待修复。可参考ckeditor5/issues/2493\n result.rtf = e.clipboardData.getData('text/rtf')\n }\n this.onPaste(range, result)\n }\n }\n\n onPaste(range, { html, text, files: clipboardFiles, rtf }) {\n const hexImages = this.extractImageDataFromRtf(rtf)\n const rootBgColor = getComputedStyle(this.quill.root).backgroundColor\n const formats = this.quill.getFormat(range.index)\n let pastedDelta = this.convert({ text, html }, formats)\n pastedDelta = replaceDeltaWhiteSpace(pastedDelta, rootBgColor)\n const deltaLength = pastedDelta.ops.length\n\n let loadingTipsContainer\n if (deltaLength > BIG_DELTA_LIMIT) {\n loadingTipsContainer = this.quill.addContainer('ql-loading-tips')\n loadingTipsContainer.innerHTML = this.quill.getLangText('pasting')\n }\n\n const linePos = { index: range.index, length: range.length, fix: 0 }\n const [line, offset] = this.quill.getLine(range.index)\n\n const handlePasteContent = (content: any) => {\n const pastedContent = content\n\n const oldDelta = new Delta().retain(linePos.index).delete(linePos.length)\n const delta = oldDelta.concat(pastedContent)\n\n setTimeout(() => {\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(\n delta.length() - linePos.length - linePos.fix,\n Quill.sources.SILENT,\n )\n this.quill.scrollSelectionIntoView()\n if (loadingTipsContainer) {\n loadingTipsContainer.remove()\n }\n })\n }\n\n ;(async () => {\n try {\n const [files, placeholders, originalUrls, imageIndexs] = this.flipFilesArray(\n await this.extractFilesFromDelta(\n pastedDelta,\n clipboardFiles,\n hexImages,\n ),\n )\n\n if (files.length === 0) {\n handlePasteContent(pastedDelta)\n }\n else {\n if (this.quill.options.editorPaste && this.quill.options.editorPaste.observers.length !== 0) {\n // 设置editorPaste回调的情况\n this.quill.options.editorPaste.emit({\n files,\n callback: ({ code, message, data }) => {\n if (code === 0) {\n const { imageUrls } = data\n pastedDelta = replaceDeltaImage(\n pastedDelta,\n imageUrls,\n placeholders,\n )\n handlePasteContent(pastedDelta)\n }\n else {\n console.error('error message:', message)\n }\n },\n })\n }\n else {\n // 没有originalUrls 也没有文件粘贴\n if (files[0] !== undefined || originalUrls.length === 0) {\n // 没有设置editorPaste回调的情况下,File格式的占位图需要手动转换成url格式,插入到编辑器中\n const imageUrls = await this.files2urls(\n files,\n placeholders,\n originalUrls,\n pastedDelta,\n imageIndexs,\n )\n pastedDelta = replaceDeltaImage(\n pastedDelta,\n imageUrls,\n placeholders,\n )\n }\n handlePasteContent(pastedDelta)\n }\n }\n }\n catch (_e) {\n throw new Error('Paste failed.')\n }\n })()\n }\n\n files2urls(files: File[], placeholders, originalUrls, pastedDelta, imageIndexs) {\n return Promise.all(\n files.map(async (imageFile, index) => {\n const netImgExp = /^((http|https)\\:)?\\/\\/([\\s\\S]+)$/\n if (\n !placeholders[index]\n && originalUrls[index]\n && netImgExp.test(originalUrls[index])\n ) {\n // 不是占位图的普通url图片直接返回url\n return new Promise((resolve) => {\n resolve(originalUrls[index])\n })\n }\n else {\n const range = this.getImgSelection(pastedDelta, imageIndexs[index])\n this.quill.uploader.upload(range, [imageFile])\n }\n }),\n )\n }\n\n flipFilesArray(filesArr) {\n const files = []\n const placeholders = []\n const originalUrls = []\n const imageIndexs = []\n filesArr.forEach((item: any) => {\n if (item) {\n const [file, placeholder, originalUrl, imageIndex] = item\n files.push(file)\n placeholders.push(placeholder)\n originalUrls.push(originalUrl)\n if (imageIndex === 0 || imageIndex) {\n imageIndexs.push(imageIndex)\n }\n }\n })\n return [files, placeholders, originalUrls, imageIndexs]\n }\n\n // 将图片从hex转为base64\n convertHexToBase64(hexString) {\n return btoa(\n hexString\n .match(/\\w{2}/g)\n .map((char) => {\n return String.fromCharCode(Number.parseInt(char, 16))\n })\n .join(''),\n )\n }\n\n // 匹配rtf中的图片,存储为{hex, type}对象数组\n extractImageDataFromRtf(rtfData) {\n if (!rtfData) {\n return []\n }\n\n const regexPictureHeader\n = /{\\\\pict[\\s\\S]+?\\\\bliptag-?\\d+(\\\\blipupi-?\\d+)?({\\\\\\*\\\\blipuid\\s?[\\da-fA-F]+)?[\\s}]*?/\n const regexPicture = new RegExp(\n `(?:(${regexPictureHeader.source}))([\\\\da-fA-F\\\\s]+)\\\\}`,\n 'g',\n )\n const images = rtfData.match(regexPicture)\n const result = []\n\n if (images) {\n for (const image of images) {\n let imageType = ''\n\n if (image.includes('\\\\pngblip')) {\n imageType = 'image/png'\n }\n else if (image.includes('\\\\jpegblip')) {\n imageType = 'image/jpeg'\n }\n\n if (imageType) {\n result.push({\n hex: image\n .replace(regexPictureHeader, '')\n .replace(/[^\\da-fA-F]/g, ''),\n type: imageType,\n })\n }\n }\n }\n\n return result\n }\n\n extractFilesFromDelta(delta, clipboardFiles, hexImages?) {\n let index = -1\n return Promise.all(\n delta.map(async (op) => {\n index++\n const image = op.insert.image\n if (!image || image.hasExisted) {\n return\n }\n\n let file\n let isPlaceholderImage = false\n let imageIndex\n try {\n // hex 图片存在则为 file:/// 协议本地图片,使用 hex 图片转为 base64 读取\n const hexImage = hexImages.length && hexImages.shift()\n const newImage\n = hexImage\n && `data:${hexImage.type};base64,${this.convertHexToBase64(\n hexImage.hex,\n )}`\n imageIndex = index\n file = await imageUrlToFile(newImage || image.src || image)\n }\n catch (_err) {\n if (clipboardFiles.length !== 0) {\n // 跨域获取图片失败时从剪切板获取图片\n const clipboardFile = clipboardFiles[0]\n const imageType\n = clipboardFile.type?.indexOf('image') === -1\n ? 'image/png'\n : clipboardFile.type\n const blob = clipboardFile.slice(0, clipboardFile.size, imageType)\n file = new File([blob], `image-CORS-${new Date().getTime()}.png`, {\n type: imageType,\n })\n }\n else if (image.src.startsWith('http')) {\n // 什么都不做\n }\n else {\n // 剪切板中无图片,用失败占位图替换\n const errorImagePlaceholderJpg\n = this.quill.getLangText('img-error') === 'Image Copy Error'\n ? ERROR_IMAGE_PLACEHOLDER_EN\n : ERROR_IMAGE_PLACEHOLDER_CN\n file = await imageUrlToFile(errorImagePlaceholderJpg, true)\n isPlaceholderImage = true\n }\n }\n\n return [file, isPlaceholderImage, image, imageIndex]\n }),\n )\n }\n\n getImgSelection(delta, imageIndex) {\n let length = 0\n delta.ops.every((op, index) => {\n if (index === imageIndex) {\n return false\n }\n if (typeof op.insert === 'string') {\n length += op.insert.length\n }\n return true\n })\n const range = {\n index: length,\n length: 0,\n }\n return range\n }\n}\n\nfunction rebuildDelta(delta, cellLine) {\n const { cell: cellId, colspan, row: rowId, rowspan } = cellLine\n const buildedDelta = delta.reduce((newDelta, op) => {\n if (op.insert && typeof op.insert === 'string') {\n const lines = splitWithBreak(op.insert)\n\n lines.forEach((text) => {\n if (text === '\\n') {\n // 对换行增加 table-cell-line 格式,以避免表格断开\n newDelta.insert('\\n', {\n ...op.attributes,\n 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan },\n })\n }\n else {\n text = text.endsWith('\\r') ? text.slice(0, -1) : text\n newDelta.insert(\n text,\n omit(op.attributes, ['table', 'table-cell-line']),\n )\n }\n })\n }\n else {\n newDelta.insert(op.insert, op.attributes)\n }\n\n return newDelta\n }, new Delta())\n\n return buildedDelta\n}\n\nfunction replaceStrWhiteSpace(str) {\n const isWhiteSpace = value => /^(\\u3000|\\u0020){1}$/.test(value) // 空白字符\n let textWithWhiteSpace = ''\n let beginHasChar = false\n for (const char of str) {\n if (isWhiteSpace(char) && !beginHasChar) {\n textWithWhiteSpace += '\\u00A0'\n }\n else {\n textWithWhiteSpace += char\n beginHasChar = true\n }\n }\n return textWithWhiteSpace\n}\n\nfunction replaceDeltaWhiteSpace(delta, rootBgColor?) {\n return delta.reduce((newDelta, op) => {\n // fix: 当粘贴文字颜色和编辑器背景色一致且自身无背景色的情况下移除文字颜色样式,避免误导用户粘贴无效\n if (\n rootBgColor\n && op.attributes\n && op.attributes.color\n && !op.attributes.background\n ) {\n const originColor = op.attributes.color\n const fontColor\n = originColor.indexOf('#') === 0 ? hexToRgbA(originColor) : originColor\n if (\n fontColor === rootBgColor\n || (fontColor === 'rgba(255,255,255,1)'\n && rootBgColor === 'rgba(0, 0, 0, 0)')\n ) {\n delete op.attributes.color\n }\n }\n if (op.insert && typeof op.insert === 'string') {\n const lines = splitWithBreak(op.insert)\n let insertWithWhiteSpace = ''\n lines.forEach((text) => {\n insertWithWhiteSpace += replaceStrWhiteSpace(text)\n })\n newDelta.insert(insertWithWhiteSpace, op.attributes)\n }\n else {\n newDelta.insert(op.insert, op.attributes)\n }\n return newDelta\n }, new Delta())\n}\n\nfunction renderStyles(html) {\n let htmlString = html\n // Trim unnecessary parts.\n htmlString = htmlString.substring(\n htmlString.indexOf('<html '),\n htmlString.length,\n )\n htmlString = htmlString.substring(\n 0,\n htmlString.lastIndexOf('</html>') + '</html>'.length,\n )\n\n // Add temporary iframe.\n const iframe = document.createElement('iframe')\n iframe.style.display = 'none'\n document.body.appendChild(iframe)\n\n const iframeDoc = iframe.contentDocument || iframe.contentWindow.document\n iframeDoc.open()\n iframeDoc.write(htmlString)\n iframeDoc.close()\n\n let collection\n let pointer\n const rules\n = iframeDoc.styleSheets[iframeDoc.styleSheets.length - 1].cssRules\n\n // Convert internal styles to inline style of respective node.\n for (let idx = 0; idx < rules.length; idx++) {\n if ((rules[idx] as CSSStyleRule).selectorText === '') {\n continue\n }\n collection = iframeDoc.body.querySelectorAll(\n (rules[idx] as CSSStyleRule).selectorText,\n )\n\n for (pointer = 0; pointer < collection.length; pointer++) {\n collection[pointer].style.cssText += (\n rules[idx] as CSSStyleRule\n ).style.cssText\n }\n }\n\n // @ts-ignore\n const convertedString = iframeDoc.firstChild.outerHTML\n // Remove temporary iframe.\n iframe.parentNode.removeChild(iframe)\n\n return convertedString\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action.es.js","sources":["../../../../../src/modules/custom-image/actions/action.ts"],"sourcesContent":["import type { BlotFormatter } from '../blot-formatter'\n\nexport class Action {\n formatter: BlotFormatter\n\n constructor(formatter: BlotFormatter) {\n this.formatter = formatter\n }\n\n onCreate() {}\n\n onDestroy() {}\n\n onUpdate() {}\n}\n"],"names":[],"mappings":";;;AAEO,MAAM,OAAO;AAAA,EAGlB,YAAY,WAA0B;AAFtC;AAGE,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,WAAW;AAAA,EAAC;AAAA,EAEZ,YAAY;AAAA,EAAC;AAAA,EAEb,WAAW;AAAA,EAAC;AACd;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-resize-action.es.js","sources":["../../../../../src/modules/custom-image/actions/custom-resize-action.ts"],"sourcesContent":["import { Action } from './action'\n\nconst MIN_WIDTH = 40\n\nfunction getElementStyle(element) {\n return element.currentStyle\n ? element.currentStyle\n : window.getComputedStyle(element, null)\n}\nexport class CustomResizeAction extends Action {\n topLeftHandle: HTMLElement\n topRightHandle: HTMLElement\n bottomRightHandle: HTMLElement\n bottomLeftHandle: HTMLElement\n dragHandle: HTMLElement\n dragStartX: number\n preDragWidth: number\n targetRatio: number\n maxWidth: number\n minWidth: number\n\n constructor(formatter) {\n super(formatter)\n this.topLeftHandle = this.createHandle('top-left', 'nwse-resize')\n this.topRightHandle = this.createHandle('top-right', 'nesw-resize')\n this.bottomRightHandle = this.createHandle('bottom-right', 'nwse-resize')\n this.bottomLeftHandle = this.createHandle('bottom-left', 'nesw-resize')\n this.dragHandle = null\n this.dragStartX = 0\n this.preDragWidth = 0\n this.targetRatio = 0\n this.maxWidth = 0\n this.minWidth = MIN_WIDTH\n }\n\n onCreate() {\n const target: any = this.formatter.currentSpec.getTargetElement()\n this.formatter.overlay.setAttribute('data-image', target.src)\n this.formatter.overlay.appendChild(this.topLeftHandle)\n this.formatter.overlay.appendChild(this.topRightHandle)\n this.formatter.overlay.appendChild(this.bottomRightHandle)\n this.formatter.overlay.appendChild(this.bottomLeftHandle)\n this.repositionHandles(this.formatter.options.resize.handleStyle)\n }\n\n onDestroy() {\n this.setCursor('')\n this.formatter.overlay.removeChild(this.topLeftHandle)\n this.formatter.overlay.removeChild(this.topRightHandle)\n this.formatter.overlay.removeChild(this.bottomRightHandle)\n this.formatter.overlay.removeChild(this.bottomLeftHandle)\n }\n\n createHandle(position: string, cursor: string): HTMLElement {\n const box = document.createElement('div')\n box.classList.add(this.formatter.options.resize.handleClassName)\n box.setAttribute('data-position', position)\n box.style.cursor = cursor\n\n if (this.formatter.options.resize.handleStyle) {\n Object.assign(box.style, this.formatter.options.resize.handleStyle)\n }\n\n box.addEventListener('mousedown', this.onMouseDown)\n return box\n }\n\n repositionHandles(handleStyle: any) {\n let handleXOffset = '0px'\n let handleYOffset = '0px'\n if (handleStyle) {\n if (handleStyle.width) {\n handleXOffset = `${-Number.parseFloat(handleStyle.width) / 2}px`\n }\n if (handleStyle.height) {\n handleYOffset = `${-Number.parseFloat(handleStyle.height) / 2}px`\n }\n }\n\n Object.assign(this.topLeftHandle.style, { left: handleXOffset, top: handleYOffset })\n Object.assign(this.topRightHandle.style, { right: handleXOffset, top: handleYOffset })\n Object.assign(this.bottomRightHandle.style, { right: handleXOffset, bottom: handleYOffset })\n Object.assign(this.bottomLeftHandle.style, { left: handleXOffset, bottom: handleYOffset })\n }\n\n setCursor(value: string) {\n if (document.body) {\n document.body.style.cursor = value\n }\n\n if (this.formatter.currentSpec) {\n const target = this.formatter.currentSpec.getOverlayElement()\n if (target) {\n target.style.cursor = value\n }\n }\n }\n\n onMouseDown = (event: MouseEvent) => {\n if (!(event.target instanceof HTMLElement)) {\n return\n }\n\n this.dragHandle = event.target\n this.setCursor(this.dragHandle.style.cursor)\n\n if (!this.formatter.currentSpec) {\n return\n }\n\n const target = this.formatter.currentSpec.getTargetElement()\n if (!target) {\n return\n }\n event.preventDefault()\n const rect = target.getBoundingClientRect()\n\n this.dragStartX = event.clientX\n this.preDragWidth = rect.width\n this.targetRatio = rect.height / rect.width\n\n let root: HTMLElement\n let rootStyle: any\n const tdWrap = this.findTd(target, 0)\n if (tdWrap) {\n root = tdWrap\n rootStyle = getElementStyle(tdWrap)\n }\n else {\n root = this.formatter.quill.root\n rootStyle = getElementStyle(root)\n }\n this.maxWidth = root.clientWidth\n - Number.parseFloat(rootStyle.paddingRight)\n - Number.parseFloat(rootStyle.paddingLeft)\n\n document.addEventListener('mousemove', this.onDrag)\n document.addEventListener('mouseup', this.onMouseUp)\n }\n\n findTd = (node: HTMLElement, level: number) => {\n if (level > 3) {\n return null\n }\n\n const tagName = node.tagName.toUpperCase()\n if (tagName === 'TD') {\n return node\n }\n else {\n const parentNode = node.parentElement\n if (parentNode) {\n return (this.findTd(parentNode, level += 1))\n }\n else {\n return null\n }\n }\n }\n\n onDrag = (event: MouseEvent) => {\n if (!this.formatter.currentSpec) {\n return\n }\n\n const target = this.formatter.currentSpec.getTargetElement()\n if (!target) {\n return\n }\n\n const deltaX = event.clientX - this.dragStartX\n let newWidth = 0\n\n if (this.dragHandle === this.topLeftHandle || this.dragHandle === this.bottomLeftHandle) {\n newWidth = Math.round(this.preDragWidth - deltaX)\n }\n else {\n newWidth = Math.round(this.preDragWidth + deltaX)\n }\n\n let minWidth = this.minWidth\n\n if (this.maxWidth < minWidth) {\n minWidth = this.maxWidth\n }\n\n if (newWidth > this.maxWidth) {\n newWidth = this.maxWidth\n }\n else if (newWidth < minWidth) {\n newWidth = minWidth\n }\n\n const newHeight = this.targetRatio * newWidth\n\n target.setAttribute('width', `${newWidth}`)\n target.setAttribute('height', `${newHeight}`)\n\n this.formatter.update()\n }\n\n onMouseUp = () => {\n this.setCursor('')\n document.removeEventListener('mousemove', this.onDrag)\n document.removeEventListener('mouseup', this.onMouseUp)\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-action.es.js","sources":["../../../../../src/modules/custom-image/actions/delete-action.ts"],"sourcesContent":["import type { Parchment as TypeParchment } from 'quill'\nimport Quill from 'quill'\nimport { Action } from './action'\n\nexport class DeleteAction extends Action {\n onCreate() {\n document.addEventListener('keyup', this.onKeyUp, true)\n this.formatter.quill.root.addEventListener('input', this.onKeyUp, true)\n }\n\n onDestroy() {\n document.removeEventListener('keyup', this.onKeyUp)\n this.formatter.quill.root.removeEventListener('input', this.onKeyUp)\n }\n\n onKeyUp = (event: any) => {\n if (!this.formatter.currentSpec) {\n return\n }\n\n // delete or backspace\n if (event.keyCode === 46 || event.keyCode === 8) {\n const blot = Quill.find(this.formatter.currentSpec.getTargetElement()) as TypeParchment.Blot\n if (blot) {\n // TODO: fix later\n // @ts-ignore\n blot.deleteAt(0)\n }\n this.formatter.hide()\n }\n }\n}\n"],"names":[],"mappings":";;;;;AAIO,MAAM,qBAAqB,OAAO;AAAA,EAAlC;AAAA;AAWL,mCAAU,CAAC,UAAe;AACxB,UAAI,CAAC,KAAK,UAAU,aAAa;AAC/B;AAAA,MACF;AAGA,UAAI,MAAM,YAAY,MAAM,MAAM,YAAY,GAAG;AAC/C,cAAM,OAAO,MAAM,KAAK,KAAK,UAAU,YAAY,kBAAkB;AACrE,YAAI,MAAM;AAGR,eAAK,SAAS,CAAC;AAAA,QACjB;AACA,aAAK,UAAU,KAAA;AAAA,MACjB;AAAA,IACF;AAAA;AAAA,EAzBA,WAAW;AACT,aAAS,iBAAiB,SAAS,KAAK,SAAS,IAAI;AACrD,SAAK,UAAU,MAAM,KAAK,iBAAiB,SAAS,KAAK,SAAS,IAAI;AAAA,EACxE;AAAA,EAEA,YAAY;AACV,aAAS,oBAAoB,SAAS,KAAK,OAAO;AAClD,SAAK,UAAU,MAAM,KAAK,oBAAoB,SAAS,KAAK,OAAO;AAAA,EACrE;AAkBF;"}
@@ -0,0 +1,137 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
+ import { isBoolean, isObject } from "../../../utils/is.es.js";
5
+ import { COPY, DOWNLOAD, RIGHT_ALIGN, CENTER_ALIGN, LEFT_ALIGN } from "../options.es.js";
6
+ const ALIGN_ATTR = "data-align";
7
+ function setAlignStyle(el, display, float, margin) {
8
+ el.style.setProperty("display", display);
9
+ el.style.setProperty("float", float);
10
+ el.style.setProperty("margin", margin);
11
+ }
12
+ const alignmentHandler = {
13
+ left: (el, toolbarButtons) => {
14
+ setAlignStyle(el, "inline", "left", "0 1em 1em 0");
15
+ },
16
+ center: (el, toolbarButtons) => {
17
+ setAlignStyle(el, "block", null, "auto");
18
+ },
19
+ right: (el, toolbarButtons) => {
20
+ setAlignStyle(el, "inline", "right", "0 0 1em 1em");
21
+ },
22
+ download: (el, toolbarButtons) => {
23
+ const imageName = el.dataset.title || "image";
24
+ const url = el.src || "";
25
+ if (!url) return;
26
+ const a = document.createElement("a");
27
+ a.href = url;
28
+ a.target = "_blank";
29
+ a.download = imageName;
30
+ a.style.display = "none";
31
+ document.body.appendChild(a);
32
+ a.click();
33
+ a.parentNode.removeChild(a);
34
+ },
35
+ copy: async (el, toolbarButtons) => {
36
+ if (!el.src) return;
37
+ const imageUrl = el.src;
38
+ try {
39
+ const response = await fetch(imageUrl);
40
+ if (!response.ok) {
41
+ throw new Error("Copy image failed");
42
+ }
43
+ const blob = await response.blob();
44
+ await navigator.clipboard.write([new ClipboardItem({ [blob.type]: blob })]);
45
+ } catch (e) {
46
+ throw new Error("Copy image failed");
47
+ }
48
+ }
49
+ };
50
+ const defaultButtons = {
51
+ [LEFT_ALIGN]: {
52
+ name: LEFT_ALIGN,
53
+ icon: `
54
+ <svg viewbox="0 0 18 18">
55
+ <line class="ql-stroke" x1="3" x2="15" y1="9" y2="9"></line>
56
+ <line class="ql-stroke" x1="3" x2="13" y1="14" y2="14"></line>
57
+ <line class="ql-stroke" x1="3" x2="9" y1="4" y2="4"></line>
58
+ </svg>
59
+ `,
60
+ isActive: (el) => el.getAttribute(ALIGN_ATTR) === "left",
61
+ apply: (el, toolbarButtons) => {
62
+ el.setAttribute(ALIGN_ATTR, "left");
63
+ alignmentHandler.left(el, toolbarButtons);
64
+ }
65
+ },
66
+ [CENTER_ALIGN]: {
67
+ name: CENTER_ALIGN,
68
+ icon: `
69
+ <svg viewbox="0 0 18 18">
70
+ <line class="ql-stroke" x1="15" x2="3" y1="9" y2="9"></line>
71
+ <line class="ql-stroke" x1="14" x2="4" y1="14" y2="14"></line>
72
+ <line class="ql-stroke" x1="12" x2="6" y1="4" y2="4"></line>
73
+ </svg>
74
+ `,
75
+ isActive: (el) => el.getAttribute(ALIGN_ATTR) === "center",
76
+ apply: (el, toolbarButtons) => {
77
+ el.setAttribute(ALIGN_ATTR, "center");
78
+ alignmentHandler.center(el, toolbarButtons);
79
+ }
80
+ },
81
+ [RIGHT_ALIGN]: {
82
+ name: RIGHT_ALIGN,
83
+ icon: `
84
+ <svg viewbox="0 0 18 18">
85
+ <line class="ql-stroke" x1="15" x2="3" y1="9" y2="9"></line>
86
+ <line class="ql-stroke" x1="15" x2="5" y1="14" y2="14"></line>
87
+ <line class="ql-stroke" x1="15" x2="9" y1="4" y2="4"></line>
88
+ </svg>
89
+ `,
90
+ isActive: (el) => el.getAttribute(ALIGN_ATTR) === "right",
91
+ apply: (el, toolbarButtons) => {
92
+ el.setAttribute(ALIGN_ATTR, "right");
93
+ alignmentHandler.right(el, toolbarButtons);
94
+ }
95
+ },
96
+ [DOWNLOAD]: {
97
+ name: DOWNLOAD,
98
+ icon: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><path class="ql-fill" d="M26 24v4H6v-4H4v4a2 2 0 0 0 2 2h20a2 2 0 0 0 2-2v-4zm0-10l-1.41-1.41L17 20.17V2h-2v18.17l-7.59-7.58L6 14l10 10z"/></svg>`,
99
+ apply: (el, toolbarButtons) => {
100
+ alignmentHandler.download(el, toolbarButtons);
101
+ }
102
+ },
103
+ [COPY]: {
104
+ name: COPY,
105
+ icon: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><path class="ql-fill" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"/><path class="ql-fill" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"/></svg>`,
106
+ apply: (el, toolbarButtons) => {
107
+ alignmentHandler.copy(el, toolbarButtons);
108
+ }
109
+ }
110
+ };
111
+ class ImageToolbarButtons {
112
+ constructor(options) {
113
+ __publicField(this, "buttons");
114
+ this.buttons = Object.entries(options.buttons).reduce((acc, [name, button]) => {
115
+ if (isBoolean(button) && button && defaultButtons[name]) {
116
+ acc[name] = defaultButtons[name];
117
+ } else if (isObject(button)) {
118
+ acc[button.name] = button;
119
+ }
120
+ return acc;
121
+ }, {});
122
+ }
123
+ getItems() {
124
+ return Object.keys(this.buttons).map((k) => this.buttons[k]);
125
+ }
126
+ clear(el) {
127
+ el.removeAttribute(ALIGN_ATTR);
128
+ setAlignStyle(el, null, null, null);
129
+ }
130
+ }
131
+ export {
132
+ ALIGN_ATTR,
133
+ ImageToolbarButtons,
134
+ alignmentHandler,
135
+ setAlignStyle
136
+ };
137
+ //# sourceMappingURL=image-toolbar-buttons.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-toolbar-buttons.es.js","sources":["../../../../../src/modules/custom-image/actions/image-toolbar-buttons.ts"],"sourcesContent":["import type { ToolbarButtonOptions, ToolButtonOption } from '../options'\r\nimport { isBoolean, isObject } from '../../../utils/is'\r\nimport { CENTER_ALIGN, COPY, DOWNLOAD, LEFT_ALIGN, RIGHT_ALIGN } from '../options'\r\n\r\nexport const ALIGN_ATTR = 'data-align'\r\n\r\nexport function setAlignStyle(el: HTMLElement, display: string | null, float: string | null, margin: string | null) {\r\n el.style.setProperty('display', display)\r\n el.style.setProperty('float', float)\r\n el.style.setProperty('margin', margin)\r\n}\r\nexport const alignmentHandler = {\r\n left: (el: HTMLElement, toolbarButtons: ImageToolbarButtons) => {\r\n setAlignStyle(el, 'inline', 'left', '0 1em 1em 0')\r\n },\r\n center: (el: HTMLElement, toolbarButtons: ImageToolbarButtons) => {\r\n setAlignStyle(el, 'block', null, 'auto')\r\n },\r\n right: (el: HTMLElement, toolbarButtons: ImageToolbarButtons) => {\r\n setAlignStyle(el, 'inline', 'right', '0 0 1em 1em')\r\n },\r\n download: (el: HTMLImageElement, toolbarButtons: ImageToolbarButtons) => {\r\n const imageName = el.dataset.title || 'image'\r\n const url = el.src || ''\r\n if (!url) return\r\n const a = document.createElement('a')\r\n a.href = url\r\n a.target = '_blank'\r\n a.download = imageName\r\n a.style.display = 'none'\r\n document.body.appendChild(a)\r\n a.click()\r\n a.parentNode.removeChild(a)\r\n },\r\n copy: async (el: HTMLImageElement, toolbarButtons: ImageToolbarButtons) => {\r\n if (!el.src) return\r\n const imageUrl = el.src\r\n try {\r\n const response = await fetch(imageUrl)\r\n if (!response.ok) {\r\n throw new Error('Copy image failed')\r\n }\r\n const blob = await response.blob()\r\n await navigator.clipboard.write([new ClipboardItem({ [blob.type]: blob })])\r\n }\r\n catch (e) {\r\n throw new Error('Copy image failed')\r\n }\r\n },\r\n}\r\nconst defaultButtons: Record<string, ToolButtonOption> = {\r\n [LEFT_ALIGN]: {\r\n name: LEFT_ALIGN,\r\n icon: `\r\n <svg viewbox=\"0 0 18 18\">\r\n <line class=\"ql-stroke\" x1=\"3\" x2=\"15\" y1=\"9\" y2=\"9\"></line>\r\n <line class=\"ql-stroke\" x1=\"3\" x2=\"13\" y1=\"14\" y2=\"14\"></line>\r\n <line class=\"ql-stroke\" x1=\"3\" x2=\"9\" y1=\"4\" y2=\"4\"></line>\r\n </svg>\r\n `,\r\n isActive: el => el.getAttribute(ALIGN_ATTR) === 'left',\r\n apply: (el: HTMLImageElement, toolbarButtons: ImageToolbarButtons) => {\r\n el.setAttribute(ALIGN_ATTR, 'left')\r\n alignmentHandler.left(el, toolbarButtons)\r\n },\r\n },\r\n [CENTER_ALIGN]: {\r\n name: CENTER_ALIGN,\r\n icon: `\r\n <svg viewbox=\"0 0 18 18\">\r\n <line class=\"ql-stroke\" x1=\"15\" x2=\"3\" y1=\"9\" y2=\"9\"></line>\r\n <line class=\"ql-stroke\" x1=\"14\" x2=\"4\" y1=\"14\" y2=\"14\"></line>\r\n <line class=\"ql-stroke\" x1=\"12\" x2=\"6\" y1=\"4\" y2=\"4\"></line>\r\n </svg>\r\n `,\r\n isActive: el => el.getAttribute(ALIGN_ATTR) === 'center',\r\n apply: (el: HTMLImageElement, toolbarButtons: ImageToolbarButtons) => {\r\n el.setAttribute(ALIGN_ATTR, 'center')\r\n alignmentHandler.center(el, toolbarButtons)\r\n },\r\n },\r\n [RIGHT_ALIGN]: {\r\n name: RIGHT_ALIGN,\r\n icon: `\r\n <svg viewbox=\"0 0 18 18\">\r\n <line class=\"ql-stroke\" x1=\"15\" x2=\"3\" y1=\"9\" y2=\"9\"></line>\r\n <line class=\"ql-stroke\" x1=\"15\" x2=\"5\" y1=\"14\" y2=\"14\"></line>\r\n <line class=\"ql-stroke\" x1=\"15\" x2=\"9\" y1=\"4\" y2=\"4\"></line>\r\n </svg>\r\n `,\r\n isActive: el => el.getAttribute(ALIGN_ATTR) === 'right',\r\n apply: (el: HTMLImageElement, toolbarButtons: ImageToolbarButtons) => {\r\n el.setAttribute(ALIGN_ATTR, 'right')\r\n alignmentHandler.right(el, toolbarButtons)\r\n },\r\n },\r\n [DOWNLOAD]: {\r\n name: DOWNLOAD,\r\n icon: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\"><path class=\"ql-fill\" d=\"M26 24v4H6v-4H4v4a2 2 0 0 0 2 2h20a2 2 0 0 0 2-2v-4zm0-10l-1.41-1.41L17 20.17V2h-2v18.17l-7.59-7.58L6 14l10 10z\"/></svg>`,\r\n apply: (el: HTMLImageElement, toolbarButtons: ImageToolbarButtons) => {\r\n alignmentHandler.download(el, toolbarButtons)\r\n },\r\n },\r\n [COPY]: {\r\n name: COPY,\r\n icon: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\"><path class=\"ql-fill\" d=\"M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2\"/><path class=\"ql-fill\" d=\"M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z\"/></svg>`,\r\n apply: (el: HTMLImageElement, toolbarButtons: ImageToolbarButtons) => {\r\n alignmentHandler.copy(el, toolbarButtons)\r\n },\r\n },\r\n}\r\nexport class ImageToolbarButtons {\r\n buttons: Record<string, ToolButtonOption>\r\n\r\n constructor(options: ToolbarButtonOptions) {\r\n this.buttons = Object.entries(options.buttons).reduce((acc, [name, button]) => {\r\n if (isBoolean(button) && button && defaultButtons[name]) {\r\n acc[name] = defaultButtons[name]\r\n }\r\n else if (isObject(button)) {\r\n acc[button.name] = button\r\n }\r\n return acc\r\n }, {})\r\n }\r\n\r\n getItems(): ToolButtonOption[] {\r\n return Object.keys(this.buttons).map(k => this.buttons[k])\r\n }\r\n\r\n clear(el: HTMLElement): void {\r\n el.removeAttribute(ALIGN_ATTR)\r\n setAlignStyle(el, null, null, null)\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbar-action.es.js","sources":["../../../../../src/modules/custom-image/actions/toolbar-action.ts"],"sourcesContent":["import type { BlotFormatter } from '../blot-formatter'\r\nimport { Action } from './action'\r\nimport { ImageToolbarButtons } from './image-toolbar-buttons'\r\nimport { ImageToolbar } from './toolbar'\r\n\r\nexport class ImageToolbarAction extends Action {\r\n toolbar: ImageToolbar\r\n buttons: ImageToolbarButtons\r\n\r\n constructor(formatter: BlotFormatter) {\r\n super(formatter)\r\n this.buttons = new ImageToolbarButtons({\r\n buttons: formatter.options.toolbar.buttons,\r\n })\r\n this.toolbar = new ImageToolbar()\r\n }\r\n\r\n onCreate() {\r\n const toolbar = this.toolbar.create(this.formatter, this.buttons)\r\n this.formatter.overlay.appendChild(toolbar)\r\n }\r\n\r\n onDestroy() {\r\n const toolbar = this.toolbar.getElement()\r\n if (!toolbar) {\r\n return\r\n }\r\n\r\n this.formatter.overlay.removeChild(toolbar)\r\n this.toolbar.destroy()\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;;;AAKO,MAAM,2BAA2B,OAAO;AAAA,EAI7C,YAAY,WAA0B;AACpC,UAAM,SAAS;AAJjB;AACA;AAIE,SAAK,UAAU,IAAI,oBAAoB;AAAA,MACrC,SAAS,UAAU,QAAQ,QAAQ;AAAA,IAAA,CACpC;AACD,SAAK,UAAU,IAAI,aAAA;AAAA,EACrB;AAAA,EAEA,WAAW;AACT,UAAM,UAAU,KAAK,QAAQ,OAAO,KAAK,WAAW,KAAK,OAAO;AAChE,SAAK,UAAU,QAAQ,YAAY,OAAO;AAAA,EAC5C;AAAA,EAEA,YAAY;AACV,UAAM,UAAU,KAAK,QAAQ,WAAA;AAC7B,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AAEA,SAAK,UAAU,QAAQ,YAAY,OAAO;AAC1C,SAAK,QAAQ,QAAA;AAAA,EACf;AACF;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbar.es.js","sources":["../../../../../src/modules/custom-image/actions/toolbar.ts"],"sourcesContent":["import type { BlotFormatter } from '../blot-formatter'\r\nimport type { ToolButtonOption } from '../options'\r\nimport type { ImageToolbarButtons } from './image-toolbar-buttons'\r\n\r\nexport class ImageToolbar {\r\n toolbar?: HTMLElement\r\n buttons: HTMLElement[]\r\n\r\n constructor() {\r\n this.toolbar = null\r\n this.buttons = []\r\n }\r\n\r\n create(formatter: BlotFormatter, toolButton: ImageToolbarButtons): HTMLElement {\r\n const toolbar = document.createElement('div')\r\n toolbar.classList.add(formatter.options.toolbar.mainClassName)\r\n this.addToolbarStyle(formatter, toolbar)\r\n this.addButtons(formatter, toolbar, toolButton)\r\n\r\n this.toolbar = toolbar\r\n return this.toolbar\r\n }\r\n\r\n destroy() {\r\n this.toolbar = null\r\n this.buttons = []\r\n }\r\n\r\n getElement() {\r\n return this.toolbar\r\n }\r\n\r\n addToolbarStyle(formatter: BlotFormatter, toolbar: HTMLElement) {\r\n if (formatter.options.toolbar.mainStyle) {\r\n Object.assign(toolbar.style, formatter.options.toolbar.mainStyle)\r\n }\r\n }\r\n\r\n addButtonStyle(button: HTMLElement, index: number, formatter: BlotFormatter) {\r\n if (formatter.options.toolbar.buttonStyle) {\r\n Object.assign(button.style, formatter.options.toolbar.buttonStyle)\r\n if (index > 0) {\r\n button.style.borderLeftWidth = '0'\r\n }\r\n }\r\n\r\n if (formatter.options.toolbar.svgStyle) {\r\n Object.assign((button.children[0] as HTMLElement).style, formatter.options.toolbar.svgStyle)\r\n }\r\n }\r\n\r\n addButtons(formatter: BlotFormatter, toolbar: HTMLElement, toolButton: ImageToolbarButtons) {\r\n toolButton.getItems().forEach((tool, i) => {\r\n const button = document.createElement('span')\r\n button.classList.add(formatter.options.toolbar.buttonClassName)\r\n button.innerHTML = tool.icon\r\n button.addEventListener('click', () => {\r\n this.onButtonClick(button, formatter, tool, toolButton)\r\n })\r\n this.preselectButton(button, tool, formatter, toolButton)\r\n this.addButtonStyle(button, i, formatter)\r\n this.buttons.push(button)\r\n toolbar.appendChild(button)\r\n })\r\n }\r\n\r\n preselectButton(\r\n button: HTMLElement,\r\n toolButtonOption: ToolButtonOption,\r\n formatter: BlotFormatter,\r\n toolButton: ImageToolbarButtons,\r\n ) {\r\n if (!formatter.currentSpec) {\r\n return\r\n }\r\n\r\n const target = formatter.currentSpec.getTargetElement()\r\n if (!target) {\r\n return\r\n }\r\n\r\n if (toolButtonOption.isActive && toolButtonOption.isActive(target)) {\r\n this.selectButton(formatter, button)\r\n }\r\n }\r\n\r\n onButtonClick(\r\n button: HTMLElement,\r\n formatter: BlotFormatter,\r\n toolButtonOption: ToolButtonOption,\r\n toolButton: ImageToolbarButtons,\r\n ) {\r\n if (!formatter.currentSpec) {\r\n return\r\n }\r\n\r\n const target = formatter.currentSpec.getTargetElement()\r\n if (!target || target.tagName.toLowerCase() !== 'img') {\r\n return\r\n }\r\n\r\n this.clickButton(button, target as HTMLImageElement, formatter, toolButtonOption, toolButton)\r\n }\r\n\r\n clickButton(\r\n button: HTMLElement,\r\n target: HTMLImageElement,\r\n formatter: BlotFormatter,\r\n toolButtonOption: ToolButtonOption,\r\n toolButton: ImageToolbarButtons,\r\n ) {\r\n if (!toolButtonOption.isActive) {\r\n toolButtonOption.apply.call(this, target, toolButton)\r\n }\r\n else {\r\n this.buttons.forEach((b) => {\r\n this.deselectButton(formatter, b)\r\n })\r\n\r\n if (toolButtonOption.isActive(target)) {\r\n toolButton.clear(target)\r\n }\r\n else {\r\n this.selectButton(formatter, button)\r\n toolButtonOption.apply.call(this, target, toolButton)\r\n }\r\n }\r\n\r\n formatter.update()\r\n }\r\n\r\n selectButton(formatter: BlotFormatter, button: HTMLElement) {\r\n button.classList.add('is-selected')\r\n if (formatter.options.toolbar.addButtonSelectStyle) {\r\n button.style.setProperty('filter', 'invert(20%)')\r\n }\r\n }\r\n\r\n deselectButton(formatter: BlotFormatter, button: HTMLElement) {\r\n button.classList.remove('is-selected')\r\n if (formatter.options.toolbar.addButtonSelectStyle) {\r\n button.style.removeProperty('filter')\r\n }\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
+ import Quill from "quill";
5
+ import { merge } from "../../utils/merge.es.js";
6
+ import { CustomImage } from "./image.es.js";
7
+ import DefaultOptions from "./options.es.js";
8
+ import "./specs/index.es.js";
9
+ import { CustomImageSpec } from "./specs/custom-image-spec.es.js";
10
+ const dontMerge = (_destination, source) => source;
11
+ class BlotFormatter {
12
+ constructor(quill, options = {}) {
13
+ __publicField(this, "options");
14
+ __publicField(this, "currentSpec");
15
+ __publicField(this, "specs");
16
+ __publicField(this, "overlay");
17
+ __publicField(this, "actions");
18
+ __publicField(this, "observer");
19
+ __publicField(this, "onClick", () => {
20
+ this.hide();
21
+ });
22
+ this.quill = quill;
23
+ this.options = merge({}, DefaultOptions, options, { arrayMerge: dontMerge });
24
+ if (options.allowInvalidUrl !== void 0) {
25
+ this.options.allowInvalidUrl = options.allowInvalidUrl;
26
+ }
27
+ CustomImage.setOptions(this.options.allowInvalidUrl);
28
+ this.currentSpec = null;
29
+ this.actions = [];
30
+ this.overlay = document.createElement("div");
31
+ this.overlay.classList.add(this.options.overlay.className);
32
+ if (this.options.overlay.style) {
33
+ Object.assign(this.overlay.style, this.options.overlay.style);
34
+ }
35
+ document.execCommand("enableObjectResizing", false, "false");
36
+ this.quill.root.addEventListener("click", this.onClick);
37
+ this.specs = this.options.specs.map((SpecClass) => new SpecClass(this));
38
+ this.specs.forEach((spec) => spec.init());
39
+ }
40
+ static register() {
41
+ Quill.register({
42
+ "formats/image": CustomImage,
43
+ "modules/image-spec": CustomImageSpec
44
+ }, true);
45
+ }
46
+ show(spec) {
47
+ this.currentSpec = spec;
48
+ this.currentSpec.setSelection();
49
+ this.setUserSelect("none");
50
+ this.quill.root.parentNode.appendChild(this.overlay);
51
+ this.repositionOverlay();
52
+ this.createActions(spec);
53
+ const imageDom = spec.getTargetElement();
54
+ const win = window;
55
+ const MutationObserver = win.MutationObserver || win.WebKitMutationObserver || win.MozMutationObserver;
56
+ const element = imageDom.parentNode;
57
+ this.observer = new MutationObserver((mutationList) => {
58
+ for (const mutation of mutationList) {
59
+ const target = mutation.target;
60
+ const image = target.querySelector("img");
61
+ if (image) {
62
+ this.repositionOverlay();
63
+ }
64
+ }
65
+ });
66
+ this.observer.observe(element, {
67
+ attributes: true,
68
+ attributeFilter: ["class"],
69
+ attributeOldValue: true,
70
+ subtree: true
71
+ });
72
+ }
73
+ hide() {
74
+ if (!this.currentSpec) {
75
+ return;
76
+ }
77
+ const imgDom = this.currentSpec.getTargetElement();
78
+ if (imgDom) {
79
+ imgDom.classList.remove("current-select-img");
80
+ }
81
+ this.currentSpec.onHide();
82
+ this.currentSpec = null;
83
+ this.quill.root.parentNode.removeChild(this.overlay);
84
+ this.overlay.style.setProperty("display", "none");
85
+ this.setUserSelect("");
86
+ this.destroyActions();
87
+ }
88
+ update() {
89
+ this.repositionOverlay();
90
+ this.actions.forEach((action) => action.onUpdate());
91
+ }
92
+ createActions(spec) {
93
+ this.actions = spec.getActions().map((ActionClass) => {
94
+ const action = new ActionClass(this);
95
+ action.onCreate();
96
+ return action;
97
+ });
98
+ }
99
+ destroyActions() {
100
+ this.actions.forEach((action) => action.onDestroy());
101
+ this.actions = [];
102
+ }
103
+ repositionOverlay() {
104
+ if (!this.currentSpec) {
105
+ return;
106
+ }
107
+ const overlayTarget = this.currentSpec.getOverlayElement();
108
+ if (!overlayTarget) {
109
+ return;
110
+ }
111
+ const parent = this.quill.root.parentElement;
112
+ const specRect = overlayTarget.getBoundingClientRect();
113
+ const parentRect = parent.getBoundingClientRect();
114
+ Object.assign(this.overlay.style, {
115
+ display: "block",
116
+ left: `${specRect.left - parentRect.left - 1 + parent.scrollLeft}px`,
117
+ top: `${specRect.top - parentRect.top + parent.scrollTop}px`,
118
+ width: `${specRect.width}px`,
119
+ height: `${specRect.height}px`
120
+ });
121
+ }
122
+ setUserSelect(value) {
123
+ const props = [
124
+ "userSelect",
125
+ "mozUserSelect",
126
+ "webkitUserSelect",
127
+ "msUserSelect"
128
+ ];
129
+ props.forEach((prop) => {
130
+ this.quill.root.style.setProperty(prop, value);
131
+ if (document.documentElement) {
132
+ document.documentElement.style.setProperty(prop, value);
133
+ }
134
+ });
135
+ }
136
+ }
137
+ export {
138
+ BlotFormatter
139
+ };
140
+ //# sourceMappingURL=blot-formatter.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blot-formatter.es.js","sources":["../../../../src/modules/custom-image/blot-formatter.ts"],"sourcesContent":["import type FluentEditor from '../../core/fluent-editor'\nimport type { Action } from './actions'\nimport type { BlotFormatterOptions } from './options'\nimport type { BlotSpec } from './specs'\nimport Quill from 'quill'\nimport { merge as deepmerge } from '../../utils/merge'\nimport { CustomImage } from './image'\nimport DefaultOptions from './options'\nimport { CustomImageSpec } from './specs'\n\nconst dontMerge = (_destination: Array<any>, source: Array<any>) => source\n\nexport class BlotFormatter {\n options: BlotFormatterOptions\n currentSpec: BlotSpec\n specs: BlotSpec[]\n overlay: HTMLElement\n actions: Action[]\n observer: MutationObserver\n\n static register() {\n Quill.register({\n 'formats/image': CustomImage,\n 'modules/image-spec': CustomImageSpec,\n }, true)\n }\n\n constructor(public quill: FluentEditor, options: Partial<BlotFormatterOptions> = {}) {\n this.options = deepmerge({}, DefaultOptions, options, { arrayMerge: dontMerge })\n if (options.allowInvalidUrl !== undefined) {\n this.options.allowInvalidUrl = options.allowInvalidUrl\n }\n CustomImage.setOptions(this.options.allowInvalidUrl)\n this.currentSpec = null\n this.actions = []\n this.overlay = document.createElement('div')\n this.overlay.classList.add(this.options.overlay.className)\n if (this.options.overlay.style) {\n Object.assign(this.overlay.style, this.options.overlay.style)\n }\n\n // disable native image resizing on firefox\n document.execCommand('enableObjectResizing', false, 'false') // eslint-disable-next-line-line no-undef\n this.quill.root.addEventListener('click', this.onClick)\n this.specs = this.options.specs.map((SpecClass: any) => new SpecClass(this))\n this.specs.forEach(spec => spec.init())\n }\n\n show(spec: BlotSpec) {\n this.currentSpec = spec\n this.currentSpec.setSelection()\n this.setUserSelect('none')\n this.quill.root.parentNode.appendChild(this.overlay)\n this.repositionOverlay()\n this.createActions(spec)\n\n // fix: 图片对齐之后,虚线外框应该跟随移动\n const imageDom = spec.getTargetElement()\n const win: any = window\n const MutationObserver: typeof window.MutationObserver = win.MutationObserver || win.WebKitMutationObserver || win.MozMutationObserver\n const element = imageDom.parentNode\n this.observer = new MutationObserver((mutationList) => {\n for (const mutation of mutationList) {\n const target = mutation.target as HTMLElement\n const image = target.querySelector('img')\n if (image) {\n this.repositionOverlay()\n }\n }\n })\n this.observer.observe(element, {\n attributes: true,\n attributeFilter: ['class'],\n attributeOldValue: true,\n subtree: true,\n })\n }\n\n hide() {\n if (!this.currentSpec) {\n return\n }\n\n const imgDom = this.currentSpec.getTargetElement()\n if (imgDom) {\n imgDom.classList.remove('current-select-img')\n }\n\n this.currentSpec.onHide()\n this.currentSpec = null\n this.quill.root.parentNode.removeChild(this.overlay)\n this.overlay.style.setProperty('display', 'none')\n this.setUserSelect('')\n this.destroyActions()\n }\n\n update() {\n this.repositionOverlay()\n this.actions.forEach(action => action.onUpdate())\n }\n\n createActions(spec: BlotSpec) {\n this.actions = spec.getActions().map((ActionClass: any) => {\n const action: Action = new ActionClass(this)\n action.onCreate()\n return action\n })\n }\n\n destroyActions() {\n this.actions.forEach((action: Action) => action.onDestroy())\n this.actions = []\n }\n\n repositionOverlay() {\n if (!this.currentSpec) {\n return\n }\n\n const overlayTarget = this.currentSpec.getOverlayElement()\n if (!overlayTarget) {\n return\n }\n\n const parent = this.quill.root.parentElement\n const specRect = overlayTarget.getBoundingClientRect()\n const parentRect = parent.getBoundingClientRect()\n\n Object.assign(this.overlay.style, {\n display: 'block',\n left: `${specRect.left - parentRect.left - 1 + parent.scrollLeft}px`,\n top: `${specRect.top - parentRect.top + parent.scrollTop}px`,\n width: `${specRect.width}px`,\n height: `${specRect.height}px`,\n })\n }\n\n setUserSelect(value: string) {\n const props: string[] = [\n 'userSelect',\n 'mozUserSelect',\n 'webkitUserSelect',\n 'msUserSelect',\n ]\n\n props.forEach((prop: string) => {\n // set on contenteditable element and <html>\n this.quill.root.style.setProperty(prop, value)\n if (document.documentElement) {\n document.documentElement.style.setProperty(prop, value)\n }\n })\n }\n\n onClick = () => {\n this.hide()\n }\n}\n"],"names":["deepmerge"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.es.js","sources":["../../../../src/modules/custom-image/image.ts"],"sourcesContent":["import type { Parchment as TypeParchment } from 'quill'\nimport type TypeEmbed from 'quill/blots/embed'\nimport Quill from 'quill'\nimport { isNullOrUndefined, sanitize } from '../../config/editor.utils'\nimport { isObject } from '../../utils/is'\nimport { ALIGN_ATTR, alignmentHandler } from './actions'\n\nconst Embed = Quill.import('blots/embed') as typeof TypeEmbed\nconst ATTRIBUTES = ['alt', 'height', 'width', 'image-id']\n\nexport type ImageValue = string | {\n src: string\n align?: string\n height?: number\n width?: number\n}\nexport class CustomImage extends Embed {\n static blotName = 'image'\n static tagName = 'IMG'\n static ID_SEED = 0\n static allowInvalidUrl: boolean = false\n declare domNode: HTMLElement\n\n static setOptions(allowInvalidUrl: boolean) {\n this.allowInvalidUrl = allowInvalidUrl\n }\n\n static create(value: ImageValue) {\n const node = super.create(value) as HTMLElement\n const url = typeof value === 'string' ? value : value.src\n if (url) {\n const imgURL = this.sanitize(url)\n if (!imgURL?.startsWith('data:image')) {\n node.dataset.src = imgURL\n }\n node.setAttribute('src', imgURL)\n }\n node.setAttribute('data-image-id', `img${CustomImage.ID_SEED++}`)\n node.style.verticalAlign = 'baseline'\n if (isObject(value)) {\n if (value.align && alignmentHandler[value.align]) {\n node.setAttribute(ALIGN_ATTR, value.align)\n alignmentHandler[value.align](node)\n }\n if (value.width) {\n node.setAttribute('width', String(value.width))\n }\n if (value.height) {\n node.setAttribute('height', String(value.height))\n }\n }\n return node\n }\n\n static formats(domNode: HTMLElement) {\n return ATTRIBUTES.reduce((formats, attribute) => {\n if (domNode.hasAttribute(attribute)) {\n formats[attribute] = domNode.getAttribute(attribute)\n }\n return formats\n }, {})\n }\n\n static match(url: string) {\n return /\\.(jpe?g|gif|png)$/.test(url) || /^data:image\\/.+;base64/.test(url)\n }\n\n static register() {\n if (/Firefox/i.test(navigator.userAgent)) {\n setTimeout(() => {\n // Disable image resizing in Firefox\n document.execCommand('enableObjectResizing', false, 'false')\n }, 1)\n }\n }\n\n static sanitize(url: string) {\n if (sanitize(url, ['http', 'https', 'blob', 'data']) || this.allowInvalidUrl) {\n return url\n }\n return '//:0'\n }\n\n static value(domNode: HTMLElement) {\n const formats: any = {}\n const imageSrc = domNode.getAttribute('src')\n formats.src = this.sanitize(imageSrc)\n formats.imageId = domNode.dataset.imageId\n if (domNode.dataset.align) {\n formats.align = domNode.dataset.align\n }\n if (domNode.hasAttribute('width')) {\n formats.width = domNode.getAttribute('width')\n }\n if (domNode.hasAttribute('height')) {\n formats.height = domNode.getAttribute('height')\n }\n return formats\n }\n\n format(name: string, value: any) {\n if (ATTRIBUTES.includes(name)) {\n if (value) {\n this.domNode.setAttribute(name, value)\n }\n else {\n this.domNode.removeAttribute(name)\n }\n }\n else {\n super.format(name, value)\n }\n }\n\n unWrap() {\n this.parent.replaceWith(this as TypeEmbed)\n }\n\n wrap(name: string, value?: any): TypeParchment.Parent\n wrap(wrapper: TypeParchment.Parent): TypeParchment.Parent\n wrap(name: string | TypeParchment.Parent, value?: any) {\n const wrapper = (typeof name === 'string' ? this.scroll.create(name, value) : name) as TypeParchment.Parent\n if (!isNullOrUndefined(this.parent)) {\n this.parent.insertBefore(wrapper, this.next || undefined)\n }\n if (typeof wrapper.appendChild !== 'function') {\n throw new TypeError(`Cannot wrap ${name}`)\n }\n wrapper.appendChild(this)\n return wrapper\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.es.js","sources":["../../../../src/modules/custom-image/options.ts"],"sourcesContent":["import type { ImageToolbar, ImageToolbarButtons } from './actions'\nimport type { BlotSpec } from './specs'\nimport { ImageSpec } from './specs'\n\nexport interface OverlayOptions {\n // classname applied to the overlay element\n className: string\n // style applied to overlay element, or null to prevent styles\n style: Record<string, string>\n}\n\nexport interface ResizeOptions {\n // class name applied to the resize handles\n handleClassName: string\n // style applied to resize handles, or null to prevent styles\n handleStyle: Record<string, string>\n}\n\nexport interface ToolButtonOption {\n name: string\n icon: string\n isActive?: (el: HTMLElement) => boolean\n apply: (this: ImageToolbar, el: HTMLImageElement, toolbarButtons: ImageToolbarButtons) => void\n}\n\nexport interface ToolbarButtonOptions {\n buttons: Record<string, ToolButtonOption | boolean>\n}\n\nexport interface ToolbarOptions extends ToolbarButtonOptions {\n // class name applied to the root toolbar element\n mainClassName: string\n // style applied to root toolbar element, or null to prevent styles\n mainStyle: Record<string, unknown>\n // class name applied to each button in the toolbar\n buttonClassName: string\n /* whether or not to add the selected style to the buttons.\n they'll always get the is-selected class */\n addButtonSelectStyle: boolean\n // style applied to buttons, or null to prevent styles\n buttonStyle: Record<string, unknown>\n // style applied to the svgs in the buttons\n svgStyle: Record<string, unknown>\n}\n\nexport interface BlotFormatterOptionsInput {\n specs: typeof BlotSpec[]\n overlay: Partial<OverlayOptions>\n resize: Partial<ResizeOptions>\n toolbar: Partial<ToolbarOptions>\n}\nexport interface BlotFormatterOptions {\n specs: typeof BlotSpec[]\n overlay: OverlayOptions\n resize: ResizeOptions\n toolbar: ToolbarOptions\n allowInvalidUrl: boolean\n}\n\nexport const LEFT_ALIGN = 'align-left'\nexport const CENTER_ALIGN = 'align-center'\nexport const RIGHT_ALIGN = 'align-right'\nexport const COPY = 'copy'\nexport const DOWNLOAD = 'download'\nconst DefaultOptions: BlotFormatterOptions = {\n // 默认情况下,`file://` 格式的本地文件路径在浏览器环境无法读取,因此会被转换成 `//:0`,但是在一些特殊的场景下(比如:Electron),需要获取到图片的原始路径,进行后续的上传处理\n // 注意:该选项一旦设置为 true,本地磁盘路径会暴露出去,这可能会带来安全风险,请确保你了解相关的安全隐患\n allowInvalidUrl: false,\n\n specs: [\n ImageSpec,\n ],\n overlay: {\n className: 'blot-formatter__overlay',\n style: {\n position: 'absolute',\n boxSizing: 'border-box',\n border: '1px dashed #444',\n },\n },\n toolbar: {\n mainClassName: 'blot-formatter__toolbar',\n mainStyle: {\n position: 'absolute',\n top: '-12px',\n right: '0',\n left: '0',\n height: '0',\n minWidth: '120px',\n font: '12px/1.0 Arial, Helvetica, sans-serif',\n textAlign: 'center',\n color: '#333',\n boxSizing: 'border-box',\n cursor: 'default',\n zIndex: '1',\n },\n buttonClassName: 'blot-formatter__toolbar-button',\n addButtonSelectStyle: true,\n buttonStyle: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '24px',\n height: '24px',\n background: 'white',\n border: '1px solid #999',\n verticalAlign: 'middle',\n cursor: 'pointer',\n },\n svgStyle: {\n display: 'inline-block',\n width: '16px',\n height: '16px',\n background: 'white',\n verticalAlign: 'middle',\n },\n buttons: {\n [LEFT_ALIGN]: true,\n [CENTER_ALIGN]: true,\n [RIGHT_ALIGN]: true,\n [COPY]: true,\n [DOWNLOAD]: true,\n },\n },\n resize: {\n handleClassName: 'blot-formatter__resize-handle',\n handleStyle: {\n position: 'absolute',\n height: '12px',\n width: '12px',\n backgroundColor: 'white',\n border: '1px solid #777',\n boxSizing: 'border-box',\n opacity: '0.80',\n },\n },\n}\n\nexport default DefaultOptions\n"],"names":[],"mappings":";;AA2DO,MAAM,aAAa;AACnB,MAAM,eAAe;AACrB,MAAM,cAAc;AACpB,MAAM,OAAO;AACb,MAAM,WAAW;AACxB,MAAM,iBAAuC;AAAA;AAAA;AAAA,EAG3C,iBAAiB;AAAA,EAEjB,OAAO;AAAA,IACL;AAAA,EAAA;AAAA,EAEF,SAAS;AAAA,IACP,WAAW;AAAA,IACX,OAAO;AAAA,MACL,UAAU;AAAA,MACV,WAAW;AAAA,MACX,QAAQ;AAAA,IAAA;AAAA,EACV;AAAA,EAEF,SAAS;AAAA,IACP,eAAe;AAAA,IACf,WAAW;AAAA,MACT,UAAU;AAAA,MACV,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO;AAAA,MACP,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,QAAQ;AAAA,IAAA;AAAA,IAEV,iBAAiB;AAAA,IACjB,sBAAsB;AAAA,IACtB,aAAa;AAAA,MACX,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,eAAe;AAAA,MACf,QAAQ;AAAA,IAAA;AAAA,IAEV,UAAU;AAAA,MACR,SAAS;AAAA,MACT,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,eAAe;AAAA,IAAA;AAAA,IAEjB,SAAS;AAAA,MACP,CAAC,UAAU,GAAG;AAAA,MACd,CAAC,YAAY,GAAG;AAAA,MAChB,CAAC,WAAW,GAAG;AAAA,MACf,CAAC,IAAI,GAAG;AAAA,MACR,CAAC,QAAQ,GAAG;AAAA,IAAA;AAAA,EACd;AAAA,EAEF,QAAQ;AAAA,IACN,iBAAiB;AAAA,IACjB,aAAa;AAAA,MACX,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,iBAAiB;AAAA,MACjB,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blot-spec.es.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":[],"mappings":";;;;;;;AAGO,MAAM,SAAS;AAAA,EAGpB,YAAY,WAA0B;AAFtC;AAGE,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,OAAa;AAAA,EAAC;AAAA,EAEd,aAAa;AACX,WAAO,CAAC,oBAAoB,oBAAoB,YAAY;AAAA,EAC9D;AAAA,EAEA,mBAAuC;AACrC,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB;AAClB,WAAO,KAAK,iBAAA;AAAA,EACd;AAAA,EAEA,eAAqB;AACnB,SAAK,UAAU,MAAM,aAAa,IAAI;AAAA,EACxC;AAAA,EAEA,SAAS;AAAA,EAAC;AACZ;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-image-spec.es.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":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-spec.es.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":[],"mappings":";;;;AAEO,MAAM,kBAAkB,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,MACF;AACA,YAAM,gBAAA;AAEN,WAAK,MAAM;AACX,WAAK,UAAU,KAAK,IAAI;AAAA,IAC1B;AAAA;AAAA,EArBA,OAAO;AACL,SAAK,UAAU,MAAM,KAAK,iBAAiB,SAAS,KAAK,OAAO;AAAA,EAClE;AAAA,EAEA,mBAAmB;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,SAAS;AACP,SAAK,MAAM;AAAA,EACb;AAYF;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-uploader.es.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":[],"mappings":";;;;;AAMA,MAAM,WAAW,MAAM,OAAO,kBAAkB;AAChD,MAAM,QAAQ,MAAM,OAAO,OAAO;AAa3B,MAAM,qBAAqB,SAAS;AAAA,EAIzC,YAAmB,OAAqB,SAAuC;AAC7E,UAAM,OAAO,OAAc;AADV,SAAA,QAAA;AAEjB,SAAK,UAAU,KAAK,eAAe,OAAO;AAAA,EAE5C;AAAA,EAEA,eAAe,UAAwC,IAAI;AACzD,WAAO,OAAO,OAAO;AAAA,MACnB,WAAW,CAAC,GAAG;AAAA,MACf,SAAS,OAAO;AAAA,MAChB,QAAQ,OAAc,OAAe;AACnC,eAAO,MAAM,IAAI,CAAA,SAAQ,IAAI,gBAAgB,IAAI,CAAC;AAAA,MACpD;AAAA,MACA,UAAU;AAAA,MAAC;AAAA,MACX,OAAO;AAAA,MAAC;AAAA,IAAA,GACP,OAAO;AAAA,EACZ;AAAA,EAEA,aAAa,MAAY;AACvB,WAAO,KAAK,QAAQ,UAAU,KAAK,CAAA,UAAS,KAAK,QAAQ,cAAc,MAAM,KAAK,WAAW,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,QAAQ;AAAA,EACxI;AAAA,EAEA,MAAM,YAAY,OAAe,OAAc;AAC7C,UAAM,UAAU,MAAM,OAAO,UAAQ,KAAK,aAAa,IAAI,CAAC;AAC5D,WAAO,KAAK,QAAQ,QAAQ,KAAK,MAAM,OAAO,OAAO;AAAA,EACvD;AAAA,EAEA,MAAM,OAAO,OAAc,OAA0B;AACnD,UAAM,UAAU,CAAA;AAChB,UAAM,QAAQ,CAAA;AAEd,eAAW,QAAQ,MAAM,KAAK,KAAK,GAAG;AACpC,UAAI,KAAK,aAAa,IAAI,GAAG;AAC3B,gBAAQ,KAAK,IAAI;AAAA,MACnB,OACK;AACH,cAAM,KAAK,IAAI;AAAA,MACjB;AAAA,IACF;AAEA,UAAM,SAAS,MAAM,KAAK,QAAQ,QAAQ,KAAK,MAAM,OAAO,OAAO;AACnE,UAAM,cAAc,OAAO,OAAO,CAAC,OAAO,KAAK,MAAM;AACnD,UAAI,SAAS,GAAG,GAAG;AACjB,cAAM,OAAO,QAAQ,CAAC,EAAE;AACxB,YAAI,KAAK,WAAW,QAAQ,GAAG;AAC7B,gBAAM,OAAO,EAAE,OAAO,IAAA,CAAK;AAAA,QAC7B,WACS,KAAK,WAAW,QAAQ,GAAG;AAClC,gBAAM,OAAO,EAAE,OAAO,EAAE,KAAK,IAAA,GAAO;AAAA,QACtC,OACK;AACH,gBAAM,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC,EAAE,MAAM,OAAO,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAA,GAAO;AAAA,QACpF;AAAA,MACF,OACK;AACH,cAAM,OAAO,GAAG;AAAA,MAClB;AACA,aAAO;AAAA,IACT,GAAG,IAAI,MAAA,EAAQ,OAAO,MAAM,KAAK,EAAE,OAAO,MAAM,MAAM,CAAC;AAEvD,SAAK,MAAM,eAAe,aAAa,MAAM,QAAQ,IAAI;AACzD,SAAK,MAAM,aAAa,MAAM,QAAQ,OAAO,QAAQ,MAAM,QAAQ,MAAM;AAEzE,eAAW,QAAQ,OAAO;AACxB,WAAK,QAAQ,KAAK,KAAK,MAAM,MAAM,KAAK;AAAA,IAC1C;AAEA,eAAW,CAAC,GAAG,GAAG,KAAK,OAAO,WAAW;AACvC,UAAI,SAAS,GAAG,GAAG;AACjB,aAAK,QAAQ,QAAQ,KAAK,MAAM,MAAM,CAAC,GAAG,EAAE,OAAO,MAAM,QAAQ,GAAG,QAAQ,GAAG;AAAA,MACjF,OACK;AACH,aAAK,QAAQ,KAAK,KAAK,MAAM,MAAM,CAAC,GAAG,EAAE,OAAO,MAAM,QAAQ,GAAG,QAAQ,GAAG;AAAA,MAC9E;AAAA,IACF;AAAA,EACF;AACF;AA/EE,cADW,cACJ,YAAW,CAAA;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"divider.es.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;AACd,UAAM,OAAO,MAAM,OAAA;AACnB,SAAK,aAAa,mBAAmB,OAAO;AAC5C,WAAO;AAAA,EACT;AACF;AARE,cADW,aACJ,YAAW;AAClB,cAFW,aAEJ,WAAU;"}