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

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 (602) hide show
  1. package/README.md +88 -105
  2. package/es/attributors/line-height.es.js.map +1 -1
  3. package/es/config/base64-image.es.js.map +1 -1
  4. package/es/config/editor.config.es.js +0 -7
  5. package/es/config/editor.config.es.js.map +1 -1
  6. package/es/config/editor.utils.es.js +0 -2
  7. package/es/config/editor.utils.es.js.map +1 -1
  8. package/es/config/i18n/en-us.es.js +0 -13
  9. package/es/config/i18n/en-us.es.js.map +1 -1
  10. package/es/config/i18n/zh-cn.es.js +0 -13
  11. package/es/config/i18n/zh-cn.es.js.map +1 -1
  12. package/es/config/index.es.js +8 -13
  13. package/es/config/index.es.js.map +1 -1
  14. package/es/config/types/index.es.js +0 -20
  15. package/es/config/types/index.es.js.map +1 -1
  16. package/es/core/fluent-editor.es.js +7 -5
  17. package/es/core/fluent-editor.es.js.map +1 -1
  18. package/es/fluent-editor.es.js +38 -22
  19. package/es/fluent-editor.es.js.map +1 -1
  20. package/es/formats/emoji.es.js +14 -0
  21. package/es/formats/emoji.es.js.map +1 -0
  22. package/es/formats/index.es.js +11 -0
  23. package/es/formats/index.es.js.map +1 -0
  24. package/es/formats/soft-break.es.js +12 -5
  25. package/es/formats/soft-break.es.js.map +1 -1
  26. package/es/formats/strike.es.js +8 -5
  27. package/es/formats/strike.es.js.map +1 -1
  28. package/es/formats/video.es.js +14 -10
  29. package/es/formats/video.es.js.map +1 -1
  30. package/es/index.es.js +94 -32
  31. package/es/index.es.js.map +1 -1
  32. package/es/modules/ai/constants.es.js +50 -0
  33. package/es/modules/ai/constants.es.js.map +1 -0
  34. package/es/modules/ai/icons.es.js +319 -0
  35. package/es/modules/ai/icons.es.js.map +1 -0
  36. package/es/modules/ai/index.es.js +670 -0
  37. package/es/modules/ai/index.es.js.map +1 -0
  38. package/es/modules/collaborative-editing/awareness/awareness.es.js +93 -0
  39. package/es/modules/collaborative-editing/awareness/awareness.es.js.map +1 -0
  40. package/es/modules/collaborative-editing/awareness/index.es.js +8 -0
  41. package/es/modules/{emoji/emoji-list → collaborative-editing/awareness}/index.es.js.map +1 -1
  42. package/es/modules/collaborative-editing/awareness/y-indexeddb.es.js +12 -0
  43. package/es/modules/collaborative-editing/awareness/y-indexeddb.es.js.map +1 -0
  44. package/es/modules/collaborative-editing/collaborative-editing.es.js +105 -0
  45. package/es/modules/collaborative-editing/collaborative-editing.es.js.map +1 -0
  46. package/es/modules/collaborative-editing/index.es.js +6 -0
  47. package/es/modules/collaborative-editing/index.es.js.map +1 -0
  48. package/es/modules/collaborative-editing/module.es.js +35 -0
  49. package/es/modules/collaborative-editing/module.es.js.map +1 -0
  50. package/es/modules/collaborative-editing/provider/providerRegistry.es.js +28 -0
  51. package/es/modules/collaborative-editing/provider/providerRegistry.es.js.map +1 -0
  52. package/es/modules/collaborative-editing/provider/webrtc.es.js +99 -0
  53. package/es/modules/collaborative-editing/provider/webrtc.es.js.map +1 -0
  54. package/es/modules/collaborative-editing/provider/websocket.es.js +111 -0
  55. package/es/modules/collaborative-editing/provider/websocket.es.js.map +1 -0
  56. package/es/modules/collaborative-editing/types.es.js +2 -0
  57. package/es/modules/collaborative-editing/types.es.js.map +1 -0
  58. package/es/modules/counter.es.js +8 -3
  59. package/es/modules/counter.es.js.map +1 -1
  60. package/es/modules/custom-clipboard.es.js +23 -27
  61. package/es/modules/custom-clipboard.es.js.map +1 -1
  62. package/es/modules/custom-image/actions/action.es.js +19 -0
  63. package/es/modules/custom-image/actions/action.es.js.map +1 -0
  64. package/es/modules/custom-image/actions/{CustomResizeAction.es.js → custom-resize-action.es.js} +24 -11
  65. package/es/modules/custom-image/actions/custom-resize-action.es.js.map +1 -0
  66. package/es/modules/custom-image/actions/{DeleteAction.es.js → delete-action.es.js} +8 -5
  67. package/es/modules/custom-image/actions/delete-action.es.js.map +1 -0
  68. package/es/modules/custom-image/actions/image-toolbar-buttons.es.js +137 -0
  69. package/es/modules/custom-image/actions/image-toolbar-buttons.es.js.map +1 -0
  70. package/es/modules/custom-image/actions/index.es.js +18 -0
  71. package/es/modules/custom-image/actions/index.es.js.map +1 -0
  72. package/es/modules/custom-image/actions/toolbar-action.es.js +33 -0
  73. package/es/modules/custom-image/actions/toolbar-action.es.js.map +1 -0
  74. package/es/modules/custom-image/actions/toolbar.es.js +110 -0
  75. package/es/modules/custom-image/actions/toolbar.es.js.map +1 -0
  76. package/es/modules/custom-image/{BlotFormatter.es.js → blot-formatter.es.js} +27 -50
  77. package/es/modules/custom-image/blot-formatter.es.js.map +1 -0
  78. package/es/modules/custom-image/image.es.js +41 -21
  79. package/es/modules/custom-image/image.es.js.map +1 -1
  80. package/es/modules/custom-image/index.es.js +9 -0
  81. package/es/modules/custom-image/index.es.js.map +1 -0
  82. package/es/modules/custom-image/options.es.js +88 -0
  83. package/es/modules/custom-image/options.es.js.map +1 -0
  84. package/es/modules/custom-image/specs/blot-spec.es.js +33 -0
  85. package/es/modules/custom-image/specs/blot-spec.es.js.map +1 -0
  86. package/es/modules/custom-image/specs/{CustomImageSpec.es.js → custom-image-spec.es.js} +13 -14
  87. package/es/modules/custom-image/specs/custom-image-spec.es.js.map +1 -0
  88. package/es/modules/custom-image/specs/image-spec.es.js +32 -0
  89. package/es/modules/custom-image/specs/image-spec.es.js.map +1 -0
  90. package/es/modules/custom-image/specs/index.es.js +9 -0
  91. package/es/modules/custom-image/specs/index.es.js.map +1 -0
  92. package/es/modules/custom-uploader.es.js +63 -194
  93. package/es/modules/custom-uploader.es.js.map +1 -1
  94. package/es/modules/divider.es.js +8 -7
  95. package/es/modules/divider.es.js.map +1 -1
  96. package/es/modules/emoji.es.js +167 -0
  97. package/es/modules/emoji.es.js.map +1 -0
  98. package/es/modules/file/formats/file.es.js +13 -13
  99. package/es/modules/file/formats/file.es.js.map +1 -1
  100. package/es/modules/file/index.es.js +6 -29
  101. package/es/modules/file/index.es.js.map +1 -1
  102. package/es/modules/file/modules/file-bar.es.js +11 -3
  103. package/es/modules/file/modules/file-bar.es.js.map +1 -1
  104. package/es/modules/file/modules/file-module.es.js +35 -0
  105. package/es/modules/file/modules/file-module.es.js.map +1 -0
  106. package/es/modules/i18n.es.js +33 -11
  107. package/es/modules/i18n.es.js.map +1 -1
  108. package/es/modules/index.es.js +27 -0
  109. package/es/modules/index.es.js.map +1 -0
  110. package/es/modules/link/formats/link.es.js +14 -10
  111. package/es/modules/link/formats/link.es.js.map +1 -1
  112. package/es/modules/link/index.es.js +4 -12
  113. package/es/modules/link/index.es.js.map +1 -1
  114. package/es/modules/link/modules/tooltip.es.js +31 -21
  115. package/es/modules/link/modules/tooltip.es.js.map +1 -1
  116. package/es/modules/mathlive/formats.es.js +10 -7
  117. package/es/modules/mathlive/formats.es.js.map +1 -1
  118. package/es/modules/mathlive/index.es.js +6 -30
  119. package/es/modules/mathlive/index.es.js.map +1 -1
  120. package/es/modules/mathlive/module.es.js +40 -0
  121. package/es/modules/mathlive/module.es.js.map +1 -0
  122. package/es/modules/mathlive/tooltip.es.js +9 -5
  123. package/es/modules/mathlive/tooltip.es.js.map +1 -1
  124. package/es/modules/mention/constants.es.js.map +1 -1
  125. package/es/modules/mention/index.es.js +7 -0
  126. package/es/modules/mention/index.es.js.map +1 -0
  127. package/es/modules/mention/{MentionLink.es.js → mention-link.es.js} +14 -6
  128. package/es/modules/mention/mention-link.es.js.map +1 -0
  129. package/es/modules/mention/{Mention.es.js → mention.es.js} +28 -20
  130. package/es/modules/mention/mention.es.js.map +1 -0
  131. package/es/modules/shortcut-key/index.es.js +17 -1
  132. package/es/modules/shortcut-key/index.es.js.map +1 -1
  133. package/es/modules/syntax.es.js +4 -0
  134. package/es/modules/syntax.es.js.map +1 -1
  135. package/es/modules/table-up/index.es.js +21 -8
  136. package/es/modules/table-up/index.es.js.map +1 -1
  137. package/es/modules/toolbar/better-picker.es.js +5 -0
  138. package/es/modules/toolbar/better-picker.es.js.map +1 -1
  139. package/es/modules/toolbar/better-toolbar.es.js +138 -0
  140. package/es/modules/toolbar/better-toolbar.es.js.map +1 -0
  141. package/es/modules/toolbar/index.es.js +5 -135
  142. package/es/modules/toolbar/index.es.js.map +1 -1
  143. package/es/modules/toolbar/toolbar-tip.es.js +6 -1
  144. package/es/modules/toolbar/toolbar-tip.es.js.map +1 -1
  145. package/es/themes/snow.es.js +32 -15
  146. package/es/themes/snow.es.js.map +1 -1
  147. package/es/tools/format-painter.es.js +8 -2
  148. package/es/tools/format-painter.es.js.map +1 -1
  149. package/es/tools/fullscreen.es.js.map +1 -1
  150. package/es/tools/screenshot.es.js.map +1 -1
  151. package/es/ui/icons.config.es.js +53 -0
  152. package/es/ui/icons.config.es.js.map +1 -1
  153. package/es/ui/icons.es.js +2 -1
  154. package/es/ui/icons.es.js.map +1 -1
  155. package/es/utils/debounce.es.js.map +1 -1
  156. package/es/utils/is.es.js +4 -0
  157. package/es/utils/is.es.js.map +1 -1
  158. package/es/utils/method.es.js.map +1 -1
  159. package/lib/attributors/line-height.cjs.js.map +1 -1
  160. package/lib/config/base64-image.cjs.js.map +1 -1
  161. package/lib/config/editor.config.cjs.js +0 -7
  162. package/lib/config/editor.config.cjs.js.map +1 -1
  163. package/lib/config/editor.utils.cjs.js +0 -2
  164. package/lib/config/editor.utils.cjs.js.map +1 -1
  165. package/lib/config/i18n/en-us.cjs.js +0 -13
  166. package/lib/config/i18n/en-us.cjs.js.map +1 -1
  167. package/lib/config/i18n/zh-cn.cjs.js +0 -13
  168. package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
  169. package/lib/config/index.cjs.js +6 -11
  170. package/lib/config/index.cjs.js.map +1 -1
  171. package/lib/config/types/index.cjs.js +0 -20
  172. package/lib/config/types/index.cjs.js.map +1 -1
  173. package/lib/core/fluent-editor.cjs.js +6 -4
  174. package/lib/core/fluent-editor.cjs.js.map +1 -1
  175. package/lib/fluent-editor.cjs.js +46 -30
  176. package/lib/fluent-editor.cjs.js.map +1 -1
  177. package/lib/formats/emoji.cjs.js +14 -0
  178. package/lib/formats/emoji.cjs.js.map +1 -0
  179. package/lib/formats/index.cjs.js +11 -0
  180. package/lib/formats/index.cjs.js.map +1 -0
  181. package/lib/formats/soft-break.cjs.js +13 -6
  182. package/lib/formats/soft-break.cjs.js.map +1 -1
  183. package/lib/formats/strike.cjs.js +9 -6
  184. package/lib/formats/strike.cjs.js.map +1 -1
  185. package/lib/formats/video.cjs.js +15 -11
  186. package/lib/formats/video.cjs.js.map +1 -1
  187. package/lib/index.cjs.js +114 -34
  188. package/lib/index.cjs.js.map +1 -1
  189. package/lib/modules/ai/constants.cjs.js +50 -0
  190. package/lib/modules/ai/constants.cjs.js.map +1 -0
  191. package/lib/modules/ai/icons.cjs.js +319 -0
  192. package/lib/modules/ai/icons.cjs.js.map +1 -0
  193. package/lib/modules/ai/index.cjs.js +670 -0
  194. package/lib/modules/ai/index.cjs.js.map +1 -0
  195. package/lib/modules/collaborative-editing/awareness/awareness.cjs.js +110 -0
  196. package/lib/modules/collaborative-editing/awareness/awareness.cjs.js.map +1 -0
  197. package/lib/modules/collaborative-editing/awareness/index.cjs.js +8 -0
  198. package/lib/modules/collaborative-editing/awareness/index.cjs.js.map +1 -0
  199. package/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js +12 -0
  200. package/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js.map +1 -0
  201. package/lib/modules/collaborative-editing/collaborative-editing.cjs.js +122 -0
  202. package/lib/modules/collaborative-editing/collaborative-editing.cjs.js.map +1 -0
  203. package/lib/modules/collaborative-editing/index.cjs.js +6 -0
  204. package/lib/modules/{emoji/emoji-list → collaborative-editing}/index.cjs.js.map +1 -1
  205. package/lib/modules/collaborative-editing/module.cjs.js +35 -0
  206. package/lib/modules/collaborative-editing/module.cjs.js.map +1 -0
  207. package/lib/modules/collaborative-editing/provider/providerRegistry.cjs.js +28 -0
  208. package/lib/modules/collaborative-editing/provider/providerRegistry.cjs.js.map +1 -0
  209. package/lib/modules/collaborative-editing/provider/webrtc.cjs.js +116 -0
  210. package/lib/modules/collaborative-editing/provider/webrtc.cjs.js.map +1 -0
  211. package/lib/modules/collaborative-editing/provider/websocket.cjs.js +128 -0
  212. package/lib/modules/collaborative-editing/provider/websocket.cjs.js.map +1 -0
  213. package/lib/modules/collaborative-editing/types.cjs.js +2 -0
  214. package/lib/modules/collaborative-editing/types.cjs.js.map +1 -0
  215. package/lib/modules/counter.cjs.js +8 -3
  216. package/lib/modules/counter.cjs.js.map +1 -1
  217. package/lib/modules/custom-clipboard.cjs.js +23 -27
  218. package/lib/modules/custom-clipboard.cjs.js.map +1 -1
  219. package/lib/modules/custom-image/actions/action.cjs.js +19 -0
  220. package/lib/modules/custom-image/actions/action.cjs.js.map +1 -0
  221. package/lib/modules/custom-image/actions/{CustomResizeAction.cjs.js → custom-resize-action.cjs.js} +26 -13
  222. package/lib/modules/custom-image/actions/custom-resize-action.cjs.js.map +1 -0
  223. package/lib/modules/custom-image/actions/{DeleteAction.cjs.js → delete-action.cjs.js} +10 -7
  224. package/lib/modules/custom-image/actions/delete-action.cjs.js.map +1 -0
  225. package/lib/modules/custom-image/actions/image-toolbar-buttons.cjs.js +137 -0
  226. package/lib/modules/custom-image/actions/image-toolbar-buttons.cjs.js.map +1 -0
  227. package/lib/modules/custom-image/actions/index.cjs.js +18 -0
  228. package/lib/modules/custom-image/actions/index.cjs.js.map +1 -0
  229. package/lib/modules/custom-image/actions/toolbar-action.cjs.js +33 -0
  230. package/lib/modules/custom-image/actions/toolbar-action.cjs.js.map +1 -0
  231. package/lib/modules/custom-image/actions/toolbar.cjs.js +110 -0
  232. package/lib/modules/custom-image/actions/toolbar.cjs.js.map +1 -0
  233. package/lib/modules/custom-image/{BlotFormatter.cjs.js → blot-formatter.cjs.js} +28 -51
  234. package/lib/modules/custom-image/blot-formatter.cjs.js.map +1 -0
  235. package/lib/modules/custom-image/image.cjs.js +42 -22
  236. package/lib/modules/custom-image/image.cjs.js.map +1 -1
  237. package/lib/modules/custom-image/index.cjs.js +9 -0
  238. package/lib/modules/custom-image/index.cjs.js.map +1 -0
  239. package/lib/modules/custom-image/options.cjs.js +88 -0
  240. package/lib/modules/custom-image/options.cjs.js.map +1 -0
  241. package/lib/modules/custom-image/specs/blot-spec.cjs.js +33 -0
  242. package/lib/modules/custom-image/specs/blot-spec.cjs.js.map +1 -0
  243. package/lib/modules/custom-image/specs/{CustomImageSpec.cjs.js → custom-image-spec.cjs.js} +14 -15
  244. package/lib/modules/custom-image/specs/custom-image-spec.cjs.js.map +1 -0
  245. package/lib/modules/custom-image/specs/image-spec.cjs.js +32 -0
  246. package/lib/modules/custom-image/specs/image-spec.cjs.js.map +1 -0
  247. package/lib/modules/custom-image/specs/index.cjs.js +9 -0
  248. package/lib/modules/custom-image/specs/index.cjs.js.map +1 -0
  249. package/lib/modules/custom-uploader.cjs.js +64 -195
  250. package/lib/modules/custom-uploader.cjs.js.map +1 -1
  251. package/lib/modules/divider.cjs.js +9 -8
  252. package/lib/modules/divider.cjs.js.map +1 -1
  253. package/lib/modules/emoji.cjs.js +167 -0
  254. package/lib/modules/emoji.cjs.js.map +1 -0
  255. package/lib/modules/file/formats/file.cjs.js +14 -14
  256. package/lib/modules/file/formats/file.cjs.js.map +1 -1
  257. package/lib/modules/file/index.cjs.js +5 -28
  258. package/lib/modules/file/index.cjs.js.map +1 -1
  259. package/lib/modules/file/modules/file-bar.cjs.js +12 -4
  260. package/lib/modules/file/modules/file-bar.cjs.js.map +1 -1
  261. package/lib/modules/file/modules/file-module.cjs.js +35 -0
  262. package/lib/modules/file/modules/file-module.cjs.js.map +1 -0
  263. package/lib/modules/i18n.cjs.js +32 -10
  264. package/lib/modules/i18n.cjs.js.map +1 -1
  265. package/lib/modules/index.cjs.js +27 -0
  266. package/lib/modules/index.cjs.js.map +1 -0
  267. package/lib/modules/link/formats/link.cjs.js +15 -11
  268. package/lib/modules/link/formats/link.cjs.js.map +1 -1
  269. package/lib/modules/link/index.cjs.js +4 -12
  270. package/lib/modules/link/index.cjs.js.map +1 -1
  271. package/lib/modules/link/modules/tooltip.cjs.js +30 -20
  272. package/lib/modules/link/modules/tooltip.cjs.js.map +1 -1
  273. package/lib/modules/mathlive/formats.cjs.js +11 -8
  274. package/lib/modules/mathlive/formats.cjs.js.map +1 -1
  275. package/lib/modules/mathlive/index.cjs.js +5 -29
  276. package/lib/modules/mathlive/index.cjs.js.map +1 -1
  277. package/lib/modules/mathlive/module.cjs.js +40 -0
  278. package/lib/modules/mathlive/module.cjs.js.map +1 -0
  279. package/lib/modules/mathlive/tooltip.cjs.js +10 -6
  280. package/lib/modules/mathlive/tooltip.cjs.js.map +1 -1
  281. package/lib/modules/mention/constants.cjs.js.map +1 -1
  282. package/lib/modules/mention/index.cjs.js +7 -0
  283. package/lib/modules/mention/index.cjs.js.map +1 -0
  284. package/lib/modules/mention/{MentionLink.cjs.js → mention-link.cjs.js} +15 -7
  285. package/lib/modules/mention/mention-link.cjs.js.map +1 -0
  286. package/lib/modules/mention/{Mention.cjs.js → mention.cjs.js} +30 -22
  287. package/lib/modules/mention/mention.cjs.js.map +1 -0
  288. package/lib/modules/shortcut-key/index.cjs.js +16 -0
  289. package/lib/modules/shortcut-key/index.cjs.js.map +1 -1
  290. package/lib/modules/syntax.cjs.js +4 -0
  291. package/lib/modules/syntax.cjs.js.map +1 -1
  292. package/lib/modules/table-up/index.cjs.js +21 -8
  293. package/lib/modules/table-up/index.cjs.js.map +1 -1
  294. package/lib/modules/toolbar/better-picker.cjs.js +5 -0
  295. package/lib/modules/toolbar/better-picker.cjs.js.map +1 -1
  296. package/lib/modules/toolbar/better-toolbar.cjs.js +138 -0
  297. package/lib/modules/toolbar/better-toolbar.cjs.js.map +1 -0
  298. package/lib/modules/toolbar/index.cjs.js +6 -136
  299. package/lib/modules/toolbar/index.cjs.js.map +1 -1
  300. package/lib/modules/toolbar/toolbar-tip.cjs.js +6 -1
  301. package/lib/modules/toolbar/toolbar-tip.cjs.js.map +1 -1
  302. package/lib/themes/snow.cjs.js +33 -16
  303. package/lib/themes/snow.cjs.js.map +1 -1
  304. package/lib/tools/format-painter.cjs.js +8 -2
  305. package/lib/tools/format-painter.cjs.js.map +1 -1
  306. package/lib/tools/fullscreen.cjs.js.map +1 -1
  307. package/lib/tools/screenshot.cjs.js.map +1 -1
  308. package/lib/ui/icons.cjs.js +1 -0
  309. package/lib/ui/icons.cjs.js.map +1 -1
  310. package/lib/ui/icons.config.cjs.js +53 -0
  311. package/lib/ui/icons.config.cjs.js.map +1 -1
  312. package/lib/utils/debounce.cjs.js.map +1 -1
  313. package/lib/utils/is.cjs.js +4 -0
  314. package/lib/utils/is.cjs.js.map +1 -1
  315. package/lib/utils/method.cjs.js.map +1 -1
  316. package/package.json +68 -59
  317. package/style.css +2359 -2251
  318. package/types/attributors/font-size.d.ts +1 -1
  319. package/types/attributors/font-style.d.ts +1 -1
  320. package/types/attributors/index.d.ts +4 -4
  321. package/types/attributors/line-height.d.ts +1 -1
  322. package/types/attributors/text-indent.d.ts +1 -1
  323. package/types/config/base64-image.d.ts +2 -2
  324. package/types/config/editor.config.d.ts +11 -285
  325. package/types/config/editor.utils.d.ts +40 -41
  326. package/types/config/i18n/en-us.d.ts +123 -136
  327. package/types/config/i18n/zh-cn.d.ts +123 -136
  328. package/types/config/index.d.ts +7 -6
  329. package/types/config/types/editor-config.interface.d.ts +11 -35
  330. package/types/config/types/editor-modules.interface.d.ts +41 -31
  331. package/types/config/types/index.d.ts +3 -23
  332. package/types/config/types/type.d.ts +2 -6
  333. package/types/core/fluent-editor.d.ts +11 -11
  334. package/types/fluent-editor.d.ts +1 -2
  335. package/types/formats/emoji.d.ts +8 -0
  336. package/types/formats/index.d.ts +4 -0
  337. package/types/formats/soft-break.d.ts +12 -14
  338. package/types/formats/strike.d.ts +8 -7
  339. package/types/formats/video.d.ts +13 -16
  340. package/types/index.d.ts +7 -6
  341. package/types/modules/ai/constants.d.ts +30 -0
  342. package/types/modules/ai/icons.d.ts +21 -0
  343. package/types/modules/ai/index.d.ts +96 -0
  344. package/types/modules/ai/types.d.ts +16 -0
  345. package/types/modules/collaborative-editing/awareness/awareness.d.ts +28 -0
  346. package/types/modules/collaborative-editing/awareness/index.d.ts +2 -0
  347. package/types/modules/collaborative-editing/awareness/y-indexeddb.d.ts +2 -0
  348. package/types/modules/collaborative-editing/collaborative-editing.d.ts +24 -0
  349. package/types/modules/collaborative-editing/index.d.ts +2 -0
  350. package/types/modules/collaborative-editing/module.d.ts +11 -0
  351. package/types/modules/collaborative-editing/provider/index.d.ts +3 -0
  352. package/types/modules/collaborative-editing/provider/providerRegistry.d.ts +25 -0
  353. package/types/modules/collaborative-editing/provider/webrtc.d.ts +36 -0
  354. package/types/modules/collaborative-editing/provider/websocket.d.ts +40 -0
  355. package/types/modules/collaborative-editing/types.d.ts +37 -0
  356. package/types/modules/counter.d.ts +22 -16
  357. package/types/modules/custom-clipboard.d.ts +23 -27
  358. package/types/modules/custom-image/actions/action.d.ts +8 -0
  359. package/types/modules/custom-image/actions/{CustomResizeAction.d.ts → custom-resize-action.d.ts} +23 -24
  360. package/types/modules/custom-image/actions/delete-action.d.ts +6 -0
  361. package/types/modules/custom-image/actions/image-toolbar-buttons.d.ts +16 -0
  362. package/types/modules/custom-image/actions/index.d.ts +6 -0
  363. package/types/modules/custom-image/actions/toolbar-action.d.ts +11 -0
  364. package/types/modules/custom-image/actions/toolbar.d.ts +19 -0
  365. package/types/modules/custom-image/blot-formatter.d.ts +23 -0
  366. package/types/modules/custom-image/image.d.ts +28 -28
  367. package/types/modules/custom-image/index.d.ts +4 -0
  368. package/types/modules/custom-image/options.d.ts +47 -0
  369. package/types/modules/custom-image/specs/blot-spec.d.ts +12 -0
  370. package/types/modules/custom-image/specs/{CustomImageSpec.d.ts → custom-image-spec.d.ts} +17 -21
  371. package/types/modules/custom-image/specs/image-spec.d.ts +8 -0
  372. package/types/modules/custom-image/specs/index.d.ts +3 -0
  373. package/types/modules/custom-uploader.d.ts +40 -31
  374. package/types/modules/divider.d.ts +8 -7
  375. package/types/modules/emoji.d.ts +39 -0
  376. package/types/modules/file/formats/file.d.ts +18 -15
  377. package/types/modules/file/index.d.ts +3 -11
  378. package/types/modules/file/modules/file-bar.d.ts +14 -14
  379. package/types/modules/file/modules/file-module.d.ts +9 -0
  380. package/types/modules/i18n.d.ts +13 -15
  381. package/types/modules/index.d.ts +16 -0
  382. package/types/modules/link/formats/link.d.ts +14 -15
  383. package/types/modules/link/index.d.ts +2 -6
  384. package/types/modules/link/modules/tooltip.d.ts +26 -32
  385. package/types/modules/mathlive/formats.d.ts +20 -21
  386. package/types/modules/mathlive/index.d.ts +3 -9
  387. package/types/modules/mathlive/module.d.ts +9 -0
  388. package/types/modules/mathlive/tooltip.d.ts +14 -15
  389. package/types/modules/mention/constants.d.ts +3 -3
  390. package/types/modules/mention/index.d.ts +2 -0
  391. package/types/modules/mention/{MentionLink.d.ts → mention-link.d.ts} +15 -15
  392. package/types/modules/mention/{Mention.d.ts → mention.d.ts} +52 -54
  393. package/types/modules/shortcut-key/index.d.ts +67 -93
  394. package/types/modules/syntax.d.ts +12 -13
  395. package/types/modules/table-up/index.d.ts +32 -64
  396. package/types/modules/toolbar/better-picker.d.ts +13 -14
  397. package/types/modules/toolbar/better-toolbar.d.ts +7 -0
  398. package/types/modules/toolbar/index.d.ts +3 -9
  399. package/types/modules/toolbar/toolbar-tip.d.ts +7 -8
  400. package/types/themes/snow.d.ts +9 -10
  401. package/types/tools/format-painter.d.ts +12 -14
  402. package/types/tools/fullscreen.d.ts +6 -3
  403. package/types/tools/screenshot.d.ts +17 -18
  404. package/types/ui/icons.config.d.ts +38 -36
  405. package/types/ui/icons.d.ts +6 -6
  406. package/types/utils/debounce.d.ts +6 -6
  407. package/types/utils/image.d.ts +1 -1
  408. package/types/utils/is.d.ts +6 -4
  409. package/types/utils/method.d.ts +6 -6
  410. package/types/utils/scroll-lock.d.ts +6 -6
  411. package/es/config/types/additional-toolbar-item.interface.es.js +0 -2
  412. package/es/config/types/additional-toolbar-item.interface.es.js.map +0 -1
  413. package/es/config/types/content-change.interface.es.js +0 -2
  414. package/es/config/types/content-change.interface.es.js.map +0 -1
  415. package/es/config/types/content-save.interface.es.js +0 -2
  416. package/es/config/types/content-save.interface.es.js.map +0 -1
  417. package/es/config/types/counter-option.interface.es.js +0 -2
  418. package/es/config/types/counter-option.interface.es.js.map +0 -1
  419. package/es/config/types/editor-toolbar.interface.es.js +0 -2
  420. package/es/config/types/editor-toolbar.interface.es.js.map +0 -1
  421. package/es/config/types/file-operation.interface.es.js +0 -2
  422. package/es/config/types/file-operation.interface.es.js.map +0 -1
  423. package/es/config/types/focus-change.interface.es.js +0 -2
  424. package/es/config/types/focus-change.interface.es.js.map +0 -1
  425. package/es/config/types/fullscreen-module.interface.es.js +0 -2
  426. package/es/config/types/fullscreen-module.interface.es.js.map +0 -1
  427. package/es/config/types/help-panel-item.interface.es.js +0 -2
  428. package/es/config/types/help-panel-item.interface.es.js.map +0 -1
  429. package/es/config/types/help-panel-option.interface.es.js +0 -2
  430. package/es/config/types/help-panel-option.interface.es.js.map +0 -1
  431. package/es/config/types/image-module.interface.es.js +0 -2
  432. package/es/config/types/image-module.interface.es.js.map +0 -1
  433. package/es/config/types/image-upload.interface.es.js +0 -2
  434. package/es/config/types/image-upload.interface.es.js.map +0 -1
  435. package/es/config/types/load-on-demand-module.interface.es.js +0 -2
  436. package/es/config/types/load-on-demand-module.interface.es.js.map +0 -1
  437. package/es/config/types/mention-module.interface.es.js +0 -2
  438. package/es/config/types/mention-module.interface.es.js.map +0 -1
  439. package/es/config/types/paste-change.interface.es.js +0 -2
  440. package/es/config/types/paste-change.interface.es.js.map +0 -1
  441. package/es/config/types/quick-menu-module.interface.es.js +0 -2
  442. package/es/config/types/quick-menu-module.interface.es.js.map +0 -1
  443. package/es/config/types/range.interface.es.js +0 -2
  444. package/es/config/types/range.interface.es.js.map +0 -1
  445. package/es/config/types/registry-options.interface.es.js +0 -2
  446. package/es/config/types/registry-options.interface.es.js.map +0 -1
  447. package/es/config/types/selection-change.interface.es.js +0 -2
  448. package/es/config/types/selection-change.interface.es.js.map +0 -1
  449. package/es/config/types/toolbar-item.interface.es.js +0 -2
  450. package/es/config/types/toolbar-item.interface.es.js.map +0 -1
  451. package/es/config/types/validate-error.interface.es.js +0 -2
  452. package/es/config/types/validate-error.interface.es.js.map +0 -1
  453. package/es/modules/custom-image/BlotFormatter.es.js.map +0 -1
  454. package/es/modules/custom-image/Options.es.js +0 -95
  455. package/es/modules/custom-image/Options.es.js.map +0 -1
  456. package/es/modules/custom-image/actions/Action.es.js +0 -15
  457. package/es/modules/custom-image/actions/Action.es.js.map +0 -1
  458. package/es/modules/custom-image/actions/CustomResizeAction.es.js.map +0 -1
  459. package/es/modules/custom-image/actions/DeleteAction.es.js.map +0 -1
  460. package/es/modules/custom-image/image-bar.es.js +0 -127
  461. package/es/modules/custom-image/image-bar.es.js.map +0 -1
  462. package/es/modules/custom-image/specs/BlotSpec.es.js +0 -27
  463. package/es/modules/custom-image/specs/BlotSpec.es.js.map +0 -1
  464. package/es/modules/custom-image/specs/CustomImageSpec.es.js.map +0 -1
  465. package/es/modules/custom-image/specs/ImageSpec.es.js +0 -29
  466. package/es/modules/custom-image/specs/ImageSpec.es.js.map +0 -1
  467. package/es/modules/emoji/emoji-list/index.es.js +0 -5
  468. package/es/modules/emoji/emoji-list/people.es.js +0 -114
  469. package/es/modules/emoji/emoji-list/people.es.js.map +0 -1
  470. package/es/modules/emoji/emoji-list.es.js +0 -9
  471. package/es/modules/emoji/emoji-list.es.js.map +0 -1
  472. package/es/modules/emoji/emoji-map.es.js +0 -9
  473. package/es/modules/emoji/emoji-map.es.js.map +0 -1
  474. package/es/modules/emoji/emoji-sprite.es.js +0 -5
  475. package/es/modules/emoji/emoji-sprite.es.js.map +0 -1
  476. package/es/modules/emoji/formats/emoji-blot.es.js +0 -41
  477. package/es/modules/emoji/formats/emoji-blot.es.js.map +0 -1
  478. package/es/modules/emoji/index.es.js +0 -8
  479. package/es/modules/emoji/index.es.js.map +0 -1
  480. package/es/modules/emoji/modules/emoji.es.js +0 -248
  481. package/es/modules/emoji/modules/emoji.es.js.map +0 -1
  482. package/es/modules/emoji/modules/toolbar-emoji.es.js +0 -153
  483. package/es/modules/emoji/modules/toolbar-emoji.es.js.map +0 -1
  484. package/es/modules/emoji/utils.es.js +0 -19
  485. package/es/modules/emoji/utils.es.js.map +0 -1
  486. package/es/modules/mention/Mention.es.js.map +0 -1
  487. package/es/modules/mention/MentionLink.es.js.map +0 -1
  488. package/lib/config/types/additional-toolbar-item.interface.cjs.js +0 -2
  489. package/lib/config/types/additional-toolbar-item.interface.cjs.js.map +0 -1
  490. package/lib/config/types/content-change.interface.cjs.js +0 -2
  491. package/lib/config/types/content-change.interface.cjs.js.map +0 -1
  492. package/lib/config/types/content-save.interface.cjs.js +0 -2
  493. package/lib/config/types/content-save.interface.cjs.js.map +0 -1
  494. package/lib/config/types/counter-option.interface.cjs.js +0 -2
  495. package/lib/config/types/counter-option.interface.cjs.js.map +0 -1
  496. package/lib/config/types/editor-toolbar.interface.cjs.js +0 -2
  497. package/lib/config/types/editor-toolbar.interface.cjs.js.map +0 -1
  498. package/lib/config/types/file-operation.interface.cjs.js +0 -2
  499. package/lib/config/types/file-operation.interface.cjs.js.map +0 -1
  500. package/lib/config/types/focus-change.interface.cjs.js +0 -2
  501. package/lib/config/types/focus-change.interface.cjs.js.map +0 -1
  502. package/lib/config/types/fullscreen-module.interface.cjs.js +0 -2
  503. package/lib/config/types/fullscreen-module.interface.cjs.js.map +0 -1
  504. package/lib/config/types/help-panel-item.interface.cjs.js +0 -2
  505. package/lib/config/types/help-panel-item.interface.cjs.js.map +0 -1
  506. package/lib/config/types/help-panel-option.interface.cjs.js +0 -2
  507. package/lib/config/types/help-panel-option.interface.cjs.js.map +0 -1
  508. package/lib/config/types/image-module.interface.cjs.js +0 -2
  509. package/lib/config/types/image-module.interface.cjs.js.map +0 -1
  510. package/lib/config/types/image-upload.interface.cjs.js +0 -2
  511. package/lib/config/types/image-upload.interface.cjs.js.map +0 -1
  512. package/lib/config/types/load-on-demand-module.interface.cjs.js +0 -2
  513. package/lib/config/types/load-on-demand-module.interface.cjs.js.map +0 -1
  514. package/lib/config/types/mention-module.interface.cjs.js +0 -2
  515. package/lib/config/types/mention-module.interface.cjs.js.map +0 -1
  516. package/lib/config/types/paste-change.interface.cjs.js +0 -2
  517. package/lib/config/types/paste-change.interface.cjs.js.map +0 -1
  518. package/lib/config/types/quick-menu-module.interface.cjs.js +0 -2
  519. package/lib/config/types/quick-menu-module.interface.cjs.js.map +0 -1
  520. package/lib/config/types/range.interface.cjs.js +0 -2
  521. package/lib/config/types/range.interface.cjs.js.map +0 -1
  522. package/lib/config/types/registry-options.interface.cjs.js +0 -2
  523. package/lib/config/types/registry-options.interface.cjs.js.map +0 -1
  524. package/lib/config/types/selection-change.interface.cjs.js +0 -2
  525. package/lib/config/types/selection-change.interface.cjs.js.map +0 -1
  526. package/lib/config/types/toolbar-item.interface.cjs.js +0 -2
  527. package/lib/config/types/toolbar-item.interface.cjs.js.map +0 -1
  528. package/lib/config/types/validate-error.interface.cjs.js +0 -2
  529. package/lib/config/types/validate-error.interface.cjs.js.map +0 -1
  530. package/lib/modules/custom-image/BlotFormatter.cjs.js.map +0 -1
  531. package/lib/modules/custom-image/Options.cjs.js +0 -95
  532. package/lib/modules/custom-image/Options.cjs.js.map +0 -1
  533. package/lib/modules/custom-image/actions/Action.cjs.js +0 -15
  534. package/lib/modules/custom-image/actions/Action.cjs.js.map +0 -1
  535. package/lib/modules/custom-image/actions/CustomResizeAction.cjs.js.map +0 -1
  536. package/lib/modules/custom-image/actions/DeleteAction.cjs.js.map +0 -1
  537. package/lib/modules/custom-image/image-bar.cjs.js +0 -127
  538. package/lib/modules/custom-image/image-bar.cjs.js.map +0 -1
  539. package/lib/modules/custom-image/specs/BlotSpec.cjs.js +0 -27
  540. package/lib/modules/custom-image/specs/BlotSpec.cjs.js.map +0 -1
  541. package/lib/modules/custom-image/specs/CustomImageSpec.cjs.js.map +0 -1
  542. package/lib/modules/custom-image/specs/ImageSpec.cjs.js +0 -29
  543. package/lib/modules/custom-image/specs/ImageSpec.cjs.js.map +0 -1
  544. package/lib/modules/emoji/emoji-list/index.cjs.js +0 -5
  545. package/lib/modules/emoji/emoji-list/people.cjs.js +0 -114
  546. package/lib/modules/emoji/emoji-list/people.cjs.js.map +0 -1
  547. package/lib/modules/emoji/emoji-list.cjs.js +0 -9
  548. package/lib/modules/emoji/emoji-list.cjs.js.map +0 -1
  549. package/lib/modules/emoji/emoji-map.cjs.js +0 -9
  550. package/lib/modules/emoji/emoji-map.cjs.js.map +0 -1
  551. package/lib/modules/emoji/emoji-sprite.cjs.js +0 -5
  552. package/lib/modules/emoji/emoji-sprite.cjs.js.map +0 -1
  553. package/lib/modules/emoji/formats/emoji-blot.cjs.js +0 -41
  554. package/lib/modules/emoji/formats/emoji-blot.cjs.js.map +0 -1
  555. package/lib/modules/emoji/index.cjs.js +0 -8
  556. package/lib/modules/emoji/index.cjs.js.map +0 -1
  557. package/lib/modules/emoji/modules/emoji.cjs.js +0 -248
  558. package/lib/modules/emoji/modules/emoji.cjs.js.map +0 -1
  559. package/lib/modules/emoji/modules/toolbar-emoji.cjs.js +0 -153
  560. package/lib/modules/emoji/modules/toolbar-emoji.cjs.js.map +0 -1
  561. package/lib/modules/emoji/utils.cjs.js +0 -19
  562. package/lib/modules/emoji/utils.cjs.js.map +0 -1
  563. package/lib/modules/mention/Mention.cjs.js.map +0 -1
  564. package/lib/modules/mention/MentionLink.cjs.js.map +0 -1
  565. package/types/config/types/additional-toolbar-item.interface.d.ts +0 -8
  566. package/types/config/types/content-change.interface.d.ts +0 -13
  567. package/types/config/types/content-save.interface.d.ts +0 -6
  568. package/types/config/types/counter-option.interface.d.ts +0 -9
  569. package/types/config/types/editor-toolbar.interface.d.ts +0 -6
  570. package/types/config/types/file-operation.interface.d.ts +0 -12
  571. package/types/config/types/focus-change.interface.d.ts +0 -4
  572. package/types/config/types/fullscreen-module.interface.d.ts +0 -4
  573. package/types/config/types/help-panel-item.interface.d.ts +0 -5
  574. package/types/config/types/help-panel-option.interface.d.ts +0 -7
  575. package/types/config/types/image-module.interface.d.ts +0 -3
  576. package/types/config/types/image-upload.interface.d.ts +0 -7
  577. package/types/config/types/load-on-demand-module.interface.d.ts +0 -5
  578. package/types/config/types/mention-module.interface.d.ts +0 -8
  579. package/types/config/types/paste-change.interface.d.ts +0 -6
  580. package/types/config/types/quick-menu-module.interface.d.ts +0 -3
  581. package/types/config/types/range.interface.d.ts +0 -4
  582. package/types/config/types/registry-options.interface.d.ts +0 -5
  583. package/types/config/types/selection-change.interface.d.ts +0 -8
  584. package/types/config/types/toolbar-item.interface.d.ts +0 -13
  585. package/types/config/types/validate-error.interface.d.ts +0 -13
  586. package/types/modules/custom-image/BlotFormatter.d.ts +0 -29
  587. package/types/modules/custom-image/Options.d.ts +0 -36
  588. package/types/modules/custom-image/actions/Action.d.ts +0 -7
  589. package/types/modules/custom-image/actions/DeleteAction.d.ts +0 -7
  590. package/types/modules/custom-image/image-bar.d.ts +0 -15
  591. package/types/modules/custom-image/specs/BlotSpec.d.ts +0 -13
  592. package/types/modules/custom-image/specs/ImageSpec.d.ts +0 -10
  593. package/types/modules/emoji/emoji-list/index.d.ts +0 -1
  594. package/types/modules/emoji/emoji-list/people.d.ts +0 -1
  595. package/types/modules/emoji/emoji-list.d.ts +0 -2
  596. package/types/modules/emoji/emoji-map.d.ts +0 -2
  597. package/types/modules/emoji/emoji-sprite.d.ts +0 -1
  598. package/types/modules/emoji/formats/emoji-blot.d.ts +0 -13
  599. package/types/modules/emoji/index.d.ts +0 -10
  600. package/types/modules/emoji/modules/emoji.d.ts +0 -38
  601. package/types/modules/emoji/modules/toolbar-emoji.d.ts +0 -8
  602. package/types/modules/emoji/utils.d.ts +0 -1
@@ -0,0 +1,88 @@
1
+ import "./specs/index.es.js";
2
+ import { ImageSpec } from "./specs/image-spec.es.js";
3
+ const LEFT_ALIGN = "align-left";
4
+ const CENTER_ALIGN = "align-center";
5
+ const RIGHT_ALIGN = "align-right";
6
+ const COPY = "copy";
7
+ const DOWNLOAD = "download";
8
+ const DefaultOptions = {
9
+ // 默认情况下,`file://` 格式的本地文件路径在浏览器环境无法读取,因此会被转换成 `//:0`,但是在一些特殊的场景下(比如:Electron),需要获取到图片的原始路径,进行后续的上传处理
10
+ // 注意:该选项一旦设置为 true,本地磁盘路径会暴露出去,这可能会带来安全风险,请确保你了解相关的安全隐患
11
+ allowInvalidUrl: false,
12
+ specs: [
13
+ ImageSpec
14
+ ],
15
+ overlay: {
16
+ className: "blot-formatter__overlay",
17
+ style: {
18
+ position: "absolute",
19
+ boxSizing: "border-box",
20
+ border: "1px dashed #444"
21
+ }
22
+ },
23
+ toolbar: {
24
+ mainClassName: "blot-formatter__toolbar",
25
+ mainStyle: {
26
+ position: "absolute",
27
+ top: "-12px",
28
+ right: "0",
29
+ left: "0",
30
+ height: "0",
31
+ minWidth: "120px",
32
+ font: "12px/1.0 Arial, Helvetica, sans-serif",
33
+ textAlign: "center",
34
+ color: "#333",
35
+ boxSizing: "border-box",
36
+ cursor: "default",
37
+ zIndex: "1"
38
+ },
39
+ buttonClassName: "blot-formatter__toolbar-button",
40
+ addButtonSelectStyle: true,
41
+ buttonStyle: {
42
+ display: "inline-flex",
43
+ alignItems: "center",
44
+ justifyContent: "center",
45
+ width: "24px",
46
+ height: "24px",
47
+ background: "white",
48
+ border: "1px solid #999",
49
+ verticalAlign: "middle",
50
+ cursor: "pointer"
51
+ },
52
+ svgStyle: {
53
+ display: "inline-block",
54
+ width: "16px",
55
+ height: "16px",
56
+ background: "white",
57
+ verticalAlign: "middle"
58
+ },
59
+ buttons: {
60
+ [LEFT_ALIGN]: true,
61
+ [CENTER_ALIGN]: true,
62
+ [RIGHT_ALIGN]: true,
63
+ [COPY]: true,
64
+ [DOWNLOAD]: true
65
+ }
66
+ },
67
+ resize: {
68
+ handleClassName: "blot-formatter__resize-handle",
69
+ handleStyle: {
70
+ position: "absolute",
71
+ height: "12px",
72
+ width: "12px",
73
+ backgroundColor: "white",
74
+ border: "1px solid #777",
75
+ boxSizing: "border-box",
76
+ opacity: "0.80"
77
+ }
78
+ }
79
+ };
80
+ export {
81
+ CENTER_ALIGN,
82
+ COPY,
83
+ DOWNLOAD,
84
+ LEFT_ALIGN,
85
+ RIGHT_ALIGN,
86
+ DefaultOptions as default
87
+ };
88
+ //# sourceMappingURL=options.es.js.map
@@ -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,EACF;AAAA,EACA,SAAS;AAAA,IACP,WAAW;AAAA,IACX,OAAO;AAAA,MACL,UAAU;AAAA,MACV,WAAW;AAAA,MACX,QAAQ;AAAA,IAAA;AAAA,EAEZ;AAAA,EACA,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,IACV;AAAA,IACA,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,IACV;AAAA,IACA,UAAU;AAAA,MACR,SAAS;AAAA,MACT,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,eAAe;AAAA,IACjB;AAAA,IACA,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,EAEhB;AAAA,EACA,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,33 @@
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 "../actions/index.es.js";
5
+ import { ImageToolbarAction } from "../actions/toolbar-action.es.js";
6
+ import { CustomResizeAction } from "../actions/custom-resize-action.es.js";
7
+ import { DeleteAction } from "../actions/delete-action.es.js";
8
+ class BlotSpec {
9
+ constructor(formatter) {
10
+ __publicField(this, "formatter");
11
+ this.formatter = formatter;
12
+ }
13
+ init() {
14
+ }
15
+ getActions() {
16
+ return [ImageToolbarAction, CustomResizeAction, DeleteAction];
17
+ }
18
+ getTargetElement() {
19
+ return null;
20
+ }
21
+ getOverlayElement() {
22
+ return this.getTargetElement();
23
+ }
24
+ setSelection() {
25
+ this.formatter.quill.setSelection(null);
26
+ }
27
+ onHide() {
28
+ }
29
+ }
30
+ export {
31
+ BlotSpec
32
+ };
33
+ //# sourceMappingURL=blot-spec.es.js.map
@@ -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,EAAA;AAAA,EAGnB,OAAa;AAAA,EAAA;AAAA,EAEb,aAAa;AACJ,WAAA,CAAC,oBAAoB,oBAAoB,YAAY;AAAA,EAAA;AAAA,EAG9D,mBAAuC;AAC9B,WAAA;AAAA,EAAA;AAAA,EAGT,oBAAoB;AAClB,WAAO,KAAK,iBAAiB;AAAA,EAAA;AAAA,EAG/B,eAAqB;AACd,SAAA,UAAU,MAAM,aAAa,IAAI;AAAA,EAAA;AAAA,EAGxC,SAAS;AAAA,EAAA;AACX;"}
@@ -1,19 +1,23 @@
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);
1
4
  import { isInside } from "../../../config/editor.utils.es.js";
2
- import CustomResizeAction from "../actions/CustomResizeAction.es.js";
3
- import DeleteAction from "../actions/DeleteAction.es.js";
4
- import ImageSpec from "./ImageSpec.es.js";
5
+ import { ImageSpec } from "./image-spec.es.js";
5
6
  class CustomImageSpec extends ImageSpec {
6
7
  constructor(formatter) {
7
8
  super(formatter);
8
- this.imageMouseout = (event) => {
9
+ __publicField(this, "editorElem");
10
+ __publicField(this, "observer");
11
+ __publicField(this, "oldRootScrollTop");
12
+ __publicField(this, "imageMouseout", (event) => {
9
13
  if (event.target.nodeName === "IMG" || event.target.classList.contains("blot-formatter__overlay")) {
10
14
  const imgDom = event.target;
11
15
  if (!isInside(event, imgDom)) {
12
16
  this.removeImagePreviewOverlay();
13
17
  }
14
18
  }
15
- };
16
- this.onClick = (event) => {
19
+ });
20
+ __publicField(this, "onClick", (event) => {
17
21
  var _a;
18
22
  const el = event.target;
19
23
  const isReadonly = this.formatter.quill.options.readOnly;
@@ -33,13 +37,11 @@ class CustomImageSpec extends ImageSpec {
33
37
  const len = imgBlot.length();
34
38
  quill.setSelection(index, len);
35
39
  }
36
- };
40
+ });
37
41
  this.formatter = formatter;
38
42
  this.oldRootScrollTop = this.formatter.quill.root.scrollTop;
39
43
  this.editorElem = this.formatter.quill.container;
40
- if (this.formatter.quill.root === this.formatter.quill.scrollingContainer) {
41
- this.formatter.quill.root.addEventListener("scroll", this.handleQuillRootScroll.bind(this));
42
- }
44
+ this.formatter.quill.root.addEventListener("scroll", this.handleQuillRootScroll.bind(this));
43
45
  }
44
46
  handleQuillRootScroll() {
45
47
  if (this.formatter.overlay) {
@@ -51,9 +53,6 @@ class CustomImageSpec extends ImageSpec {
51
53
  this.editorElem.addEventListener("mouseout", this.imageMouseout);
52
54
  super.init();
53
55
  }
54
- getActions() {
55
- return [DeleteAction, CustomResizeAction];
56
- }
57
56
  imageMouseOver(event) {
58
57
  var _a;
59
58
  const target = event.target;
@@ -114,4 +113,4 @@ class CustomImageSpec extends ImageSpec {
114
113
  export {
115
114
  CustomImageSpec
116
115
  };
117
- //# sourceMappingURL=CustomImageSpec.es.js.map
116
+ //# sourceMappingURL=custom-image-spec.es.js.map
@@ -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,32 @@
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 { BlotSpec } from "./blot-spec.es.js";
5
+ class ImageSpec extends BlotSpec {
6
+ constructor() {
7
+ super(...arguments);
8
+ __publicField(this, "img", null);
9
+ __publicField(this, "onClick", (event) => {
10
+ const el = event.target;
11
+ if (!(el instanceof HTMLElement) || el.tagName !== "IMG") {
12
+ return;
13
+ }
14
+ event.stopPropagation();
15
+ this.img = el;
16
+ this.formatter.show(this);
17
+ });
18
+ }
19
+ init() {
20
+ this.formatter.quill.root.addEventListener("click", this.onClick);
21
+ }
22
+ getTargetElement() {
23
+ return this.img;
24
+ }
25
+ onHide() {
26
+ this.img = null;
27
+ }
28
+ }
29
+ export {
30
+ ImageSpec
31
+ };
32
+ //# sourceMappingURL=image-spec.es.js.map
@@ -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,MAAA;AAEF,YAAM,gBAAgB;AAEtB,WAAK,MAAM;AACN,WAAA,UAAU,KAAK,IAAI;AAAA,IAC1B;AAAA;AAAA,EArBA,OAAO;AACL,SAAK,UAAU,MAAM,KAAK,iBAAiB,SAAS,KAAK,OAAO;AAAA,EAAA;AAAA,EAGlE,mBAAmB;AACjB,WAAO,KAAK;AAAA,EAAA;AAAA,EAGd,SAAS;AACP,SAAK,MAAM;AAAA,EAAA;AAaf;"}
@@ -0,0 +1,9 @@
1
+ import { BlotSpec } from "./blot-spec.es.js";
2
+ import { CustomImageSpec } from "./custom-image-spec.es.js";
3
+ import { ImageSpec } from "./image-spec.es.js";
4
+ export {
5
+ BlotSpec,
6
+ CustomImageSpec,
7
+ ImageSpec
8
+ };
9
+ //# sourceMappingURL=index.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -1,209 +1,78 @@
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);
1
4
  import Quill from "quill";
2
- import { FILE_UPLOADER_MIME_TYPES, IMAGE_UPLOADER_MIME_TYPES } from "../config/editor.config.es.js";
3
- import { isNullOrUndefined } from "../config/editor.utils.es.js";
4
- const Uploader = Quill.imports["modules/uploader"];
5
+ import { isString } from "../utils/is.es.js";
6
+ const Uploader = Quill.import("modules/uploader");
5
7
  const Delta = Quill.import("delta");
6
- class CustomUploader extends Uploader {
7
- constructor() {
8
- super(...arguments);
9
- this.isAllowedFileSize = (maxSize, file) => {
10
- if (isNullOrUndefined(maxSize)) {
11
- return true;
12
- }
13
- return file.size <= maxSize;
14
- };
15
- this.isAllowedFileType = (accept, file) => {
16
- if (accept) {
17
- const baseMimeType = file.type.replace(/\/.*$/, "");
18
- const acceptArr = typeof accept === "string" ? accept.split(",") : accept;
19
- return acceptArr.some((type) => {
20
- const validType = type.trim();
21
- if (validType.startsWith(".")) {
22
- return file.name.toLowerCase().includes(validType.toLowerCase(), file.name.toLowerCase().length - validType.toLowerCase().length);
23
- } else if (/\/\*$/.test(validType)) {
24
- return baseMimeType === validType.replace(/\/.*$/, "");
25
- }
26
- return file.type === validType;
27
- });
28
- }
29
- return true;
30
- };
8
+ class FileUploader extends Uploader {
9
+ constructor(quill, options) {
10
+ super(quill, options);
11
+ this.quill = quill;
12
+ this.options = this.resolveOptions(options);
31
13
  }
32
- upload(range, files, isFile) {
33
- const uploads = [];
34
- const fileFlags = [];
35
- const rejectFlags = {
36
- file: false,
37
- image: false
38
- };
39
- const uploadOption = this.quill.options.uploadOption;
40
- const acceptObj = uploadOption && {
41
- image: uploadOption.imageAccept,
42
- file: uploadOption.fileAccept
43
- } || {};
44
- Array.from(files).forEach((file) => {
45
- var _a, _b;
46
- if (file) {
47
- const fileFlag = typeof isFile === "boolean" ? isFile : !/^image\/[-\w.]+$/.test(file.type);
48
- const fileType = fileFlag ? "file" : "image";
49
- const accept = acceptObj[fileType] || this.options[fileType];
50
- if (this.isAllowedFileType(accept, file) && this.isAllowedFileSize(uploadOption == null ? void 0 : uploadOption.maxSize, file)) {
51
- uploads.push(file);
52
- fileFlags.push(fileFlag);
53
- (_a = uploadOption == null ? void 0 : uploadOption.success) == null ? void 0 : _a.call(uploadOption, file);
54
- } else {
55
- rejectFlags[fileType] = true;
56
- (_b = uploadOption == null ? void 0 : uploadOption.fail) == null ? void 0 : _b.call(uploadOption, file);
57
- }
14
+ resolveOptions(options = {}) {
15
+ return Object.assign({
16
+ mimetypes: ["*"],
17
+ maxSize: Number.POSITIVE_INFINITY,
18
+ handler(range, files) {
19
+ return files.map((file) => URL.createObjectURL(file));
20
+ },
21
+ success() {
22
+ },
23
+ fail() {
58
24
  }
59
- });
60
- this.options.handler.call(this, range, uploads, fileFlags, rejectFlags);
25
+ }, options);
61
26
  }
62
- // 处理上传文件
63
- handleUploadFile(range, files, _hasRejectedFile) {
64
- var _a;
65
- if ((_a = this.quill.options.uploadOption) == null ? void 0 : _a.fileUpload) {
66
- const initialRange = range;
67
- files.forEach((file) => {
68
- var _a2;
69
- const result = {
70
- file,
71
- callback: (res) => {
72
- if (!res) {
73
- return;
74
- }
75
- this.insertFileToEditor(initialRange, file, {
76
- code: 0,
77
- data: {
78
- title: file.name,
79
- size: file.size,
80
- src: res.fileUrl
81
- }
82
- });
83
- initialRange.index += 1;
84
- },
85
- editor: this.quill
86
- };
87
- (_a2 = this.quill.options.uploadOption) == null ? void 0 : _a2.fileUpload(result);
88
- });
89
- } else {
90
- files.forEach((file) => {
91
- const fileUrl = URL.createObjectURL(file);
92
- const initialRange = range;
93
- this.insertFileToEditor(initialRange, file, {
94
- code: 0,
95
- data: {
96
- title: file.name,
97
- size: file.size,
98
- src: file.src ?? fileUrl
99
- }
100
- });
101
- initialRange.index += 1;
102
- });
103
- }
27
+ validateFile(file) {
28
+ return this.options.mimetypes.some((type) => (file.type || "text/plain").match(type.replaceAll("*", ".*"))) && file.size < this.options.maxSize;
104
29
  }
105
- // 将文件插入编辑器
106
- insertFileToEditor(range, file, { code, message, data }) {
107
- if (code === 0) {
108
- const oldContent = new Delta().retain(range.index).delete(range.length);
109
- const videoFlag = this.uploadOption && this.uploadOption.isVideoPlay && /^video\/[-\w.]+$/.test(file.type);
110
- const insertObj = videoFlag ? { video: data } : { file: data };
111
- const currentContent = new Delta([{ insert: insertObj }]);
112
- const newContent = oldContent.concat(currentContent);
113
- this.quill.updateContents(newContent, Quill.sources.USER);
114
- this.quill.setSelection(range.index + 1);
115
- } else {
116
- console.error("error message:", message);
117
- }
30
+ async getFileUrls(files, range) {
31
+ const uploads = files.filter((file) => this.validateFile(file));
32
+ return this.options.handler.call(this, range, uploads);
118
33
  }
119
- // 将图片插入编辑器
120
- insertImageToEditor(range, { code, message, data }) {
121
- if (code === 0) {
122
- const { imageId, imageUrl } = data;
123
- const oldContent = new Delta().retain(range.index).delete(range.length);
124
- const currentContent = new Delta([
125
- {
126
- insert: { image: imageUrl },
127
- attributes: { "image-id": imageId }
128
- }
129
- ]);
130
- const newContent = oldContent.concat(currentContent);
131
- this.quill.updateContents(newContent, Quill.sources.USER);
132
- this.quill.setSelection(range.index + 1);
133
- } else {
134
- console.error("error message:", message);
34
+ async upload(range, files) {
35
+ const uploads = [];
36
+ const fails = [];
37
+ for (const file of Array.from(files)) {
38
+ if (this.validateFile(file)) {
39
+ uploads.push(file);
40
+ } else {
41
+ fails.push(file);
42
+ }
135
43
  }
136
- }
137
- // 处理上传图片
138
- handleUploadImage(range, { file, files }, hasRejectedImage) {
139
- var _a, _b;
140
- if ((_a = this.quill.options.uploadOption) == null ? void 0 : _a.imageUpload) {
141
- const imageEnableMultiUpload = this.quill.uploader.options.enableMultiUpload === true || ((_b = this.quill.uploader.options.enableMultiUpload) == null ? void 0 : _b.image);
142
- files.forEach((file2) => {
143
- var _a2;
144
- const initialRange = range;
145
- const result = {
146
- file: file2,
147
- data: { files: [file2] },
148
- hasRejectedImage,
149
- callback: (res) => {
150
- if (!res) {
151
- return;
152
- }
153
- if (imageEnableMultiUpload && Array.isArray(res)) {
154
- res.forEach((value) => {
155
- this.insertImageToEditor(initialRange, value);
156
- initialRange.index += 1;
157
- });
158
- } else {
159
- this.insertImageToEditor(initialRange, res);
160
- initialRange.index += 1;
161
- }
162
- },
163
- editor: this.quill
164
- };
165
- if (imageEnableMultiUpload) {
166
- result.data = { files };
44
+ const result = await this.options.handler.call(this, range, uploads);
45
+ const updateDelta = result.reduce((delta, url, i) => {
46
+ if (isString(url)) {
47
+ const type = uploads[i].type;
48
+ if (type.startsWith("image/")) {
49
+ delta.insert({ image: url });
50
+ } else if (type.startsWith("video/")) {
51
+ delta.insert({ video: { src: url } });
52
+ } else {
53
+ delta.insert({ file: { size: uploads[i].size, title: uploads[i].name, src: url } });
167
54
  }
168
- (_a2 = this.quill.options.uploadOption) == null ? void 0 : _a2.imageUpload(result);
169
- });
170
- } else {
171
- const promises = files.map((fileItem) => {
172
- return new Promise((resolve) => {
173
- const reader = new FileReader();
174
- reader.onload = (e) => {
175
- resolve(e.target.result);
176
- };
177
- reader.readAsDataURL(fileItem);
178
- });
179
- });
180
- Promise.all(promises).then((images) => {
181
- const update = images.reduce((delta, image) => {
182
- return delta.insert({ image });
183
- }, new Delta().retain(range.index).delete(range.length));
184
- this.quill.updateContents(update, Quill.sources.USER);
185
- this.quill.setSelection(range.index + images.length, Quill.sources.SILENT);
186
- });
187
- }
188
- }
189
- }
190
- CustomUploader.DEFAULTS = {
191
- file: FILE_UPLOADER_MIME_TYPES,
192
- image: IMAGE_UPLOADER_MIME_TYPES,
193
- enableMultiUpload: false,
194
- handler(range, files, fileFlags, rejectFlags) {
195
- const fileArr = [];
196
- const imgArr = [];
197
- files.forEach((file, index) => fileFlags[index] ? fileArr.push(file) : imgArr.push(file));
198
- if (this.quill.options.modules.file && (fileArr.length || rejectFlags.file)) {
199
- this.handleUploadFile(range, fileArr, rejectFlags.file);
55
+ } else {
56
+ delta.insert(" ");
57
+ }
58
+ return delta;
59
+ }, new Delta().retain(range.index).delete(range.length));
60
+ this.quill.updateContents(updateDelta, Quill.sources.USER);
61
+ this.quill.setSelection(range.index + result.length, Quill.sources.SILENT);
62
+ for (const file of fails) {
63
+ this.options.fail.call(this, file, range);
200
64
  }
201
- if (imgArr.length || rejectFlags.image) {
202
- this.handleUploadImage(range, { file: imgArr[0], files: imgArr }, rejectFlags.image);
65
+ for (const [i, res] of result.entries()) {
66
+ if (isString(res)) {
67
+ this.options.success.call(this, files[i], { index: range.index + i, length: 0 });
68
+ } else {
69
+ this.options.fail.call(this, files[i], { index: range.index + i, length: 0 });
70
+ }
203
71
  }
204
72
  }
205
- };
73
+ }
74
+ __publicField(FileUploader, "DEFAULTS", {});
206
75
  export {
207
- CustomUploader as default
76
+ FileUploader
208
77
  };
209
78
  //# sourceMappingURL=custom-uploader.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"custom-uploader.es.js","sources":["../../../src/modules/custom-uploader.ts"],"sourcesContent":["import type { Range } from 'quill/core/quill'\r\n\r\nimport Quill from 'quill'\r\nimport {\r\n FILE_UPLOADER_MIME_TYPES,\r\n IMAGE_UPLOADER_MIME_TYPES,\r\n} from '../config/editor.config'\r\nimport {\r\n isNullOrUndefined,\r\n} from '../config/editor.utils'\r\n\r\ninterface InsertFileData {\r\n code: number\r\n message?: string\r\n data: {\r\n title: string\r\n size: number\r\n src: string\r\n }\r\n}\r\n\r\nconst Uploader = Quill.imports['modules/uploader']\r\nconst Delta = Quill.import('delta')\r\n\r\nclass CustomUploader extends Uploader {\r\n quill\r\n options\r\n\r\n upload(range, files, isFile?) {\r\n const uploads = []\r\n const fileFlags = []\r\n const rejectFlags = {\r\n file: false,\r\n image: false,\r\n }\r\n const uploadOption = this.quill.options.uploadOption\r\n const acceptObj\r\n = (uploadOption && {\r\n image: uploadOption.imageAccept,\r\n file: uploadOption.fileAccept,\r\n })\r\n || {}\r\n Array.from(files).forEach((file: any) => {\r\n if (file) {\r\n const fileFlag\r\n = typeof isFile === 'boolean'\r\n ? isFile\r\n : !/^image\\/[-\\w.]+$/.test(file.type)\r\n const fileType = fileFlag ? 'file' : 'image'\r\n const accept = acceptObj[fileType] || this.options[fileType]\r\n if (this.isAllowedFileType(accept, file) && this.isAllowedFileSize(uploadOption?.maxSize, file)) {\r\n uploads.push(file)\r\n fileFlags.push(fileFlag)\r\n uploadOption?.success?.(file)\r\n }\r\n else {\r\n rejectFlags[fileType] = true\r\n uploadOption?.fail?.(file)\r\n }\r\n }\r\n })\r\n this.options.handler.call(this, range, uploads, fileFlags, rejectFlags)\r\n }\r\n\r\n isAllowedFileSize = (maxSize: number, file: File) => {\r\n if (isNullOrUndefined(maxSize)) {\r\n return true\r\n }\r\n\r\n return file.size <= maxSize\r\n }\r\n\r\n isAllowedFileType = (accept: Array<string> | string, file: File) => {\r\n if (accept) {\r\n const baseMimeType = file.type.replace(/\\/.*$/, '')\r\n const acceptArr = typeof accept === 'string' ? accept.split(',') : accept\r\n return acceptArr.some((type: string) => {\r\n const validType = type.trim()\r\n // suffix name (e.g. '.png,.xlsx')\r\n if (validType.startsWith('.')) {\r\n return (\r\n file.name\r\n .toLowerCase()\r\n .includes(validType.toLowerCase(), file.name.toLowerCase().length - validType.toLowerCase().length)\r\n )\r\n // mime type like 'image/*'\r\n }\r\n else if (/\\/\\*$/.test(validType)) {\r\n return baseMimeType === validType.replace(/\\/.*$/, '')\r\n }\r\n // mime type like 'text/plain,application/json'\r\n return file.type === validType\r\n })\r\n }\r\n return true\r\n }\r\n\r\n // 处理上传文件\r\n handleUploadFile(range, files, _hasRejectedFile) {\r\n if (this.quill.options.uploadOption?.fileUpload) {\r\n const initialRange = range\r\n files.forEach((file) => {\r\n const result = {\r\n file,\r\n callback: (res) => {\r\n if (!res) {\r\n return\r\n }\r\n this.insertFileToEditor(initialRange, file, {\r\n code: 0,\r\n data: {\r\n title: file.name,\r\n size: file.size,\r\n src: res.fileUrl,\r\n },\r\n })\r\n initialRange.index += 1\r\n },\r\n editor: this.quill,\r\n }\r\n this.quill.options.uploadOption?.fileUpload(result)\r\n })\r\n }\r\n else {\r\n files.forEach((file) => {\r\n const fileUrl = URL.createObjectURL(file)\r\n const initialRange = range\r\n this.insertFileToEditor(initialRange, file, {\r\n code: 0,\r\n data: {\r\n title: file.name,\r\n size: file.size,\r\n src: file.src ?? fileUrl,\r\n },\r\n })\r\n initialRange.index += 1\r\n })\r\n }\r\n }\r\n\r\n // 将文件插入编辑器\r\n insertFileToEditor(range: Range, file: File, { code, message, data }: InsertFileData) {\r\n if (code === 0) {\r\n const oldContent = new Delta().retain(range.index).delete(range.length)\r\n const videoFlag = this.uploadOption && this.uploadOption.isVideoPlay && /^video\\/[-\\w.]+$/.test(file.type)\r\n const insertObj = videoFlag ? { video: data } : { file: data }\r\n const currentContent = new Delta([{ insert: insertObj }])\r\n const newContent = oldContent.concat(currentContent)\r\n this.quill.updateContents(newContent, Quill.sources.USER)\r\n this.quill.setSelection(range.index + 1)\r\n }\r\n else {\r\n console.error('error message:', message)\r\n }\r\n }\r\n\r\n // 将图片插入编辑器\r\n insertImageToEditor(range, { code, message, data }) {\r\n if (code === 0) {\r\n const { imageId, imageUrl } = data\r\n // 粘贴截图或者从外源直接拷贝的单图时,需要将编辑器中已选中的内容删除\r\n const oldContent = new Delta().retain(range.index).delete(range.length)\r\n const currentContent = new Delta([\r\n {\r\n insert: { image: imageUrl },\r\n attributes: { 'image-id': imageId },\r\n },\r\n ])\r\n const newContent = oldContent.concat(currentContent)\r\n this.quill.updateContents(newContent, Quill.sources.USER)\r\n this.quill.setSelection(range.index + 1)\r\n }\r\n else {\r\n console.error('error message:', message)\r\n }\r\n }\r\n\r\n // 处理上传图片\r\n handleUploadImage(range, { file, files }, hasRejectedImage) {\r\n if (this.quill.options.uploadOption?.imageUpload) {\r\n // const imageEnableMultiUpload = this.enableMultiUpload === true || this.enableMultiUpload?.image\r\n // 此处this获取不到enableMultiUpload\r\n const imageEnableMultiUpload = this.quill.uploader.options.enableMultiUpload === true || this.quill.uploader.options.enableMultiUpload?.image\r\n files.forEach((file) => {\r\n const initialRange = range\r\n const result = {\r\n file,\r\n data: { files: [file] },\r\n hasRejectedImage,\r\n callback: (res) => {\r\n if (!res) {\r\n return\r\n }\r\n if (imageEnableMultiUpload && Array.isArray(res)) {\r\n res.forEach((value) => {\r\n this.insertImageToEditor(initialRange, value)\r\n initialRange.index += 1\r\n })\r\n }\r\n else {\r\n this.insertImageToEditor(initialRange, res)\r\n initialRange.index += 1\r\n }\r\n },\r\n editor: this.quill,\r\n }\r\n if (imageEnableMultiUpload) {\r\n result.data = { files }\r\n }\r\n this.quill.options.uploadOption?.imageUpload(result)\r\n })\r\n }\r\n else {\r\n const promises = files.map((fileItem) => {\r\n return new Promise((resolve) => {\r\n const reader = new FileReader()\r\n reader.onload = (e: any) => {\r\n resolve(e.target.result)\r\n }\r\n reader.readAsDataURL(fileItem)\r\n })\r\n })\r\n Promise.all(promises).then((images) => {\r\n const update = images.reduce((delta: any, image) => {\r\n return delta.insert({ image })\r\n }, new Delta().retain(range.index).delete(range.length))\r\n this.quill.updateContents(update, Quill.sources.USER)\r\n this.quill.setSelection(range.index + images.length, Quill.sources.SILENT)\r\n })\r\n }\r\n }\r\n}\r\n\r\nCustomUploader.DEFAULTS = {\r\n file: FILE_UPLOADER_MIME_TYPES,\r\n image: IMAGE_UPLOADER_MIME_TYPES,\r\n enableMultiUpload: false,\r\n handler(range, files, fileFlags, rejectFlags) {\r\n const fileArr = []\r\n const imgArr = []\r\n files.forEach((file, index) => (fileFlags[index] ? fileArr.push(file) : imgArr.push(file)))\r\n if (this.quill.options.modules.file && (fileArr.length || rejectFlags.file)) {\r\n this.handleUploadFile(range, fileArr, rejectFlags.file)\r\n }\r\n if (imgArr.length || rejectFlags.image) {\r\n this.handleUploadImage(range, { file: imgArr[0], files: imgArr }, rejectFlags.image)\r\n }\r\n },\r\n}\r\n\r\nexport default CustomUploader\r\n"],"names":["_a","file"],"mappings":"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"}
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;AAEZ,SAAA,UAAU,KAAK,eAAe,OAAO;AAAA,EAAA;AAAA,EAI5C,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,MAAA;AAAA,OACN,OAAO;AAAA,EAAA;AAAA,EAGZ,aAAa,MAAY;AACvB,WAAO,KAAK,QAAQ,UAAU,KAAK,CAAS,UAAA,KAAK,QAAQ,cAAc,MAAM,KAAK,WAAW,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,QAAQ;AAAA,EAAA;AAAA,EAGxI,MAAM,YAAY,OAAe,OAAc;AAC7C,UAAM,UAAU,MAAM,OAAO,UAAQ,KAAK,aAAa,IAAI,CAAC;AAC5D,WAAO,KAAK,QAAQ,QAAQ,KAAK,MAAM,OAAO,OAAO;AAAA,EAAA;AAAA,EAGvD,MAAM,OAAO,OAAc,OAA0B;AACnD,UAAM,UAAU,CAAC;AACjB,UAAM,QAAQ,CAAC;AAEf,eAAW,QAAQ,MAAM,KAAK,KAAK,GAAG;AAChC,UAAA,KAAK,aAAa,IAAI,GAAG;AAC3B,gBAAQ,KAAK,IAAI;AAAA,MAAA,OAEd;AACH,cAAM,KAAK,IAAI;AAAA,MAAA;AAAA,IACjB;AAGI,UAAA,SAAS,MAAM,KAAK,QAAQ,QAAQ,KAAK,MAAM,OAAO,OAAO;AACnE,UAAM,cAAc,OAAO,OAAO,CAAC,OAAO,KAAK,MAAM;AAC/C,UAAA,SAAS,GAAG,GAAG;AACX,cAAA,OAAO,QAAQ,CAAC,EAAE;AACpB,YAAA,KAAK,WAAW,QAAQ,GAAG;AAC7B,gBAAM,OAAO,EAAE,OAAO,IAAA,CAAK;AAAA,QAEpB,WAAA,KAAK,WAAW,QAAQ,GAAG;AAClC,gBAAM,OAAO,EAAE,OAAO,EAAE,KAAK,IAAA,GAAO;AAAA,QAAA,OAEjC;AACH,gBAAM,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC,EAAE,MAAM,OAAO,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAA,GAAO;AAAA,QAAA;AAAA,MACpF,OAEG;AACH,cAAM,OAAO,GAAG;AAAA,MAAA;AAEX,aAAA;AAAA,IAAA,GACN,IAAI,QAAQ,OAAO,MAAM,KAAK,EAAE,OAAO,MAAM,MAAM,CAAC;AAEvD,SAAK,MAAM,eAAe,aAAa,MAAM,QAAQ,IAAI;AACpD,SAAA,MAAM,aAAa,MAAM,QAAQ,OAAO,QAAQ,MAAM,QAAQ,MAAM;AAEzE,eAAW,QAAQ,OAAO;AACxB,WAAK,QAAQ,KAAK,KAAK,MAAM,MAAM,KAAK;AAAA,IAAA;AAG1C,eAAW,CAAC,GAAG,GAAG,KAAK,OAAO,WAAW;AACnC,UAAA,SAAS,GAAG,GAAG;AACjB,aAAK,QAAQ,QAAQ,KAAK,MAAM,MAAM,CAAC,GAAG,EAAE,OAAO,MAAM,QAAQ,GAAG,QAAQ,GAAG;AAAA,MAAA,OAE5E;AACH,aAAK,QAAQ,KAAK,KAAK,MAAM,MAAM,CAAC,GAAG,EAAE,OAAO,MAAM,QAAQ,GAAG,QAAQ,GAAG;AAAA,MAAA;AAAA,IAC9E;AAAA,EACF;AAEJ;AA/EE,cADW,cACJ,YAAW,CAAC;"}
@@ -1,17 +1,18 @@
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);
1
4
  import Quill from "quill";
2
5
  const BlockEmbed = Quill.import("blots/block/embed");
3
- const _DividerBlot = class _DividerBlot extends BlockEmbed {
6
+ class DividerBlot extends BlockEmbed {
4
7
  static create() {
5
8
  const node = super.create();
6
9
  node.setAttribute("contenteditable", "false");
7
10
  return node;
8
11
  }
9
- };
10
- _DividerBlot.blotName = "divider";
11
- _DividerBlot.tagName = "hr";
12
- let DividerBlot = _DividerBlot;
13
- Quill.register(DividerBlot);
12
+ }
13
+ __publicField(DividerBlot, "blotName", "divider");
14
+ __publicField(DividerBlot, "tagName", "hr");
14
15
  export {
15
- DividerBlot as default
16
+ DividerBlot
16
17
  };
17
18
  //# sourceMappingURL=divider.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"divider.es.js","sources":["../../../src/modules/divider.ts"],"sourcesContent":["import Quill from 'quill'\r\n\r\nconst BlockEmbed = Quill.import('blots/block/embed')\r\n\r\nclass DividerBlot extends BlockEmbed {\r\n static blotName = 'divider'\r\n static tagName = 'hr'\r\n\r\n static create() {\r\n const node = super.create()\r\n node.setAttribute('contenteditable', 'false')\r\n return node\r\n }\r\n}\r\n\r\nQuill.register(DividerBlot)\r\nexport default DividerBlot\r\n"],"names":[],"mappings":";AAEA,MAAM,aAAa,MAAM,OAAO,mBAAmB;AAEnD,MAAM,eAAN,MAAM,qBAAoB,WAAW;AAAA,EAInC,OAAO,SAAS;AACR,UAAA,OAAO,MAAM,OAAO;AACrB,SAAA,aAAa,mBAAmB,OAAO;AACrC,WAAA;AAAA,EAAA;AAEX;AARE,aAAO,WAAW;AAClB,aAAO,UAAU;AAFnB,IAAM,cAAN;AAWA,MAAM,SAAS,WAAW;"}
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;AACR,UAAA,OAAO,MAAM,OAAO;AACrB,SAAA,aAAa,mBAAmB,OAAO;AACrC,WAAA;AAAA,EAAA;AAEX;AARE,cADW,aACJ,YAAW;AAClB,cAFW,aAEJ,WAAU;"}