@opentiny/fluent-editor 3.25.0 → 3.25.2

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 (512) hide show
  1. package/README.md +7 -5
  2. package/es/config/base64-image.es.js +0 -2
  3. package/es/config/base64-image.es.js.map +1 -1
  4. package/es/config/index.es.js +0 -49
  5. package/es/config/index.es.js.map +1 -1
  6. package/es/core/fluent-editor.es.js +22 -0
  7. package/es/core/fluent-editor.es.js.map +1 -0
  8. package/es/fluent-editor.es.js +58 -196
  9. package/es/fluent-editor.es.js.map +1 -1
  10. package/es/{soft-break/index.es.js → formats/soft-break.es.js} +1 -1
  11. package/es/formats/soft-break.es.js.map +1 -0
  12. package/es/{strike/index.es.js → formats/strike.es.js} +1 -1
  13. package/es/formats/strike.es.js.map +1 -0
  14. package/es/{video/index.es.js → formats/video.es.js} +1 -1
  15. package/es/formats/video.es.js.map +1 -0
  16. package/es/index.es.js +4 -4
  17. package/es/index.es.js.map +1 -1
  18. package/es/{counter/index.es.js → modules/counter.es.js} +1 -1
  19. package/es/modules/counter.es.js.map +1 -0
  20. package/es/{custom-clipboard.es.js → modules/custom-clipboard.es.js} +3 -3
  21. package/es/modules/custom-clipboard.es.js.map +1 -0
  22. package/es/{custom-image → modules/custom-image}/BlotFormatter.es.js +28 -0
  23. package/es/modules/custom-image/BlotFormatter.es.js.map +1 -0
  24. package/es/modules/custom-image/Options.es.js.map +1 -0
  25. package/es/modules/custom-image/actions/Action.es.js.map +1 -0
  26. package/es/modules/custom-image/actions/CustomResizeAction.es.js.map +1 -0
  27. package/es/modules/custom-image/actions/DeleteAction.es.js.map +1 -0
  28. package/es/modules/custom-image/image-bar.es.js +126 -0
  29. package/es/modules/custom-image/image-bar.es.js.map +1 -0
  30. package/es/{custom-image → modules/custom-image}/image.es.js +1 -1
  31. package/es/modules/custom-image/image.es.js.map +1 -0
  32. package/es/modules/custom-image/specs/BlotSpec.es.js.map +1 -0
  33. package/es/{custom-image → modules/custom-image}/specs/CustomImageSpec.es.js +1 -1
  34. package/es/modules/custom-image/specs/CustomImageSpec.es.js.map +1 -0
  35. package/es/modules/custom-image/specs/ImageSpec.es.js.map +1 -0
  36. package/es/{custom-uploader.es.js → modules/custom-uploader.es.js} +2 -2
  37. package/es/modules/custom-uploader.es.js.map +1 -0
  38. package/es/{divider/index.es.js → modules/divider.es.js} +1 -1
  39. package/es/modules/divider.es.js.map +1 -0
  40. package/es/modules/emoji/emoji-list/people.es.js.map +1 -0
  41. package/es/modules/emoji/emoji-list.es.js.map +1 -0
  42. package/es/modules/emoji/emoji-map.es.js.map +1 -0
  43. package/es/modules/emoji/emoji-sprite.es.js +5 -0
  44. package/es/modules/emoji/emoji-sprite.es.js.map +1 -0
  45. package/es/modules/emoji/formats/emoji-blot.es.js.map +1 -0
  46. package/es/modules/emoji/index.es.js.map +1 -0
  47. package/es/modules/emoji/modules/emoji.es.js.map +1 -0
  48. package/es/{emoji → modules/emoji}/modules/toolbar-emoji.es.js +1 -1
  49. package/{lib/emoji/modules/toolbar-emoji.cjs.js.map → es/modules/emoji/modules/toolbar-emoji.es.js.map} +1 -1
  50. package/es/modules/emoji/utils.es.js.map +1 -0
  51. package/es/{file → modules/file}/formats/file.es.js +1 -1
  52. package/es/modules/file/formats/file.es.js.map +1 -0
  53. package/es/modules/file/index.es.js.map +1 -0
  54. package/es/{file → modules/file}/modules/file-bar.es.js +1 -1
  55. package/es/modules/file/modules/file-bar.es.js.map +1 -0
  56. package/es/modules/global-link/constants.es.js.map +1 -0
  57. package/es/modules/global-link/formats/customer-widget-link.es.js.map +1 -0
  58. package/es/modules/global-link/formats/doc-link.es.js.map +1 -0
  59. package/es/modules/global-link/formats/wiki-link.es.js.map +1 -0
  60. package/es/modules/global-link/formats/work-item-link.es.js.map +1 -0
  61. package/es/{global-link → modules/global-link}/index.es.js +1 -1
  62. package/es/modules/global-link/index.es.js.map +1 -0
  63. package/es/modules/global-link/utils/createTable.es.js.map +1 -0
  64. package/es/{i18n/index.es.js → modules/i18n.es.js} +2 -2
  65. package/es/modules/i18n.es.js.map +1 -0
  66. package/es/{link → modules/link}/formats/link.es.js +1 -1
  67. package/es/modules/link/formats/link.es.js.map +1 -0
  68. package/es/modules/link/index.es.js.map +1 -0
  69. package/es/{link → modules/link}/modules/tooltip.es.js +4 -4
  70. package/es/modules/link/modules/tooltip.es.js.map +1 -0
  71. package/es/modules/mathlive/formats.es.js.map +1 -0
  72. package/es/modules/mathlive/index.es.js.map +1 -0
  73. package/es/modules/mathlive/tooltip.es.js.map +1 -0
  74. package/es/{mention → modules/mention}/Mention.es.js +1 -1
  75. package/es/modules/mention/Mention.es.js.map +1 -0
  76. package/es/modules/mention/MentionLink.es.js.map +1 -0
  77. package/es/modules/mention/constants.es.js.map +1 -0
  78. package/es/{quick-menu/index.es.js → modules/quick-menu.es.js} +1 -1
  79. package/es/modules/quick-menu.es.js.map +1 -0
  80. package/es/{syntax/index.es.js → modules/syntax.es.js} +1 -1
  81. package/es/modules/syntax.es.js.map +1 -0
  82. package/es/{table → modules/table}/better-table.es.js +1 -1
  83. package/es/modules/table/better-table.es.js.map +1 -0
  84. package/es/{table → modules/table}/formats/header.es.js +1 -1
  85. package/es/modules/table/formats/header.es.js.map +1 -0
  86. package/es/modules/table/formats/list.es.js.map +1 -0
  87. package/es/{table → modules/table}/formats/table.es.js +2 -2
  88. package/es/modules/table/formats/table.es.js.map +1 -0
  89. package/es/modules/table/modules/table-column-tool.es.js.map +1 -0
  90. package/es/{table → modules/table}/modules/table-operation-menu.es.js +2 -2
  91. package/es/modules/table/modules/table-operation-menu.es.js.map +1 -0
  92. package/es/modules/table/modules/table-scroll-bar.es.js.map +1 -0
  93. package/es/modules/table/modules/table-selection.es.js.map +1 -0
  94. package/es/modules/table/modules/table-selector.es.js.map +1 -0
  95. package/es/modules/table/table-config.es.js.map +1 -0
  96. package/es/modules/table/utils/index.es.js.map +1 -0
  97. package/es/{table → modules/table}/utils/node-matchers.es.js +1 -1
  98. package/es/modules/table/utils/node-matchers.es.js.map +1 -0
  99. package/es/{toolbar → modules/toolbar}/better-picker.es.js +1 -1
  100. package/es/modules/toolbar/better-picker.es.js.map +1 -0
  101. package/es/{toolbar → modules/toolbar}/index.es.js +1 -1
  102. package/es/modules/toolbar/index.es.js.map +1 -0
  103. package/es/{toolbar → modules/toolbar}/toolbar-tip.es.js +2 -2
  104. package/es/modules/toolbar/toolbar-tip.es.js.map +1 -0
  105. package/es/themes/snow.es.js +119 -0
  106. package/es/themes/snow.es.js.map +1 -0
  107. package/es/{format-painter/index.es.js → tools/format-painter.es.js} +1 -1
  108. package/es/tools/format-painter.es.js.map +1 -0
  109. package/es/{fullscreen/handler.es.js → tools/fullscreen.es.js} +3 -2
  110. package/es/tools/fullscreen.es.js.map +1 -0
  111. package/es/{screenshot/index.es.js → tools/screenshot.es.js} +1 -1
  112. package/es/tools/screenshot.es.js.map +1 -0
  113. package/es/ui/icons.config.es.js.map +1 -0
  114. package/es/ui/icons.es.js +58 -0
  115. package/es/ui/icons.es.js.map +1 -0
  116. package/lib/config/base64-image.cjs.js +0 -2
  117. package/lib/config/base64-image.cjs.js.map +1 -1
  118. package/lib/config/index.cjs.js +0 -49
  119. package/lib/config/index.cjs.js.map +1 -1
  120. package/lib/core/fluent-editor.cjs.js +22 -0
  121. package/lib/core/fluent-editor.cjs.js.map +1 -0
  122. package/lib/fluent-editor.cjs.js +58 -196
  123. package/lib/fluent-editor.cjs.js.map +1 -1
  124. package/lib/{soft-break/index.cjs.js → formats/soft-break.cjs.js} +1 -1
  125. package/lib/formats/soft-break.cjs.js.map +1 -0
  126. package/lib/{strike/index.cjs.js → formats/strike.cjs.js} +1 -1
  127. package/lib/formats/strike.cjs.js.map +1 -0
  128. package/lib/{video/index.cjs.js → formats/video.cjs.js} +1 -1
  129. package/lib/formats/video.cjs.js.map +1 -0
  130. package/lib/index.cjs.js +4 -4
  131. package/lib/{counter/index.cjs.js → modules/counter.cjs.js} +1 -1
  132. package/{es/counter/index.es.js.map → lib/modules/counter.cjs.js.map} +1 -1
  133. package/lib/{custom-clipboard.cjs.js → modules/custom-clipboard.cjs.js} +3 -3
  134. package/lib/modules/custom-clipboard.cjs.js.map +1 -0
  135. package/lib/{custom-image → modules/custom-image}/BlotFormatter.cjs.js +28 -0
  136. package/lib/modules/custom-image/BlotFormatter.cjs.js.map +1 -0
  137. package/lib/modules/custom-image/Options.cjs.js.map +1 -0
  138. package/lib/modules/custom-image/actions/Action.cjs.js.map +1 -0
  139. package/lib/modules/custom-image/actions/CustomResizeAction.cjs.js.map +1 -0
  140. package/lib/modules/custom-image/actions/DeleteAction.cjs.js.map +1 -0
  141. package/lib/modules/custom-image/image-bar.cjs.js +126 -0
  142. package/lib/modules/custom-image/image-bar.cjs.js.map +1 -0
  143. package/lib/{custom-image → modules/custom-image}/image.cjs.js +1 -1
  144. package/lib/modules/custom-image/image.cjs.js.map +1 -0
  145. package/lib/modules/custom-image/specs/BlotSpec.cjs.js.map +1 -0
  146. package/lib/{custom-image → modules/custom-image}/specs/CustomImageSpec.cjs.js +1 -1
  147. package/lib/modules/custom-image/specs/CustomImageSpec.cjs.js.map +1 -0
  148. package/lib/modules/custom-image/specs/ImageSpec.cjs.js.map +1 -0
  149. package/lib/{custom-uploader.cjs.js → modules/custom-uploader.cjs.js} +2 -2
  150. package/lib/modules/custom-uploader.cjs.js.map +1 -0
  151. package/lib/{divider/index.cjs.js → modules/divider.cjs.js} +1 -1
  152. package/lib/modules/divider.cjs.js.map +1 -0
  153. package/lib/modules/emoji/emoji-list/people.cjs.js.map +1 -0
  154. package/lib/modules/emoji/emoji-list.cjs.js.map +1 -0
  155. package/lib/modules/emoji/emoji-map.cjs.js.map +1 -0
  156. package/lib/modules/emoji/emoji-sprite.cjs.js +5 -0
  157. package/lib/modules/emoji/emoji-sprite.cjs.js.map +1 -0
  158. package/lib/modules/emoji/formats/emoji-blot.cjs.js.map +1 -0
  159. package/lib/modules/emoji/index.cjs.js.map +1 -0
  160. package/lib/modules/emoji/modules/emoji.cjs.js.map +1 -0
  161. package/lib/{emoji → modules/emoji}/modules/toolbar-emoji.cjs.js +2 -2
  162. package/lib/modules/emoji/modules/toolbar-emoji.cjs.js.map +1 -0
  163. package/lib/modules/emoji/utils.cjs.js.map +1 -0
  164. package/lib/{file → modules/file}/formats/file.cjs.js +1 -1
  165. package/lib/modules/file/formats/file.cjs.js.map +1 -0
  166. package/lib/modules/file/index.cjs.js.map +1 -0
  167. package/lib/{file → modules/file}/modules/file-bar.cjs.js +1 -1
  168. package/lib/modules/file/modules/file-bar.cjs.js.map +1 -0
  169. package/lib/modules/global-link/constants.cjs.js.map +1 -0
  170. package/lib/modules/global-link/formats/customer-widget-link.cjs.js.map +1 -0
  171. package/lib/modules/global-link/formats/doc-link.cjs.js.map +1 -0
  172. package/lib/modules/global-link/formats/wiki-link.cjs.js.map +1 -0
  173. package/lib/modules/global-link/formats/work-item-link.cjs.js.map +1 -0
  174. package/lib/{global-link → modules/global-link}/index.cjs.js +1 -1
  175. package/lib/modules/global-link/index.cjs.js.map +1 -0
  176. package/lib/modules/global-link/utils/createTable.cjs.js.map +1 -0
  177. package/lib/{i18n/index.cjs.js → modules/i18n.cjs.js} +3 -3
  178. package/lib/modules/i18n.cjs.js.map +1 -0
  179. package/lib/{link → modules/link}/formats/link.cjs.js +1 -1
  180. package/lib/modules/link/formats/link.cjs.js.map +1 -0
  181. package/lib/modules/link/index.cjs.js.map +1 -0
  182. package/lib/{link → modules/link}/modules/tooltip.cjs.js +4 -4
  183. package/lib/modules/link/modules/tooltip.cjs.js.map +1 -0
  184. package/lib/modules/mathlive/formats.cjs.js.map +1 -0
  185. package/lib/modules/mathlive/index.cjs.js.map +1 -0
  186. package/lib/modules/mathlive/tooltip.cjs.js.map +1 -0
  187. package/lib/{mention → modules/mention}/Mention.cjs.js +1 -1
  188. package/lib/modules/mention/Mention.cjs.js.map +1 -0
  189. package/lib/modules/mention/MentionLink.cjs.js.map +1 -0
  190. package/lib/modules/mention/constants.cjs.js.map +1 -0
  191. package/lib/{quick-menu/index.cjs.js → modules/quick-menu.cjs.js} +1 -1
  192. package/lib/modules/quick-menu.cjs.js.map +1 -0
  193. package/lib/{syntax/index.cjs.js → modules/syntax.cjs.js} +1 -1
  194. package/lib/modules/syntax.cjs.js.map +1 -0
  195. package/lib/{table → modules/table}/better-table.cjs.js +1 -1
  196. package/lib/modules/table/better-table.cjs.js.map +1 -0
  197. package/lib/{table → modules/table}/formats/header.cjs.js +1 -1
  198. package/lib/modules/table/formats/header.cjs.js.map +1 -0
  199. package/lib/modules/table/formats/list.cjs.js.map +1 -0
  200. package/lib/{table → modules/table}/formats/table.cjs.js +2 -2
  201. package/lib/modules/table/formats/table.cjs.js.map +1 -0
  202. package/lib/modules/table/modules/table-column-tool.cjs.js.map +1 -0
  203. package/lib/{table → modules/table}/modules/table-operation-menu.cjs.js +2 -2
  204. package/lib/modules/table/modules/table-operation-menu.cjs.js.map +1 -0
  205. package/lib/modules/table/modules/table-scroll-bar.cjs.js.map +1 -0
  206. package/lib/modules/table/modules/table-selection.cjs.js.map +1 -0
  207. package/lib/modules/table/modules/table-selector.cjs.js.map +1 -0
  208. package/lib/modules/table/table-config.cjs.js.map +1 -0
  209. package/lib/modules/table/utils/index.cjs.js.map +1 -0
  210. package/lib/{table → modules/table}/utils/node-matchers.cjs.js +1 -1
  211. package/lib/modules/table/utils/node-matchers.cjs.js.map +1 -0
  212. package/lib/{toolbar → modules/toolbar}/better-picker.cjs.js +1 -1
  213. package/lib/modules/toolbar/better-picker.cjs.js.map +1 -0
  214. package/lib/{toolbar → modules/toolbar}/index.cjs.js +1 -1
  215. package/lib/modules/toolbar/index.cjs.js.map +1 -0
  216. package/lib/{toolbar → modules/toolbar}/toolbar-tip.cjs.js +2 -2
  217. package/lib/modules/toolbar/toolbar-tip.cjs.js.map +1 -0
  218. package/lib/themes/snow.cjs.js +119 -0
  219. package/lib/themes/snow.cjs.js.map +1 -0
  220. package/lib/{format-painter/index.cjs.js → tools/format-painter.cjs.js} +1 -1
  221. package/lib/tools/format-painter.cjs.js.map +1 -0
  222. package/lib/{fullscreen/handler.cjs.js → tools/fullscreen.cjs.js} +4 -3
  223. package/lib/tools/fullscreen.cjs.js.map +1 -0
  224. package/lib/{screenshot/index.cjs.js → tools/screenshot.cjs.js} +1 -1
  225. package/lib/tools/screenshot.cjs.js.map +1 -0
  226. package/lib/ui/icons.cjs.js +58 -0
  227. package/lib/ui/icons.cjs.js.map +1 -0
  228. package/lib/ui/icons.config.cjs.js.map +1 -0
  229. package/package.json +2 -2
  230. package/style.css +193 -0
  231. package/types/config/base64-image.d.ts +0 -1
  232. package/types/config/index.d.ts +0 -3
  233. package/types/config/types/editor-config.interface.d.ts +1 -1
  234. package/types/config/types/editor-toolbar.interface.d.ts +1 -1
  235. package/types/core/fluent-editor.d.ts +12 -0
  236. package/types/fluent-editor.d.ts +2 -11
  237. package/types/index.d.ts +2 -2
  238. package/types/{counter/index.d.ts → modules/counter.d.ts} +1 -1
  239. package/types/{custom-clipboard.d.ts → modules/custom-clipboard.d.ts} +1 -1
  240. package/types/{custom-image → modules/custom-image}/BlotFormatter.d.ts +5 -0
  241. package/types/modules/custom-image/image-bar.d.ts +15 -0
  242. package/types/modules/emoji/emoji-sprite.d.ts +1 -0
  243. package/types/{i18n/index.d.ts → modules/i18n.d.ts} +5 -3
  244. package/types/{table → modules/table}/formats/list.d.ts +1 -1
  245. package/types/{toolbar → modules/toolbar}/toolbar-tip.d.ts +2 -2
  246. package/types/themes/snow.d.ts +4 -0
  247. package/types/ui/icons.d.ts +6 -0
  248. package/es/config/icons.config.es.js.map +0 -1
  249. package/es/custom-clipboard.es.js.map +0 -1
  250. package/es/custom-image/BlotFormatter.es.js.map +0 -1
  251. package/es/custom-image/Options.es.js.map +0 -1
  252. package/es/custom-image/actions/Action.es.js.map +0 -1
  253. package/es/custom-image/actions/CustomResizeAction.es.js.map +0 -1
  254. package/es/custom-image/actions/DeleteAction.es.js.map +0 -1
  255. package/es/custom-image/image.es.js.map +0 -1
  256. package/es/custom-image/specs/BlotSpec.es.js.map +0 -1
  257. package/es/custom-image/specs/CustomImageSpec.es.js.map +0 -1
  258. package/es/custom-image/specs/ImageSpec.es.js.map +0 -1
  259. package/es/custom-uploader.es.js.map +0 -1
  260. package/es/divider/index.es.js.map +0 -1
  261. package/es/emoji/emoji-list/people.es.js.map +0 -1
  262. package/es/emoji/emoji-list.es.js.map +0 -1
  263. package/es/emoji/emoji-map.es.js.map +0 -1
  264. package/es/emoji/formats/emoji-blot.es.js.map +0 -1
  265. package/es/emoji/index.es.js.map +0 -1
  266. package/es/emoji/modules/emoji.es.js.map +0 -1
  267. package/es/emoji/modules/toolbar-emoji.es.js.map +0 -1
  268. package/es/emoji/utils.es.js.map +0 -1
  269. package/es/file/formats/file.es.js.map +0 -1
  270. package/es/file/index.es.js.map +0 -1
  271. package/es/file/modules/file-bar.es.js.map +0 -1
  272. package/es/format-painter/index.es.js.map +0 -1
  273. package/es/fullscreen/handler.es.js.map +0 -1
  274. package/es/global-link/constants.es.js.map +0 -1
  275. package/es/global-link/formats/customer-widget-link.es.js.map +0 -1
  276. package/es/global-link/formats/doc-link.es.js.map +0 -1
  277. package/es/global-link/formats/wiki-link.es.js.map +0 -1
  278. package/es/global-link/formats/work-item-link.es.js.map +0 -1
  279. package/es/global-link/index.es.js.map +0 -1
  280. package/es/global-link/utils/createTable.es.js.map +0 -1
  281. package/es/i18n/index.es.js.map +0 -1
  282. package/es/link/formats/link.es.js.map +0 -1
  283. package/es/link/index.es.js.map +0 -1
  284. package/es/link/modules/tooltip.es.js.map +0 -1
  285. package/es/mathlive/formats.es.js.map +0 -1
  286. package/es/mathlive/index.es.js.map +0 -1
  287. package/es/mathlive/tooltip.es.js.map +0 -1
  288. package/es/mention/Mention.es.js.map +0 -1
  289. package/es/mention/MentionLink.es.js.map +0 -1
  290. package/es/mention/constants.es.js.map +0 -1
  291. package/es/quick-menu/index.es.js.map +0 -1
  292. package/es/screenshot/index.es.js.map +0 -1
  293. package/es/soft-break/index.es.js.map +0 -1
  294. package/es/strike/index.es.js.map +0 -1
  295. package/es/syntax/index.es.js.map +0 -1
  296. package/es/table/better-table.es.js.map +0 -1
  297. package/es/table/formats/header.es.js.map +0 -1
  298. package/es/table/formats/list.es.js.map +0 -1
  299. package/es/table/formats/table.es.js.map +0 -1
  300. package/es/table/modules/table-column-tool.es.js.map +0 -1
  301. package/es/table/modules/table-operation-menu.es.js.map +0 -1
  302. package/es/table/modules/table-scroll-bar.es.js.map +0 -1
  303. package/es/table/modules/table-selection.es.js.map +0 -1
  304. package/es/table/modules/table-selector.es.js.map +0 -1
  305. package/es/table/table-config.es.js.map +0 -1
  306. package/es/table/utils/index.es.js.map +0 -1
  307. package/es/table/utils/node-matchers.es.js.map +0 -1
  308. package/es/toolbar/better-picker.es.js.map +0 -1
  309. package/es/toolbar/index.es.js.map +0 -1
  310. package/es/toolbar/toolbar-tip.es.js.map +0 -1
  311. package/es/video/index.es.js.map +0 -1
  312. package/lib/config/icons.config.cjs.js.map +0 -1
  313. package/lib/counter/index.cjs.js.map +0 -1
  314. package/lib/custom-clipboard.cjs.js.map +0 -1
  315. package/lib/custom-image/BlotFormatter.cjs.js.map +0 -1
  316. package/lib/custom-image/Options.cjs.js.map +0 -1
  317. package/lib/custom-image/actions/Action.cjs.js.map +0 -1
  318. package/lib/custom-image/actions/CustomResizeAction.cjs.js.map +0 -1
  319. package/lib/custom-image/actions/DeleteAction.cjs.js.map +0 -1
  320. package/lib/custom-image/image.cjs.js.map +0 -1
  321. package/lib/custom-image/specs/BlotSpec.cjs.js.map +0 -1
  322. package/lib/custom-image/specs/CustomImageSpec.cjs.js.map +0 -1
  323. package/lib/custom-image/specs/ImageSpec.cjs.js.map +0 -1
  324. package/lib/custom-uploader.cjs.js.map +0 -1
  325. package/lib/divider/index.cjs.js.map +0 -1
  326. package/lib/emoji/emoji-list/people.cjs.js.map +0 -1
  327. package/lib/emoji/emoji-list.cjs.js.map +0 -1
  328. package/lib/emoji/emoji-map.cjs.js.map +0 -1
  329. package/lib/emoji/formats/emoji-blot.cjs.js.map +0 -1
  330. package/lib/emoji/index.cjs.js.map +0 -1
  331. package/lib/emoji/modules/emoji.cjs.js.map +0 -1
  332. package/lib/emoji/utils.cjs.js.map +0 -1
  333. package/lib/file/formats/file.cjs.js.map +0 -1
  334. package/lib/file/index.cjs.js.map +0 -1
  335. package/lib/file/modules/file-bar.cjs.js.map +0 -1
  336. package/lib/format-painter/index.cjs.js.map +0 -1
  337. package/lib/fullscreen/handler.cjs.js.map +0 -1
  338. package/lib/global-link/constants.cjs.js.map +0 -1
  339. package/lib/global-link/formats/customer-widget-link.cjs.js.map +0 -1
  340. package/lib/global-link/formats/doc-link.cjs.js.map +0 -1
  341. package/lib/global-link/formats/wiki-link.cjs.js.map +0 -1
  342. package/lib/global-link/formats/work-item-link.cjs.js.map +0 -1
  343. package/lib/global-link/index.cjs.js.map +0 -1
  344. package/lib/global-link/utils/createTable.cjs.js.map +0 -1
  345. package/lib/i18n/index.cjs.js.map +0 -1
  346. package/lib/link/formats/link.cjs.js.map +0 -1
  347. package/lib/link/index.cjs.js.map +0 -1
  348. package/lib/link/modules/tooltip.cjs.js.map +0 -1
  349. package/lib/mathlive/formats.cjs.js.map +0 -1
  350. package/lib/mathlive/index.cjs.js.map +0 -1
  351. package/lib/mathlive/tooltip.cjs.js.map +0 -1
  352. package/lib/mention/Mention.cjs.js.map +0 -1
  353. package/lib/mention/MentionLink.cjs.js.map +0 -1
  354. package/lib/mention/constants.cjs.js.map +0 -1
  355. package/lib/quick-menu/index.cjs.js.map +0 -1
  356. package/lib/screenshot/index.cjs.js.map +0 -1
  357. package/lib/soft-break/index.cjs.js.map +0 -1
  358. package/lib/strike/index.cjs.js.map +0 -1
  359. package/lib/syntax/index.cjs.js.map +0 -1
  360. package/lib/table/better-table.cjs.js.map +0 -1
  361. package/lib/table/formats/header.cjs.js.map +0 -1
  362. package/lib/table/formats/list.cjs.js.map +0 -1
  363. package/lib/table/formats/table.cjs.js.map +0 -1
  364. package/lib/table/modules/table-column-tool.cjs.js.map +0 -1
  365. package/lib/table/modules/table-operation-menu.cjs.js.map +0 -1
  366. package/lib/table/modules/table-scroll-bar.cjs.js.map +0 -1
  367. package/lib/table/modules/table-selection.cjs.js.map +0 -1
  368. package/lib/table/modules/table-selector.cjs.js.map +0 -1
  369. package/lib/table/table-config.cjs.js.map +0 -1
  370. package/lib/table/utils/index.cjs.js.map +0 -1
  371. package/lib/table/utils/node-matchers.cjs.js.map +0 -1
  372. package/lib/toolbar/better-picker.cjs.js.map +0 -1
  373. package/lib/toolbar/index.cjs.js.map +0 -1
  374. package/lib/toolbar/toolbar-tip.cjs.js.map +0 -1
  375. package/lib/video/index.cjs.js.map +0 -1
  376. /package/es/{custom-image → modules/custom-image}/Options.es.js +0 -0
  377. /package/es/{custom-image → modules/custom-image}/actions/Action.es.js +0 -0
  378. /package/es/{custom-image → modules/custom-image}/actions/CustomResizeAction.es.js +0 -0
  379. /package/es/{custom-image → modules/custom-image}/actions/DeleteAction.es.js +0 -0
  380. /package/es/{custom-image → modules/custom-image}/specs/BlotSpec.es.js +0 -0
  381. /package/es/{custom-image → modules/custom-image}/specs/ImageSpec.es.js +0 -0
  382. /package/es/{emoji → modules/emoji}/emoji-list/index.es.js +0 -0
  383. /package/es/{emoji → modules/emoji}/emoji-list/index.es.js.map +0 -0
  384. /package/es/{emoji → modules/emoji}/emoji-list/people.es.js +0 -0
  385. /package/es/{emoji → modules/emoji}/emoji-list.es.js +0 -0
  386. /package/es/{emoji → modules/emoji}/emoji-map.es.js +0 -0
  387. /package/es/{emoji → modules/emoji}/formats/emoji-blot.es.js +0 -0
  388. /package/es/{emoji → modules/emoji}/index.es.js +0 -0
  389. /package/es/{emoji → modules/emoji}/modules/emoji.es.js +0 -0
  390. /package/es/{emoji → modules/emoji}/utils.es.js +0 -0
  391. /package/es/{file → modules/file}/index.es.js +0 -0
  392. /package/es/{global-link → modules/global-link}/constants.es.js +0 -0
  393. /package/es/{global-link → modules/global-link}/formats/customer-widget-link.es.js +0 -0
  394. /package/es/{global-link → modules/global-link}/formats/doc-link.es.js +0 -0
  395. /package/es/{global-link → modules/global-link}/formats/wiki-link.es.js +0 -0
  396. /package/es/{global-link → modules/global-link}/formats/work-item-link.es.js +0 -0
  397. /package/es/{global-link → modules/global-link}/global-link-panel.es.js +0 -0
  398. /package/es/{global-link → modules/global-link}/global-link-panel.es.js.map +0 -0
  399. /package/es/{global-link → modules/global-link}/utils/createTable.es.js +0 -0
  400. /package/es/{link → modules/link}/index.es.js +0 -0
  401. /package/es/{mathlive → modules/mathlive}/formats.es.js +0 -0
  402. /package/es/{mathlive → modules/mathlive}/index.es.js +0 -0
  403. /package/es/{mathlive → modules/mathlive}/tooltip.es.js +0 -0
  404. /package/es/{mention → modules/mention}/MentionLink.es.js +0 -0
  405. /package/es/{mention → modules/mention}/constants.es.js +0 -0
  406. /package/es/{table → modules/table}/formats/list.es.js +0 -0
  407. /package/es/{table → modules/table}/modules/table-column-tool.es.js +0 -0
  408. /package/es/{table → modules/table}/modules/table-scroll-bar.es.js +0 -0
  409. /package/es/{table → modules/table}/modules/table-selection.es.js +0 -0
  410. /package/es/{table → modules/table}/modules/table-selector.es.js +0 -0
  411. /package/es/{table → modules/table}/table-config.es.js +0 -0
  412. /package/es/{table → modules/table}/utils/index.es.js +0 -0
  413. /package/es/{config → ui}/icons.config.es.js +0 -0
  414. /package/lib/{custom-image → modules/custom-image}/Options.cjs.js +0 -0
  415. /package/lib/{custom-image → modules/custom-image}/actions/Action.cjs.js +0 -0
  416. /package/lib/{custom-image → modules/custom-image}/actions/CustomResizeAction.cjs.js +0 -0
  417. /package/lib/{custom-image → modules/custom-image}/actions/DeleteAction.cjs.js +0 -0
  418. /package/lib/{custom-image → modules/custom-image}/specs/BlotSpec.cjs.js +0 -0
  419. /package/lib/{custom-image → modules/custom-image}/specs/ImageSpec.cjs.js +0 -0
  420. /package/lib/{emoji → modules/emoji}/emoji-list/index.cjs.js +0 -0
  421. /package/lib/{emoji → modules/emoji}/emoji-list/index.cjs.js.map +0 -0
  422. /package/lib/{emoji → modules/emoji}/emoji-list/people.cjs.js +0 -0
  423. /package/lib/{emoji → modules/emoji}/emoji-list.cjs.js +0 -0
  424. /package/lib/{emoji → modules/emoji}/emoji-map.cjs.js +0 -0
  425. /package/lib/{emoji → modules/emoji}/formats/emoji-blot.cjs.js +0 -0
  426. /package/lib/{emoji → modules/emoji}/index.cjs.js +0 -0
  427. /package/lib/{emoji → modules/emoji}/modules/emoji.cjs.js +0 -0
  428. /package/lib/{emoji → modules/emoji}/utils.cjs.js +0 -0
  429. /package/lib/{file → modules/file}/index.cjs.js +0 -0
  430. /package/lib/{global-link → modules/global-link}/constants.cjs.js +0 -0
  431. /package/lib/{global-link → modules/global-link}/formats/customer-widget-link.cjs.js +0 -0
  432. /package/lib/{global-link → modules/global-link}/formats/doc-link.cjs.js +0 -0
  433. /package/lib/{global-link → modules/global-link}/formats/wiki-link.cjs.js +0 -0
  434. /package/lib/{global-link → modules/global-link}/formats/work-item-link.cjs.js +0 -0
  435. /package/lib/{global-link → modules/global-link}/global-link-panel.cjs.js +0 -0
  436. /package/lib/{global-link → modules/global-link}/global-link-panel.cjs.js.map +0 -0
  437. /package/lib/{global-link → modules/global-link}/utils/createTable.cjs.js +0 -0
  438. /package/lib/{link → modules/link}/index.cjs.js +0 -0
  439. /package/lib/{mathlive → modules/mathlive}/formats.cjs.js +0 -0
  440. /package/lib/{mathlive → modules/mathlive}/index.cjs.js +0 -0
  441. /package/lib/{mathlive → modules/mathlive}/tooltip.cjs.js +0 -0
  442. /package/lib/{mention → modules/mention}/MentionLink.cjs.js +0 -0
  443. /package/lib/{mention → modules/mention}/constants.cjs.js +0 -0
  444. /package/lib/{table → modules/table}/formats/list.cjs.js +0 -0
  445. /package/lib/{table → modules/table}/modules/table-column-tool.cjs.js +0 -0
  446. /package/lib/{table → modules/table}/modules/table-scroll-bar.cjs.js +0 -0
  447. /package/lib/{table → modules/table}/modules/table-selection.cjs.js +0 -0
  448. /package/lib/{table → modules/table}/modules/table-selector.cjs.js +0 -0
  449. /package/lib/{table → modules/table}/table-config.cjs.js +0 -0
  450. /package/lib/{table → modules/table}/utils/index.cjs.js +0 -0
  451. /package/lib/{config → ui}/icons.config.cjs.js +0 -0
  452. /package/types/{soft-break/index.d.ts → formats/soft-break.d.ts} +0 -0
  453. /package/types/{strike/index.d.ts → formats/strike.d.ts} +0 -0
  454. /package/types/{video/index.d.ts → formats/video.d.ts} +0 -0
  455. /package/types/{custom-image → modules/custom-image}/Options.d.ts +0 -0
  456. /package/types/{custom-image → modules/custom-image}/actions/Action.d.ts +0 -0
  457. /package/types/{custom-image → modules/custom-image}/actions/CustomResizeAction.d.ts +0 -0
  458. /package/types/{custom-image → modules/custom-image}/actions/DeleteAction.d.ts +0 -0
  459. /package/types/{custom-image → modules/custom-image}/image.d.ts +0 -0
  460. /package/types/{custom-image → modules/custom-image}/specs/BlotSpec.d.ts +0 -0
  461. /package/types/{custom-image → modules/custom-image}/specs/CustomImageSpec.d.ts +0 -0
  462. /package/types/{custom-image → modules/custom-image}/specs/ImageSpec.d.ts +0 -0
  463. /package/types/{custom-uploader.d.ts → modules/custom-uploader.d.ts} +0 -0
  464. /package/types/{divider/index.d.ts → modules/divider.d.ts} +0 -0
  465. /package/types/{emoji → modules/emoji}/emoji-list/index.d.ts +0 -0
  466. /package/types/{emoji → modules/emoji}/emoji-list/people.d.ts +0 -0
  467. /package/types/{emoji → modules/emoji}/emoji-list.d.ts +0 -0
  468. /package/types/{emoji → modules/emoji}/emoji-map.d.ts +0 -0
  469. /package/types/{emoji → modules/emoji}/formats/emoji-blot.d.ts +0 -0
  470. /package/types/{emoji → modules/emoji}/index.d.ts +0 -0
  471. /package/types/{emoji → modules/emoji}/modules/emoji.d.ts +0 -0
  472. /package/types/{emoji → modules/emoji}/modules/toolbar-emoji.d.ts +0 -0
  473. /package/types/{emoji → modules/emoji}/utils.d.ts +0 -0
  474. /package/types/{file → modules/file}/formats/file.d.ts +0 -0
  475. /package/types/{file → modules/file}/index.d.ts +0 -0
  476. /package/types/{file → modules/file}/modules/file-bar.d.ts +0 -0
  477. /package/types/{global-link → modules/global-link}/constants.d.ts +0 -0
  478. /package/types/{global-link → modules/global-link}/formats/customer-widget-link.d.ts +0 -0
  479. /package/types/{global-link → modules/global-link}/formats/doc-link.d.ts +0 -0
  480. /package/types/{global-link → modules/global-link}/formats/wiki-link.d.ts +0 -0
  481. /package/types/{global-link → modules/global-link}/formats/work-item-link.d.ts +0 -0
  482. /package/types/{global-link → modules/global-link}/global-link-panel.d.ts +0 -0
  483. /package/types/{global-link → modules/global-link}/index.d.ts +0 -0
  484. /package/types/{global-link → modules/global-link}/utils/createTable.d.ts +0 -0
  485. /package/types/{link → modules/link}/formats/link.d.ts +0 -0
  486. /package/types/{link → modules/link}/index.d.ts +0 -0
  487. /package/types/{link → modules/link}/modules/tooltip.d.ts +0 -0
  488. /package/types/{mathlive → modules/mathlive}/formats.d.ts +0 -0
  489. /package/types/{mathlive → modules/mathlive}/index.d.ts +0 -0
  490. /package/types/{mathlive → modules/mathlive}/tooltip.d.ts +0 -0
  491. /package/types/{mention → modules/mention}/Mention.d.ts +0 -0
  492. /package/types/{mention → modules/mention}/MentionLink.d.ts +0 -0
  493. /package/types/{mention → modules/mention}/constants.d.ts +0 -0
  494. /package/types/{quick-menu/index.d.ts → modules/quick-menu.d.ts} +0 -0
  495. /package/types/{syntax/index.d.ts → modules/syntax.d.ts} +0 -0
  496. /package/types/{table → modules/table}/better-table.d.ts +0 -0
  497. /package/types/{table → modules/table}/formats/header.d.ts +0 -0
  498. /package/types/{table → modules/table}/formats/table.d.ts +0 -0
  499. /package/types/{table → modules/table}/modules/table-column-tool.d.ts +0 -0
  500. /package/types/{table → modules/table}/modules/table-operation-menu.d.ts +0 -0
  501. /package/types/{table → modules/table}/modules/table-scroll-bar.d.ts +0 -0
  502. /package/types/{table → modules/table}/modules/table-selection.d.ts +0 -0
  503. /package/types/{table → modules/table}/modules/table-selector.d.ts +0 -0
  504. /package/types/{table → modules/table}/table-config.d.ts +0 -0
  505. /package/types/{table → modules/table}/utils/index.d.ts +0 -0
  506. /package/types/{table → modules/table}/utils/node-matchers.d.ts +0 -0
  507. /package/types/{toolbar → modules/toolbar}/better-picker.d.ts +0 -0
  508. /package/types/{toolbar → modules/toolbar}/index.d.ts +0 -0
  509. /package/types/{format-painter/index.d.ts → tools/format-painter.d.ts} +0 -0
  510. /package/types/{fullscreen/handler.d.ts → tools/fullscreen.d.ts} +0 -0
  511. /package/types/{screenshot/index.d.ts → tools/screenshot.d.ts} +0 -0
  512. /package/types/{config → ui}/icons.config.d.ts +0 -0
@@ -1,203 +1,65 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const Quill = require("quill");
4
3
  require("./attributors/index.cjs.js");
5
- const index = require("./config/index.cjs.js");
6
- const index$6 = require("./counter/index.cjs.js");
7
- const customClipboard = require("./custom-clipboard.cjs.js");
8
- const BlotFormatter = require("./custom-image/BlotFormatter.cjs.js");
9
- const CustomImageSpec = require("./custom-image/specs/CustomImageSpec.cjs.js");
10
- const customUploader = require("./custom-uploader.cjs.js");
11
- const index$b = require("./divider/index.cjs.js");
12
- const index$7 = require("./emoji/index.cjs.js");
13
- const index$5 = require("./file/index.cjs.js");
14
- const index$1 = require("./format-painter/index.cjs.js");
15
- const handler = require("./fullscreen/handler.cjs.js");
16
- const index$3 = require("./i18n/index.cjs.js");
17
- const index$8 = require("./link/index.cjs.js");
18
- const index$a = require("./mathlive/index.cjs.js");
19
- const formats = require("./mathlive/formats.cjs.js");
20
- const Mention = require("./mention/Mention.cjs.js");
21
- const index$2 = require("./screenshot/index.cjs.js");
22
- const index$d = require("./soft-break/index.cjs.js");
23
- const index$c = require("./strike/index.cjs.js");
24
- const index$9 = require("./syntax/index.cjs.js");
25
- const betterTable = require("./table/better-table.cjs.js");
26
- const index$4 = require("./toolbar/index.cjs.js");
27
- const index$e = require("./video/index.cjs.js");
28
- const editor_config = require("./config/editor.config.cjs.js");
4
+ const fluentEditor = require("./core/fluent-editor.cjs.js");
5
+ const softBreak = require("./formats/soft-break.cjs.js");
6
+ const strike = require("./formats/strike.cjs.js");
7
+ const video = require("./formats/video.cjs.js");
8
+ const counter = require("./modules/counter.cjs.js");
9
+ const customClipboard = require("./modules/custom-clipboard.cjs.js");
10
+ const BlotFormatter = require("./modules/custom-image/BlotFormatter.cjs.js");
11
+ const customUploader = require("./modules/custom-uploader.cjs.js");
12
+ const divider = require("./modules/divider.cjs.js");
13
+ const index = require("./modules/emoji/index.cjs.js");
14
+ const index$1 = require("./modules/file/index.cjs.js");
15
+ const i18n = require("./modules/i18n.cjs.js");
16
+ const index$2 = require("./modules/link/index.cjs.js");
17
+ const index$3 = require("./modules/mathlive/index.cjs.js");
18
+ const formats = require("./modules/mathlive/formats.cjs.js");
19
+ const Mention = require("./modules/mention/Mention.cjs.js");
20
+ const syntax = require("./modules/syntax.cjs.js");
21
+ const betterTable = require("./modules/table/better-table.cjs.js");
22
+ const index$4 = require("./modules/toolbar/index.cjs.js");
23
+ const snow = require("./themes/snow.cjs.js");
24
+ const icons = require("./ui/icons.cjs.js");
29
25
  const fontStyle = require("./attributors/font-style.cjs.js");
30
- const fontSize = require("./attributors/font-size.cjs.js");
31
26
  const lineHeight = require("./attributors/line-height.cjs.js");
27
+ const fontSize = require("./attributors/font-size.cjs.js");
32
28
  const textIndent = require("./attributors/text-indent.cjs.js");
33
- class FluentEditor extends Quill {
34
- constructor(container, options = {}) {
35
- super(container, options);
36
- this.isFullscreen = false;
37
- }
38
- get lang() {
39
- const i18nModule = this.getModule("i18n");
40
- return i18nModule ? i18nModule.options.lang : editor_config.defaultLanguage;
41
- }
42
- getLangText(name) {
43
- const i18nModule = this.getModule("i18n");
44
- if (!i18nModule) return editor_config.LANG_CONF[editor_config.defaultLanguage][name];
45
- return i18nModule.options.langText[name];
46
- }
47
- }
48
- const registerModules = function() {
49
- const Icons = Quill.import("ui/icons");
50
- Object.entries(index.ICONS_CONFIG).forEach(([key, icon]) => {
51
- Icons[key] = icon;
52
- });
53
- const SnowTheme = Quill.imports["themes/snow"];
54
- SnowTheme.DEFAULTS = {
55
- modules: {
56
- "i18n": true,
57
- "keyboard": {
58
- bindings: {
59
- ...betterTable.default.keyboardBindings
60
- }
61
- },
62
- "toolbar": {
63
- handlers: {
64
- ...SnowTheme.DEFAULTS.modules.toolbar.handlers,
65
- "formula": function() {
66
- if (!this.quill.isEnabled()) return;
67
- const mathlive = this.quill.getModule("mathlive");
68
- if (!mathlive) {
69
- this.quill.theme.tooltip.edit("formula");
70
- } else {
71
- mathlive.createDialog();
72
- }
73
- },
74
- "undo": function() {
75
- this.quill.history.undo();
76
- },
77
- "redo": function() {
78
- this.quill.history.redo();
79
- },
80
- "better-table": function() {
81
- this.quill.getModule("better-table").insertTable(3, 3);
82
- },
83
- "file": function() {
84
- var _a, _b;
85
- const accept = (_b = (_a = this.quill.options) == null ? void 0 : _a.uploadOption) == null ? void 0 : _b.fileAccept;
86
- index.inputFile.call(this, "file", accept);
87
- },
88
- "image": function() {
89
- var _a, _b;
90
- const accept = (_b = (_a = this.quill.options) == null ? void 0 : _a.uploadOption) == null ? void 0 : _b.imageAccept;
91
- index.inputFile.call(this, "image", accept);
92
- },
93
- "emoji": function() {
94
- },
95
- "fullscreen": handler.fullscreenHandler,
96
- "list": function(value) {
97
- var _a, _b;
98
- const range = this.quill.getSelection();
99
- const formats2 = this.quill.getFormat(range);
100
- const preListValue = Array.isArray(formats2.list) ? (_a = formats2.list[0]) == null ? void 0 : _a.value : (_b = formats2.list) == null ? void 0 : _b.value;
101
- const curListValue = index.getListValue(value, preListValue);
102
- const lines = this.quill.getLines(range.index, range.length);
103
- const tableCols = lines.filter((line) => line.statics.blotName === "table-col" && !line.prev);
104
- if (tableCols.length) {
105
- let start = range.index;
106
- tableCols.forEach((item, index2) => {
107
- const table = item.domNode.closest("table.quill-better-table");
108
- const tableBlot = Quill.find(table);
109
- const tableLength = tableBlot.length();
110
- const tableStart = this.quill.getIndex(item);
111
- const tableEnd = tableStart + tableLength;
112
- const beforeTableRangeLength = tableStart - start;
113
- this.quill.setSelection(start, beforeTableRangeLength, Quill.sources.SILENT);
114
- this.quill.format("list", curListValue, Quill.sources.USER);
115
- table.parentNode.classList.remove("quill-better-table-selected");
116
- start = tableEnd;
117
- if (index2 === tableCols.length - 1) {
118
- this.quill.setSelection(tableEnd, range.index + range.length - tableEnd);
119
- this.quill.format("list", curListValue, Quill.sources.USER);
120
- }
121
- });
122
- } else {
123
- this.quill.format("list", curListValue, Quill.sources.USER);
124
- }
125
- },
126
- [index$1.FormatPainter.toolName]: index$1.FormatPainter,
127
- [index$2.Screenshot.toolName]: index$2.Screenshot,
128
- "lineheight": function(value) {
129
- this.quill.format("line-height", value);
130
- },
131
- "divider": function() {
132
- const range = this.quill.getSelection(true);
133
- this.quill.insertText(range.index, "\n", Quill.sources.USER);
134
- this.quill.insertEmbed(range.index + 1, "divider", true, Quill.sources.USER);
135
- this.quill.setSelection(range.index + 2, Quill.sources.SILENT);
136
- }
137
- }
138
- },
139
- "better-table": {
140
- operationMenu: {
141
- color: true
142
- }
143
- },
144
- "image": {
145
- specs: [CustomImageSpec.CustomImageSpec],
146
- overlay: {
147
- style: {
148
- border: "1px dashed rgb(68, 68, 68)"
149
- }
150
- },
151
- align: {
152
- icons: {
153
- left: '<i class="icon-text-align-left"></i>',
154
- center: '<i class="icon-text-align-center"></i>',
155
- right: '<i class="icon-text-align-right"></i>'
156
- }
157
- }
158
- }
159
- }
160
- };
161
- FluentEditor.register(
162
- {
163
- "modules/i18n": index$3.I18N,
164
- "modules/toolbar": index$4.default,
165
- "modules/mention": Mention.default,
166
- "modules/clipboard": customClipboard.default,
167
- "modules/uploader": customUploader.default,
168
- // 三者关联性最强
169
- "modules/image": BlotFormatter.default,
170
- // 三者关联性最强
171
- "modules/file": index$5.default,
172
- // 三者关联性最强
173
- "modules/counter": index$6.default,
174
- "modules/emoji-toolbar": index$7.default.ToolbarEmoji,
175
- "modules/emoji-shortname": index$7.default.ShortNameEmoji,
176
- // 'modules/global-link': GlobalLink,//暂未开发
177
- "modules/link": index$8.default,
178
- // 报错
179
- // 'modules/quickmenu': QuickMenu,//暂未开发
180
- "modules/syntax": index$9.default,
181
- "modules/mathlive": index$a.default,
182
- "modules/divider": index$b.default,
183
- // make sure register after `HeaderList`
184
- "modules/better-table": betterTable.default,
185
- "formats/strike": index$c.default,
186
- "formats/softBreak": index$d.default,
187
- "formats/video": index$e.default,
188
- "formats/emoji": index$7.default.EmojiBlot,
189
- "formats/font": fontStyle.FontStyle,
190
- "formats/size": fontSize.SizeStyle,
191
- "formats/line-height": lineHeight.LineHeightStyle,
192
- "formats/text-indent": textIndent.TextIndentStyle,
193
- [`formats/${formats.default.blotName}`]: formats.default
194
- },
195
- true
196
- // 覆盖内部模块
197
- );
198
- return FluentEditor;
199
- };
200
- const fluentEditor = registerModules();
201
- exports.FluentEditor = FluentEditor;
202
- exports.default = fluentEditor;
29
+ fluentEditor.default.register(
30
+ {
31
+ "formats/emoji": index.default.EmojiBlot,
32
+ "formats/font": fontStyle.FontStyle,
33
+ "formats/line-height": lineHeight.LineHeightStyle,
34
+ [`formats/${formats.default.blotName}`]: formats.default,
35
+ "formats/size": fontSize.SizeStyle,
36
+ "formats/softBreak": softBreak.default,
37
+ "formats/strike": strike.default,
38
+ "formats/text-indent": textIndent.TextIndentStyle,
39
+ "formats/video": video.default,
40
+ "modules/clipboard": customClipboard.default,
41
+ "modules/counter": counter.default,
42
+ "modules/divider": divider.default,
43
+ "modules/emoji-shortname": index.default.ShortNameEmoji,
44
+ "modules/emoji-toolbar": index.default.ToolbarEmoji,
45
+ "modules/file": index$1.default,
46
+ // 'modules/global-link': GlobalLink, // TODO
47
+ "modules/i18n": i18n.default,
48
+ "modules/image": BlotFormatter.default,
49
+ "modules/link": index$2.default,
50
+ "modules/mathlive": index$3.default,
51
+ "modules/mention": Mention.default,
52
+ // 'modules/quickmenu': QuickMenu, // TODO
53
+ "modules/syntax": syntax.default,
54
+ "modules/toolbar": index$4.default,
55
+ "modules/uploader": customUploader.default,
56
+ // make sure register after `HeaderList`
57
+ "modules/better-table": betterTable.default,
58
+ "themes/snow": snow.default,
59
+ "ui/icons": icons.default
60
+ },
61
+ true
62
+ // 覆盖内部模块
63
+ );
64
+ exports.default = fluentEditor.default;
203
65
  //# sourceMappingURL=fluent-editor.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fluent-editor.cjs.js","sources":["../../src/fluent-editor.ts"],"sourcesContent":["import type { ExpandedQuillOptions, Module, Parchment as TypeParchment } from 'quill'\r\nimport type { IEditorConfig } from './config/types'\r\nimport Quill from 'quill'\r\nimport { FontStyle, LineHeightStyle, SizeStyle, TextIndentStyle } from './attributors'\r\nimport { defaultLanguage, getListValue, ICONS_CONFIG, inputFile, LANG_CONF } from './config'\r\nimport Counter from './counter' // 字符统计\r\nimport CustomClipboard from './custom-clipboard' // 粘贴板\r\nimport CustomImage from './custom-image/BlotFormatter' // 图片\r\nimport { CustomImageSpec } from './custom-image/specs/CustomImageSpec' // 图片拉伸模块\r\nimport CustomUploader from './custom-uploader' // 上传\r\nimport DividerBlot from './divider' // 分割线\r\nimport Emoji from './emoji' // 表情\r\nimport FileModule from './file' // 文件\r\nimport { FormatPainter } from './format-painter'\r\nimport { fullscreenHandler } from './fullscreen/handler'\r\nimport { I18N } from './i18n'\r\nimport Link from './link' // 超链接\r\nimport MathliveModule from './mathlive' // latex公式\r\nimport MathliveBlot from './mathlive/formats'\r\nimport Mention from './mention/Mention' // @提醒\r\nimport { Screenshot } from './screenshot'// 截图\r\nimport SoftBreak from './soft-break' // 软回车\r\nimport Strike from './strike' // 删除线\r\nimport CustomSyntax from './syntax' // 代码块高亮\r\nimport BetterTable from './table/better-table' // 表格\r\nimport Toolbar from './toolbar' // 工具栏\r\nimport Video from './video' // 视频\r\n// import GlobalLink from './global-link' // 全局链接\r\n// import QuickMenu from './quick-menu' // 快捷菜单\r\n\r\nexport class FluentEditor extends Quill {\r\n isFullscreen: boolean = false\r\n options: IEditorConfig & ExpandedQuillOptions\r\n\r\n get lang() {\r\n const i18nModule = this.getModule('i18n') as I18N\r\n return i18nModule ? i18nModule.options.lang : defaultLanguage\r\n }\r\n\r\n constructor(container: HTMLElement | string, options: IEditorConfig = {}) {\r\n super(container, options)\r\n }\r\n\r\n getLangText(name: string) {\r\n const i18nModule = this.getModule('i18n') as I18N\r\n if (!i18nModule) return LANG_CONF[defaultLanguage][name]\r\n return i18nModule.options.langText[name]\r\n }\r\n}\r\n\r\nconst registerModules = function () {\r\n const Icons = Quill.import('ui/icons')\r\n Object.entries(ICONS_CONFIG).forEach(([key, icon]) => {\r\n Icons[key] = icon\r\n })\r\n\r\n const SnowTheme = Quill.imports['themes/snow'] as typeof Module\r\n SnowTheme.DEFAULTS = {\r\n modules: {\r\n 'i18n': true,\r\n 'keyboard': {\r\n bindings: {\r\n ...BetterTable.keyboardBindings,\r\n },\r\n },\r\n 'toolbar': {\r\n handlers: {\r\n ...(SnowTheme.DEFAULTS as Record<string, any>).modules.toolbar.handlers,\r\n 'formula': function () {\r\n if (!this.quill.isEnabled()) return\r\n const mathlive = this.quill.getModule('mathlive')\r\n if (!mathlive) {\r\n this.quill.theme.tooltip.edit('formula')\r\n }\r\n else {\r\n mathlive.createDialog()\r\n }\r\n },\r\n 'undo': function () {\r\n this.quill.history.undo()\r\n },\r\n 'redo': function () {\r\n this.quill.history.redo()\r\n },\r\n 'better-table': function () {\r\n this.quill.getModule('better-table').insertTable(3, 3)\r\n },\r\n 'file': function () {\r\n const accept = this.quill.options?.uploadOption?.fileAccept\r\n inputFile.call(this, 'file', accept)\r\n },\r\n 'image': function () {\r\n const accept = this.quill.options?.uploadOption?.imageAccept\r\n inputFile.call(this, 'image', accept)\r\n },\r\n 'emoji': function () {},\r\n 'fullscreen': fullscreenHandler,\r\n 'list': function (value) {\r\n const range = this.quill.getSelection()\r\n const formats = this.quill.getFormat(range)\r\n const preListValue = Array.isArray(formats.list) ? formats.list[0]?.value : formats.list?.value\r\n const curListValue = getListValue(value, preListValue)\r\n // 如果设置list的选区中有表格,判断第一个table-col位置,将表格前的内容设置为list格式\r\n const lines = this.quill.getLines(range.index, range.length)\r\n const tableCols = lines.filter(line => line.statics.blotName === 'table-col' && !line.prev)\r\n if (tableCols.length) {\r\n let start = range.index\r\n // 遍历table-col群组,以之获取表格,将表格前选区设置为对应list格式\r\n tableCols.forEach((item, index) => {\r\n const table = item.domNode.closest('table.quill-better-table')\r\n const tableBlot = Quill.find(table) as TypeParchment.Blot\r\n const tableLength = tableBlot.length()\r\n const tableStart = this.quill.getIndex(item)\r\n const tableEnd = tableStart + tableLength\r\n const beforeTableRangeLength = tableStart - start\r\n // 在表格前设置列表\r\n this.quill.setSelection(start, beforeTableRangeLength, Quill.sources.SILENT)\r\n this.quill.format('list', curListValue, Quill.sources.USER)\r\n table.parentNode.classList.remove('quill-better-table-selected')\r\n // 当前表格末尾为下一个选取的开始\r\n start = tableEnd\r\n if (index === tableCols.length - 1) {\r\n // 将最后一个表格之后所有选区内容设置list格式\r\n this.quill.setSelection(tableEnd, range.index + range.length - tableEnd)\r\n this.quill.format('list', curListValue, Quill.sources.USER)\r\n }\r\n })\r\n }\r\n else {\r\n this.quill.format('list', curListValue, Quill.sources.USER)\r\n }\r\n },\r\n [FormatPainter.toolName]: FormatPainter,\r\n [Screenshot.toolName]: Screenshot,\r\n 'lineheight': function (value) {\r\n this.quill.format('line-height', value)\r\n },\r\n 'divider': function () {\r\n const range = this.quill.getSelection(true)\r\n this.quill.insertText(range.index, '\\n', Quill.sources.USER)\r\n this.quill.insertEmbed(range.index + 1, 'divider', true, Quill.sources.USER)\r\n this.quill.setSelection(range.index + 2, Quill.sources.SILENT)\r\n },\r\n },\r\n },\r\n 'better-table': {\r\n operationMenu: {\r\n color: true,\r\n },\r\n },\r\n 'image': {\r\n specs: [CustomImageSpec],\r\n overlay: {\r\n style: {\r\n border: '1px dashed rgb(68, 68, 68)',\r\n },\r\n },\r\n align: {\r\n icons: {\r\n left: '<i class=\"icon-text-align-left\"></i>',\r\n center: '<i class=\"icon-text-align-center\"></i>',\r\n right: '<i class=\"icon-text-align-right\"></i>',\r\n },\r\n },\r\n },\r\n },\r\n }\r\n\r\n FluentEditor.register(\r\n {\r\n 'modules/i18n': I18N,\r\n 'modules/toolbar': Toolbar,\r\n 'modules/mention': Mention,\r\n 'modules/clipboard': CustomClipboard,\r\n 'modules/uploader': CustomUploader, // 三者关联性最强\r\n 'modules/image': CustomImage, // 三者关联性最强\r\n 'modules/file': FileModule, // 三者关联性最强\r\n 'modules/counter': Counter,\r\n 'modules/emoji-toolbar': Emoji.ToolbarEmoji,\r\n 'modules/emoji-shortname': Emoji.ShortNameEmoji,\r\n // 'modules/global-link': GlobalLink,//暂未开发\r\n 'modules/link': Link, // 报错\r\n // 'modules/quickmenu': QuickMenu,//暂未开发\r\n 'modules/syntax': CustomSyntax,\r\n 'modules/mathlive': MathliveModule,\r\n 'modules/divider': DividerBlot,\r\n // make sure register after `HeaderList`\r\n 'modules/better-table': BetterTable,\r\n\r\n 'formats/strike': Strike,\r\n 'formats/softBreak': SoftBreak,\r\n 'formats/video': Video,\r\n 'formats/emoji': Emoji.EmojiBlot,\r\n 'formats/font': FontStyle,\r\n 'formats/size': SizeStyle,\r\n 'formats/line-height': LineHeightStyle,\r\n 'formats/text-indent': TextIndentStyle,\r\n [`formats/${MathliveBlot.blotName}`]: MathliveBlot,\r\n },\r\n true, // 覆盖内部模块\r\n )\r\n\r\n return FluentEditor\r\n}\r\n\r\nexport default registerModules()\r\n"],"names":["defaultLanguage","LANG_CONF","ICONS_CONFIG","BetterTable","inputFile","fullscreenHandler","formats","getListValue","index","FormatPainter","Screenshot","CustomImageSpec","I18N","Toolbar","Mention","CustomClipboard","CustomUploader","CustomImage","FileModule","Counter","Emoji","Link","CustomSyntax","MathliveModule","DividerBlot","Strike","SoftBreak","Video","FontStyle","SizeStyle","LineHeightStyle","TextIndentStyle","MathliveBlot"],"mappings":"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"}
1
+ {"version":3,"file":"fluent-editor.cjs.js","sources":["../../src/fluent-editor.ts"],"sourcesContent":["import { FontStyle, LineHeightStyle, SizeStyle, TextIndentStyle } from './attributors'\r\nimport FluentEditor from './core/fluent-editor'\r\nimport SoftBreak from './formats/soft-break' // 软回车\r\nimport Strike from './formats/strike' // 删除线\r\nimport Video from './formats/video' // 视频\r\nimport Counter from './modules/counter' // 字符统计\r\nimport CustomClipboard from './modules/custom-clipboard' // 粘贴板\r\nimport Image from './modules/custom-image/BlotFormatter' // 图片\r\nimport Uploader from './modules/custom-uploader' // 上传\r\nimport DividerBlot from './modules/divider' // 分割线\r\nimport Emoji from './modules/emoji' // 表情\r\nimport FileModule from './modules/file' // 文件\r\n// import GlobalLink from './modules/global-link' // 全局链接\r\nimport I18N from './modules/i18n'\r\nimport Link from './modules/link' // 超链接\r\nimport MathliveModule from './modules/mathlive' // latex公式\r\nimport MathliveBlot from './modules/mathlive/formats'\r\nimport Mention from './modules/mention/Mention' // @提醒\r\nimport Syntax from './modules/syntax' // 代码块高亮\r\nimport BetterTable from './modules/table/better-table' // 表格\r\nimport Toolbar from './modules/toolbar' // 工具栏\r\n// import QuickMenu from './modules/quick-menu' // 快捷菜单\r\nimport SnowTheme from './themes/snow'\r\nimport Icons from './ui/icons'\r\n\r\nFluentEditor.register(\r\n {\r\n 'formats/emoji': Emoji.EmojiBlot,\r\n 'formats/font': FontStyle,\r\n 'formats/line-height': LineHeightStyle,\r\n [`formats/${MathliveBlot.blotName}`]: MathliveBlot,\r\n 'formats/size': SizeStyle,\r\n 'formats/softBreak': SoftBreak,\r\n 'formats/strike': Strike,\r\n 'formats/text-indent': TextIndentStyle,\r\n 'formats/video': Video,\r\n\r\n 'modules/clipboard': CustomClipboard,\r\n 'modules/counter': Counter,\r\n 'modules/divider': DividerBlot,\r\n 'modules/emoji-shortname': Emoji.ShortNameEmoji,\r\n 'modules/emoji-toolbar': Emoji.ToolbarEmoji,\r\n 'modules/file': FileModule,\r\n // 'modules/global-link': GlobalLink, // TODO\r\n 'modules/i18n': I18N,\r\n 'modules/image': Image,\r\n 'modules/link': Link,\r\n 'modules/mathlive': MathliveModule,\r\n 'modules/mention': Mention,\r\n // 'modules/quickmenu': QuickMenu, // TODO\r\n 'modules/syntax': Syntax,\r\n 'modules/toolbar': Toolbar,\r\n 'modules/uploader': Uploader,\r\n // make sure register after `HeaderList`\r\n 'modules/better-table': BetterTable,\r\n\r\n 'themes/snow': SnowTheme,\r\n\r\n 'ui/icons': Icons,\r\n },\r\n true, // 覆盖内部模块\r\n)\r\n\r\nexport default FluentEditor\r\n"],"names":["FluentEditor","Emoji","FontStyle","LineHeightStyle","MathliveBlot","SizeStyle","SoftBreak","Strike","TextIndentStyle","Video","CustomClipboard","Counter","DividerBlot","FileModule","I18N","Image","Link","MathliveModule","Mention","Syntax","Toolbar","Uploader","BetterTable","SnowTheme","Icons"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBAA,aAAAA,QAAa;AAAA,EACX;AAAA,IACE,iBAAiBC,MAAM,QAAA;AAAA,IACvB,gBAAgBC,UAAA;AAAA,IAChB,uBAAuBC,WAAA;AAAA,IACvB,CAAC,WAAWC,QAAAA,QAAa,QAAQ,EAAE,GAAGA,QAAA;AAAA,IACtC,gBAAgBC,SAAA;AAAA,IAChB,qBAAqBC,UAAA;AAAA,IACrB,kBAAkBC,OAAA;AAAA,IAClB,uBAAuBC,WAAA;AAAA,IACvB,iBAAiBC,MAAA;AAAA,IAEjB,qBAAqBC,gBAAA;AAAA,IACrB,mBAAmBC,QAAA;AAAA,IACnB,mBAAmBC,QAAA;AAAA,IACnB,2BAA2BX,MAAM,QAAA;AAAA,IACjC,yBAAyBA,MAAM,QAAA;AAAA,IAC/B,gBAAgBY,QAAA;AAAA;AAAA,IAEhB,gBAAgBC,KAAA;AAAA,IAChB,iBAAiBC,cAAA;AAAA,IACjB,gBAAgBC,QAAA;AAAA,IAChB,oBAAoBC,QAAA;AAAA,IACpB,mBAAmBC,QAAA;AAAA;AAAA,IAEnB,kBAAkBC,OAAA;AAAA,IAClB,mBAAmBC,QAAA;AAAA,IACnB,oBAAoBC,eAAA;AAAA;AAAA,IAEpB,wBAAwBC,YAAA;AAAA,IAExB,eAAeC,KAAA;AAAA,IAEf,YAAYC,MAAAA;AAAAA,EACd;AAAA,EACA;AAAA;AACF;;"}
@@ -20,4 +20,4 @@ SoftBreak.blotName = "soft-break";
20
20
  SoftBreak.tagName = "BR";
21
21
  SoftBreak.className = "ql-soft-break";
22
22
  exports.default = SoftBreak;
23
- //# sourceMappingURL=index.cjs.js.map
23
+ //# sourceMappingURL=soft-break.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"soft-break.cjs.js","sources":["../../../src/formats/soft-break.ts"],"sourcesContent":["import Quill from 'quill'\r\n\r\nconst Embed = Quill.imports['blots/embed']\r\n\r\nclass SoftBreak extends Embed {\r\n static blotName: string\r\n static tagName: string\r\n static className: string\r\n domNode: any\r\n prev: any\r\n next: any\r\n remove: () => void\r\n\r\n static create() {\r\n const node = super.create()\r\n return node\r\n }\r\n\r\n optimize() {\r\n // li的开头结尾,移除软回车\r\n if (this.prev === null) {\r\n this.remove()\r\n }\r\n }\r\n\r\n length() {\r\n return 1\r\n }\r\n}\r\nSoftBreak.blotName = 'soft-break'\r\nSoftBreak.tagName = 'BR'\r\nSoftBreak.className = 'ql-soft-break'\r\n\r\nexport default SoftBreak\r\n"],"names":[],"mappings":";;;AAEA,MAAM,QAAQ,MAAM,QAAQ,aAAa;AAEzC,MAAM,kBAAkB,MAAM;AAAA,EAS5B,OAAO,SAAS;AACR,UAAA,OAAO,MAAM,OAAO;AACnB,WAAA;AAAA,EAAA;AAAA,EAGT,WAAW;AAEL,QAAA,KAAK,SAAS,MAAM;AACtB,WAAK,OAAO;AAAA,IAAA;AAAA,EACd;AAAA,EAGF,SAAS;AACA,WAAA;AAAA,EAAA;AAEX;AACA,UAAU,WAAW;AACrB,UAAU,UAAU;AACpB,UAAU,YAAY;;"}
@@ -9,4 +9,4 @@ StrikeBlot.blotName = "strike";
9
9
  StrikeBlot.tagName = "u";
10
10
  StrikeBlot.className = "ql-custom-strike";
11
11
  exports.default = StrikeBlot;
12
- //# sourceMappingURL=index.cjs.js.map
12
+ //# sourceMappingURL=strike.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strike.cjs.js","sources":["../../../src/formats/strike.ts"],"sourcesContent":["import Quill from 'quill'\r\n\r\nconst Inline = Quill.imports['blots/inline']\r\n\r\n// @dynamic\r\nclass StrikeBlot extends Inline {\r\n static blotName: string\r\n static className: string\r\n static tagName: string\r\n // 此处删除了formats方法,当前tag非span,则并不需要进行特殊处理去重写formats方法\r\n}\r\nStrikeBlot.blotName = 'strike'\r\nStrikeBlot.tagName = 'u'\r\nStrikeBlot.className = 'ql-custom-strike'\r\n\r\nexport default StrikeBlot\r\n"],"names":[],"mappings":";;;AAEA,MAAM,SAAS,MAAM,QAAQ,cAAc;AAG3C,MAAM,mBAAmB,OAAO;AAAA;AAKhC;AACA,WAAW,WAAW;AACtB,WAAW,UAAU;AACrB,WAAW,YAAY;;"}
@@ -49,4 +49,4 @@ Video.SANITIZED_URL = "about:blank";
49
49
  Video.PROTOCOL_WHITELIST = ["http", "https"];
50
50
  Video.className = "ql-video-item";
51
51
  exports.default = Video;
52
- //# sourceMappingURL=index.cjs.js.map
52
+ //# sourceMappingURL=video.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video.cjs.js","sources":["../../../src/formats/video.ts"],"sourcesContent":["import type { Parchment as TypeParchment } from 'quill'\r\nimport Quill from 'quill'\r\nimport { sanitize } from '../config/editor.utils'\r\n\r\nconst BlockEmbed = Quill.imports['blots/block/embed'] as TypeParchment.BlotConstructor\r\nconst VIDEO_ATTRIBUTES = ['id', 'title', 'src']\r\n\r\nclass Video extends BlockEmbed {\r\n static blotName: string\r\n static tagName: string\r\n static SANITIZED_URL: string\r\n static PROTOCOL_WHITELIST: string[]\r\n static className: string\r\n statics: any\r\n domNode: any\r\n\r\n static sanitize(url) {\r\n return sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL\r\n }\r\n\r\n static create(value) {\r\n const node = super.create(value) as HTMLElement\r\n node.setAttribute('contenteditable', 'false')\r\n node.setAttribute('controls', 'controls')\r\n VIDEO_ATTRIBUTES.forEach((key) => {\r\n if (value[key]) {\r\n switch (key) {\r\n case 'src':{ const src = Video.sanitize(value[key])\r\n node.setAttribute(key, src)\r\n break\r\n }\r\n case 'title': {\r\n node.setAttribute(key, value[key])\r\n break\r\n }\r\n default: {\r\n node.dataset[key] = value[key]\r\n }\r\n }\r\n }\r\n })\r\n return node\r\n }\r\n\r\n static value(domNode) {\r\n const formats: any = {}\r\n VIDEO_ATTRIBUTES.forEach((key) => {\r\n const value = domNode.getAttribute(key) || domNode.dataset[key]\r\n if (value) {\r\n formats[key] = value\r\n }\r\n })\r\n return formats\r\n }\r\n}\r\nVideo.blotName = 'video'\r\nVideo.tagName = 'VIDEO'\r\nVideo.SANITIZED_URL = 'about:blank'\r\nVideo.PROTOCOL_WHITELIST = ['http', 'https']\r\nVideo.className = 'ql-video-item'\r\n\r\nexport default Video\r\n"],"names":["sanitize"],"mappings":";;;;AAIA,MAAM,aAAa,MAAM,QAAQ,mBAAmB;AACpD,MAAM,mBAAmB,CAAC,MAAM,SAAS,KAAK;AAE9C,MAAM,cAAc,WAAW;AAAA,EAS7B,OAAO,SAAS,KAAK;AACnB,WAAOA,aAAAA,SAAS,KAAK,KAAK,kBAAkB,IAAI,MAAM,KAAK;AAAA,EAAA;AAAA,EAG7D,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,mBAAmB,OAAO;AACvC,SAAA,aAAa,YAAY,UAAU;AACvB,qBAAA,QAAQ,CAAC,QAAQ;AAC5B,UAAA,MAAM,GAAG,GAAG;AACd,gBAAQ,KAAK;AAAA,UACX,KAAK,OAAM;AAAE,kBAAM,MAAM,MAAM,SAAS,MAAM,GAAG,CAAC;AAC3C,iBAAA,aAAa,KAAK,GAAG;AAC1B;AAAA,UAAA;AAAA,UAEF,KAAK,SAAS;AACZ,iBAAK,aAAa,KAAK,MAAM,GAAG,CAAC;AACjC;AAAA,UAAA;AAAA,UAEF,SAAS;AACP,iBAAK,QAAQ,GAAG,IAAI,MAAM,GAAG;AAAA,UAAA;AAAA,QAC/B;AAAA,MACF;AAAA,IACF,CACD;AACM,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,MAAM,SAAS;AACpB,UAAM,UAAe,CAAC;AACL,qBAAA,QAAQ,CAAC,QAAQ;AAChC,YAAM,QAAQ,QAAQ,aAAa,GAAG,KAAK,QAAQ,QAAQ,GAAG;AAC9D,UAAI,OAAO;AACT,gBAAQ,GAAG,IAAI;AAAA,MAAA;AAAA,IACjB,CACD;AACM,WAAA;AAAA,EAAA;AAEX;AACA,MAAM,WAAW;AACjB,MAAM,UAAU;AAChB,MAAM,gBAAgB;AACtB,MAAM,qBAAqB,CAAC,QAAQ,OAAO;AAC3C,MAAM,YAAY;;"}
package/lib/index.cjs.js CHANGED
@@ -1,16 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const fluentEditor = require("./fluent-editor.cjs.js");
3
+ require("./fluent-editor.cjs.js");
4
4
  const index = require("./config/index.cjs.js");
5
- const toolbarTip = require("./toolbar/toolbar-tip.cjs.js");
5
+ const toolbarTip = require("./modules/toolbar/toolbar-tip.cjs.js");
6
+ const fluentEditor = require("./core/fluent-editor.cjs.js");
6
7
  const editor_config = require("./config/editor.config.cjs.js");
7
8
  const editor_utils = require("./config/editor.utils.cjs.js");
8
- exports.default = fluentEditor.FluentEditor;
9
- exports.ICONS_CONFIG = index.ICONS_CONFIG;
10
9
  exports.getListValue = index.getListValue;
11
10
  exports.inputFile = index.inputFile;
12
11
  exports.namespace = index.namespace;
13
12
  exports.generateToolbarTip = toolbarTip.generateToolbarTip;
13
+ exports.default = fluentEditor.default;
14
14
  exports.AUDIO_VIDEO_UPLOADER_MIME_TYPES = editor_config.AUDIO_VIDEO_UPLOADER_MIME_TYPES;
15
15
  exports.BIG_DELTA_LIMIT = editor_config.BIG_DELTA_LIMIT;
16
16
  exports.CHANGE_LANGUAGE_EVENT = editor_config.CHANGE_LANGUAGE_EVENT;
@@ -63,4 +63,4 @@ class Counter {
63
63
  }
64
64
  }
65
65
  exports.default = Counter;
66
- //# sourceMappingURL=index.cjs.js.map
66
+ //# sourceMappingURL=counter.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../../../src/counter/index.ts"],"sourcesContent":["import type { FluentEditor } from 'src/fluent-editor'\r\nimport type { ICounterOption } from '../config/types'\r\nimport Quill from 'quill'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../config'\r\n\r\nexport default class Counter {\r\n container: HTMLDivElement\r\n options: ICounterOption\r\n\r\n constructor(public quill: FluentEditor, options: ICounterOption) {\r\n this.options = this.resolveOptions(options)\r\n this.container = quill.addContainer('ql-counter')\r\n quill.on(Quill.events.TEXT_CHANGE, this.renderCount)\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.options = this.resolveOptions(options)\r\n this.renderCount()\r\n })\r\n this.renderCount()\r\n }\r\n\r\n resolveOptions(options: ICounterOption) {\r\n return Object.assign({\r\n format: 'text',\r\n unit: 'char',\r\n template: this.quill.getLangText('counter-template'),\r\n count: 500,\r\n }, options)\r\n }\r\n\r\n renderCount = () => {\r\n setTimeout(() => {\r\n // @ts-ignore\r\n const { format, count: totalCount, unit, template: counterTemplate, errorTemplate } = this.options\r\n const count = this.getContentLength(format)\r\n const restCount = totalCount - count\r\n const countUnit = unit === 'char' ? this.quill.getLangText('char') : this.quill.getLangText('word')\r\n let template: any = counterTemplate\r\n if (typeof template === 'function') {\r\n template = template(count, restCount)\r\n }\r\n const desc = template.replace('{{count}}', count)\r\n .replace('{{totalCount}}', String(totalCount))\r\n .replace('{{restCount}}', String(restCount))\r\n .replace(/{{countUnit}}/g, countUnit)\r\n\r\n let limitTemplate: any = errorTemplate || this.quill.getLangText('counter-limit-tips')\r\n if (typeof limitTemplate === 'function') {\r\n limitTemplate = limitTemplate(count, restCount)\r\n }\r\n const limitTips = limitTemplate.replace('{{countUnit}}', countUnit)\r\n if (restCount < 0) {\r\n this.container.innerHTML = errorTemplate ? limitTips : `<span style=\"color:red\">${limitTips}</span>`\r\n }\r\n else {\r\n this.container.innerHTML = desc\r\n }\r\n })\r\n }\r\n\r\n getContentLength(format) {\r\n let content = this.quill.getText()\r\n if (format === 'html') {\r\n let html = this.quill.root.innerHTML\r\n // 编辑器初始时\r\n if (html === '<p><br></p>' || html === '<div><br><div>') {\r\n html = ''\r\n }\r\n content = html\r\n }\r\n const text = content.replace(/\\s/g, '').trim()\r\n if (this.options.unit === 'word') {\r\n return !content.trim() ? 0 : content.trim().split(/\\s+/).length\r\n }\r\n return text.length\r\n }\r\n}\r\n"],"names":[],"mappings":";;;AAKA,MAAqB,QAAQ;AAAA,EAI3B,YAAmB,OAAqB,SAAyB;AAA9C,SAAA,QAAA;AAoBnB,SAAA,cAAc,MAAM;AAClB,iBAAW,MAAM;AAET,cAAA,EAAE,QAAQ,OAAO,YAAY,MAAM,UAAU,iBAAiB,kBAAkB,KAAK;AACrF,cAAA,QAAQ,KAAK,iBAAiB,MAAM;AAC1C,cAAM,YAAY,aAAa;AACzB,cAAA,YAAY,SAAS,SAAS,KAAK,MAAM,YAAY,MAAM,IAAI,KAAK,MAAM,YAAY,MAAM;AAClG,YAAI,WAAgB;AAChB,YAAA,OAAO,aAAa,YAAY;AACvB,qBAAA,SAAS,OAAO,SAAS;AAAA,QAAA;AAEhC,cAAA,OAAO,SAAS,QAAQ,aAAa,KAAK,EAC7C,QAAQ,kBAAkB,OAAO,UAAU,CAAC,EAC5C,QAAQ,iBAAiB,OAAO,SAAS,CAAC,EAC1C,QAAQ,kBAAkB,SAAS;AAEtC,YAAI,gBAAqB,iBAAiB,KAAK,MAAM,YAAY,oBAAoB;AACjF,YAAA,OAAO,kBAAkB,YAAY;AACvB,0BAAA,cAAc,OAAO,SAAS;AAAA,QAAA;AAEhD,cAAM,YAAY,cAAc,QAAQ,iBAAiB,SAAS;AAClE,YAAI,YAAY,GAAG;AACjB,eAAK,UAAU,YAAY,gBAAgB,YAAY,2BAA2B,SAAS;AAAA,QAAA,OAExF;AACH,eAAK,UAAU,YAAY;AAAA,QAAA;AAAA,MAC7B,CACD;AAAA,IACH;AA/CO,SAAA,UAAU,KAAK,eAAe,OAAO;AACrC,SAAA,YAAY,MAAM,aAAa,YAAY;AAChD,UAAM,GAAG,MAAM,OAAO,aAAa,KAAK,WAAW;AACnD,SAAK,MAAM,QAAQ,GAAG,uBAAuB,MAAM;AAC5C,WAAA,UAAU,KAAK,eAAe,OAAO;AAC1C,WAAK,YAAY;AAAA,IAAA,CAClB;AACD,SAAK,YAAY;AAAA,EAAA;AAAA,EAGnB,eAAe,SAAyB;AACtC,WAAO,OAAO,OAAO;AAAA,MACnB,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU,KAAK,MAAM,YAAY,kBAAkB;AAAA,MACnD,OAAO;AAAA,OACN,OAAO;AAAA,EAAA;AAAA,EAiCZ,iBAAiB,QAAQ;AACnB,QAAA,UAAU,KAAK,MAAM,QAAQ;AACjC,QAAI,WAAW,QAAQ;AACjB,UAAA,OAAO,KAAK,MAAM,KAAK;AAEvB,UAAA,SAAS,iBAAiB,SAAS,kBAAkB;AAChD,eAAA;AAAA,MAAA;AAEC,gBAAA;AAAA,IAAA;AAEZ,UAAM,OAAO,QAAQ,QAAQ,OAAO,EAAE,EAAE,KAAK;AACzC,QAAA,KAAK,QAAQ,SAAS,QAAQ;AACzB,aAAA,CAAC,QAAQ,KAAA,IAAS,IAAI,QAAQ,OAAO,MAAM,KAAK,EAAE;AAAA,IAAA;AAE3D,WAAO,KAAK;AAAA,EAAA;AAEhB;"}
1
+ {"version":3,"file":"counter.cjs.js","sources":["../../../src/modules/counter.ts"],"sourcesContent":["import type { ICounterOption } from '../config/types'\r\nimport type FluentEditor from '../fluent-editor'\r\nimport Quill from 'quill'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../config'\r\n\r\nexport default class Counter {\r\n container: HTMLDivElement\r\n options: ICounterOption\r\n\r\n constructor(public quill: FluentEditor, options: ICounterOption) {\r\n this.options = this.resolveOptions(options)\r\n this.container = quill.addContainer('ql-counter')\r\n quill.on(Quill.events.TEXT_CHANGE, this.renderCount)\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.options = this.resolveOptions(options)\r\n this.renderCount()\r\n })\r\n this.renderCount()\r\n }\r\n\r\n resolveOptions(options: ICounterOption) {\r\n return Object.assign({\r\n format: 'text',\r\n unit: 'char',\r\n template: this.quill.getLangText('counter-template'),\r\n count: 500,\r\n }, options)\r\n }\r\n\r\n renderCount = () => {\r\n setTimeout(() => {\r\n // @ts-ignore\r\n const { format, count: totalCount, unit, template: counterTemplate, errorTemplate } = this.options\r\n const count = this.getContentLength(format)\r\n const restCount = totalCount - count\r\n const countUnit = unit === 'char' ? this.quill.getLangText('char') : this.quill.getLangText('word')\r\n let template: any = counterTemplate\r\n if (typeof template === 'function') {\r\n template = template(count, restCount)\r\n }\r\n const desc = template.replace('{{count}}', count)\r\n .replace('{{totalCount}}', String(totalCount))\r\n .replace('{{restCount}}', String(restCount))\r\n .replace(/{{countUnit}}/g, countUnit)\r\n\r\n let limitTemplate: any = errorTemplate || this.quill.getLangText('counter-limit-tips')\r\n if (typeof limitTemplate === 'function') {\r\n limitTemplate = limitTemplate(count, restCount)\r\n }\r\n const limitTips = limitTemplate.replace('{{countUnit}}', countUnit)\r\n if (restCount < 0) {\r\n this.container.innerHTML = errorTemplate ? limitTips : `<span style=\"color:red\">${limitTips}</span>`\r\n }\r\n else {\r\n this.container.innerHTML = desc\r\n }\r\n })\r\n }\r\n\r\n getContentLength(format) {\r\n let content = this.quill.getText()\r\n if (format === 'html') {\r\n let html = this.quill.root.innerHTML\r\n // 编辑器初始时\r\n if (html === '<p><br></p>' || html === '<div><br><div>') {\r\n html = ''\r\n }\r\n content = html\r\n }\r\n const text = content.replace(/\\s/g, '').trim()\r\n if (this.options.unit === 'word') {\r\n return !content.trim() ? 0 : content.trim().split(/\\s+/).length\r\n }\r\n return text.length\r\n }\r\n}\r\n"],"names":["CHANGE_LANGUAGE_EVENT"],"mappings":";;;;;AAKA,MAAqB,QAAQ;AAAA,EAI3B,YAAmB,OAAqB,SAAyB;AAA9C,SAAA,QAAA;AAoBnB,SAAA,cAAc,MAAM;AAClB,iBAAW,MAAM;AAET,cAAA,EAAE,QAAQ,OAAO,YAAY,MAAM,UAAU,iBAAiB,kBAAkB,KAAK;AACrF,cAAA,QAAQ,KAAK,iBAAiB,MAAM;AAC1C,cAAM,YAAY,aAAa;AACzB,cAAA,YAAY,SAAS,SAAS,KAAK,MAAM,YAAY,MAAM,IAAI,KAAK,MAAM,YAAY,MAAM;AAClG,YAAI,WAAgB;AAChB,YAAA,OAAO,aAAa,YAAY;AACvB,qBAAA,SAAS,OAAO,SAAS;AAAA,QAAA;AAEhC,cAAA,OAAO,SAAS,QAAQ,aAAa,KAAK,EAC7C,QAAQ,kBAAkB,OAAO,UAAU,CAAC,EAC5C,QAAQ,iBAAiB,OAAO,SAAS,CAAC,EAC1C,QAAQ,kBAAkB,SAAS;AAEtC,YAAI,gBAAqB,iBAAiB,KAAK,MAAM,YAAY,oBAAoB;AACjF,YAAA,OAAO,kBAAkB,YAAY;AACvB,0BAAA,cAAc,OAAO,SAAS;AAAA,QAAA;AAEhD,cAAM,YAAY,cAAc,QAAQ,iBAAiB,SAAS;AAClE,YAAI,YAAY,GAAG;AACjB,eAAK,UAAU,YAAY,gBAAgB,YAAY,2BAA2B,SAAS;AAAA,QAAA,OAExF;AACH,eAAK,UAAU,YAAY;AAAA,QAAA;AAAA,MAC7B,CACD;AAAA,IACH;AA/CO,SAAA,UAAU,KAAK,eAAe,OAAO;AACrC,SAAA,YAAY,MAAM,aAAa,YAAY;AAChD,UAAM,GAAG,MAAM,OAAO,aAAa,KAAK,WAAW;AACnD,SAAK,MAAM,QAAQ,GAAGA,cAAA,uBAAuB,MAAM;AAC5C,WAAA,UAAU,KAAK,eAAe,OAAO;AAC1C,WAAK,YAAY;AAAA,IAAA,CAClB;AACD,SAAK,YAAY;AAAA,EAAA;AAAA,EAGnB,eAAe,SAAyB;AACtC,WAAO,OAAO,OAAO;AAAA,MACnB,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU,KAAK,MAAM,YAAY,kBAAkB;AAAA,MACnD,OAAO;AAAA,OACN,OAAO;AAAA,EAAA;AAAA,EAiCZ,iBAAiB,QAAQ;AACnB,QAAA,UAAU,KAAK,MAAM,QAAQ;AACjC,QAAI,WAAW,QAAQ;AACjB,UAAA,OAAO,KAAK,MAAM,KAAK;AAEvB,UAAA,SAAS,iBAAiB,SAAS,kBAAkB;AAChD,eAAA;AAAA,MAAA;AAEC,gBAAA;AAAA,IAAA;AAEZ,UAAM,OAAO,QAAQ,QAAQ,OAAO,EAAE,EAAE,KAAK;AACzC,QAAA,KAAK,QAAQ,SAAS,QAAQ;AACzB,aAAA,CAAC,QAAQ,KAAA,IAAS,IAAI,QAAQ,OAAO,MAAM,KAAK,EAAE;AAAA,IAAA;AAE3D,WAAO,KAAK;AAAA,EAAA;AAEhB;;"}
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const Quill = require("quill");
4
- const base64Image = require("./config/base64-image.cjs.js");
5
- const editor_config = require("./config/editor.config.cjs.js");
6
- const editor_utils = require("./config/editor.utils.cjs.js");
4
+ const base64Image = require("../config/base64-image.cjs.js");
5
+ const editor_config = require("../config/editor.config.cjs.js");
6
+ const editor_utils = require("../config/editor.utils.cjs.js");
7
7
  const Clipboard = Quill.import("modules/clipboard");
8
8
  const Delta = Quill.import("delta");
9
9
  class CustomClipboard extends Clipboard {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-clipboard.cjs.js","sources":["../../../src/modules/custom-clipboard.ts"],"sourcesContent":["import type { Parchment as TypeParchment } from 'quill'\r\nimport type TypeBlock from 'quill/blots/block'\r\nimport type TypeClipboard from 'quill/modules/clipboard'\r\nimport type FluentEditor from '../fluent-editor'\r\nimport Quill from 'quill'\r\nimport {\r\n ERROR_IMAGE_PLACEHOLDER_CN,\r\n ERROR_IMAGE_PLACEHOLDER_EN,\r\n} from '../config/base64-image'\r\nimport { BIG_DELTA_LIMIT } from '../config/editor.config'\r\nimport {\r\n hexToRgbA,\r\n imageFileToUrl,\r\n imageUrlToFile,\r\n insideTable,\r\n isNullOrUndefined,\r\n omit,\r\n replaceDeltaImage,\r\n splitWithBreak,\r\n} from '../config/editor.utils'\r\n\r\nconst Clipboard = Quill.import('modules/clipboard') as typeof TypeClipboard\r\nconst Delta = Quill.import('delta')\r\n\r\nclass CustomClipboard extends Clipboard {\r\n quill: FluentEditor\r\n convert\r\n onCopy\r\n matchers\r\n\r\n prepareMatching(container, nodeMatches) {\r\n const elementMatchers = []\r\n const textMatchers = []\r\n this.matchers.forEach((pair) => {\r\n const [selector, matcher] = pair\r\n switch (selector) {\r\n case Node.TEXT_NODE:\r\n textMatchers.push(matcher)\r\n break\r\n case Node.ELEMENT_NODE:\r\n elementMatchers.push(matcher)\r\n break\r\n default: {\r\n // word 的 v:shape 系列标签只能通过 getElementsByTagName 获取\r\n const vRegex = /v:(.+)/\r\n const nodeList = vRegex.test(selector)\r\n ? Array.from(container.getElementsByTagName(selector))\r\n : Array.from(container.querySelectorAll(selector))\r\n nodeList.forEach((node) => {\r\n if (nodeMatches.has(node)) {\r\n const matches = nodeMatches.get(node)\r\n matches.push(matcher)\r\n }\r\n else {\r\n nodeMatches.set(node, [matcher])\r\n }\r\n })\r\n break\r\n }\r\n }\r\n })\r\n return [elementMatchers, textMatchers]\r\n }\r\n\r\n onCaptureCopy(e, isCut = false) {\r\n if (e.defaultPrevented) {\r\n return\r\n }\r\n e.preventDefault()\r\n const [range] = this.quill.selection.getRange()\r\n if (isNullOrUndefined(range)) {\r\n return\r\n }\r\n const { html, text } = this.onCopy(range, isCut)\r\n\r\n // 兼容IE11浏览器`\r\n if (!e.clipboardData) {\r\n e.clipboardData = {\r\n types: 'text/plain',\r\n setData: (_type, value) => {\r\n // @ts-ignore\r\n return window.clipboardData.setData('Text', value)\r\n },\r\n }\r\n }\r\n\r\n // 复制代码时移除utf8中产生的不间断空格\\u00A0\r\n let plainText = text\r\n if (html.startsWith('<pre>')) {\r\n plainText = text.replace(/\\u00A0/g, ' ')\r\n }\r\n\r\n e.clipboardData.setData('text/html', html)\r\n e.clipboardData.setData('text/plain', plainText)\r\n if (isCut) {\r\n this.quill.deleteText(range, Quill.sources.USER)\r\n }\r\n }\r\n\r\n onCapturePaste(e: ClipboardEvent) {\r\n if (e.defaultPrevented || !this.quill.isEnabled()) {\r\n return\r\n }\r\n e.preventDefault()\r\n const range = this.quill.getSelection(true)\r\n if (isNullOrUndefined(range)) {\r\n return\r\n }\r\n\r\n // 兼容IE11浏览器\r\n if (!e.clipboardData) {\r\n // @ts-ignore\r\n e.clipboardData = {\r\n types: 'text/plain',\r\n getData: () => {\r\n // @ts-ignore\r\n return window.clipboardData.getData('Text')\r\n },\r\n }\r\n }\r\n\r\n const html = e.clipboardData.getData('text/html')\r\n const text = e.clipboardData.getData('text/plain')\r\n const files = Array.from(e.clipboardData.files || [])\r\n const msExcelCheck = /<meta.*?Microsoft Excel\\s[\\d].*?>/\r\n\r\n if (html.search(msExcelCheck) === -1 && files.length > 0) {\r\n this.quill.uploader.upload(range, files)\r\n }\r\n else {\r\n const msWordCheck1\r\n = /<meta\\s*name=\"?generator\"?\\s*content=\"?microsoft\\s*word\\s*\\d+\"?\\/?>/i\r\n const msWordCheck2 = /xmlns:o=\"urn:schemas-microsoft-com/i\r\n const result = { html, text, files, rtf: null }\r\n if (html.search(msExcelCheck) !== -1) {\r\n result.html = renderStyles(html)\r\n }\r\n if (msWordCheck1.test(html) || msWordCheck2.test(html)) {\r\n // TODO: 当word文档包含heading时text/rtf读取为空,无法获取hex图片,待修复。可参考ckeditor5/issues/2493\r\n result.rtf = e.clipboardData.getData('text/rtf')\r\n }\r\n this.onPaste(range, result)\r\n }\r\n }\r\n\r\n onPaste(range, { html, text, files: clipboardFiles, rtf }) {\r\n const hexImages = this.extractImageDataFromRtf(rtf)\r\n const rootBgColor = getComputedStyle(this.quill.root).backgroundColor\r\n const formats = this.quill.getFormat(range.index)\r\n let pastedDelta = this.convert({ text, html }, formats)\r\n pastedDelta = replaceDeltaWhiteSpace(pastedDelta, rootBgColor)\r\n const deltaLength = pastedDelta.ops.length\r\n\r\n let loadingTipsContainer\r\n if (deltaLength > BIG_DELTA_LIMIT) {\r\n loadingTipsContainer = this.quill.addContainer('ql-loading-tips')\r\n loadingTipsContainer.innerHTML = this.quill.getLangText('pasting')\r\n }\r\n\r\n const linePos = { index: range.index, length: range.length, fix: 0 }\r\n const [line, offset] = this.quill.getLine(range.index)\r\n const isInsideTable = insideTable.call(this)\r\n\r\n const handlePasteContent = (content: any) => {\r\n let pastedContent = content\r\n // fix: 阻止粘贴代码块和引用导致表格断裂\r\n const tableBreaker = pastedContent.ops.find((op) => {\r\n return (\r\n op.attributes\r\n && (op.attributes.blockquote || op.attributes['code-block'])\r\n )\r\n })\r\n if (isInsideTable) {\r\n // fix: 阻止带有表格内容粘贴在表格里\r\n const table = line.domNode.closest('table.quill-better-table')\r\n const tableBlot = Quill.find(table) as TypeParchment.Blot\r\n const tableIndex = this.quill.getIndex(tableBlot)\r\n const tableLength = tableBlot.length()\r\n const tableEndPos = tableIndex + tableLength\r\n const anchorNode = getSelection().anchorNode\r\n if (tableBreaker) {\r\n return\r\n }\r\n if (formats['table-col']) {\r\n // fix: 光标在表格前端的table-col处时,获取整个表格的index后以此为基准向前移动一位插入粘贴内容且不删除任何内容\r\n linePos.index = tableIndex - 1\r\n linePos.length = 0\r\n }\r\n else if (\r\n range.index === tableEndPos - 1\r\n && anchorNode instanceof HTMLDivElement\r\n && anchorNode.classList.contains('quill-better-table-wrapper')\r\n ) {\r\n const list = pastedContent.filter(\r\n op => op.attributes && op.attributes.list,\r\n )\r\n if (list && list.length) {\r\n return\r\n }\r\n // fix: 光标在表格末端时,向后移动一位插入粘贴内容且不删除任何内容\r\n // TODO\r\n // 当表格最后一格有内容时,没法区分在表格最后一格最末尾和光标在表格后这两种情况,它们的 range 是一样\r\n // 这会导致在这两处粘贴表格内容都会将该内容粘贴到表格下一行中\r\n linePos.index = tableEndPos\r\n linePos.length = 0\r\n }\r\n else {\r\n if (!formats['table-cell-line']) {\r\n return\r\n }\r\n // fix: 解决表格内粘贴问题\r\n // 缺陷描述:将表格内的换行文本复制粘贴到别的单元格,会导致表格断开\r\n // 原因是:换行的文本delta对象有问题,delta对象前面多了一个纯换行和表格控制头(table-col)\r\n // 解决方法:将多余的delta项移除\r\n pastedContent = {\r\n ops: pastedContent.filter((op, index) => {\r\n const regexp = /^[\\n\\r]+$/\r\n const isString = op.insert && typeof op.insert === 'string'\r\n const isLine = isString && regexp.test(op.insert)\r\n const isCellLine\r\n = isLine && op.attributes && op.attributes['table-cell-line']\r\n const isList = isLine && op.attributes && op.attributes.list\r\n const isPureLine = isLine && !isCellLine && !isList\r\n const isTableCol\r\n = isLine && op.attributes && op.attributes['table-col']\r\n const isLastCellLine = isCellLine && index === deltaLength - 1\r\n return !isPureLine && !isTableCol && !isLastCellLine\r\n }),\r\n }\r\n // fix: 解决从表格外粘贴多行文本导致表格断开的问题\r\n pastedContent = rebuildDelta(\r\n new Delta(pastedContent.ops),\r\n formats['table-cell-line'],\r\n )\r\n }\r\n }\r\n\r\n // fix: 粘贴内容末尾为List,且粘贴位置的block或table-cell-line无内容则删除该block或table-cell-line\r\n // TODO 这里的lastChild如果不存在,则可能报错\r\n const lastChild = pastedContent.ops[pastedContent.ops.length - 1]\r\n const hasList\r\n = lastChild && lastChild.attributes && lastChild.attributes.list\r\n if (\r\n hasList\r\n && offset === 0\r\n && line\r\n && (line as TypeBlock).cache.length === 1\r\n && (line.statics.blotName === 'block'\r\n || line.statics.blotName === 'table-cell-line')\r\n && (!line.next || line.next.statics.blotName !== 'table-view')\r\n ) {\r\n linePos.index = this.quill.getIndex(line)\r\n linePos.length = line.length()\r\n linePos.fix = 1\r\n }\r\n\r\n const oldDelta = new Delta().retain(linePos.index).delete(linePos.length)\r\n const delta = oldDelta.concat(pastedContent)\r\n\r\n setTimeout(() => {\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n this.quill.setSelection(\r\n delta.length() - linePos.length - linePos.fix,\r\n Quill.sources.SILENT,\r\n )\r\n this.quill.scrollIntoView()\r\n if (loadingTipsContainer) {\r\n loadingTipsContainer.remove()\r\n }\r\n })\r\n }\r\n\r\n ;(async () => {\r\n try {\r\n const [files, placeholders, originalUrls, imageIndexs] = this.flipFilesArray(\r\n await this.extractFilesFromDelta(\r\n pastedDelta,\r\n clipboardFiles,\r\n hexImages,\r\n ),\r\n )\r\n\r\n if (files.length === 0) {\r\n handlePasteContent(pastedDelta)\r\n }\r\n else {\r\n if (this.quill.options.editorPaste && this.quill.options.editorPaste.observers.length !== 0) {\r\n // 设置editorPaste回调的情况\r\n this.quill.options.editorPaste.emit({\r\n files,\r\n callback: ({ code, message, data }) => {\r\n if (code === 0) {\r\n const { imageUrls } = data\r\n pastedDelta = replaceDeltaImage(\r\n pastedDelta,\r\n imageUrls,\r\n placeholders,\r\n )\r\n handlePasteContent(pastedDelta)\r\n }\r\n else {\r\n console.error('error message:', message)\r\n }\r\n },\r\n })\r\n }\r\n else {\r\n // 没有originalUrls 也没有文件粘贴\r\n if (files[0] !== undefined || originalUrls.length === 0) {\r\n // 没有设置editorPaste回调的情况下,File格式的占位图需要手动转换成url格式,插入到编辑器中\r\n const imageUrls = await this.files2urls(\r\n files,\r\n placeholders,\r\n originalUrls,\r\n pastedDelta,\r\n imageIndexs,\r\n )\r\n pastedDelta = replaceDeltaImage(\r\n pastedDelta,\r\n imageUrls,\r\n placeholders,\r\n )\r\n }\r\n handlePasteContent(pastedDelta)\r\n }\r\n }\r\n }\r\n catch (_e) {\r\n throw new Error('Paste failed.')\r\n }\r\n })()\r\n }\r\n\r\n files2urls(files, placeholders, originalUrls, pastedDelta, imageIndexs) {\r\n return Promise.all(\r\n files.map(async (imageFile, index) => {\r\n const netImgExp = /^((http|https)\\:)?\\/\\/([\\s\\S]+)$/\r\n if (\r\n !placeholders[index]\r\n && originalUrls[index]\r\n && netImgExp.test(originalUrls[index])\r\n ) {\r\n // 不是占位图的普通url图片直接返回url\r\n return new Promise((resolve) => {\r\n resolve(originalUrls[index])\r\n })\r\n }\r\n else if (this.quill.options.uploadOption.imageUploadToServer) {\r\n const range = this.getImgSelection(pastedDelta, imageIndexs[index])\r\n this.quill.uploader.upload(range, [imageFile])\r\n }\r\n else {\r\n // 占位图或者跨域图需要手动转换成url格式\r\n return imageFileToUrl(imageFile)\r\n }\r\n }),\r\n )\r\n }\r\n\r\n flipFilesArray(filesArr) {\r\n const files = []\r\n const placeholders = []\r\n const originalUrls = []\r\n const imageIndexs = []\r\n filesArr.forEach((item: any) => {\r\n if (item) {\r\n const [file, placeholder, originalUrl, imageIndex] = item\r\n files.push(file)\r\n placeholders.push(placeholder)\r\n originalUrls.push(originalUrl)\r\n if (imageIndex === 0 || imageIndex) {\r\n imageIndexs.push(imageIndex)\r\n }\r\n }\r\n })\r\n return [files, placeholders, originalUrls, imageIndexs]\r\n }\r\n\r\n // 将图片从hex转为base64\r\n convertHexToBase64(hexString) {\r\n return btoa(\r\n hexString\r\n .match(/\\w{2}/g)\r\n .map((char) => {\r\n return String.fromCharCode(Number.parseInt(char, 16))\r\n })\r\n .join(''),\r\n )\r\n }\r\n\r\n // 匹配rtf中的图片,存储为{hex, type}对象数组\r\n extractImageDataFromRtf(rtfData) {\r\n if (!rtfData) {\r\n return []\r\n }\r\n\r\n const regexPictureHeader\r\n = /{\\\\pict[\\s\\S]+?\\\\bliptag-?\\d+(\\\\blipupi-?\\d+)?({\\\\\\*\\\\blipuid\\s?[\\da-fA-F]+)?[\\s}]*?/\r\n const regexPicture = new RegExp(\r\n `(?:(${regexPictureHeader.source}))([\\\\da-fA-F\\\\s]+)\\\\}`,\r\n 'g',\r\n )\r\n const images = rtfData.match(regexPicture)\r\n const result = []\r\n\r\n if (images) {\r\n for (const image of images) {\r\n let imageType = ''\r\n\r\n if (image.includes('\\\\pngblip')) {\r\n imageType = 'image/png'\r\n }\r\n else if (image.includes('\\\\jpegblip')) {\r\n imageType = 'image/jpeg'\r\n }\r\n\r\n if (imageType) {\r\n result.push({\r\n hex: image\r\n .replace(regexPictureHeader, '')\r\n .replace(/[^\\da-fA-F]/g, ''),\r\n type: imageType,\r\n })\r\n }\r\n }\r\n }\r\n\r\n return result\r\n }\r\n\r\n extractFilesFromDelta(delta, clipboardFiles, hexImages?) {\r\n let index = -1\r\n return Promise.all(\r\n delta.map(async (op) => {\r\n index++\r\n const image = op.insert.image\r\n if (!image || image.hasExisted) {\r\n return\r\n }\r\n\r\n let file\r\n let isPlaceholderImage = false\r\n let imageIndex\r\n try {\r\n // hex 图片存在则为 file:/// 协议本地图片,使用 hex 图片转为 base64 读取\r\n const hexImage = hexImages.length && hexImages.shift()\r\n const newImage\r\n = hexImage\r\n && `data:${hexImage.type};base64,${this.convertHexToBase64(\r\n hexImage.hex,\r\n )}`\r\n imageIndex = index\r\n file = await imageUrlToFile(newImage || image.src || image)\r\n }\r\n catch (_err) {\r\n if (clipboardFiles.length !== 0) {\r\n // 跨域获取图片失败时从剪切板获取图片\r\n const clipboardFile = clipboardFiles[0]\r\n const imageType\r\n = clipboardFile.type?.indexOf('image') === -1\r\n ? 'image/png'\r\n : clipboardFile.type\r\n const blob = clipboardFile.slice(0, clipboardFile.size, imageType)\r\n file = new File([blob], `image-CORS-${new Date().getTime()}.png`, {\r\n type: imageType,\r\n })\r\n }\r\n else if (image.src.startsWith('http')) {\r\n // 什么都不做\r\n }\r\n else {\r\n // 剪切板中无图片,用失败占位图替换\r\n const errorImagePlaceholderJpg\r\n = this.quill.getLangText('img-error') === 'Image Copy Error'\r\n ? ERROR_IMAGE_PLACEHOLDER_EN\r\n : ERROR_IMAGE_PLACEHOLDER_CN\r\n file = await imageUrlToFile(errorImagePlaceholderJpg, true)\r\n isPlaceholderImage = true\r\n }\r\n }\r\n\r\n return [file, isPlaceholderImage, image, imageIndex]\r\n }),\r\n )\r\n }\r\n\r\n getImgSelection(delta, imageIndex) {\r\n let length = 0\r\n delta.ops.every((op, index) => {\r\n if (index === imageIndex) {\r\n return false\r\n }\r\n if (typeof op.insert === 'string') {\r\n length += op.insert.length\r\n }\r\n return true\r\n })\r\n const range = {\r\n index: length,\r\n length: 0,\r\n }\r\n return range\r\n }\r\n}\r\n\r\nfunction rebuildDelta(delta, cellLine) {\r\n const { cell: cellId, colspan, row: rowId, rowspan } = cellLine\r\n const buildedDelta = delta.reduce((newDelta, op) => {\r\n if (op.insert && typeof op.insert === 'string') {\r\n const lines = splitWithBreak(op.insert)\r\n\r\n lines.forEach((text) => {\r\n if (text === '\\n') {\r\n // 对换行增加 table-cell-line 格式,以避免表格断开\r\n newDelta.insert('\\n', {\r\n ...op.attributes,\r\n 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan },\r\n })\r\n }\r\n else {\r\n text = text.endsWith('\\r') ? text.slice(0, -1) : text\r\n newDelta.insert(\r\n text,\r\n omit(op.attributes, ['table', 'table-cell-line']),\r\n )\r\n }\r\n })\r\n }\r\n else {\r\n newDelta.insert(op.insert, op.attributes)\r\n }\r\n\r\n return newDelta\r\n }, new Delta())\r\n\r\n return buildedDelta\r\n}\r\n\r\nfunction replaceStrWhiteSpace(str) {\r\n const isWhiteSpace = value => /^(\\u3000|\\u0020){1}$/.test(value) // 空白字符\r\n let textWithWhiteSpace = ''\r\n let beginHasChar = false\r\n for (const char of str) {\r\n if (isWhiteSpace(char) && !beginHasChar) {\r\n textWithWhiteSpace += '\\u00A0'\r\n }\r\n else {\r\n textWithWhiteSpace += char\r\n beginHasChar = true\r\n }\r\n }\r\n return textWithWhiteSpace\r\n}\r\n\r\nfunction replaceDeltaWhiteSpace(delta, rootBgColor?) {\r\n return delta.reduce((newDelta, op) => {\r\n // fix: 当粘贴文字颜色和编辑器背景色一致且自身无背景色的情况下移除文字颜色样式,避免误导用户粘贴无效\r\n if (\r\n rootBgColor\r\n && op.attributes\r\n && op.attributes.color\r\n && !op.attributes.background\r\n ) {\r\n const originColor = op.attributes.color\r\n const fontColor\r\n = originColor.indexOf('#') === 0 ? hexToRgbA(originColor) : originColor\r\n if (\r\n fontColor === rootBgColor\r\n || (fontColor === 'rgba(255,255,255,1)'\r\n && rootBgColor === 'rgba(0, 0, 0, 0)')\r\n ) {\r\n delete op.attributes.color\r\n }\r\n }\r\n if (op.insert && typeof op.insert === 'string') {\r\n const lines = splitWithBreak(op.insert)\r\n let insertWithWhiteSpace = ''\r\n lines.forEach((text) => {\r\n insertWithWhiteSpace += replaceStrWhiteSpace(text)\r\n })\r\n newDelta.insert(insertWithWhiteSpace, op.attributes)\r\n }\r\n else {\r\n newDelta.insert(op.insert, op.attributes)\r\n }\r\n return newDelta\r\n }, new Delta())\r\n}\r\n\r\nfunction renderStyles(html) {\r\n let htmlString = html\r\n // Trim unnecessary parts.\r\n htmlString = htmlString.substring(\r\n htmlString.indexOf('<html '),\r\n htmlString.length,\r\n )\r\n htmlString = htmlString.substring(\r\n 0,\r\n htmlString.lastIndexOf('</html>') + '</html>'.length,\r\n )\r\n\r\n // Add temporary iframe.\r\n const iframe = document.createElement('iframe')\r\n iframe.style.display = 'none'\r\n document.body.appendChild(iframe)\r\n\r\n const iframeDoc = iframe.contentDocument || iframe.contentWindow.document\r\n iframeDoc.open()\r\n iframeDoc.write(htmlString)\r\n iframeDoc.close()\r\n\r\n let collection\r\n let pointer\r\n const rules\r\n = iframeDoc.styleSheets[iframeDoc.styleSheets.length - 1].cssRules\r\n\r\n // Convert internal styles to inline style of respective node.\r\n for (let idx = 0; idx < rules.length; idx++) {\r\n if ((rules[idx] as CSSStyleRule).selectorText === '') {\r\n continue\r\n }\r\n collection = iframeDoc.body.querySelectorAll(\r\n (rules[idx] as CSSStyleRule).selectorText,\r\n )\r\n\r\n for (pointer = 0; pointer < collection.length; pointer++) {\r\n collection[pointer].style.cssText += (\r\n rules[idx] as CSSStyleRule\r\n ).style.cssText\r\n }\r\n }\r\n\r\n // @ts-ignore\r\n const convertedString = iframeDoc.firstChild.outerHTML\r\n // Remove temporary iframe.\r\n iframe.parentNode.removeChild(iframe)\r\n\r\n return convertedString\r\n}\r\n\r\nexport default CustomClipboard\r\n"],"names":["isNullOrUndefined","BIG_DELTA_LIMIT","insideTable","replaceDeltaImage","imageFileToUrl","imageUrlToFile","ERROR_IMAGE_PLACEHOLDER_EN","ERROR_IMAGE_PLACEHOLDER_CN","splitWithBreak","omit","hexToRgbA"],"mappings":"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"}
@@ -3,13 +3,40 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
3
3
  const lodashEs = require("lodash-es");
4
4
  const Quill = require("quill");
5
5
  const image = require("./image.cjs.js");
6
+ const imageBar = require("./image-bar.cjs.js");
6
7
  const Options = require("./Options.cjs.js");
7
8
  const CustomImageSpec = require("./specs/CustomImageSpec.cjs.js");
8
9
  const dontMerge = (_destination, source) => source;
9
10
  class BlotFormatter {
10
11
  constructor(quill, options = {}) {
12
+ this.debounceTimer = null;
11
13
  this.onClick = () => {
12
14
  this.hide();
15
+ this.hideImageBar();
16
+ };
17
+ this.onMouseOver = (event) => {
18
+ if (this.debounceTimer) {
19
+ clearTimeout(this.debounceTimer);
20
+ }
21
+ this.debounceTimer = window.setTimeout(() => {
22
+ if (event.target.tagName === "IMG") {
23
+ const target = event.target;
24
+ if (target) {
25
+ if (this.imageBar) {
26
+ this.imageBar.destroy();
27
+ }
28
+ this.imageBar = new imageBar.default(this.quill, target);
29
+ }
30
+ } else {
31
+ this.hideImageBar();
32
+ }
33
+ }, 150);
34
+ };
35
+ this.hideImageBar = () => {
36
+ if (this.imageBar) {
37
+ this.imageBar.destroy();
38
+ this.imageBar = null;
39
+ }
13
40
  };
14
41
  this.hideImageOverlay = (event) => {
15
42
  var _a;
@@ -31,6 +58,7 @@ class BlotFormatter {
31
58
  }
32
59
  document.execCommand("enableObjectResizing", false, "false");
33
60
  this.quill.root.addEventListener("click", this.onClick);
61
+ this.quill.root.addEventListener("mouseover", (event) => this.onMouseOver(event));
34
62
  this.specs = this.options.specs.map((SpecClass) => new SpecClass(this));
35
63
  this.specs.forEach((spec) => spec.init());
36
64
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlotFormatter.cjs.js","sources":["../../../../src/modules/custom-image/BlotFormatter.ts"],"sourcesContent":["import type Action from './actions/Action'\r\nimport type { Options } from './Options'\r\nimport type BlotSpec from './specs/BlotSpec'\r\nimport { merge as deepmerge } from 'lodash-es'\r\nimport Quill from 'quill'\r\nimport ImageBlot, { ImageContainerBlot } from './image'\r\nimport ImageBar from './image-bar'\r\nimport DefaultOptions from './Options'\r\nimport { CustomImageSpec } from './specs/CustomImageSpec'\r\n\r\nconst dontMerge = (_destination: Array<any>, source: Array<any>) => source\r\n\r\n// @dynamic\r\nexport default class BlotFormatter {\r\n quill: any\r\n options: Options\r\n currentSpec: BlotSpec\r\n specs: BlotSpec[]\r\n overlay: HTMLElement\r\n actions: Action[]\r\n observer: any\r\n imageBar: ImageBar\r\n private debounceTimer: number | null = null\r\n\r\n static register() {\r\n Quill.register('formats/image', ImageBlot, true)\r\n Quill.register('formats/image-container', ImageContainerBlot, true)\r\n Quill.register('modules/image-spec', CustomImageSpec, true)\r\n }\r\n\r\n constructor(quill: any, options: any = {}) {\r\n this.quill = quill\r\n this.options = deepmerge(DefaultOptions, options, { arrayMerge: dontMerge })\r\n this.currentSpec = null\r\n this.actions = []\r\n this.overlay = document.createElement('div')\r\n this.overlay.classList.add(this.options.overlay.className)\r\n if (this.options.overlay.style) {\r\n Object.assign(this.overlay.style, this.options.overlay.style)\r\n }\r\n\r\n // disable native image resizing on firefox\r\n document.execCommand('enableObjectResizing', false, 'false') // eslint-disable-next-line-line no-undef\r\n this.quill.root.addEventListener('click', this.onClick)\r\n this.quill.root.addEventListener('mouseover', event => this.onMouseOver(event))\r\n this.specs = this.options.specs.map((SpecClass: any) => new SpecClass(this))\r\n this.specs.forEach(spec => spec.init())\r\n }\r\n\r\n show(spec: BlotSpec) {\r\n this.currentSpec = spec\r\n this.currentSpec.setSelection()\r\n this.setUserSelect('none')\r\n this.quill.root.parentNode.appendChild(this.overlay)\r\n this.repositionOverlay()\r\n this.createActions(spec)\r\n\r\n // fix: 图片对齐之后,虚线外框应该跟随移动\r\n const imageDom = spec.getTargetElement()\r\n const win: any = window\r\n const MutationObserver = win.MutationObserver || win.WebKitMutationObserver || win.MozMutationObserver\r\n const element = imageDom.parentNode\r\n this.observer = new MutationObserver((mutationList) => {\r\n for (const mutation of mutationList) {\r\n const target = mutation.target\r\n const image = target.querySelector('img')\r\n if (image) {\r\n this.repositionOverlay()\r\n }\r\n }\r\n })\r\n this.observer.observe(element, {\r\n attributes: true,\r\n attributeFilter: ['class'],\r\n attributeOldValue: true,\r\n subtree: true,\r\n })\r\n document.body.addEventListener('click', this.hideImageOverlay, true)\r\n }\r\n\r\n hide() {\r\n if (!this.currentSpec) {\r\n return\r\n }\r\n\r\n const imgDom = this.currentSpec.getTargetElement()\r\n if (imgDom) {\r\n imgDom.classList.remove('current-select-img')\r\n }\r\n\r\n this.currentSpec.onHide()\r\n this.currentSpec = null\r\n this.quill.root.parentNode.removeChild(this.overlay)\r\n this.overlay.style.setProperty('display', 'none')\r\n this.setUserSelect('')\r\n this.destroyActions()\r\n }\r\n\r\n update() {\r\n this.repositionOverlay()\r\n this.actions.forEach(action => action.onUpdate())\r\n }\r\n\r\n createActions(spec: BlotSpec) {\r\n this.actions = spec.getActions().map((ActionClass: any) => {\r\n const action: Action = new ActionClass(this)\r\n action.onCreate()\r\n return action\r\n })\r\n }\r\n\r\n destroyActions() {\r\n this.actions.forEach((action: Action) => action.onDestroy())\r\n this.actions = []\r\n }\r\n\r\n repositionOverlay() {\r\n if (!this.currentSpec) {\r\n return\r\n }\r\n\r\n const overlayTarget = this.currentSpec.getOverlayElement()\r\n if (!overlayTarget) {\r\n return\r\n }\r\n\r\n const parent: HTMLElement = this.quill.root.parentNode\r\n const specRect = overlayTarget.getBoundingClientRect()\r\n const parentRect = parent.getBoundingClientRect()\r\n\r\n Object.assign(this.overlay.style, {\r\n display: 'block',\r\n left: `${specRect.left - parentRect.left - 1 + parent.scrollLeft}px`,\r\n top: `${specRect.top - parentRect.top + parent.scrollTop}px`,\r\n width: `${specRect.width}px`,\r\n height: `${specRect.height}px`,\r\n })\r\n }\r\n\r\n setUserSelect(value: string) {\r\n const props: string[] = [\r\n 'userSelect',\r\n 'mozUserSelect',\r\n 'webkitUserSelect',\r\n 'msUserSelect',\r\n ]\r\n\r\n props.forEach((prop: string) => {\r\n // set on contenteditable element and <html>\r\n this.quill.root.style.setProperty(prop, value)\r\n if (document.documentElement) {\r\n document.documentElement.style.setProperty(prop, value)\r\n }\r\n })\r\n }\r\n\r\n onClick = () => {\r\n this.hide()\r\n this.hideImageBar()\r\n }\r\n\r\n onMouseOver = (event) => {\r\n if (this.debounceTimer) {\r\n clearTimeout(this.debounceTimer)\r\n }\r\n this.debounceTimer = window.setTimeout(() => {\r\n if (event.target.tagName === 'IMG') {\r\n const target = event.target\r\n if (target) {\r\n if (this.imageBar) {\r\n this.imageBar.destroy()\r\n }\r\n this.imageBar = new ImageBar(this.quill, target)\r\n }\r\n }\r\n else {\r\n this.hideImageBar()\r\n }\r\n }, 150)\r\n }\r\n\r\n hideImageBar = () => {\r\n if (this.imageBar) {\r\n this.imageBar.destroy()\r\n this.imageBar = null\r\n }\r\n }\r\n\r\n hideImageOverlay = (event) => {\r\n const target = event.target\r\n const isBlotFormatter = target?.classList?.contains('blot-formatter__overlay')\r\n // 点击图片操作框之外应该将其销毁\r\n if (!isBlotFormatter) {\r\n this.hide()\r\n }\r\n document.body.removeEventListener('click', this.hideImageOverlay)\r\n }\r\n}\r\n"],"names":["ImageBar","deepmerge","DefaultOptions","ImageBlot","ImageContainerBlot","CustomImageSpec","image"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Options.cjs.js","sources":["../../../../src/modules/custom-image/Options.ts"],"sourcesContent":["import ImageSpec from './specs/ImageSpec'\r\n\r\nexport interface OverlayOptions {\r\n // classname applied to the overlay element\r\n className: string\r\n // style applied to overlay element, or null to prevent styles\r\n style: Record<string, string>\r\n}\r\n\r\nexport interface ResizeOptions {\r\n // class name applied to the resize handles\r\n handleClassName: string\r\n // style applied to resize handles, or null to prevent styles\r\n handleStyle: Record<string, string>\r\n}\r\n\r\nexport interface AlignOptions {\r\n // the name of the attribute for an element that has its alignment changed\r\n attribute: string\r\n // the aligner does the actual alignment switch\r\n aligner: {\r\n // whether or not the aligner should handle the actual alignment properties\r\n applyStyle: boolean\r\n }\r\n // icons used for alignment\r\n icons: {\r\n left: string\r\n center: string\r\n right: string\r\n }\r\n // the toolbar so users can change alignments\r\n toolbar: {\r\n // whether or not users can deselect an alignment. it's up to you to set the initial alignment\r\n allowDeselect: boolean\r\n // class name applied to the root toolbar element\r\n mainClassName: string\r\n // style applied to root toolbar element, or null to prevent styles\r\n mainStyle\r\n // class name applied to each button in the toolbar\r\n buttonClassName: string\r\n /* whether or not to add the selected style to the buttons.\r\n they'll always get the is-selected class */\r\n addButtonSelectStyle: boolean\r\n // style applied to buttons, or null to prevent styles\r\n buttonStyle\r\n // style applied to the svgs in the buttons\r\n svgStyle\r\n }\r\n}\r\n\r\nexport interface Options {\r\n // the BlotSpecs supported\r\n specs: any\r\n overlay: OverlayOptions\r\n align: AlignOptions\r\n resize: ResizeOptions\r\n}\r\n\r\nconst DefaultOptions: Options = {\r\n specs: [\r\n ImageSpec,\r\n ],\r\n overlay: {\r\n className: 'blot-formatter__overlay',\r\n style: {\r\n position: 'absolute',\r\n boxSizing: 'border-box',\r\n border: '1px dashed #444',\r\n },\r\n },\r\n align: {\r\n attribute: 'data-align',\r\n aligner: {\r\n applyStyle: true,\r\n },\r\n icons: {\r\n left: `\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 center: `\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 right: `\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 },\r\n toolbar: {\r\n allowDeselect: true,\r\n mainClassName: 'blot-formatter__toolbar',\r\n mainStyle: {\r\n position: 'absolute',\r\n top: '-12px',\r\n right: '0',\r\n left: '0',\r\n height: '0',\r\n minWidth: '100px',\r\n font: '12px/1.0 Arial, Helvetica, sans-serif',\r\n textAlign: 'center',\r\n color: '#333',\r\n boxSizing: 'border-box',\r\n cursor: 'default',\r\n zIndex: '1',\r\n },\r\n buttonClassName: 'blot-formatter__toolbar-button',\r\n addButtonSelectStyle: true,\r\n buttonStyle: {\r\n display: 'inline-block',\r\n width: '24px',\r\n height: '24px',\r\n background: 'white',\r\n border: '1px solid #999',\r\n verticalAlign: 'middle',\r\n },\r\n svgStyle: {\r\n display: 'inline-block',\r\n width: '24px',\r\n height: '24px',\r\n background: 'white',\r\n border: '1px solid #999',\r\n verticalAlign: 'middle',\r\n },\r\n },\r\n },\r\n resize: {\r\n handleClassName: 'blot-formatter__resize-handle',\r\n handleStyle: {\r\n position: 'absolute',\r\n height: '12px',\r\n width: '12px',\r\n backgroundColor: 'white',\r\n border: '1px solid #777',\r\n boxSizing: 'border-box',\r\n opacity: '0.80',\r\n },\r\n },\r\n}\r\n\r\nexport default DefaultOptions\r\n"],"names":["ImageSpec"],"mappings":";;;AA0DA,MAAM,iBAA0B;AAAA,EAC9B,OAAO;AAAA,IACLA,UAAAA;AAAAA,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,OAAO;AAAA,IACL,WAAW;AAAA,IACX,SAAS;AAAA,MACP,YAAY;AAAA,IACd;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAON,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOR,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOT;AAAA,IACA,SAAS;AAAA,MACP,eAAe;AAAA,MACf,eAAe;AAAA,MACf,WAAW;AAAA,QACT,UAAU;AAAA,QACV,KAAK;AAAA,QACL,OAAO;AAAA,QACP,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,MAAM;AAAA,QACN,WAAW;AAAA,QACX,OAAO;AAAA,QACP,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,MACA,iBAAiB;AAAA,MACjB,sBAAsB;AAAA,MACtB,aAAa;AAAA,QACX,SAAS;AAAA,QACT,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,eAAe;AAAA,MACjB;AAAA,MACA,UAAU;AAAA,QACR,SAAS;AAAA,QACT,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,eAAe;AAAA,MAAA;AAAA,IACjB;AAAA,EAEJ;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 @@
1
+ {"version":3,"file":"Action.cjs.js","sources":["../../../../../src/modules/custom-image/actions/Action.ts"],"sourcesContent":["export default class Action {\r\n formatter\r\n\r\n constructor(formatter) {\r\n this.formatter = formatter\r\n }\r\n\r\n onCreate() {}\r\n\r\n onDestroy() {}\r\n\r\n onUpdate() {}\r\n}\r\n"],"names":[],"mappings":";;AAAA,MAAqB,OAAO;AAAA,EAG1B,YAAY,WAAW;AACrB,SAAK,YAAY;AAAA,EAAA;AAAA,EAGnB,WAAW;AAAA,EAAA;AAAA,EAEX,YAAY;AAAA,EAAA;AAAA,EAEZ,WAAW;AAAA,EAAA;AACb;;"}