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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (602) hide show
  1. package/README.md +88 -105
  2. package/es/attributors/line-height.es.js.map +1 -1
  3. package/es/config/base64-image.es.js.map +1 -1
  4. package/es/config/editor.config.es.js +0 -7
  5. package/es/config/editor.config.es.js.map +1 -1
  6. package/es/config/editor.utils.es.js +0 -2
  7. package/es/config/editor.utils.es.js.map +1 -1
  8. package/es/config/i18n/en-us.es.js +0 -13
  9. package/es/config/i18n/en-us.es.js.map +1 -1
  10. package/es/config/i18n/zh-cn.es.js +0 -13
  11. package/es/config/i18n/zh-cn.es.js.map +1 -1
  12. package/es/config/index.es.js +8 -13
  13. package/es/config/index.es.js.map +1 -1
  14. package/es/config/types/index.es.js +0 -20
  15. package/es/config/types/index.es.js.map +1 -1
  16. package/es/core/fluent-editor.es.js +7 -5
  17. package/es/core/fluent-editor.es.js.map +1 -1
  18. package/es/fluent-editor.es.js +38 -22
  19. package/es/fluent-editor.es.js.map +1 -1
  20. package/es/formats/emoji.es.js +14 -0
  21. package/es/formats/emoji.es.js.map +1 -0
  22. package/es/formats/index.es.js +11 -0
  23. package/es/formats/index.es.js.map +1 -0
  24. package/es/formats/soft-break.es.js +12 -5
  25. package/es/formats/soft-break.es.js.map +1 -1
  26. package/es/formats/strike.es.js +8 -5
  27. package/es/formats/strike.es.js.map +1 -1
  28. package/es/formats/video.es.js +14 -10
  29. package/es/formats/video.es.js.map +1 -1
  30. package/es/index.es.js +94 -32
  31. package/es/index.es.js.map +1 -1
  32. package/es/modules/ai/constants.es.js +50 -0
  33. package/es/modules/ai/constants.es.js.map +1 -0
  34. package/es/modules/ai/icons.es.js +319 -0
  35. package/es/modules/ai/icons.es.js.map +1 -0
  36. package/es/modules/ai/index.es.js +670 -0
  37. package/es/modules/ai/index.es.js.map +1 -0
  38. package/es/modules/collaborative-editing/awareness/awareness.es.js +93 -0
  39. package/es/modules/collaborative-editing/awareness/awareness.es.js.map +1 -0
  40. package/es/modules/collaborative-editing/awareness/index.es.js +8 -0
  41. package/es/modules/{emoji/emoji-list → collaborative-editing/awareness}/index.es.js.map +1 -1
  42. package/es/modules/collaborative-editing/awareness/y-indexeddb.es.js +12 -0
  43. package/es/modules/collaborative-editing/awareness/y-indexeddb.es.js.map +1 -0
  44. package/es/modules/collaborative-editing/collaborative-editing.es.js +105 -0
  45. package/es/modules/collaborative-editing/collaborative-editing.es.js.map +1 -0
  46. package/es/modules/collaborative-editing/index.es.js +6 -0
  47. package/es/modules/collaborative-editing/index.es.js.map +1 -0
  48. package/es/modules/collaborative-editing/module.es.js +35 -0
  49. package/es/modules/collaborative-editing/module.es.js.map +1 -0
  50. package/es/modules/collaborative-editing/provider/providerRegistry.es.js +28 -0
  51. package/es/modules/collaborative-editing/provider/providerRegistry.es.js.map +1 -0
  52. package/es/modules/collaborative-editing/provider/webrtc.es.js +99 -0
  53. package/es/modules/collaborative-editing/provider/webrtc.es.js.map +1 -0
  54. package/es/modules/collaborative-editing/provider/websocket.es.js +111 -0
  55. package/es/modules/collaborative-editing/provider/websocket.es.js.map +1 -0
  56. package/es/modules/collaborative-editing/types.es.js +2 -0
  57. package/es/modules/collaborative-editing/types.es.js.map +1 -0
  58. package/es/modules/counter.es.js +8 -3
  59. package/es/modules/counter.es.js.map +1 -1
  60. package/es/modules/custom-clipboard.es.js +23 -27
  61. package/es/modules/custom-clipboard.es.js.map +1 -1
  62. package/es/modules/custom-image/actions/action.es.js +19 -0
  63. package/es/modules/custom-image/actions/action.es.js.map +1 -0
  64. package/es/modules/custom-image/actions/{CustomResizeAction.es.js → custom-resize-action.es.js} +24 -11
  65. package/es/modules/custom-image/actions/custom-resize-action.es.js.map +1 -0
  66. package/es/modules/custom-image/actions/{DeleteAction.es.js → delete-action.es.js} +8 -5
  67. package/es/modules/custom-image/actions/delete-action.es.js.map +1 -0
  68. package/es/modules/custom-image/actions/image-toolbar-buttons.es.js +137 -0
  69. package/es/modules/custom-image/actions/image-toolbar-buttons.es.js.map +1 -0
  70. package/es/modules/custom-image/actions/index.es.js +18 -0
  71. package/es/modules/custom-image/actions/index.es.js.map +1 -0
  72. package/es/modules/custom-image/actions/toolbar-action.es.js +33 -0
  73. package/es/modules/custom-image/actions/toolbar-action.es.js.map +1 -0
  74. package/es/modules/custom-image/actions/toolbar.es.js +110 -0
  75. package/es/modules/custom-image/actions/toolbar.es.js.map +1 -0
  76. package/es/modules/custom-image/{BlotFormatter.es.js → blot-formatter.es.js} +27 -50
  77. package/es/modules/custom-image/blot-formatter.es.js.map +1 -0
  78. package/es/modules/custom-image/image.es.js +41 -21
  79. package/es/modules/custom-image/image.es.js.map +1 -1
  80. package/es/modules/custom-image/index.es.js +9 -0
  81. package/es/modules/custom-image/index.es.js.map +1 -0
  82. package/es/modules/custom-image/options.es.js +88 -0
  83. package/es/modules/custom-image/options.es.js.map +1 -0
  84. package/es/modules/custom-image/specs/blot-spec.es.js +33 -0
  85. package/es/modules/custom-image/specs/blot-spec.es.js.map +1 -0
  86. package/es/modules/custom-image/specs/{CustomImageSpec.es.js → custom-image-spec.es.js} +13 -14
  87. package/es/modules/custom-image/specs/custom-image-spec.es.js.map +1 -0
  88. package/es/modules/custom-image/specs/image-spec.es.js +32 -0
  89. package/es/modules/custom-image/specs/image-spec.es.js.map +1 -0
  90. package/es/modules/custom-image/specs/index.es.js +9 -0
  91. package/es/modules/custom-image/specs/index.es.js.map +1 -0
  92. package/es/modules/custom-uploader.es.js +63 -194
  93. package/es/modules/custom-uploader.es.js.map +1 -1
  94. package/es/modules/divider.es.js +8 -7
  95. package/es/modules/divider.es.js.map +1 -1
  96. package/es/modules/emoji.es.js +167 -0
  97. package/es/modules/emoji.es.js.map +1 -0
  98. package/es/modules/file/formats/file.es.js +13 -13
  99. package/es/modules/file/formats/file.es.js.map +1 -1
  100. package/es/modules/file/index.es.js +6 -29
  101. package/es/modules/file/index.es.js.map +1 -1
  102. package/es/modules/file/modules/file-bar.es.js +11 -3
  103. package/es/modules/file/modules/file-bar.es.js.map +1 -1
  104. package/es/modules/file/modules/file-module.es.js +35 -0
  105. package/es/modules/file/modules/file-module.es.js.map +1 -0
  106. package/es/modules/i18n.es.js +33 -11
  107. package/es/modules/i18n.es.js.map +1 -1
  108. package/es/modules/index.es.js +27 -0
  109. package/es/modules/index.es.js.map +1 -0
  110. package/es/modules/link/formats/link.es.js +14 -10
  111. package/es/modules/link/formats/link.es.js.map +1 -1
  112. package/es/modules/link/index.es.js +4 -12
  113. package/es/modules/link/index.es.js.map +1 -1
  114. package/es/modules/link/modules/tooltip.es.js +31 -21
  115. package/es/modules/link/modules/tooltip.es.js.map +1 -1
  116. package/es/modules/mathlive/formats.es.js +10 -7
  117. package/es/modules/mathlive/formats.es.js.map +1 -1
  118. package/es/modules/mathlive/index.es.js +6 -30
  119. package/es/modules/mathlive/index.es.js.map +1 -1
  120. package/es/modules/mathlive/module.es.js +40 -0
  121. package/es/modules/mathlive/module.es.js.map +1 -0
  122. package/es/modules/mathlive/tooltip.es.js +9 -5
  123. package/es/modules/mathlive/tooltip.es.js.map +1 -1
  124. package/es/modules/mention/constants.es.js.map +1 -1
  125. package/es/modules/mention/index.es.js +7 -0
  126. package/es/modules/mention/index.es.js.map +1 -0
  127. package/es/modules/mention/{MentionLink.es.js → mention-link.es.js} +14 -6
  128. package/es/modules/mention/mention-link.es.js.map +1 -0
  129. package/es/modules/mention/{Mention.es.js → mention.es.js} +28 -20
  130. package/es/modules/mention/mention.es.js.map +1 -0
  131. package/es/modules/shortcut-key/index.es.js +17 -1
  132. package/es/modules/shortcut-key/index.es.js.map +1 -1
  133. package/es/modules/syntax.es.js +4 -0
  134. package/es/modules/syntax.es.js.map +1 -1
  135. package/es/modules/table-up/index.es.js +21 -8
  136. package/es/modules/table-up/index.es.js.map +1 -1
  137. package/es/modules/toolbar/better-picker.es.js +5 -0
  138. package/es/modules/toolbar/better-picker.es.js.map +1 -1
  139. package/es/modules/toolbar/better-toolbar.es.js +138 -0
  140. package/es/modules/toolbar/better-toolbar.es.js.map +1 -0
  141. package/es/modules/toolbar/index.es.js +5 -135
  142. package/es/modules/toolbar/index.es.js.map +1 -1
  143. package/es/modules/toolbar/toolbar-tip.es.js +6 -1
  144. package/es/modules/toolbar/toolbar-tip.es.js.map +1 -1
  145. package/es/themes/snow.es.js +32 -15
  146. package/es/themes/snow.es.js.map +1 -1
  147. package/es/tools/format-painter.es.js +8 -2
  148. package/es/tools/format-painter.es.js.map +1 -1
  149. package/es/tools/fullscreen.es.js.map +1 -1
  150. package/es/tools/screenshot.es.js.map +1 -1
  151. package/es/ui/icons.config.es.js +53 -0
  152. package/es/ui/icons.config.es.js.map +1 -1
  153. package/es/ui/icons.es.js +2 -1
  154. package/es/ui/icons.es.js.map +1 -1
  155. package/es/utils/debounce.es.js.map +1 -1
  156. package/es/utils/is.es.js +4 -0
  157. package/es/utils/is.es.js.map +1 -1
  158. package/es/utils/method.es.js.map +1 -1
  159. package/lib/attributors/line-height.cjs.js.map +1 -1
  160. package/lib/config/base64-image.cjs.js.map +1 -1
  161. package/lib/config/editor.config.cjs.js +0 -7
  162. package/lib/config/editor.config.cjs.js.map +1 -1
  163. package/lib/config/editor.utils.cjs.js +0 -2
  164. package/lib/config/editor.utils.cjs.js.map +1 -1
  165. package/lib/config/i18n/en-us.cjs.js +0 -13
  166. package/lib/config/i18n/en-us.cjs.js.map +1 -1
  167. package/lib/config/i18n/zh-cn.cjs.js +0 -13
  168. package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
  169. package/lib/config/index.cjs.js +6 -11
  170. package/lib/config/index.cjs.js.map +1 -1
  171. package/lib/config/types/index.cjs.js +0 -20
  172. package/lib/config/types/index.cjs.js.map +1 -1
  173. package/lib/core/fluent-editor.cjs.js +6 -4
  174. package/lib/core/fluent-editor.cjs.js.map +1 -1
  175. package/lib/fluent-editor.cjs.js +46 -30
  176. package/lib/fluent-editor.cjs.js.map +1 -1
  177. package/lib/formats/emoji.cjs.js +14 -0
  178. package/lib/formats/emoji.cjs.js.map +1 -0
  179. package/lib/formats/index.cjs.js +11 -0
  180. package/lib/formats/index.cjs.js.map +1 -0
  181. package/lib/formats/soft-break.cjs.js +13 -6
  182. package/lib/formats/soft-break.cjs.js.map +1 -1
  183. package/lib/formats/strike.cjs.js +9 -6
  184. package/lib/formats/strike.cjs.js.map +1 -1
  185. package/lib/formats/video.cjs.js +15 -11
  186. package/lib/formats/video.cjs.js.map +1 -1
  187. package/lib/index.cjs.js +114 -34
  188. package/lib/index.cjs.js.map +1 -1
  189. package/lib/modules/ai/constants.cjs.js +50 -0
  190. package/lib/modules/ai/constants.cjs.js.map +1 -0
  191. package/lib/modules/ai/icons.cjs.js +319 -0
  192. package/lib/modules/ai/icons.cjs.js.map +1 -0
  193. package/lib/modules/ai/index.cjs.js +670 -0
  194. package/lib/modules/ai/index.cjs.js.map +1 -0
  195. package/lib/modules/collaborative-editing/awareness/awareness.cjs.js +110 -0
  196. package/lib/modules/collaborative-editing/awareness/awareness.cjs.js.map +1 -0
  197. package/lib/modules/collaborative-editing/awareness/index.cjs.js +8 -0
  198. package/lib/modules/collaborative-editing/awareness/index.cjs.js.map +1 -0
  199. package/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js +12 -0
  200. package/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js.map +1 -0
  201. package/lib/modules/collaborative-editing/collaborative-editing.cjs.js +122 -0
  202. package/lib/modules/collaborative-editing/collaborative-editing.cjs.js.map +1 -0
  203. package/lib/modules/collaborative-editing/index.cjs.js +6 -0
  204. package/lib/modules/{emoji/emoji-list → collaborative-editing}/index.cjs.js.map +1 -1
  205. package/lib/modules/collaborative-editing/module.cjs.js +35 -0
  206. package/lib/modules/collaborative-editing/module.cjs.js.map +1 -0
  207. package/lib/modules/collaborative-editing/provider/providerRegistry.cjs.js +28 -0
  208. package/lib/modules/collaborative-editing/provider/providerRegistry.cjs.js.map +1 -0
  209. package/lib/modules/collaborative-editing/provider/webrtc.cjs.js +116 -0
  210. package/lib/modules/collaborative-editing/provider/webrtc.cjs.js.map +1 -0
  211. package/lib/modules/collaborative-editing/provider/websocket.cjs.js +128 -0
  212. package/lib/modules/collaborative-editing/provider/websocket.cjs.js.map +1 -0
  213. package/lib/modules/collaborative-editing/types.cjs.js +2 -0
  214. package/lib/modules/collaborative-editing/types.cjs.js.map +1 -0
  215. package/lib/modules/counter.cjs.js +8 -3
  216. package/lib/modules/counter.cjs.js.map +1 -1
  217. package/lib/modules/custom-clipboard.cjs.js +23 -27
  218. package/lib/modules/custom-clipboard.cjs.js.map +1 -1
  219. package/lib/modules/custom-image/actions/action.cjs.js +19 -0
  220. package/lib/modules/custom-image/actions/action.cjs.js.map +1 -0
  221. package/lib/modules/custom-image/actions/{CustomResizeAction.cjs.js → custom-resize-action.cjs.js} +26 -13
  222. package/lib/modules/custom-image/actions/custom-resize-action.cjs.js.map +1 -0
  223. package/lib/modules/custom-image/actions/{DeleteAction.cjs.js → delete-action.cjs.js} +10 -7
  224. package/lib/modules/custom-image/actions/delete-action.cjs.js.map +1 -0
  225. package/lib/modules/custom-image/actions/image-toolbar-buttons.cjs.js +137 -0
  226. package/lib/modules/custom-image/actions/image-toolbar-buttons.cjs.js.map +1 -0
  227. package/lib/modules/custom-image/actions/index.cjs.js +18 -0
  228. package/lib/modules/custom-image/actions/index.cjs.js.map +1 -0
  229. package/lib/modules/custom-image/actions/toolbar-action.cjs.js +33 -0
  230. package/lib/modules/custom-image/actions/toolbar-action.cjs.js.map +1 -0
  231. package/lib/modules/custom-image/actions/toolbar.cjs.js +110 -0
  232. package/lib/modules/custom-image/actions/toolbar.cjs.js.map +1 -0
  233. package/lib/modules/custom-image/{BlotFormatter.cjs.js → blot-formatter.cjs.js} +28 -51
  234. package/lib/modules/custom-image/blot-formatter.cjs.js.map +1 -0
  235. package/lib/modules/custom-image/image.cjs.js +42 -22
  236. package/lib/modules/custom-image/image.cjs.js.map +1 -1
  237. package/lib/modules/custom-image/index.cjs.js +9 -0
  238. package/lib/modules/custom-image/index.cjs.js.map +1 -0
  239. package/lib/modules/custom-image/options.cjs.js +88 -0
  240. package/lib/modules/custom-image/options.cjs.js.map +1 -0
  241. package/lib/modules/custom-image/specs/blot-spec.cjs.js +33 -0
  242. package/lib/modules/custom-image/specs/blot-spec.cjs.js.map +1 -0
  243. package/lib/modules/custom-image/specs/{CustomImageSpec.cjs.js → custom-image-spec.cjs.js} +14 -15
  244. package/lib/modules/custom-image/specs/custom-image-spec.cjs.js.map +1 -0
  245. package/lib/modules/custom-image/specs/image-spec.cjs.js +32 -0
  246. package/lib/modules/custom-image/specs/image-spec.cjs.js.map +1 -0
  247. package/lib/modules/custom-image/specs/index.cjs.js +9 -0
  248. package/lib/modules/custom-image/specs/index.cjs.js.map +1 -0
  249. package/lib/modules/custom-uploader.cjs.js +64 -195
  250. package/lib/modules/custom-uploader.cjs.js.map +1 -1
  251. package/lib/modules/divider.cjs.js +9 -8
  252. package/lib/modules/divider.cjs.js.map +1 -1
  253. package/lib/modules/emoji.cjs.js +167 -0
  254. package/lib/modules/emoji.cjs.js.map +1 -0
  255. package/lib/modules/file/formats/file.cjs.js +14 -14
  256. package/lib/modules/file/formats/file.cjs.js.map +1 -1
  257. package/lib/modules/file/index.cjs.js +5 -28
  258. package/lib/modules/file/index.cjs.js.map +1 -1
  259. package/lib/modules/file/modules/file-bar.cjs.js +12 -4
  260. package/lib/modules/file/modules/file-bar.cjs.js.map +1 -1
  261. package/lib/modules/file/modules/file-module.cjs.js +35 -0
  262. package/lib/modules/file/modules/file-module.cjs.js.map +1 -0
  263. package/lib/modules/i18n.cjs.js +32 -10
  264. package/lib/modules/i18n.cjs.js.map +1 -1
  265. package/lib/modules/index.cjs.js +27 -0
  266. package/lib/modules/index.cjs.js.map +1 -0
  267. package/lib/modules/link/formats/link.cjs.js +15 -11
  268. package/lib/modules/link/formats/link.cjs.js.map +1 -1
  269. package/lib/modules/link/index.cjs.js +4 -12
  270. package/lib/modules/link/index.cjs.js.map +1 -1
  271. package/lib/modules/link/modules/tooltip.cjs.js +30 -20
  272. package/lib/modules/link/modules/tooltip.cjs.js.map +1 -1
  273. package/lib/modules/mathlive/formats.cjs.js +11 -8
  274. package/lib/modules/mathlive/formats.cjs.js.map +1 -1
  275. package/lib/modules/mathlive/index.cjs.js +5 -29
  276. package/lib/modules/mathlive/index.cjs.js.map +1 -1
  277. package/lib/modules/mathlive/module.cjs.js +40 -0
  278. package/lib/modules/mathlive/module.cjs.js.map +1 -0
  279. package/lib/modules/mathlive/tooltip.cjs.js +10 -6
  280. package/lib/modules/mathlive/tooltip.cjs.js.map +1 -1
  281. package/lib/modules/mention/constants.cjs.js.map +1 -1
  282. package/lib/modules/mention/index.cjs.js +7 -0
  283. package/lib/modules/mention/index.cjs.js.map +1 -0
  284. package/lib/modules/mention/{MentionLink.cjs.js → mention-link.cjs.js} +15 -7
  285. package/lib/modules/mention/mention-link.cjs.js.map +1 -0
  286. package/lib/modules/mention/{Mention.cjs.js → mention.cjs.js} +30 -22
  287. package/lib/modules/mention/mention.cjs.js.map +1 -0
  288. package/lib/modules/shortcut-key/index.cjs.js +16 -0
  289. package/lib/modules/shortcut-key/index.cjs.js.map +1 -1
  290. package/lib/modules/syntax.cjs.js +4 -0
  291. package/lib/modules/syntax.cjs.js.map +1 -1
  292. package/lib/modules/table-up/index.cjs.js +21 -8
  293. package/lib/modules/table-up/index.cjs.js.map +1 -1
  294. package/lib/modules/toolbar/better-picker.cjs.js +5 -0
  295. package/lib/modules/toolbar/better-picker.cjs.js.map +1 -1
  296. package/lib/modules/toolbar/better-toolbar.cjs.js +138 -0
  297. package/lib/modules/toolbar/better-toolbar.cjs.js.map +1 -0
  298. package/lib/modules/toolbar/index.cjs.js +6 -136
  299. package/lib/modules/toolbar/index.cjs.js.map +1 -1
  300. package/lib/modules/toolbar/toolbar-tip.cjs.js +6 -1
  301. package/lib/modules/toolbar/toolbar-tip.cjs.js.map +1 -1
  302. package/lib/themes/snow.cjs.js +33 -16
  303. package/lib/themes/snow.cjs.js.map +1 -1
  304. package/lib/tools/format-painter.cjs.js +8 -2
  305. package/lib/tools/format-painter.cjs.js.map +1 -1
  306. package/lib/tools/fullscreen.cjs.js.map +1 -1
  307. package/lib/tools/screenshot.cjs.js.map +1 -1
  308. package/lib/ui/icons.cjs.js +1 -0
  309. package/lib/ui/icons.cjs.js.map +1 -1
  310. package/lib/ui/icons.config.cjs.js +53 -0
  311. package/lib/ui/icons.config.cjs.js.map +1 -1
  312. package/lib/utils/debounce.cjs.js.map +1 -1
  313. package/lib/utils/is.cjs.js +4 -0
  314. package/lib/utils/is.cjs.js.map +1 -1
  315. package/lib/utils/method.cjs.js.map +1 -1
  316. package/package.json +68 -59
  317. package/style.css +2359 -2251
  318. package/types/attributors/font-size.d.ts +1 -1
  319. package/types/attributors/font-style.d.ts +1 -1
  320. package/types/attributors/index.d.ts +4 -4
  321. package/types/attributors/line-height.d.ts +1 -1
  322. package/types/attributors/text-indent.d.ts +1 -1
  323. package/types/config/base64-image.d.ts +2 -2
  324. package/types/config/editor.config.d.ts +11 -285
  325. package/types/config/editor.utils.d.ts +40 -41
  326. package/types/config/i18n/en-us.d.ts +123 -136
  327. package/types/config/i18n/zh-cn.d.ts +123 -136
  328. package/types/config/index.d.ts +7 -6
  329. package/types/config/types/editor-config.interface.d.ts +11 -35
  330. package/types/config/types/editor-modules.interface.d.ts +41 -31
  331. package/types/config/types/index.d.ts +3 -23
  332. package/types/config/types/type.d.ts +2 -6
  333. package/types/core/fluent-editor.d.ts +11 -11
  334. package/types/fluent-editor.d.ts +1 -2
  335. package/types/formats/emoji.d.ts +8 -0
  336. package/types/formats/index.d.ts +4 -0
  337. package/types/formats/soft-break.d.ts +12 -14
  338. package/types/formats/strike.d.ts +8 -7
  339. package/types/formats/video.d.ts +13 -16
  340. package/types/index.d.ts +7 -6
  341. package/types/modules/ai/constants.d.ts +30 -0
  342. package/types/modules/ai/icons.d.ts +21 -0
  343. package/types/modules/ai/index.d.ts +96 -0
  344. package/types/modules/ai/types.d.ts +16 -0
  345. package/types/modules/collaborative-editing/awareness/awareness.d.ts +28 -0
  346. package/types/modules/collaborative-editing/awareness/index.d.ts +2 -0
  347. package/types/modules/collaborative-editing/awareness/y-indexeddb.d.ts +2 -0
  348. package/types/modules/collaborative-editing/collaborative-editing.d.ts +24 -0
  349. package/types/modules/collaborative-editing/index.d.ts +2 -0
  350. package/types/modules/collaborative-editing/module.d.ts +11 -0
  351. package/types/modules/collaborative-editing/provider/index.d.ts +3 -0
  352. package/types/modules/collaborative-editing/provider/providerRegistry.d.ts +25 -0
  353. package/types/modules/collaborative-editing/provider/webrtc.d.ts +36 -0
  354. package/types/modules/collaborative-editing/provider/websocket.d.ts +40 -0
  355. package/types/modules/collaborative-editing/types.d.ts +37 -0
  356. package/types/modules/counter.d.ts +22 -16
  357. package/types/modules/custom-clipboard.d.ts +23 -27
  358. package/types/modules/custom-image/actions/action.d.ts +8 -0
  359. package/types/modules/custom-image/actions/{CustomResizeAction.d.ts → custom-resize-action.d.ts} +23 -24
  360. package/types/modules/custom-image/actions/delete-action.d.ts +6 -0
  361. package/types/modules/custom-image/actions/image-toolbar-buttons.d.ts +16 -0
  362. package/types/modules/custom-image/actions/index.d.ts +6 -0
  363. package/types/modules/custom-image/actions/toolbar-action.d.ts +11 -0
  364. package/types/modules/custom-image/actions/toolbar.d.ts +19 -0
  365. package/types/modules/custom-image/blot-formatter.d.ts +23 -0
  366. package/types/modules/custom-image/image.d.ts +28 -28
  367. package/types/modules/custom-image/index.d.ts +4 -0
  368. package/types/modules/custom-image/options.d.ts +47 -0
  369. package/types/modules/custom-image/specs/blot-spec.d.ts +12 -0
  370. package/types/modules/custom-image/specs/{CustomImageSpec.d.ts → custom-image-spec.d.ts} +17 -21
  371. package/types/modules/custom-image/specs/image-spec.d.ts +8 -0
  372. package/types/modules/custom-image/specs/index.d.ts +3 -0
  373. package/types/modules/custom-uploader.d.ts +40 -31
  374. package/types/modules/divider.d.ts +8 -7
  375. package/types/modules/emoji.d.ts +39 -0
  376. package/types/modules/file/formats/file.d.ts +18 -15
  377. package/types/modules/file/index.d.ts +3 -11
  378. package/types/modules/file/modules/file-bar.d.ts +14 -14
  379. package/types/modules/file/modules/file-module.d.ts +9 -0
  380. package/types/modules/i18n.d.ts +13 -15
  381. package/types/modules/index.d.ts +16 -0
  382. package/types/modules/link/formats/link.d.ts +14 -15
  383. package/types/modules/link/index.d.ts +2 -6
  384. package/types/modules/link/modules/tooltip.d.ts +26 -32
  385. package/types/modules/mathlive/formats.d.ts +20 -21
  386. package/types/modules/mathlive/index.d.ts +3 -9
  387. package/types/modules/mathlive/module.d.ts +9 -0
  388. package/types/modules/mathlive/tooltip.d.ts +14 -15
  389. package/types/modules/mention/constants.d.ts +3 -3
  390. package/types/modules/mention/index.d.ts +2 -0
  391. package/types/modules/mention/{MentionLink.d.ts → mention-link.d.ts} +15 -15
  392. package/types/modules/mention/{Mention.d.ts → mention.d.ts} +52 -54
  393. package/types/modules/shortcut-key/index.d.ts +67 -93
  394. package/types/modules/syntax.d.ts +12 -13
  395. package/types/modules/table-up/index.d.ts +32 -64
  396. package/types/modules/toolbar/better-picker.d.ts +13 -14
  397. package/types/modules/toolbar/better-toolbar.d.ts +7 -0
  398. package/types/modules/toolbar/index.d.ts +3 -9
  399. package/types/modules/toolbar/toolbar-tip.d.ts +7 -8
  400. package/types/themes/snow.d.ts +9 -10
  401. package/types/tools/format-painter.d.ts +12 -14
  402. package/types/tools/fullscreen.d.ts +6 -3
  403. package/types/tools/screenshot.d.ts +17 -18
  404. package/types/ui/icons.config.d.ts +38 -36
  405. package/types/ui/icons.d.ts +6 -6
  406. package/types/utils/debounce.d.ts +6 -6
  407. package/types/utils/image.d.ts +1 -1
  408. package/types/utils/is.d.ts +6 -4
  409. package/types/utils/method.d.ts +6 -6
  410. package/types/utils/scroll-lock.d.ts +6 -6
  411. package/es/config/types/additional-toolbar-item.interface.es.js +0 -2
  412. package/es/config/types/additional-toolbar-item.interface.es.js.map +0 -1
  413. package/es/config/types/content-change.interface.es.js +0 -2
  414. package/es/config/types/content-change.interface.es.js.map +0 -1
  415. package/es/config/types/content-save.interface.es.js +0 -2
  416. package/es/config/types/content-save.interface.es.js.map +0 -1
  417. package/es/config/types/counter-option.interface.es.js +0 -2
  418. package/es/config/types/counter-option.interface.es.js.map +0 -1
  419. package/es/config/types/editor-toolbar.interface.es.js +0 -2
  420. package/es/config/types/editor-toolbar.interface.es.js.map +0 -1
  421. package/es/config/types/file-operation.interface.es.js +0 -2
  422. package/es/config/types/file-operation.interface.es.js.map +0 -1
  423. package/es/config/types/focus-change.interface.es.js +0 -2
  424. package/es/config/types/focus-change.interface.es.js.map +0 -1
  425. package/es/config/types/fullscreen-module.interface.es.js +0 -2
  426. package/es/config/types/fullscreen-module.interface.es.js.map +0 -1
  427. package/es/config/types/help-panel-item.interface.es.js +0 -2
  428. package/es/config/types/help-panel-item.interface.es.js.map +0 -1
  429. package/es/config/types/help-panel-option.interface.es.js +0 -2
  430. package/es/config/types/help-panel-option.interface.es.js.map +0 -1
  431. package/es/config/types/image-module.interface.es.js +0 -2
  432. package/es/config/types/image-module.interface.es.js.map +0 -1
  433. package/es/config/types/image-upload.interface.es.js +0 -2
  434. package/es/config/types/image-upload.interface.es.js.map +0 -1
  435. package/es/config/types/load-on-demand-module.interface.es.js +0 -2
  436. package/es/config/types/load-on-demand-module.interface.es.js.map +0 -1
  437. package/es/config/types/mention-module.interface.es.js +0 -2
  438. package/es/config/types/mention-module.interface.es.js.map +0 -1
  439. package/es/config/types/paste-change.interface.es.js +0 -2
  440. package/es/config/types/paste-change.interface.es.js.map +0 -1
  441. package/es/config/types/quick-menu-module.interface.es.js +0 -2
  442. package/es/config/types/quick-menu-module.interface.es.js.map +0 -1
  443. package/es/config/types/range.interface.es.js +0 -2
  444. package/es/config/types/range.interface.es.js.map +0 -1
  445. package/es/config/types/registry-options.interface.es.js +0 -2
  446. package/es/config/types/registry-options.interface.es.js.map +0 -1
  447. package/es/config/types/selection-change.interface.es.js +0 -2
  448. package/es/config/types/selection-change.interface.es.js.map +0 -1
  449. package/es/config/types/toolbar-item.interface.es.js +0 -2
  450. package/es/config/types/toolbar-item.interface.es.js.map +0 -1
  451. package/es/config/types/validate-error.interface.es.js +0 -2
  452. package/es/config/types/validate-error.interface.es.js.map +0 -1
  453. package/es/modules/custom-image/BlotFormatter.es.js.map +0 -1
  454. package/es/modules/custom-image/Options.es.js +0 -95
  455. package/es/modules/custom-image/Options.es.js.map +0 -1
  456. package/es/modules/custom-image/actions/Action.es.js +0 -15
  457. package/es/modules/custom-image/actions/Action.es.js.map +0 -1
  458. package/es/modules/custom-image/actions/CustomResizeAction.es.js.map +0 -1
  459. package/es/modules/custom-image/actions/DeleteAction.es.js.map +0 -1
  460. package/es/modules/custom-image/image-bar.es.js +0 -127
  461. package/es/modules/custom-image/image-bar.es.js.map +0 -1
  462. package/es/modules/custom-image/specs/BlotSpec.es.js +0 -27
  463. package/es/modules/custom-image/specs/BlotSpec.es.js.map +0 -1
  464. package/es/modules/custom-image/specs/CustomImageSpec.es.js.map +0 -1
  465. package/es/modules/custom-image/specs/ImageSpec.es.js +0 -29
  466. package/es/modules/custom-image/specs/ImageSpec.es.js.map +0 -1
  467. package/es/modules/emoji/emoji-list/index.es.js +0 -5
  468. package/es/modules/emoji/emoji-list/people.es.js +0 -114
  469. package/es/modules/emoji/emoji-list/people.es.js.map +0 -1
  470. package/es/modules/emoji/emoji-list.es.js +0 -9
  471. package/es/modules/emoji/emoji-list.es.js.map +0 -1
  472. package/es/modules/emoji/emoji-map.es.js +0 -9
  473. package/es/modules/emoji/emoji-map.es.js.map +0 -1
  474. package/es/modules/emoji/emoji-sprite.es.js +0 -5
  475. package/es/modules/emoji/emoji-sprite.es.js.map +0 -1
  476. package/es/modules/emoji/formats/emoji-blot.es.js +0 -41
  477. package/es/modules/emoji/formats/emoji-blot.es.js.map +0 -1
  478. package/es/modules/emoji/index.es.js +0 -8
  479. package/es/modules/emoji/index.es.js.map +0 -1
  480. package/es/modules/emoji/modules/emoji.es.js +0 -248
  481. package/es/modules/emoji/modules/emoji.es.js.map +0 -1
  482. package/es/modules/emoji/modules/toolbar-emoji.es.js +0 -153
  483. package/es/modules/emoji/modules/toolbar-emoji.es.js.map +0 -1
  484. package/es/modules/emoji/utils.es.js +0 -19
  485. package/es/modules/emoji/utils.es.js.map +0 -1
  486. package/es/modules/mention/Mention.es.js.map +0 -1
  487. package/es/modules/mention/MentionLink.es.js.map +0 -1
  488. package/lib/config/types/additional-toolbar-item.interface.cjs.js +0 -2
  489. package/lib/config/types/additional-toolbar-item.interface.cjs.js.map +0 -1
  490. package/lib/config/types/content-change.interface.cjs.js +0 -2
  491. package/lib/config/types/content-change.interface.cjs.js.map +0 -1
  492. package/lib/config/types/content-save.interface.cjs.js +0 -2
  493. package/lib/config/types/content-save.interface.cjs.js.map +0 -1
  494. package/lib/config/types/counter-option.interface.cjs.js +0 -2
  495. package/lib/config/types/counter-option.interface.cjs.js.map +0 -1
  496. package/lib/config/types/editor-toolbar.interface.cjs.js +0 -2
  497. package/lib/config/types/editor-toolbar.interface.cjs.js.map +0 -1
  498. package/lib/config/types/file-operation.interface.cjs.js +0 -2
  499. package/lib/config/types/file-operation.interface.cjs.js.map +0 -1
  500. package/lib/config/types/focus-change.interface.cjs.js +0 -2
  501. package/lib/config/types/focus-change.interface.cjs.js.map +0 -1
  502. package/lib/config/types/fullscreen-module.interface.cjs.js +0 -2
  503. package/lib/config/types/fullscreen-module.interface.cjs.js.map +0 -1
  504. package/lib/config/types/help-panel-item.interface.cjs.js +0 -2
  505. package/lib/config/types/help-panel-item.interface.cjs.js.map +0 -1
  506. package/lib/config/types/help-panel-option.interface.cjs.js +0 -2
  507. package/lib/config/types/help-panel-option.interface.cjs.js.map +0 -1
  508. package/lib/config/types/image-module.interface.cjs.js +0 -2
  509. package/lib/config/types/image-module.interface.cjs.js.map +0 -1
  510. package/lib/config/types/image-upload.interface.cjs.js +0 -2
  511. package/lib/config/types/image-upload.interface.cjs.js.map +0 -1
  512. package/lib/config/types/load-on-demand-module.interface.cjs.js +0 -2
  513. package/lib/config/types/load-on-demand-module.interface.cjs.js.map +0 -1
  514. package/lib/config/types/mention-module.interface.cjs.js +0 -2
  515. package/lib/config/types/mention-module.interface.cjs.js.map +0 -1
  516. package/lib/config/types/paste-change.interface.cjs.js +0 -2
  517. package/lib/config/types/paste-change.interface.cjs.js.map +0 -1
  518. package/lib/config/types/quick-menu-module.interface.cjs.js +0 -2
  519. package/lib/config/types/quick-menu-module.interface.cjs.js.map +0 -1
  520. package/lib/config/types/range.interface.cjs.js +0 -2
  521. package/lib/config/types/range.interface.cjs.js.map +0 -1
  522. package/lib/config/types/registry-options.interface.cjs.js +0 -2
  523. package/lib/config/types/registry-options.interface.cjs.js.map +0 -1
  524. package/lib/config/types/selection-change.interface.cjs.js +0 -2
  525. package/lib/config/types/selection-change.interface.cjs.js.map +0 -1
  526. package/lib/config/types/toolbar-item.interface.cjs.js +0 -2
  527. package/lib/config/types/toolbar-item.interface.cjs.js.map +0 -1
  528. package/lib/config/types/validate-error.interface.cjs.js +0 -2
  529. package/lib/config/types/validate-error.interface.cjs.js.map +0 -1
  530. package/lib/modules/custom-image/BlotFormatter.cjs.js.map +0 -1
  531. package/lib/modules/custom-image/Options.cjs.js +0 -95
  532. package/lib/modules/custom-image/Options.cjs.js.map +0 -1
  533. package/lib/modules/custom-image/actions/Action.cjs.js +0 -15
  534. package/lib/modules/custom-image/actions/Action.cjs.js.map +0 -1
  535. package/lib/modules/custom-image/actions/CustomResizeAction.cjs.js.map +0 -1
  536. package/lib/modules/custom-image/actions/DeleteAction.cjs.js.map +0 -1
  537. package/lib/modules/custom-image/image-bar.cjs.js +0 -127
  538. package/lib/modules/custom-image/image-bar.cjs.js.map +0 -1
  539. package/lib/modules/custom-image/specs/BlotSpec.cjs.js +0 -27
  540. package/lib/modules/custom-image/specs/BlotSpec.cjs.js.map +0 -1
  541. package/lib/modules/custom-image/specs/CustomImageSpec.cjs.js.map +0 -1
  542. package/lib/modules/custom-image/specs/ImageSpec.cjs.js +0 -29
  543. package/lib/modules/custom-image/specs/ImageSpec.cjs.js.map +0 -1
  544. package/lib/modules/emoji/emoji-list/index.cjs.js +0 -5
  545. package/lib/modules/emoji/emoji-list/people.cjs.js +0 -114
  546. package/lib/modules/emoji/emoji-list/people.cjs.js.map +0 -1
  547. package/lib/modules/emoji/emoji-list.cjs.js +0 -9
  548. package/lib/modules/emoji/emoji-list.cjs.js.map +0 -1
  549. package/lib/modules/emoji/emoji-map.cjs.js +0 -9
  550. package/lib/modules/emoji/emoji-map.cjs.js.map +0 -1
  551. package/lib/modules/emoji/emoji-sprite.cjs.js +0 -5
  552. package/lib/modules/emoji/emoji-sprite.cjs.js.map +0 -1
  553. package/lib/modules/emoji/formats/emoji-blot.cjs.js +0 -41
  554. package/lib/modules/emoji/formats/emoji-blot.cjs.js.map +0 -1
  555. package/lib/modules/emoji/index.cjs.js +0 -8
  556. package/lib/modules/emoji/index.cjs.js.map +0 -1
  557. package/lib/modules/emoji/modules/emoji.cjs.js +0 -248
  558. package/lib/modules/emoji/modules/emoji.cjs.js.map +0 -1
  559. package/lib/modules/emoji/modules/toolbar-emoji.cjs.js +0 -153
  560. package/lib/modules/emoji/modules/toolbar-emoji.cjs.js.map +0 -1
  561. package/lib/modules/emoji/utils.cjs.js +0 -19
  562. package/lib/modules/emoji/utils.cjs.js.map +0 -1
  563. package/lib/modules/mention/Mention.cjs.js.map +0 -1
  564. package/lib/modules/mention/MentionLink.cjs.js.map +0 -1
  565. package/types/config/types/additional-toolbar-item.interface.d.ts +0 -8
  566. package/types/config/types/content-change.interface.d.ts +0 -13
  567. package/types/config/types/content-save.interface.d.ts +0 -6
  568. package/types/config/types/counter-option.interface.d.ts +0 -9
  569. package/types/config/types/editor-toolbar.interface.d.ts +0 -6
  570. package/types/config/types/file-operation.interface.d.ts +0 -12
  571. package/types/config/types/focus-change.interface.d.ts +0 -4
  572. package/types/config/types/fullscreen-module.interface.d.ts +0 -4
  573. package/types/config/types/help-panel-item.interface.d.ts +0 -5
  574. package/types/config/types/help-panel-option.interface.d.ts +0 -7
  575. package/types/config/types/image-module.interface.d.ts +0 -3
  576. package/types/config/types/image-upload.interface.d.ts +0 -7
  577. package/types/config/types/load-on-demand-module.interface.d.ts +0 -5
  578. package/types/config/types/mention-module.interface.d.ts +0 -8
  579. package/types/config/types/paste-change.interface.d.ts +0 -6
  580. package/types/config/types/quick-menu-module.interface.d.ts +0 -3
  581. package/types/config/types/range.interface.d.ts +0 -4
  582. package/types/config/types/registry-options.interface.d.ts +0 -5
  583. package/types/config/types/selection-change.interface.d.ts +0 -8
  584. package/types/config/types/toolbar-item.interface.d.ts +0 -13
  585. package/types/config/types/validate-error.interface.d.ts +0 -13
  586. package/types/modules/custom-image/BlotFormatter.d.ts +0 -29
  587. package/types/modules/custom-image/Options.d.ts +0 -36
  588. package/types/modules/custom-image/actions/Action.d.ts +0 -7
  589. package/types/modules/custom-image/actions/DeleteAction.d.ts +0 -7
  590. package/types/modules/custom-image/image-bar.d.ts +0 -15
  591. package/types/modules/custom-image/specs/BlotSpec.d.ts +0 -13
  592. package/types/modules/custom-image/specs/ImageSpec.d.ts +0 -10
  593. package/types/modules/emoji/emoji-list/index.d.ts +0 -1
  594. package/types/modules/emoji/emoji-list/people.d.ts +0 -1
  595. package/types/modules/emoji/emoji-list.d.ts +0 -2
  596. package/types/modules/emoji/emoji-map.d.ts +0 -2
  597. package/types/modules/emoji/emoji-sprite.d.ts +0 -1
  598. package/types/modules/emoji/formats/emoji-blot.d.ts +0 -13
  599. package/types/modules/emoji/index.d.ts +0 -10
  600. package/types/modules/emoji/modules/emoji.d.ts +0 -38
  601. package/types/modules/emoji/modules/toolbar-emoji.d.ts +0 -8
  602. package/types/modules/emoji/utils.d.ts +0 -1
@@ -1,140 +1,10 @@
1
1
  "use strict";
2
- Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const Quill = require("quill");
4
- const editor_utils = require("../../config/editor.utils.cjs.js");
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const betterPicker = require("./better-picker.cjs.js");
4
+ const betterToolbar = require("./better-toolbar.cjs.js");
5
5
  const toolbarTip = require("./toolbar-tip.cjs.js");
6
- const Delta = Quill.import("delta");
7
- const Parchment = Quill.import("parchment");
8
- const levels = ["error", "warn", "log", "info"];
9
- let level = "warn";
10
- function debuglogger(method, ...args) {
11
- if (levels.indexOf(method) <= levels.indexOf(level)) {
12
- console[method](...args);
13
- }
14
- }
15
- function namespace(ns) {
16
- return levels.reduce((logger, method) => {
17
- logger[method] = debuglogger.bind(console, method, ns);
18
- return logger;
19
- }, {});
20
- }
21
- namespace.level = (newLevel) => {
22
- level = newLevel;
23
- };
24
- debuglogger.level = namespace.level;
25
- const debug = namespace("quill:toolbar");
26
- const Toolbar = Quill.import("modules/toolbar");
27
- class BetterToolbar extends Toolbar {
28
- update(range) {
29
- const formats = editor_utils.isNullOrUndefined(range) ? {} : this.quill.getFormat(range);
30
- this.controls.forEach((pair) => {
31
- const [format, input] = pair;
32
- if (input.tagName === "SELECT") {
33
- const select = input;
34
- let option;
35
- if (editor_utils.isNullOrUndefined(range)) {
36
- option = null;
37
- } else if (editor_utils.isNullOrUndefined(formats[format])) {
38
- option = select.querySelector("option[selected]");
39
- } else if (!Array.isArray(formats[format])) {
40
- let value = format === "header" ? formats[format].value : formats[format];
41
- if (typeof value === "string") {
42
- value = value.replace(/"/g, '\\"');
43
- }
44
- option = select.querySelector(`option[value="${value}"]`);
45
- }
46
- if (editor_utils.isNullOrUndefined(option)) {
47
- select.value = "";
48
- select.selectedIndex = -1;
49
- } else {
50
- option.selected = true;
51
- }
52
- } else if (editor_utils.isNullOrUndefined(range)) {
53
- input.classList.remove("ql-active");
54
- } else if (input.hasAttribute("value")) {
55
- let isActive = formats[format] === input.getAttribute("value") || !editor_utils.isNullOrUndefined(formats[format]) && (formats[format].value === input.getAttribute("value") || formats[format].toString() === input.getAttribute("value")) || editor_utils.isNullOrUndefined(formats[format]) && !input.getAttribute("value");
56
- if (!isActive) {
57
- const checkFormat = formats[format];
58
- if (checkFormat === "checked" || checkFormat === "unchecked") {
59
- isActive = input.getAttribute("value") === "check";
60
- }
61
- }
62
- if (isActive) {
63
- input.classList.add("ql-active");
64
- } else {
65
- input.classList.remove("ql-active");
66
- }
67
- } else {
68
- if (!editor_utils.isNullOrUndefined(formats[format])) {
69
- input.classList.add("ql-active");
70
- } else {
71
- input.classList.remove("ql-active");
72
- }
73
- }
74
- });
75
- }
76
- attach(input) {
77
- let format = Array.from(input.classList).find((className) => {
78
- return className.indexOf("ql-") === 0;
79
- });
80
- if (!format) return;
81
- format = format.slice("ql-".length);
82
- if (input.tagName === "BUTTON") {
83
- input.setAttribute("type", "button");
84
- }
85
- if (this.handlers[format] == null && this.quill.scroll.query(format) == null) {
86
- debug.warn("ignoring attaching to nonexistent format", format, input);
87
- return;
88
- }
89
- const eventName = input.tagName === "SELECT" ? "change" : "click";
90
- input.addEventListener(eventName, (e) => {
91
- let value;
92
- if (input.tagName === "SELECT") {
93
- const select = input;
94
- if (select.selectedIndex < 0) return;
95
- const selected = select.options[select.selectedIndex];
96
- if (selected.hasAttribute("selected")) {
97
- value = false;
98
- } else {
99
- value = selected.value || false;
100
- }
101
- } else {
102
- const button = input;
103
- if (button.classList.contains("ql-active")) {
104
- value = false;
105
- } else {
106
- value = button.value || !button.hasAttribute("value");
107
- }
108
- e.preventDefault();
109
- }
110
- this.quill.focus({ preventScroll: format === "screenshot" });
111
- const [range] = this.quill.selection.getRange();
112
- if (this.handlers[format] != null) {
113
- if (!editor_utils.isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === "blockquote" || format === "code-block" || format === "list" || format === "indent" || format === "clean")) {
114
- return;
115
- }
116
- this.handlers[format].call(this, value);
117
- } else if (
118
- // @ts-ignore
119
- this.quill.scroll.query(format).prototype instanceof Parchment.EmbedBlot
120
- ) {
121
- value = prompt(`Enter ${format}`);
122
- if (!value) return;
123
- this.quill.updateContents(
124
- new Delta().retain(range.index).delete(range.length).insert({ [format]: value }),
125
- Quill.sources.USER
126
- );
127
- } else {
128
- if (!editor_utils.isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === "blockquote" || format === "code-block" || format === "list" || format === "indent" || format === "clean")) {
129
- return;
130
- }
131
- this.quill.format(format, value, Quill.sources.USER);
132
- }
133
- this.update(range);
134
- });
135
- this.controls.push([format, input]);
136
- }
137
- }
6
+ exports.ColorPicker = betterPicker.ColorPicker;
7
+ exports.Picker = betterPicker.Picker;
8
+ exports.BetterToolbar = betterToolbar.BetterToolbar;
138
9
  exports.generateToolbarTip = toolbarTip.generateToolbarTip;
139
- exports.default = BetterToolbar;
140
10
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../../../src/modules/toolbar/index.ts"],"sourcesContent":["import type TypeToolbar from 'quill/modules/toolbar'\r\nimport Quill from 'quill'\r\nimport { isNullOrUndefined } from '../../config/editor.utils'\r\n\r\nconst Delta = Quill.import('delta')\r\nconst Parchment = Quill.import('parchment')\r\nconst levels = ['error', 'warn', 'log', 'info'] as const\r\nlet level = 'warn' as const\r\n\r\nfunction debuglogger(method: typeof levels[number], ...args) {\r\n if (levels.indexOf(method) <= levels.indexOf(level)) {\r\n console[method](...args) // eslint-disable-line no-console\r\n }\r\n}\r\n\r\nfunction namespace(ns) {\r\n return levels.reduce((logger, method) => {\r\n logger[method] = debuglogger.bind(console, method, ns)\r\n return logger\r\n }, {} as Record<typeof levels[number], (...args: any) => void>)\r\n}\r\n\r\nnamespace.level = (newLevel) => {\r\n level = newLevel\r\n}\r\ndebuglogger.level = namespace.level\r\nconst debug = namespace('quill:toolbar')\r\n\r\nconst Toolbar = Quill.import('modules/toolbar') as typeof TypeToolbar\r\n\r\nclass BetterToolbar extends Toolbar {\r\n update(range) {\r\n const formats = isNullOrUndefined(range) ? {} : this.quill.getFormat(range) as Record<string, any>\r\n this.controls.forEach((pair) => {\r\n const [format, input] = pair\r\n if (input.tagName === 'SELECT') {\r\n const select = input as HTMLSelectElement\r\n let option\r\n if (isNullOrUndefined(range)) {\r\n option = null\r\n }\r\n else if (isNullOrUndefined(formats[format])) {\r\n option = select.querySelector('option[selected]')\r\n }\r\n else if (!Array.isArray(formats[format])) {\r\n let value = format === 'header' ? formats[format].value : formats[format]\r\n if (typeof value === 'string') {\r\n value = value.replace(/\"/g, '\\\\\"')\r\n }\r\n option = select.querySelector(`option[value=\"${value}\"]`)\r\n }\r\n if (isNullOrUndefined(option)) {\r\n select.value = '' // TODO make configurable?\r\n select.selectedIndex = -1\r\n }\r\n else {\r\n option.selected = true\r\n }\r\n }\r\n else if (isNullOrUndefined(range)) {\r\n input.classList.remove('ql-active')\r\n }\r\n else if (input.hasAttribute('value')) {\r\n // both being null should match (default values)\r\n // '1' should match with 1 (headers)\r\n let isActive\r\n = formats[format] === input.getAttribute('value')\r\n || (!isNullOrUndefined(formats[format])\r\n && (formats[format].value === input.getAttribute('value')\r\n || formats[format].toString() === input.getAttribute('value')))\r\n || (isNullOrUndefined(formats[format]) && !input.getAttribute('value'))\r\n\r\n if (!isActive) {\r\n const checkFormat = formats[format]\r\n if (checkFormat === 'checked' || checkFormat === 'unchecked') {\r\n isActive = input.getAttribute('value') === 'check'\r\n }\r\n }\r\n\r\n if (isActive) {\r\n input.classList.add('ql-active')\r\n }\r\n else {\r\n input.classList.remove('ql-active')\r\n }\r\n }\r\n else {\r\n if (!isNullOrUndefined(formats[format])) {\r\n input.classList.add('ql-active')\r\n }\r\n else {\r\n input.classList.remove('ql-active')\r\n }\r\n }\r\n })\r\n }\r\n\r\n attach(input: HTMLElement) {\r\n let format = Array.from(input.classList).find((className) => {\r\n return className.indexOf('ql-') === 0\r\n })\r\n if (!format) return\r\n format = format.slice('ql-'.length)\r\n\r\n if (input.tagName === 'BUTTON') {\r\n input.setAttribute('type', 'button')\r\n }\r\n\r\n if (this.handlers[format] == null && this.quill.scroll.query(format) == null) {\r\n debug.warn('ignoring attaching to nonexistent format', format, input)\r\n return\r\n }\r\n\r\n const eventName = input.tagName === 'SELECT' ? 'change' : 'click'\r\n input.addEventListener(eventName, (e) => {\r\n let value: boolean | string\r\n\r\n if (input.tagName === 'SELECT') {\r\n const select = input as HTMLSelectElement\r\n if (select.selectedIndex < 0) return\r\n const selected = select.options[select.selectedIndex]\r\n\r\n if (selected.hasAttribute('selected')) {\r\n value = false\r\n }\r\n else {\r\n value = selected.value || false\r\n }\r\n }\r\n else {\r\n const button = input as HTMLButtonElement\r\n if (button.classList.contains('ql-active')) {\r\n value = false\r\n }\r\n else {\r\n value = button.value || !button.hasAttribute('value')\r\n }\r\n e.preventDefault()\r\n }\r\n\r\n this.quill.focus({ preventScroll: format === 'screenshot' })\r\n const [range] = this.quill.selection.getRange()\r\n if (this.handlers[format] != null) {\r\n // @ts-ignore\r\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\r\n return\r\n }\r\n this.handlers[format].call(this, value)\r\n }\r\n else if (\r\n // @ts-ignore\r\n this.quill.scroll.query(format).prototype instanceof Parchment.EmbedBlot\r\n ) {\r\n value = prompt(`Enter ${format}`)\r\n if (!value) return\r\n this.quill.updateContents(\r\n new Delta()\r\n .retain(range.index)\r\n .delete(range.length)\r\n .insert({ [format]: value }),\r\n Quill.sources.USER,\r\n )\r\n }\r\n else {\r\n // @ts-ignore\r\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\r\n return\r\n }\r\n this.quill.format(format, value, Quill.sources.USER)\r\n }\r\n\r\n this.update(range)\r\n })\r\n this.controls.push([format, input])\r\n }\r\n}\r\n\r\nexport default BetterToolbar\r\nexport * from './toolbar-tip'\r\n"],"names":["isNullOrUndefined"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  require("../../config/index.cjs.js");
4
+ const is = require("../../utils/is.cjs.js");
4
5
  const editor_config = require("../../config/editor.config.cjs.js");
5
6
  function generateToolbarTip(QuillToolbarTip) {
6
7
  return class extends QuillToolbarTip {
@@ -124,11 +125,15 @@ ${shortKey}` : "";
124
125
  }
125
126
  }
126
127
  };
128
+ const inputTipTextMap = Object.entries(options.tipTextMap).reduce((pre, [key, value]) => {
129
+ pre[key] = is.isString(value) ? this.quill.getLangText(value) : value;
130
+ return pre;
131
+ }, {});
127
132
  return {
128
133
  ...result,
129
134
  tipTextMap: {
130
135
  ...textMap,
131
- ...options.tipTextMap
136
+ ...inputTipTextMap
132
137
  }
133
138
  };
134
139
  }
@@ -1 +1 @@
1
- {"version":3,"file":"toolbar-tip.cjs.js","sources":["../../../../src/modules/toolbar/toolbar-tip.ts"],"sourcesContent":["import type { Constructor } from '../../config/types'\r\nimport type FluentEditor from '../../fluent-editor'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\r\n\r\nexport function generateToolbarTip(QuillToolbarTip: Constructor) {\r\n return class extends QuillToolbarTip {\r\n constructor(public quill: FluentEditor, options: Partial<Record<string, any>>) {\r\n if (!options?.tipTextMap) {\r\n options.tipTextMap = {}\r\n }\r\n super(quill, options)\r\n\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.destroyAllTips()\r\n this.options = this.resolveOptions(options)\r\n this.createToolbarTip()\r\n })\r\n }\r\n\r\n resolveOptions(options: Partial<Record<string, any>>): Record<string, any> {\r\n const result = super.resolveOptions(options)\r\n if (!this.quill.lang) return result\r\n const shortKeyMap = {\r\n 'bold': 'Ctrl + B',\r\n 'italic': 'Ctrl + I',\r\n 'underline': 'Ctrl + U',\r\n 'strike': 'Ctrl + D',\r\n 'clean': 'Ctrl + /',\r\n 'align-left': 'Alt + L',\r\n 'align-center': 'Alt + C',\r\n 'align-right': 'Alt + R',\r\n 'align-justify': 'Alt + J',\r\n 'indent-+1': 'Ctrl + ]',\r\n 'indent--1': 'Ctrl + [',\r\n 'script-sub': 'Ctrl + ;',\r\n 'script-super': 'Ctrl + \\'',\r\n 'code': 'Ctrl + E',\r\n 'direction-rtl': 'Ctrl + R',\r\n 'direction-ltr': 'Ctrl + L',\r\n 'undo': 'Ctrl + Z',\r\n 'redo': 'Ctrl + shift + Z',\r\n 'color': 'Ctrl + Alt + C',\r\n 'background': 'Ctrl + Alt + B',\r\n 'link': 'Ctrl + K',\r\n }\r\n const shortcutModule = this.quill.getModule('shortcut-key')\r\n const getShortKey = (name: string) => {\r\n if (!shortcutModule) return ''\r\n const shortKey = shortKeyMap[name]\r\n return shortKey ? `\\n${shortKey}` : ''\r\n }\r\n const btnTips = [\r\n 'color',\r\n 'background',\r\n 'bold',\r\n 'italic',\r\n 'strike',\r\n 'underline',\r\n 'undo',\r\n 'redo',\r\n 'clean',\r\n 'link',\r\n 'divider',\r\n 'blockquote',\r\n 'code',\r\n 'image',\r\n 'file',\r\n 'emoji',\r\n 'video',\r\n 'screenshot',\r\n 'code-block',\r\n 'formula',\r\n 'format-painter',\r\n 'header-list',\r\n 'table-up',\r\n ].reduce((map, name) => {\r\n map[name] = this.quill.getLangText(name) + getShortKey(name)\r\n return map\r\n }, {} as Record<string, string>)\r\n const selectTips = [\r\n 'font',\r\n 'size',\r\n 'line-height',\r\n ].reduce((map, name) => {\r\n map[name] = {\r\n onShow: () => {\r\n return this.quill.getLangText(name) + getShortKey(name)\r\n },\r\n }\r\n return map\r\n }, {})\r\n const valueControlTips = [\r\n 'list',\r\n 'align',\r\n 'script',\r\n 'indent',\r\n 'header',\r\n 'direction',\r\n ].reduce((map, name) => {\r\n map[name] = {\r\n onShow: (target: HTMLElement, value: string) => {\r\n if (name === 'direction') {\r\n value = target.classList.contains('ql-active') ? 'rtl' : 'ltr'\r\n }\r\n if (!value) {\r\n if (name === 'align') {\r\n value = 'left'\r\n }\r\n else if (name === 'header') {\r\n value = 'normal'\r\n }\r\n }\r\n return this.quill.getLangText(`${name}-${value}`) + getShortKey(`${name}-${value}`)\r\n },\r\n }\r\n return map\r\n }, {})\r\n const textMap = {\r\n ...btnTips,\r\n ...valueControlTips,\r\n ...selectTips,\r\n fullscreen: {\r\n onShow: () => {\r\n return this.quill.getLangText(this.quill.isFullscreen ? 'exit-fullscreen' : 'fullscreen')\r\n },\r\n },\r\n }\r\n return {\r\n ...result,\r\n tipTextMap: {\r\n ...textMap,\r\n ...options.tipTextMap,\r\n },\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["CHANGE_LANGUAGE_EVENT"],"mappings":"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"}
1
+ {"version":3,"file":"toolbar-tip.cjs.js","sources":["../../../../src/modules/toolbar/toolbar-tip.ts"],"sourcesContent":["import type { Constructor } from '../../config/types'\r\nimport type FluentEditor from '../../fluent-editor'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\r\nimport { isString } from '../../utils/is'\r\n\r\nexport function generateToolbarTip(QuillToolbarTip: Constructor) {\r\n return class extends QuillToolbarTip {\r\n constructor(public quill: FluentEditor, options: Partial<Record<string, any>>) {\r\n if (!options?.tipTextMap) {\r\n options.tipTextMap = {}\r\n }\r\n super(quill, options)\r\n\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.destroyAllTips()\r\n this.options = this.resolveOptions(options)\r\n this.createToolbarTip()\r\n })\r\n }\r\n\r\n resolveOptions(options: Partial<Record<string, any>>): Record<string, any> {\r\n const result = super.resolveOptions(options)\r\n if (!this.quill.lang) return result\r\n const shortKeyMap = {\r\n 'bold': 'Ctrl + B',\r\n 'italic': 'Ctrl + I',\r\n 'underline': 'Ctrl + U',\r\n 'strike': 'Ctrl + D',\r\n 'clean': 'Ctrl + /',\r\n 'align-left': 'Alt + L',\r\n 'align-center': 'Alt + C',\r\n 'align-right': 'Alt + R',\r\n 'align-justify': 'Alt + J',\r\n 'indent-+1': 'Ctrl + ]',\r\n 'indent--1': 'Ctrl + [',\r\n 'script-sub': 'Ctrl + ;',\r\n 'script-super': 'Ctrl + \\'',\r\n 'code': 'Ctrl + E',\r\n 'direction-rtl': 'Ctrl + R',\r\n 'direction-ltr': 'Ctrl + L',\r\n 'undo': 'Ctrl + Z',\r\n 'redo': 'Ctrl + shift + Z',\r\n 'color': 'Ctrl + Alt + C',\r\n 'background': 'Ctrl + Alt + B',\r\n 'link': 'Ctrl + K',\r\n }\r\n const shortcutModule = this.quill.getModule('shortcut-key')\r\n const getShortKey = (name: string) => {\r\n if (!shortcutModule) return ''\r\n const shortKey = shortKeyMap[name]\r\n return shortKey ? `\\n${shortKey}` : ''\r\n }\r\n const btnTips = [\r\n 'color',\r\n 'background',\r\n 'bold',\r\n 'italic',\r\n 'strike',\r\n 'underline',\r\n 'undo',\r\n 'redo',\r\n 'clean',\r\n 'link',\r\n 'divider',\r\n 'blockquote',\r\n 'code',\r\n 'image',\r\n 'file',\r\n 'emoji',\r\n 'video',\r\n 'screenshot',\r\n 'code-block',\r\n 'formula',\r\n 'format-painter',\r\n 'header-list',\r\n 'table-up',\r\n ].reduce((map, name) => {\r\n map[name] = this.quill.getLangText(name) + getShortKey(name)\r\n return map\r\n }, {} as Record<string, string>)\r\n const selectTips = [\r\n 'font',\r\n 'size',\r\n 'line-height',\r\n ].reduce((map, name) => {\r\n map[name] = {\r\n onShow: () => {\r\n return this.quill.getLangText(name) + getShortKey(name)\r\n },\r\n }\r\n return map\r\n }, {})\r\n const valueControlTips = [\r\n 'list',\r\n 'align',\r\n 'script',\r\n 'indent',\r\n 'header',\r\n 'direction',\r\n ].reduce((map, name) => {\r\n map[name] = {\r\n onShow: (target: HTMLElement, value: string) => {\r\n if (name === 'direction') {\r\n value = target.classList.contains('ql-active') ? 'rtl' : 'ltr'\r\n }\r\n if (!value) {\r\n if (name === 'align') {\r\n value = 'left'\r\n }\r\n else if (name === 'header') {\r\n value = 'normal'\r\n }\r\n }\r\n return this.quill.getLangText(`${name}-${value}`) + getShortKey(`${name}-${value}`)\r\n },\r\n }\r\n return map\r\n }, {})\r\n const textMap = {\r\n ...btnTips,\r\n ...valueControlTips,\r\n ...selectTips,\r\n fullscreen: {\r\n onShow: () => {\r\n return this.quill.getLangText(this.quill.isFullscreen ? 'exit-fullscreen' : 'fullscreen')\r\n },\r\n },\r\n }\r\n const inputTipTextMap = Object.entries(options.tipTextMap).reduce((pre, [key, value]) => {\r\n pre[key] = isString(value) ? this.quill.getLangText(value) : value\r\n return pre\r\n }, {})\r\n return {\r\n ...result,\r\n tipTextMap: {\r\n ...textMap,\r\n ...inputTipTextMap,\r\n },\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["CHANGE_LANGUAGE_EVENT","isString"],"mappings":"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"}
@@ -2,8 +2,8 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const index$1 = require("../config/index.cjs.js");
4
4
  const fluentEditor = require("../core/fluent-editor.cjs.js");
5
- const CustomImageSpec = require("../modules/custom-image/specs/CustomImageSpec.cjs.js");
6
- const tooltip = require("../modules/link/modules/tooltip.cjs.js");
5
+ const customImageSpec = require("../modules/custom-image/specs/custom-image-spec.cjs.js");
6
+ require("../modules/link/index.cjs.js");
7
7
  const index = require("../modules/shortcut-key/index.cjs.js");
8
8
  const betterPicker = require("../modules/toolbar/better-picker.cjs.js");
9
9
  const formatPainter = require("../tools/format-painter.cjs.js");
@@ -11,6 +11,7 @@ const fullscreen = require("../tools/fullscreen.cjs.js");
11
11
  const screenshot = require("../tools/screenshot.cjs.js");
12
12
  const editor_config = require("../config/editor.config.cjs.js");
13
13
  const editor_utils = require("../config/editor.utils.cjs.js");
14
+ const tooltip = require("../modules/link/modules/tooltip.cjs.js");
14
15
  const OriginSnowTheme = fluentEditor.default.import("themes/snow");
15
16
  const IconPicker = fluentEditor.default.import("ui/icon-picker");
16
17
  OriginSnowTheme.DEFAULTS = {
@@ -40,15 +41,25 @@ OriginSnowTheme.DEFAULTS = {
40
41
  this.quill.history.redo();
41
42
  },
42
43
  "file": function() {
43
- var _a, _b;
44
- const accept = (_b = (_a = this.quill.options) == null ? void 0 : _a.uploadOption) == null ? void 0 : _b.fileAccept;
44
+ const accept = this.quill.uploader.options.mimetypes;
45
45
  index$1.inputFile.call(this, "file", accept);
46
46
  },
47
47
  "image": function() {
48
- var _a, _b;
49
- const accept = (_b = (_a = this.quill.options) == null ? void 0 : _a.uploadOption) == null ? void 0 : _b.imageAccept;
48
+ const accept = this.quill.uploader.options.mimetypes.filter((type) => {
49
+ if (type === "*") return "image/*";
50
+ return type.startsWith("image/");
51
+ });
50
52
  index$1.inputFile.call(this, "image", accept);
51
53
  },
54
+ "video": function() {
55
+ const accept = this.quill.uploader.options.mimetypes.filter((type) => {
56
+ if (type === "*") return "video/*";
57
+ return type.startsWith("video/");
58
+ });
59
+ index$1.inputFile.call(this, "video", accept);
60
+ },
61
+ "ai": function() {
62
+ },
52
63
  "emoji": function() {
53
64
  },
54
65
  "fullscreen": fullscreen.fullscreenHandler,
@@ -66,21 +77,15 @@ OriginSnowTheme.DEFAULTS = {
66
77
  }
67
78
  },
68
79
  "image": {
69
- specs: [CustomImageSpec.CustomImageSpec],
80
+ specs: [customImageSpec.CustomImageSpec],
70
81
  overlay: {
71
82
  style: {
72
83
  border: "1px dashed rgb(68, 68, 68)"
73
84
  }
74
- },
75
- align: {
76
- icons: {
77
- left: '<i class="icon-text-align-left"></i>',
78
- center: '<i class="icon-text-align-center"></i>',
79
- right: '<i class="icon-text-align-right"></i>'
80
- }
81
85
  }
82
86
  },
83
- "shortcut-key": true
87
+ "shortcut-key": true,
88
+ "file": true
84
89
  }
85
90
  };
86
91
  const ALIGNS = [false, "center", "right"];
@@ -177,6 +182,18 @@ class SnowTheme extends OriginSnowTheme {
177
182
  colorPicker.buildOptions();
178
183
  colorPicker.createUsedColor();
179
184
  }
185
+ if (picker.select && picker.select.classList.contains("ql-header")) {
186
+ const getLabelKey = (v) => v ? `header-${v}` : "header-normal";
187
+ const labelValue = picker.label.getAttribute("data-value");
188
+ picker.label.setAttribute("data-label", this.quill.getLangText(getLabelKey(labelValue)));
189
+ const select = picker.select;
190
+ Array.from(select.options).forEach((option) => {
191
+ const value = option.getAttribute("value");
192
+ option.textContent = this.quill.getLangText(getLabelKey(value));
193
+ });
194
+ picker.options.remove();
195
+ picker.buildOptions();
196
+ }
180
197
  });
181
198
  }
182
199
  buildPickers(selects, icons) {
@@ -223,7 +240,7 @@ class SnowTheme extends OriginSnowTheme {
223
240
  toolbar.container.classList.add("ql-snow");
224
241
  this.buildButtons(toolbar.container.querySelectorAll("button"), icons);
225
242
  this.buildPickers(toolbar.container.querySelectorAll("select"), icons);
226
- this.tooltip = new tooltip.default(this.quill, this.options.bounds);
243
+ this.tooltip = new tooltip.LinkTooltip(this.quill, this.options.bounds);
227
244
  }
228
245
  }
229
246
  function fillSelect(select, values, defaultValue = false) {
@@ -1 +1 @@
1
- {"version":3,"file":"snow.cjs.js","sources":["../../../src/themes/snow.ts"],"sourcesContent":["import type { ThemeOptions } from 'quill/core/theme'\r\nimport type TypeToolbar from 'quill/modules/toolbar'\r\nimport type TypeIconPicker from 'quill/ui/icon-picker'\r\nimport type { TypeParchment } from '../core/fluent-editor'\r\nimport { CHANGE_LANGUAGE_EVENT, getListValue, inputFile, isNullOrUndefined } from '../config'\r\nimport FluentEditor from '../core/fluent-editor'\r\nimport { CustomImageSpec } from '../modules/custom-image/specs/CustomImageSpec'\r\nimport Tooltip from '../modules/link/modules/tooltip'\r\nimport { shortKey } from '../modules/shortcut-key'\r\nimport { ColorPicker, Picker } from '../modules/toolbar/better-picker'\r\nimport { FormatPainter } from '../tools/format-painter'\r\nimport { fullscreenHandler } from '../tools/fullscreen'\r\nimport { Screenshot } from '../tools/screenshot'\r\n\r\nconst OriginSnowTheme = FluentEditor.import('themes/snow') as any\r\nconst IconPicker = FluentEditor.import('ui/icon-picker') as typeof TypeIconPicker\r\n\r\nOriginSnowTheme.DEFAULTS = {\r\n modules: {\r\n 'i18n': true,\r\n 'keyboard': {\r\n bindings: {\r\n ...shortKey,\r\n },\r\n },\r\n 'toolbar': {\r\n handlers: {\r\n ...(OriginSnowTheme.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 '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 [FormatPainter.toolName]: FormatPainter,\r\n [Screenshot.toolName]: Screenshot,\r\n 'line-height': 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', FluentEditor.sources.USER)\r\n this.quill.insertEmbed(range.index + 1, 'divider', true, FluentEditor.sources.USER)\r\n this.quill.setSelection(range.index + 2, FluentEditor.sources.SILENT)\r\n },\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 'shortcut-key': true,\r\n },\r\n}\r\n\r\nconst ALIGNS = [false, 'center', 'right']\r\nconst COLORS = [\r\n '',\r\n 'rgb(255, 255, 255)',\r\n 'rgb(0, 0, 0)',\r\n 'rgb(72, 83, 104)',\r\n 'rgb(41, 114, 244)',\r\n 'rgb(0, 163, 245)',\r\n 'rgb(49, 155, 98)',\r\n 'rgb(222, 60, 54)',\r\n 'rgb(248, 136, 37)',\r\n 'rgb(245, 196, 0)',\r\n 'rgb(153, 56, 215)',\r\n\r\n 'rgb(242, 242, 242)',\r\n 'rgb(127, 127, 127)',\r\n 'rgb(243, 245, 247)',\r\n 'rgb(229, 239, 255)',\r\n 'rgb(229, 246, 255)',\r\n 'rgb(234, 250, 241)',\r\n 'rgb(254, 233, 232)',\r\n 'rgb(254, 243, 235)',\r\n 'rgb(254, 249, 227)',\r\n 'rgb(253, 235, 255)',\r\n\r\n 'rgb(216, 216, 216)',\r\n 'rgb(89, 89, 89)',\r\n 'rgb(197, 202, 211)',\r\n 'rgb(199, 220, 255)',\r\n 'rgb(199, 236, 255)',\r\n 'rgb(195, 234, 213)',\r\n 'rgb(255, 201, 199)',\r\n 'rgb(255, 220, 196)',\r\n 'rgb(255, 238, 173)',\r\n 'rgb(242, 199, 255)',\r\n\r\n 'rgb(191, 191, 191)',\r\n 'rgb(63, 63, 63)',\r\n 'rgb(128, 139, 158)',\r\n 'rgb(153, 190, 255)',\r\n 'rgb(153, 221, 255)',\r\n 'rgb(152, 215, 182)',\r\n 'rgb(255, 156, 153)',\r\n 'rgb(255, 186, 132)',\r\n 'rgb(255, 226, 112)',\r\n 'rgb(213, 142, 255)',\r\n\r\n 'rgb(165, 165, 165)',\r\n 'rgb(38, 38, 38)',\r\n 'rgb(53, 59, 69)',\r\n 'rgb(20, 80, 184)',\r\n 'rgb(18, 116, 165)',\r\n 'rgb(39, 124, 79)',\r\n 'rgb(158, 30, 26)',\r\n 'rgb(184, 96, 20)',\r\n 'rgb(163, 130, 0)',\r\n 'rgb(94, 34, 129)',\r\n\r\n 'rgb(147, 147, 147)',\r\n 'rgb(13, 13, 13)',\r\n 'rgb(36, 39, 46)',\r\n 'rgb(12, 48, 110)',\r\n 'rgb(10, 65, 92)',\r\n 'rgb(24, 78, 50)',\r\n 'rgb(88, 17, 14)',\r\n 'rgb(92, 48, 10)',\r\n 'rgb(102, 82, 0)',\r\n 'rgb(59, 21, 81)',\r\n\r\n 'custom',\r\n]\r\nconst FONTS = [false, 'serif', 'monospace']\r\nconst HEADERS = ['1', '2', '3', false]\r\nconst SIZES = ['small', false, 'large', 'huge']\r\nconst LINEHEIGHT = [false, '1.2', '1.5', '2']\r\n\r\nclass SnowTheme extends OriginSnowTheme {\r\n constructor(public quill: FluentEditor, options: ThemeOptions) {\r\n super(quill, options)\r\n\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.i18nTextToolbar()\r\n })\r\n }\r\n\r\n i18nTextToolbar() {\r\n const toolbar = this.quill.getModule('toolbar') as TypeToolbar\r\n ColorPicker.clearText = this.quill.getLangText('clear-color')\r\n ColorPicker.customText = this.quill.getLangText('custom-color')\r\n if (!toolbar || !this.pickers) return\r\n this.pickers.forEach((picker) => {\r\n if (picker instanceof ColorPicker) {\r\n // EasyColorPicker have not dts. abd origin quill ColorPicker dts not complete. use any to resovle ts type error\r\n const colorPicker = picker as any\r\n colorPicker.options.remove()\r\n Array.from(colorPicker.select.options).forEach((option: any) => {\r\n if (option.hasAttribute('custom')) {\r\n option.remove()\r\n }\r\n })\r\n colorPicker.buildOptions()\r\n colorPicker.createUsedColor()\r\n }\r\n })\r\n }\r\n\r\n buildPickers(selects: NodeListOf<HTMLSelectElement>, icons: Record<string, string | Record<string, string>>) {\r\n this.pickers = Array.from(selects).map((select) => {\r\n if (select.classList.contains('ql-align')) {\r\n if (isNullOrUndefined(select.querySelector('option'))) {\r\n fillSelect(select, ALIGNS)\r\n }\r\n return new IconPicker(select, icons.align as Record<string, string>)\r\n }\r\n if (select.classList.contains('ql-background') || select.classList.contains('ql-color')) {\r\n const format = select.classList.contains('ql-background') ? 'background' : 'color'\r\n if (isNullOrUndefined(select.querySelector('option'))) {\r\n fillColorSelect(select, COLORS, format, format === 'background' ? '#ffffff' : '#000000')\r\n }\r\n return new ColorPicker(select, icons[format] as string, {\r\n expandIcon: '<i class=\"icon\" />',\r\n closeAfterChange: false,\r\n })\r\n }\r\n if (isNullOrUndefined(select.querySelector('option'))) {\r\n if (select.classList.contains('ql-font')) {\r\n fillSelect(select, FONTS)\r\n }\r\n else if (select.classList.contains('ql-header')) {\r\n fillSelect(select, HEADERS)\r\n }\r\n else if (select.classList.contains('ql-size')) {\r\n fillSelect(select, SIZES)\r\n }\r\n else if (select.classList.contains('ql-line-height')) {\r\n fillSelect(select, LINEHEIGHT)\r\n }\r\n }\r\n return new Picker(select)\r\n })\r\n const update = () => {\r\n this.pickers.forEach((picker) => {\r\n if (picker instanceof ColorPicker) return\r\n picker.update()\r\n })\r\n }\r\n this.quill.on(FluentEditor.events.EDITOR_CHANGE, update)\r\n }\r\n\r\n extendToolbar(toolbar) {\r\n const icons = FluentEditor.import('ui/icons') as Record<string, any>\r\n toolbar.container.classList.add('ql-snow')\r\n this.buildButtons(toolbar.container.querySelectorAll('button'), icons)\r\n this.buildPickers(toolbar.container.querySelectorAll('select'), icons)\r\n this.tooltip = new Tooltip(this.quill, this.options.bounds)\r\n }\r\n}\r\n\r\nfunction fillSelect(select, values, defaultValue = false) {\r\n values.forEach((value) => {\r\n const option = document.createElement('option')\r\n if (value === defaultValue) {\r\n option.setAttribute('selected', 'selected')\r\n }\r\n else {\r\n option.setAttribute('value', value)\r\n }\r\n select.appendChild(option)\r\n })\r\n}\r\nfunction fillColorSelect(\r\n select: HTMLSelectElement,\r\n values: Array<string | boolean>,\r\n format: string,\r\n defaultValue: unknown = false,\r\n) {\r\n const colorGetter = document.createElement('span') as HTMLElement\r\n for (const value of values) {\r\n const option = document.createElement('option')\r\n if (value === defaultValue) {\r\n option.setAttribute('selected', 'selected')\r\n }\r\n else {\r\n if (value !== 'custom') {\r\n colorGetter.style[format] = String(value)\r\n option.setAttribute('value', colorGetter.style[format])\r\n }\r\n else {\r\n option.setAttribute('value', value)\r\n }\r\n }\r\n select.appendChild(option)\r\n }\r\n}\r\n\r\nexport default SnowTheme\r\n"],"names":["FluentEditor","shortKey","inputFile","fullscreenHandler","FormatPainter","Screenshot","CustomImageSpec","CHANGE_LANGUAGE_EVENT","ColorPicker","isNullOrUndefined","Picker","Tooltip"],"mappings":"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"}
1
+ {"version":3,"file":"snow.cjs.js","sources":["../../../src/themes/snow.ts"],"sourcesContent":["import type { ThemeOptions } from 'quill/core/theme'\nimport type TypeToolbar from 'quill/modules/toolbar'\nimport type TypeIconPicker from 'quill/ui/icon-picker'\nimport { CHANGE_LANGUAGE_EVENT, inputFile, isNullOrUndefined } from '../config'\nimport FluentEditor from '../core/fluent-editor'\nimport { CustomImageSpec } from '../modules/custom-image/specs/custom-image-spec'\nimport { LinkTooltip } from '../modules/link'\nimport { shortKey } from '../modules/shortcut-key'\nimport { ColorPicker, Picker } from '../modules/toolbar/better-picker'\nimport { FormatPainter } from '../tools/format-painter'\nimport { fullscreenHandler } from '../tools/fullscreen'\nimport { Screenshot } from '../tools/screenshot'\n\nconst OriginSnowTheme = FluentEditor.import('themes/snow') as any\nconst IconPicker = FluentEditor.import('ui/icon-picker') as typeof TypeIconPicker\n\nOriginSnowTheme.DEFAULTS = {\n modules: {\n 'i18n': true,\n 'keyboard': {\n bindings: {\n ...shortKey,\n },\n },\n 'toolbar': {\n handlers: {\n ...(OriginSnowTheme.DEFAULTS as Record<string, any>).modules.toolbar.handlers,\n 'formula': function () {\n if (!this.quill.isEnabled()) return\n const mathlive = this.quill.getModule('mathlive')\n if (!mathlive) {\n this.quill.theme.tooltip.edit('formula')\n }\n else {\n mathlive.createDialog()\n }\n },\n 'undo': function () {\n this.quill.history.undo()\n },\n 'redo': function () {\n this.quill.history.redo()\n },\n 'file': function () {\n const accept = this.quill.uploader.options.mimetypes\n inputFile.call(this, 'file', accept)\n },\n 'image': function () {\n const accept = (this.quill as FluentEditor).uploader.options.mimetypes.filter((type) => {\n if (type === '*') return 'image/*'\n return type.startsWith('image/')\n })\n inputFile.call(this, 'image', accept)\n },\n 'video': function () {\n const accept = (this.quill as FluentEditor).uploader.options.mimetypes.filter((type) => {\n if (type === '*') return 'video/*'\n return type.startsWith('video/')\n })\n inputFile.call(this, 'video', accept)\n },\n 'ai': function () {},\n 'emoji': function () {},\n 'fullscreen': fullscreenHandler,\n [FormatPainter.toolName]: FormatPainter,\n [Screenshot.toolName]: Screenshot,\n 'line-height': function (value) {\n this.quill.format('line-height', value)\n },\n 'divider': function () {\n const range = this.quill.getSelection(true)\n this.quill.insertText(range.index, '\\n', FluentEditor.sources.USER)\n this.quill.insertEmbed(range.index + 1, 'divider', true, FluentEditor.sources.USER)\n this.quill.setSelection(range.index + 2, FluentEditor.sources.SILENT)\n },\n },\n },\n 'image': {\n specs: [CustomImageSpec],\n overlay: {\n style: {\n border: '1px dashed rgb(68, 68, 68)',\n },\n },\n },\n 'shortcut-key': true,\n 'file': true,\n },\n}\n\nconst ALIGNS = [false, 'center', 'right']\nconst COLORS = [\n '',\n 'rgb(255, 255, 255)',\n 'rgb(0, 0, 0)',\n 'rgb(72, 83, 104)',\n 'rgb(41, 114, 244)',\n 'rgb(0, 163, 245)',\n 'rgb(49, 155, 98)',\n 'rgb(222, 60, 54)',\n 'rgb(248, 136, 37)',\n 'rgb(245, 196, 0)',\n 'rgb(153, 56, 215)',\n\n 'rgb(242, 242, 242)',\n 'rgb(127, 127, 127)',\n 'rgb(243, 245, 247)',\n 'rgb(229, 239, 255)',\n 'rgb(229, 246, 255)',\n 'rgb(234, 250, 241)',\n 'rgb(254, 233, 232)',\n 'rgb(254, 243, 235)',\n 'rgb(254, 249, 227)',\n 'rgb(253, 235, 255)',\n\n 'rgb(216, 216, 216)',\n 'rgb(89, 89, 89)',\n 'rgb(197, 202, 211)',\n 'rgb(199, 220, 255)',\n 'rgb(199, 236, 255)',\n 'rgb(195, 234, 213)',\n 'rgb(255, 201, 199)',\n 'rgb(255, 220, 196)',\n 'rgb(255, 238, 173)',\n 'rgb(242, 199, 255)',\n\n 'rgb(191, 191, 191)',\n 'rgb(63, 63, 63)',\n 'rgb(128, 139, 158)',\n 'rgb(153, 190, 255)',\n 'rgb(153, 221, 255)',\n 'rgb(152, 215, 182)',\n 'rgb(255, 156, 153)',\n 'rgb(255, 186, 132)',\n 'rgb(255, 226, 112)',\n 'rgb(213, 142, 255)',\n\n 'rgb(165, 165, 165)',\n 'rgb(38, 38, 38)',\n 'rgb(53, 59, 69)',\n 'rgb(20, 80, 184)',\n 'rgb(18, 116, 165)',\n 'rgb(39, 124, 79)',\n 'rgb(158, 30, 26)',\n 'rgb(184, 96, 20)',\n 'rgb(163, 130, 0)',\n 'rgb(94, 34, 129)',\n\n 'rgb(147, 147, 147)',\n 'rgb(13, 13, 13)',\n 'rgb(36, 39, 46)',\n 'rgb(12, 48, 110)',\n 'rgb(10, 65, 92)',\n 'rgb(24, 78, 50)',\n 'rgb(88, 17, 14)',\n 'rgb(92, 48, 10)',\n 'rgb(102, 82, 0)',\n 'rgb(59, 21, 81)',\n\n 'custom',\n]\nconst FONTS = [false, 'serif', 'monospace']\nconst HEADERS = ['1', '2', '3', false]\nconst SIZES = ['small', false, 'large', 'huge']\nconst LINEHEIGHT = [false, '1.2', '1.5', '2']\n\nclass SnowTheme extends OriginSnowTheme {\n constructor(public quill: FluentEditor, options: ThemeOptions) {\n super(quill, options)\n\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\n this.i18nTextToolbar()\n })\n }\n\n i18nTextToolbar() {\n const toolbar = this.quill.getModule('toolbar') as TypeToolbar\n ColorPicker.clearText = this.quill.getLangText('clear-color')\n ColorPicker.customText = this.quill.getLangText('custom-color')\n\n if (!toolbar || !this.pickers) return\n\n this.pickers.forEach((picker) => {\n if (picker instanceof ColorPicker) {\n // EasyColorPicker have not dts. abd origin quill ColorPicker dts not complete. use any to resovle ts type error\n const colorPicker = picker as any\n colorPicker.options.remove()\n Array.from(colorPicker.select.options).forEach((option: any) => {\n if (option.hasAttribute('custom')) {\n option.remove()\n }\n })\n colorPicker.buildOptions()\n colorPicker.createUsedColor()\n }\n\n if (picker.select && picker.select.classList.contains('ql-header')) {\n const getLabelKey = (v: string | null) => (v ? `header-${v}` : 'header-normal')\n\n // 更新 label 文本\n const labelValue = picker.label.getAttribute('data-value')\n picker.label.setAttribute('data-label', this.quill.getLangText(getLabelKey(labelValue)))\n\n const select = picker.select as HTMLSelectElement\n Array.from(select.options).forEach((option) => {\n const value = option.getAttribute('value')\n option.textContent = this.quill.getLangText(getLabelKey(value))\n })\n\n picker.options.remove()\n picker.buildOptions()\n }\n })\n }\n\n buildPickers(selects: NodeListOf<HTMLSelectElement>, icons: Record<string, string | Record<string, string>>) {\n this.pickers = Array.from(selects).map((select) => {\n if (select.classList.contains('ql-align')) {\n if (isNullOrUndefined(select.querySelector('option'))) {\n fillSelect(select, ALIGNS)\n }\n return new IconPicker(select, icons.align as Record<string, string>)\n }\n\n if (select.classList.contains('ql-background') || select.classList.contains('ql-color')) {\n const format = select.classList.contains('ql-background') ? 'background' : 'color'\n if (isNullOrUndefined(select.querySelector('option'))) {\n fillColorSelect(select, COLORS, format, format === 'background' ? '#ffffff' : '#000000')\n }\n return new ColorPicker(select, icons[format] as string, {\n expandIcon: '<i class=\"icon\" />',\n closeAfterChange: false,\n })\n }\n\n if (isNullOrUndefined(select.querySelector('option'))) {\n if (select.classList.contains('ql-font')) {\n fillSelect(select, FONTS)\n }\n else if (select.classList.contains('ql-header')) {\n fillSelect(select, HEADERS)\n }\n else if (select.classList.contains('ql-size')) {\n fillSelect(select, SIZES)\n }\n else if (select.classList.contains('ql-line-height')) {\n fillSelect(select, LINEHEIGHT)\n }\n }\n return new Picker(select)\n })\n\n const update = () => {\n this.pickers.forEach((picker) => {\n if (picker instanceof ColorPicker) return\n picker.update()\n })\n }\n this.quill.on(FluentEditor.events.EDITOR_CHANGE, update)\n }\n\n extendToolbar(toolbar) {\n const icons = FluentEditor.import('ui/icons') as Record<string, any>\n toolbar.container.classList.add('ql-snow')\n this.buildButtons(toolbar.container.querySelectorAll('button'), icons)\n this.buildPickers(toolbar.container.querySelectorAll('select'), icons)\n this.tooltip = new LinkTooltip(this.quill, this.options.bounds)\n }\n}\n\nfunction fillSelect(select, values, defaultValue = false) {\n values.forEach((value) => {\n const option = document.createElement('option')\n if (value === defaultValue) {\n option.setAttribute('selected', 'selected')\n }\n else {\n option.setAttribute('value', value)\n }\n select.appendChild(option)\n })\n}\n\nfunction fillColorSelect(\n select: HTMLSelectElement,\n values: Array<string | boolean>,\n format: string,\n defaultValue: unknown = false,\n) {\n const colorGetter = document.createElement('span') as HTMLElement\n for (const value of values) {\n const option = document.createElement('option')\n if (value === defaultValue) {\n option.setAttribute('selected', 'selected')\n }\n else {\n if (value !== 'custom') {\n colorGetter.style[format] = String(value)\n option.setAttribute('value', colorGetter.style[format])\n }\n else {\n option.setAttribute('value', value)\n }\n }\n select.appendChild(option)\n }\n}\n\nexport default SnowTheme\n"],"names":["FluentEditor","shortKey","inputFile","fullscreenHandler","FormatPainter","Screenshot","CustomImageSpec","CHANGE_LANGUAGE_EVENT","ColorPicker","isNullOrUndefined","Picker","LinkTooltip"],"mappings":"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"}
@@ -12,9 +12,15 @@ function FormatPainter() {
12
12
  }
13
13
  const [, formatterBtn] = this.controls.find(([name]) => name === FormatPainter.toolName);
14
14
  const formatRange = (range) => {
15
+ var _a, _b, _c, _d;
15
16
  if (!range) return;
16
- this.quill.removeFormat(range.index, range.length);
17
+ const currentFormats = this.quill.getFormat(range);
18
+ for (const format in currentFormats) {
19
+ if ((_b = (_a = this.quill.options["format-painter"]) == null ? void 0 : _a.ignoreFormat) == null ? void 0 : _b.includes(format)) continue;
20
+ this.quill.format(format, null, Quill.sources.USER);
21
+ }
17
22
  for (const format in this.formatPainter.rangeFormat) {
23
+ if ((_d = (_c = this.quill.options["format-painter"]) == null ? void 0 : _c.ignoreFormat) == null ? void 0 : _d.includes(format)) continue;
18
24
  this.quill.format(format, this.formatPainter.rangeFormat[format], Quill.sources.USER);
19
25
  }
20
26
  if (!this.formatPainter.isFormatterLock) {
@@ -43,7 +49,7 @@ function FormatPainter() {
43
49
  };
44
50
  const unbindFormatSelect = () => {
45
51
  this.quill.off(Quill.events.SELECTION_CHANGE, formatRange);
46
- this.formatPainter.rangeFormat = void 0;
52
+ this.formatPainter.rangeFormat = {};
47
53
  btnRemoveActive();
48
54
  this.formatPainter.isFormating = false;
49
55
  this.formatPainter.isFormatterLock = false;
@@ -1 +1 @@
1
- {"version":3,"file":"format-painter.cjs.js","sources":["../../../src/tools/format-painter.ts"],"sourcesContent":["import type { Range } from 'quill'\r\nimport type Toolbar from 'quill/modules/toolbar'\r\nimport Quill from 'quill'\r\n\r\ninterface FormatData {\r\n formatPainter: {\r\n rangeFormat: Record<string, any>\r\n isFormatterLock: boolean\r\n isFormating: boolean\r\n prepareLock: boolean\r\n }\r\n}\r\nexport function FormatPainter(this: Toolbar & FormatData) {\r\n if (!this.formatPainter) {\r\n this.formatPainter = {\r\n rangeFormat: {},\r\n isFormatterLock: false,\r\n isFormating: false,\r\n prepareLock: false,\r\n }\r\n }\r\n const [, formatterBtn] = this.controls.find(([name]) => name === FormatPainter.toolName)\r\n const formatRange = (range: Range | null) => {\r\n if (!range) return\r\n this.quill.removeFormat(range.index, range.length)\r\n for (const format in this.formatPainter.rangeFormat) {\r\n this.quill.format(format, this.formatPainter.rangeFormat[format], Quill.sources.USER)\r\n }\r\n if (!this.formatPainter.isFormatterLock) {\r\n unbindFormatSelect()\r\n }\r\n else {\r\n btnActive()\r\n }\r\n }\r\n // setTime for Toolbar.update\r\n const btnActive = () => {\r\n setTimeout(() => {\r\n formatterBtn.classList.add('ql-active')\r\n }, 0)\r\n }\r\n const btnRemoveActive = () => {\r\n setTimeout(() => {\r\n formatterBtn.classList.remove('ql-active')\r\n }, 0)\r\n }\r\n const bindFormatSelect = () => {\r\n const range = this.quill.getSelection()\r\n if (range.length === 0) return\r\n this.formatPainter.rangeFormat = this.quill.getFormat(range)\r\n this.formatPainter.isFormating = true\r\n this.quill.on(Quill.events.SELECTION_CHANGE, formatRange)\r\n btnActive()\r\n }\r\n const unbindFormatSelect = () => {\r\n this.quill.off(Quill.events.SELECTION_CHANGE, formatRange)\r\n this.formatPainter.rangeFormat = undefined\r\n btnRemoveActive()\r\n this.formatPainter.isFormating = false\r\n this.formatPainter.isFormatterLock = false\r\n }\r\n\r\n if (this.formatPainter.isFormatterLock || (this.formatPainter.isFormating && !this.formatPainter.prepareLock)) {\r\n unbindFormatSelect()\r\n }\r\n else if (this.formatPainter.isFormating && this.formatPainter.prepareLock) {\r\n this.formatPainter.isFormatterLock = true\r\n btnActive()\r\n }\r\n else {\r\n // imitate double click\r\n this.formatPainter.prepareLock = true\r\n setTimeout(() => {\r\n this.formatPainter.prepareLock = false\r\n }, 200)\r\n bindFormatSelect()\r\n }\r\n}\r\nFormatPainter.toolName = 'format-painter'\r\n"],"names":[],"mappings":";;;AAYO,SAAS,gBAA0C;AACpD,MAAA,CAAC,KAAK,eAAe;AACvB,SAAK,gBAAgB;AAAA,MACnB,aAAa,CAAC;AAAA,MACd,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EAAA;AAEF,QAAM,GAAG,YAAY,IAAI,KAAK,SAAS,KAAK,CAAC,CAAC,IAAI,MAAM,SAAS,cAAc,QAAQ;AACjF,QAAA,cAAc,CAAC,UAAwB;AAC3C,QAAI,CAAC,MAAO;AACZ,SAAK,MAAM,aAAa,MAAM,OAAO,MAAM,MAAM;AACtC,eAAA,UAAU,KAAK,cAAc,aAAa;AAC9C,WAAA,MAAM,OAAO,QAAQ,KAAK,cAAc,YAAY,MAAM,GAAG,MAAM,QAAQ,IAAI;AAAA,IAAA;AAElF,QAAA,CAAC,KAAK,cAAc,iBAAiB;AACpB,yBAAA;AAAA,IAAA,OAEhB;AACO,gBAAA;AAAA,IAAA;AAAA,EAEd;AAEA,QAAM,YAAY,MAAM;AACtB,eAAW,MAAM;AACF,mBAAA,UAAU,IAAI,WAAW;AAAA,OACrC,CAAC;AAAA,EACN;AACA,QAAM,kBAAkB,MAAM;AAC5B,eAAW,MAAM;AACF,mBAAA,UAAU,OAAO,WAAW;AAAA,OACxC,CAAC;AAAA,EACN;AACA,QAAM,mBAAmB,MAAM;AACvB,UAAA,QAAQ,KAAK,MAAM,aAAa;AAClC,QAAA,MAAM,WAAW,EAAG;AACxB,SAAK,cAAc,cAAc,KAAK,MAAM,UAAU,KAAK;AAC3D,SAAK,cAAc,cAAc;AACjC,SAAK,MAAM,GAAG,MAAM,OAAO,kBAAkB,WAAW;AAC9C,cAAA;AAAA,EACZ;AACA,QAAM,qBAAqB,MAAM;AAC/B,SAAK,MAAM,IAAI,MAAM,OAAO,kBAAkB,WAAW;AACzD,SAAK,cAAc,cAAc;AACjB,oBAAA;AAChB,SAAK,cAAc,cAAc;AACjC,SAAK,cAAc,kBAAkB;AAAA,EACvC;AAEI,MAAA,KAAK,cAAc,mBAAoB,KAAK,cAAc,eAAe,CAAC,KAAK,cAAc,aAAc;AAC1F,uBAAA;AAAA,EAAA,WAEZ,KAAK,cAAc,eAAe,KAAK,cAAc,aAAa;AACzE,SAAK,cAAc,kBAAkB;AAC3B,cAAA;AAAA,EAAA,OAEP;AAEH,SAAK,cAAc,cAAc;AACjC,eAAW,MAAM;AACf,WAAK,cAAc,cAAc;AAAA,OAChC,GAAG;AACW,qBAAA;AAAA,EAAA;AAErB;AACA,cAAc,WAAW;;"}
1
+ {"version":3,"file":"format-painter.cjs.js","sources":["../../../src/tools/format-painter.ts"],"sourcesContent":["import type { Range } from 'quill'\r\nimport type Toolbar from 'quill/modules/toolbar'\r\nimport Quill from 'quill'\r\n\r\nexport interface FormatData {\r\n formatPainter: {\r\n rangeFormat: Record<string, any>\r\n isFormatterLock: boolean\r\n isFormating: boolean\r\n prepareLock: boolean\r\n }\r\n}\r\nexport function FormatPainter(this: Toolbar & FormatData) {\r\n if (!this.formatPainter) {\r\n this.formatPainter = {\r\n rangeFormat: {},\r\n isFormatterLock: false,\r\n isFormating: false,\r\n prepareLock: false,\r\n }\r\n }\r\n const [, formatterBtn] = this.controls.find(([name]) => name === FormatPainter.toolName)\r\n const formatRange = (range: Range | null) => {\r\n if (!range) return\r\n const currentFormats = this.quill.getFormat(range)\r\n for (const format in currentFormats) {\r\n if (this.quill.options['format-painter']?.ignoreFormat?.includes(format)) continue\r\n this.quill.format(format, null, Quill.sources.USER)\r\n }\r\n\r\n for (const format in this.formatPainter.rangeFormat) {\r\n if (this.quill.options['format-painter']?.ignoreFormat?.includes(format)) continue\r\n this.quill.format(format, this.formatPainter.rangeFormat[format], Quill.sources.USER)\r\n }\r\n if (!this.formatPainter.isFormatterLock) {\r\n unbindFormatSelect()\r\n }\r\n else {\r\n btnActive()\r\n }\r\n }\r\n // setTime for Toolbar.update\r\n const btnActive = () => {\r\n setTimeout(() => {\r\n formatterBtn.classList.add('ql-active')\r\n }, 0)\r\n }\r\n const btnRemoveActive = () => {\r\n setTimeout(() => {\r\n formatterBtn.classList.remove('ql-active')\r\n }, 0)\r\n }\r\n const bindFormatSelect = () => {\r\n const range = this.quill.getSelection()\r\n if (range.length === 0) return\r\n this.formatPainter.rangeFormat = this.quill.getFormat(range)\r\n this.formatPainter.isFormating = true\r\n this.quill.on(Quill.events.SELECTION_CHANGE, formatRange)\r\n btnActive()\r\n }\r\n const unbindFormatSelect = () => {\r\n this.quill.off(Quill.events.SELECTION_CHANGE, formatRange)\r\n this.formatPainter.rangeFormat = {}\r\n btnRemoveActive()\r\n this.formatPainter.isFormating = false\r\n this.formatPainter.isFormatterLock = false\r\n }\r\n\r\n if (this.formatPainter.isFormatterLock || (this.formatPainter.isFormating && !this.formatPainter.prepareLock)) {\r\n unbindFormatSelect()\r\n }\r\n else if (this.formatPainter.isFormating && this.formatPainter.prepareLock) {\r\n this.formatPainter.isFormatterLock = true\r\n btnActive()\r\n }\r\n else {\r\n // imitate double click\r\n this.formatPainter.prepareLock = true\r\n setTimeout(() => {\r\n this.formatPainter.prepareLock = false\r\n }, 200)\r\n bindFormatSelect()\r\n }\r\n}\r\nFormatPainter.toolName = 'format-painter'\r\n"],"names":[],"mappings":";;;AAYO,SAAS,gBAA0C;AACpD,MAAA,CAAC,KAAK,eAAe;AACvB,SAAK,gBAAgB;AAAA,MACnB,aAAa,CAAC;AAAA,MACd,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EAAA;AAEF,QAAM,GAAG,YAAY,IAAI,KAAK,SAAS,KAAK,CAAC,CAAC,IAAI,MAAM,SAAS,cAAc,QAAQ;AACjF,QAAA,cAAc,CAAC,UAAwB;;AAC3C,QAAI,CAAC,MAAO;AACZ,UAAM,iBAAiB,KAAK,MAAM,UAAU,KAAK;AACjD,eAAW,UAAU,gBAAgB;AAC/B,WAAA,gBAAK,MAAM,QAAQ,gBAAgB,MAAnC,mBAAsC,iBAAtC,mBAAoD,SAAS,QAAS;AAC1E,WAAK,MAAM,OAAO,QAAQ,MAAM,MAAM,QAAQ,IAAI;AAAA,IAAA;AAGzC,eAAA,UAAU,KAAK,cAAc,aAAa;AAC/C,WAAA,gBAAK,MAAM,QAAQ,gBAAgB,MAAnC,mBAAsC,iBAAtC,mBAAoD,SAAS,QAAS;AACrE,WAAA,MAAM,OAAO,QAAQ,KAAK,cAAc,YAAY,MAAM,GAAG,MAAM,QAAQ,IAAI;AAAA,IAAA;AAElF,QAAA,CAAC,KAAK,cAAc,iBAAiB;AACpB,yBAAA;AAAA,IAAA,OAEhB;AACO,gBAAA;AAAA,IAAA;AAAA,EAEd;AAEA,QAAM,YAAY,MAAM;AACtB,eAAW,MAAM;AACF,mBAAA,UAAU,IAAI,WAAW;AAAA,OACrC,CAAC;AAAA,EACN;AACA,QAAM,kBAAkB,MAAM;AAC5B,eAAW,MAAM;AACF,mBAAA,UAAU,OAAO,WAAW;AAAA,OACxC,CAAC;AAAA,EACN;AACA,QAAM,mBAAmB,MAAM;AACvB,UAAA,QAAQ,KAAK,MAAM,aAAa;AAClC,QAAA,MAAM,WAAW,EAAG;AACxB,SAAK,cAAc,cAAc,KAAK,MAAM,UAAU,KAAK;AAC3D,SAAK,cAAc,cAAc;AACjC,SAAK,MAAM,GAAG,MAAM,OAAO,kBAAkB,WAAW;AAC9C,cAAA;AAAA,EACZ;AACA,QAAM,qBAAqB,MAAM;AAC/B,SAAK,MAAM,IAAI,MAAM,OAAO,kBAAkB,WAAW;AACpD,SAAA,cAAc,cAAc,CAAC;AAClB,oBAAA;AAChB,SAAK,cAAc,cAAc;AACjC,SAAK,cAAc,kBAAkB;AAAA,EACvC;AAEI,MAAA,KAAK,cAAc,mBAAoB,KAAK,cAAc,eAAe,CAAC,KAAK,cAAc,aAAc;AAC1F,uBAAA;AAAA,EAAA,WAEZ,KAAK,cAAc,eAAe,KAAK,cAAc,aAAa;AACzE,SAAK,cAAc,kBAAkB;AAC3B,cAAA;AAAA,EAAA,OAEP;AAEH,SAAK,cAAc,cAAc;AACjC,eAAW,MAAM;AACf,WAAK,cAAc,cAAc;AAAA,OAChC,GAAG;AACW,qBAAA;AAAA,EAAA;AAErB;AACA,cAAc,WAAW;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"fullscreen.cjs.js","sources":["../../../src/tools/fullscreen.ts"],"sourcesContent":["import type { FluentEditorToolbar } from '../config/types'\r\nimport { namespace } from '../config'\r\nimport { ICONS_CONFIG } from '../ui/icons'\r\nimport { lockScroll } from '../utils/scroll-lock'\r\n\r\nlet exitEscHandlerBindToolbar: (e: KeyboardEvent) => void\r\nlet resizeHandlerBindToolbar: () => void\r\nlet cleanLock: ReturnType<typeof lockScroll>\r\nlet originScrollTop = 0\r\nfunction exitEscHandler(toolbar: FluentEditorToolbar, e: KeyboardEvent) {\r\n if (e.code === 'Escape') {\r\n exitFullscreen(toolbar)\r\n }\r\n}\r\nfunction updateToolbarHeight(toolbar: FluentEditorToolbar) {\r\n const toolbarRect = toolbar.container.getBoundingClientRect()\r\n toolbar.quill.container.style.setProperty(`--${namespace}-top`, `${toolbarRect.height}px`)\r\n}\r\nfunction intoFullscreen(toolbar: FluentEditorToolbar) {\r\n toolbar.quill.isFullscreen = true\r\n originScrollTop = document.documentElement.scrollTop\r\n toolbar.container.classList.add('fullscreen')\r\n toolbar.quill.container.classList.add('fullscreen')\r\n cleanLock = lockScroll()\r\n resizeHandlerBindToolbar()\r\n const [, btn] = toolbar.controls.find(item => item[0] === 'fullscreen')\r\n btn.innerHTML = ICONS_CONFIG['fullscreen-exit']\r\n window.addEventListener('resize', resizeHandlerBindToolbar)\r\n document.addEventListener('keydown', exitEscHandlerBindToolbar)\r\n // TODO: clear hard code\r\n const toolbarTipModule = toolbar.quill.getModule('toolbar-tip') as any\r\n if (toolbarTipModule) {\r\n toolbarTipModule.hideAllTips()\r\n }\r\n}\r\nfunction exitFullscreen(toolbar: FluentEditorToolbar) {\r\n toolbar.quill.isFullscreen = false\r\n toolbar.container.classList.remove('fullscreen')\r\n toolbar.quill.container.classList.remove('fullscreen')\r\n cleanLock()\r\n document.documentElement.scrollTop = originScrollTop\r\n const [, btn] = toolbar.controls.find(item => item[0] === 'fullscreen')\r\n btn.innerHTML = ICONS_CONFIG.fullscreen\r\n window.removeEventListener('resize', resizeHandlerBindToolbar)\r\n document.removeEventListener('keydown', exitEscHandlerBindToolbar)\r\n // TODO: clear hard code\r\n const toolbarTipModule = toolbar.quill.getModule('toolbar-tip') as any\r\n if (toolbarTipModule) {\r\n toolbarTipModule.hideAllTips()\r\n }\r\n}\r\nexport function fullscreenHandler(this: FluentEditorToolbar) {\r\n if (this.quill.isFullscreen) {\r\n exitFullscreen(this)\r\n }\r\n else {\r\n exitEscHandlerBindToolbar = exitEscHandler.bind(undefined, this)\r\n resizeHandlerBindToolbar = updateToolbarHeight.bind(undefined, this)\r\n intoFullscreen(this)\r\n }\r\n}\r\n"],"names":["namespace","lockScroll","ICONS_CONFIG"],"mappings":";;;;;AAKA,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI,kBAAkB;AACtB,SAAS,eAAe,SAA8B,GAAkB;AAClE,MAAA,EAAE,SAAS,UAAU;AACvB,mBAAe,OAAO;AAAA,EAAA;AAE1B;AACA,SAAS,oBAAoB,SAA8B;AACnD,QAAA,cAAc,QAAQ,UAAU,sBAAsB;AACpD,UAAA,MAAM,UAAU,MAAM,YAAY,KAAKA,eAAS,QAAQ,GAAG,YAAY,MAAM,IAAI;AAC3F;AACA,SAAS,eAAe,SAA8B;AACpD,UAAQ,MAAM,eAAe;AAC7B,oBAAkB,SAAS,gBAAgB;AACnC,UAAA,UAAU,UAAU,IAAI,YAAY;AAC5C,UAAQ,MAAM,UAAU,UAAU,IAAI,YAAY;AAClD,cAAYC,WAAAA,WAAW;AACE,2BAAA;AACnB,QAAA,GAAG,GAAG,IAAI,QAAQ,SAAS,KAAK,CAAQ,SAAA,KAAK,CAAC,MAAM,YAAY;AAClE,MAAA,YAAYC,mBAAa,iBAAiB;AACvC,SAAA,iBAAiB,UAAU,wBAAwB;AACjD,WAAA,iBAAiB,WAAW,yBAAyB;AAE9D,QAAM,mBAAmB,QAAQ,MAAM,UAAU,aAAa;AAC9D,MAAI,kBAAkB;AACpB,qBAAiB,YAAY;AAAA,EAAA;AAEjC;AACA,SAAS,eAAe,SAA8B;AACpD,UAAQ,MAAM,eAAe;AACrB,UAAA,UAAU,UAAU,OAAO,YAAY;AAC/C,UAAQ,MAAM,UAAU,UAAU,OAAO,YAAY;AAC3C,YAAA;AACV,WAAS,gBAAgB,YAAY;AAC/B,QAAA,GAAG,GAAG,IAAI,QAAQ,SAAS,KAAK,CAAQ,SAAA,KAAK,CAAC,MAAM,YAAY;AACtE,MAAI,YAAYA,MAAAA,aAAa;AACtB,SAAA,oBAAoB,UAAU,wBAAwB;AACpD,WAAA,oBAAoB,WAAW,yBAAyB;AAEjE,QAAM,mBAAmB,QAAQ,MAAM,UAAU,aAAa;AAC9D,MAAI,kBAAkB;AACpB,qBAAiB,YAAY;AAAA,EAAA;AAEjC;AACO,SAAS,oBAA6C;AACvD,MAAA,KAAK,MAAM,cAAc;AAC3B,mBAAe,IAAI;AAAA,EAAA,OAEhB;AACyB,gCAAA,eAAe,KAAK,QAAW,IAAI;AACpC,+BAAA,oBAAoB,KAAK,QAAW,IAAI;AACnE,mBAAe,IAAI;AAAA,EAAA;AAEvB;;"}
1
+ {"version":3,"file":"fullscreen.cjs.js","sources":["../../../src/tools/fullscreen.ts"],"sourcesContent":["import type Toolbar from 'quill/modules/toolbar'\r\nimport type FluentEditor from '../core/fluent-editor'\r\nimport { namespace } from '../config'\r\nimport { ICONS_CONFIG } from '../ui/icons'\r\nimport { lockScroll } from '../utils/scroll-lock'\r\n\r\nexport interface FluentEditorToolbar extends Toolbar {\r\n quill: FluentEditor\r\n}\r\n\r\nlet exitEscHandlerBindToolbar: (e: KeyboardEvent) => void\r\nlet resizeHandlerBindToolbar: () => void\r\nlet cleanLock: ReturnType<typeof lockScroll>\r\nlet originScrollTop = 0\r\nfunction exitEscHandler(toolbar: FluentEditorToolbar, e: KeyboardEvent) {\r\n if (e.code === 'Escape') {\r\n exitFullscreen(toolbar)\r\n }\r\n}\r\nfunction updateToolbarHeight(toolbar: FluentEditorToolbar) {\r\n const toolbarRect = toolbar.container.getBoundingClientRect()\r\n toolbar.quill.container.style.setProperty(`--${namespace}-top`, `${toolbarRect.height}px`)\r\n}\r\nfunction intoFullscreen(toolbar: FluentEditorToolbar) {\r\n toolbar.quill.isFullscreen = true\r\n originScrollTop = document.documentElement.scrollTop\r\n toolbar.container.classList.add('fullscreen')\r\n toolbar.quill.container.classList.add('fullscreen')\r\n cleanLock = lockScroll()\r\n resizeHandlerBindToolbar()\r\n const [, btn] = toolbar.controls.find(item => item[0] === 'fullscreen')\r\n btn.innerHTML = ICONS_CONFIG['fullscreen-exit']\r\n window.addEventListener('resize', resizeHandlerBindToolbar)\r\n document.addEventListener('keydown', exitEscHandlerBindToolbar)\r\n // TODO: clear hard code\r\n const toolbarTipModule = toolbar.quill.getModule('toolbar-tip') as any\r\n if (toolbarTipModule) {\r\n toolbarTipModule.hideAllTips()\r\n }\r\n}\r\nfunction exitFullscreen(toolbar: FluentEditorToolbar) {\r\n toolbar.quill.isFullscreen = false\r\n toolbar.container.classList.remove('fullscreen')\r\n toolbar.quill.container.classList.remove('fullscreen')\r\n cleanLock()\r\n document.documentElement.scrollTop = originScrollTop\r\n const [, btn] = toolbar.controls.find(item => item[0] === 'fullscreen')\r\n btn.innerHTML = ICONS_CONFIG.fullscreen\r\n window.removeEventListener('resize', resizeHandlerBindToolbar)\r\n document.removeEventListener('keydown', exitEscHandlerBindToolbar)\r\n // TODO: clear hard code\r\n const toolbarTipModule = toolbar.quill.getModule('toolbar-tip') as any\r\n if (toolbarTipModule) {\r\n toolbarTipModule.hideAllTips()\r\n }\r\n}\r\nexport function fullscreenHandler(this: FluentEditorToolbar) {\r\n if (this.quill.isFullscreen) {\r\n exitFullscreen(this)\r\n }\r\n else {\r\n exitEscHandlerBindToolbar = exitEscHandler.bind(undefined, this)\r\n resizeHandlerBindToolbar = updateToolbarHeight.bind(undefined, this)\r\n intoFullscreen(this)\r\n }\r\n}\r\n"],"names":["namespace","lockScroll","ICONS_CONFIG"],"mappings":";;;;;AAUA,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI,kBAAkB;AACtB,SAAS,eAAe,SAA8B,GAAkB;AAClE,MAAA,EAAE,SAAS,UAAU;AACvB,mBAAe,OAAO;AAAA,EAAA;AAE1B;AACA,SAAS,oBAAoB,SAA8B;AACnD,QAAA,cAAc,QAAQ,UAAU,sBAAsB;AACpD,UAAA,MAAM,UAAU,MAAM,YAAY,KAAKA,eAAS,QAAQ,GAAG,YAAY,MAAM,IAAI;AAC3F;AACA,SAAS,eAAe,SAA8B;AACpD,UAAQ,MAAM,eAAe;AAC7B,oBAAkB,SAAS,gBAAgB;AACnC,UAAA,UAAU,UAAU,IAAI,YAAY;AAC5C,UAAQ,MAAM,UAAU,UAAU,IAAI,YAAY;AAClD,cAAYC,WAAAA,WAAW;AACE,2BAAA;AACnB,QAAA,GAAG,GAAG,IAAI,QAAQ,SAAS,KAAK,CAAQ,SAAA,KAAK,CAAC,MAAM,YAAY;AAClE,MAAA,YAAYC,mBAAa,iBAAiB;AACvC,SAAA,iBAAiB,UAAU,wBAAwB;AACjD,WAAA,iBAAiB,WAAW,yBAAyB;AAE9D,QAAM,mBAAmB,QAAQ,MAAM,UAAU,aAAa;AAC9D,MAAI,kBAAkB;AACpB,qBAAiB,YAAY;AAAA,EAAA;AAEjC;AACA,SAAS,eAAe,SAA8B;AACpD,UAAQ,MAAM,eAAe;AACrB,UAAA,UAAU,UAAU,OAAO,YAAY;AAC/C,UAAQ,MAAM,UAAU,UAAU,OAAO,YAAY;AAC3C,YAAA;AACV,WAAS,gBAAgB,YAAY;AAC/B,QAAA,GAAG,GAAG,IAAI,QAAQ,SAAS,KAAK,CAAQ,SAAA,KAAK,CAAC,MAAM,YAAY;AACtE,MAAI,YAAYA,MAAAA,aAAa;AACtB,SAAA,oBAAoB,UAAU,wBAAwB;AACpD,WAAA,oBAAoB,WAAW,yBAAyB;AAEjE,QAAM,mBAAmB,QAAQ,MAAM,UAAU,aAAa;AAC9D,MAAI,kBAAkB;AACpB,qBAAiB,YAAY;AAAA,EAAA;AAEjC;AACO,SAAS,oBAA6C;AACvD,MAAA,KAAK,MAAM,cAAc;AAC3B,mBAAe,IAAI;AAAA,EAAA,OAEhB;AACyB,gCAAA,eAAe,KAAK,QAAW,IAAI;AACpC,+BAAA,oBAAoB,KAAK,QAAW,IAAI;AACnE,mBAAe,IAAI;AAAA,EAAA;AAEvB;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot.cjs.js","sources":["../../../src/tools/screenshot.ts"],"sourcesContent":["import type html2canvas from 'html2canvas'\r\nimport type { Options as Html2CanvasOptions } from 'html2canvas'\r\nimport type Toolbar from 'quill/modules/toolbar'\r\nimport Quill from 'quill'\r\nimport { imgToBase64 } from '../utils/image'\r\nimport { lockScroll } from '../utils/scroll-lock'\r\n\r\nconst Delta = Quill.import('delta')\r\n\r\nexport type ScreenShotOptions = Partial<Html2CanvasOptions> & {\r\n Html2Canvas: typeof html2canvas\r\n beforeCreateCanvas: () => void | Promise<void>\r\n beforeCreateImage: (canvas: HTMLCanvasElement) => HTMLCanvasElement | string | Promise<HTMLCanvasElement | string>\r\n}\r\ninterface ScreenShotOptionsInQuill {\r\n quill: {\r\n options: {\r\n screenshot: Partial<ScreenShotOptions>\r\n }\r\n }\r\n}\r\n\r\nfunction resolveOptions(options: Partial<ScreenShotOptions>) {\r\n return Object.assign({\r\n // @ts-ignore\r\n Html2Canvas: window.Html2Canvas,\r\n useCORS: true,\r\n scale: 1,\r\n foreignObjectRendering: true,\r\n beforeCreateImage: undefined,\r\n beforeCreateCanvas: undefined,\r\n }, options)\r\n}\r\n\r\nfunction init() {\r\n const maskExits = document.querySelectorAll('.ql-screenshot-mask')\r\n if (maskExits) {\r\n maskExits.forEach(item => item && item.remove())\r\n }\r\n // 创建截图图层\r\n const wrapper = document.createElement('div')\r\n wrapper.classList.add('ql-screenshot-wrapper')\r\n const mask = document.createElement('div')\r\n mask.className = 'ql-screenshot-mask'\r\n const cutter = document.createElement('div')\r\n cutter.className = 'ql-screenshot-cutter'\r\n const coordinate = document.createElement('p')\r\n coordinate.className = 'ql-screenshot-coordinate'\r\n cutter.appendChild(coordinate)\r\n wrapper.appendChild(mask)\r\n wrapper.appendChild(cutter)\r\n document.body.appendChild(wrapper)\r\n return { wrapper, mask, cutter, coordinate }\r\n}\r\n\r\nfunction findParentFixed(dom: HTMLElement) {\r\n if (dom.tagName === 'BODY') return false\r\n if (['fixed', 'sticky'].includes(dom.parentElement.style.position)) return true\r\n return findParentFixed(dom.parentElement)\r\n}\r\nasync function renderImage(\r\n Html2Canvas: typeof html2canvas,\r\n html2canvasOptions: Partial<Html2CanvasOptions>,\r\n rect: DOMRect,\r\n options?: Omit<ScreenShotOptions, 'Html2Canvas' | keyof Html2CanvasOptions>,\r\n) {\r\n if (options && options.beforeCreateCanvas) {\r\n await options.beforeCreateCanvas()\r\n }\r\n const canvas: CanvasImageSource = await Html2Canvas(document.body, {\r\n ...html2canvasOptions,\r\n onclone: async (doc: Document, el: HTMLElement) => {\r\n // find all fixed or sticky dom\r\n const fixedDom = Array.from(doc.querySelectorAll('*[style*=\"position: fixed\"]')) as HTMLElement[]\r\n const stickyDom = Array.from(doc.querySelectorAll('*[style*=\"position: sticky\"]')) as HTMLElement[]\r\n const fixedDomList = new Set([...fixedDom, ...stickyDom])\r\n for (const dom of fixedDomList) {\r\n // if parent dom already has fixed or sticky style\r\n // means that transform will be settle. skip\r\n if (findParentFixed(dom)) continue\r\n // use transform move to correct position\r\n let x = 0\r\n let y = 0\r\n if (dom.style.top !== 'auto') {\r\n y = window.scrollY\r\n }\r\n if (dom.style.left !== 'auto') {\r\n x = window.scrollX\r\n }\r\n if (x !== 0 || y !== 0) {\r\n dom.style.transform = `translate(${x}px, ${y}px)`\r\n }\r\n }\r\n\r\n const imgs = doc.querySelectorAll('img')\r\n const promises = Array.from(imgs).map(async (img) => {\r\n img.src = await imgToBase64(img.src)\r\n })\r\n await Promise.all(promises)\r\n html2canvasOptions.onclone && await html2canvasOptions.onclone(doc, el)\r\n },\r\n })\r\n // 当前canvas为body全局截图,从当前截图中截取想要的部分重新绘制转成base64插入富文本\r\n let cropCanvas: HTMLCanvasElement | string = document.createElement('canvas')\r\n cropCanvas.width = rect.width\r\n cropCanvas.height = rect.height\r\n const cropCanvasCtx = cropCanvas.getContext('2d')\r\n cropCanvasCtx.drawImage(\r\n canvas,\r\n rect.x + window.scrollX,\r\n rect.y + window.scrollY,\r\n rect.width,\r\n rect.height,\r\n 0,\r\n 0,\r\n rect.width,\r\n rect.height,\r\n )\r\n if (options && options.beforeCreateImage) {\r\n cropCanvas = await options.beforeCreateImage(cropCanvas)\r\n }\r\n return typeof cropCanvas === 'string' ? cropCanvas : cropCanvas.toDataURL()\r\n}\r\n\r\nexport function Screenshot(this: Toolbar & ScreenShotOptionsInQuill) {\r\n this.quill.options.screenshot = resolveOptions(this.quill.options.screenshot)\r\n const options = this.quill.options.screenshot\r\n // @ts-ignore\r\n const { Html2Canvas, beforeCreateImage, beforeCreateCanvas, ...html2CanvasOptions } = options\r\n if (!Html2Canvas) {\r\n throw new Error('ScreenShot module requires html2canvas. Please include the library on the page before FluentEditor.')\r\n }\r\n const range = this.quill.getSelection()\r\n const { wrapper, mask, cutter, coordinate } = init()\r\n const status: {\r\n leftClickLockFlag: boolean\r\n start?: {\r\n x: number\r\n y: number\r\n }\r\n } = {\r\n leftClickLockFlag: false,\r\n start: undefined,\r\n }\r\n const cleanLock = lockScroll()\r\n\r\n const removeContextmenu = (event: Event) => {\r\n event.preventDefault()\r\n wrapper.remove()\r\n cleanLock()\r\n document.removeEventListener('contextmenu', removeContextmenu)\r\n }\r\n const afterShotCtrl = async (event: MouseEvent) => {\r\n document.removeEventListener('mousedown', toggleRect)\r\n const cutterRect = cutter.getBoundingClientRect()\r\n const target = event.target as HTMLElement\r\n wrapper.remove()\r\n cleanLock()\r\n if (target && target.className === 'ql-screenshot-confirm') {\r\n const image = await renderImage(Html2Canvas, html2CanvasOptions, cutterRect, { beforeCreateCanvas, beforeCreateImage })\r\n\r\n const delta = new Delta()\r\n .retain(range.index)\r\n .delete(range.length)\r\n .insert({ image })\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT)\r\n }\r\n status.start = undefined\r\n }\r\n const drawRect = (event: MouseEvent) => {\r\n // 通过鼠标移动描绘截图图层\r\n const startX = status.start.x\r\n const startY = status.start.y\r\n const endX = event.clientX\r\n const endY = event.clientY\r\n const width = Math.abs(endX - startX)\r\n const height = Math.abs(endY - startY)\r\n const top = startY < endY ? startY : endY\r\n const left = startX < endX ? startX : endX\r\n const bottom = window.innerHeight - height - top\r\n const right = window.innerWidth - width - left\r\n\r\n const maskPath = `\r\n linear-gradient(to top, #fff, #fff) top / 100% ${top}px,\r\n linear-gradient(to bottom, #fff, #fff) bottom /100% ${bottom}px,\r\n linear-gradient(to left, #fff, #fff) left / ${left}px 100%,\r\n linear-gradient(to right, #fff, #fff) right / ${right}px 100%\r\n `\r\n Object.assign(cutter.style, {\r\n width: `${width}px`,\r\n height: `${height}px`,\r\n left: `${left}px`,\r\n top: `${top}px`,\r\n })\r\n Object.assign(mask.style, {\r\n 'mask': maskPath,\r\n '-webkit-mask-repeat': 'no-repeat',\r\n })\r\n coordinate.textContent = `${width}, ${height}`\r\n }\r\n const toggleRect = (event: MouseEvent) => {\r\n // 右键取消截图操作\r\n if (event.button === 2) {\r\n document.removeEventListener('mousemove', drawRect)\r\n document.removeEventListener('mousedown', toggleRect)\r\n document.addEventListener('contextmenu', removeContextmenu)\r\n return\r\n }\r\n if (!status.leftClickLockFlag) {\r\n if (status.start) {\r\n // 如果有起点,则当前触发坐标为终点,移除监听事件并添加确认和取消按钮\r\n document.removeEventListener('mousemove', drawRect)\r\n const doneBtn = document.createElement('div')\r\n doneBtn.innerHTML = `<div class=\"ql-screenshot-confirm\"></div><div class=\"ql-screenshot-cancel\"></div>`\r\n doneBtn.className = 'ql-screenshot-done'\r\n doneBtn.addEventListener('click', afterShotCtrl)\r\n coordinate.remove()\r\n cutter.appendChild(doneBtn)\r\n status.leftClickLockFlag = true\r\n }\r\n else {\r\n // 无起点则设置起点坐标,监听鼠标移动\r\n status.start = { x: event.clientX, y: event.clientY }\r\n document.addEventListener('mousemove', drawRect)\r\n }\r\n }\r\n }\r\n document.addEventListener('mousedown', toggleRect)\r\n}\r\nScreenshot.toolName = 'screenshot'\r\n"],"names":["imgToBase64","lockScroll","image"],"mappings":"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"}
1
+ {"version":3,"file":"screenshot.cjs.js","sources":["../../../src/tools/screenshot.ts"],"sourcesContent":["import type html2canvas from 'html2canvas'\nimport type { Options as Html2CanvasOptions } from 'html2canvas'\nimport type Toolbar from 'quill/modules/toolbar'\nimport Quill from 'quill'\nimport { imgToBase64 } from '../utils/image'\nimport { lockScroll } from '../utils/scroll-lock'\n\nconst Delta = Quill.import('delta')\n\nexport type ScreenShotOptions = Partial<Html2CanvasOptions> & {\n Html2Canvas: typeof html2canvas\n beforeCreateCanvas: () => void | Promise<void>\n beforeCreateImage: (canvas: HTMLCanvasElement) => HTMLCanvasElement | string | Promise<HTMLCanvasElement | string>\n}\ninterface ScreenShotOptionsInQuill {\n quill: {\n options: {\n screenshot: Partial<ScreenShotOptions>\n }\n }\n}\n\nfunction resolveOptions(options: Partial<ScreenShotOptions>) {\n return Object.assign({\n // @ts-ignore\n Html2Canvas: window.Html2Canvas,\n useCORS: true,\n scale: 1,\n foreignObjectRendering: true,\n beforeCreateImage: undefined,\n beforeCreateCanvas: undefined,\n }, options)\n}\n\nfunction init() {\n const maskExits = document.querySelectorAll('.ql-screenshot-mask')\n if (maskExits) {\n maskExits.forEach(item => item && item.remove())\n }\n // 创建截图图层\n const wrapper = document.createElement('div')\n wrapper.classList.add('ql-screenshot-wrapper')\n const mask = document.createElement('div')\n mask.className = 'ql-screenshot-mask'\n const cutter = document.createElement('div')\n cutter.className = 'ql-screenshot-cutter'\n const coordinate = document.createElement('p')\n coordinate.className = 'ql-screenshot-coordinate'\n cutter.appendChild(coordinate)\n wrapper.appendChild(mask)\n wrapper.appendChild(cutter)\n document.body.appendChild(wrapper)\n return { wrapper, mask, cutter, coordinate }\n}\n\nfunction findParentFixed(dom: HTMLElement) {\n if (dom.tagName === 'BODY') return false\n if (['fixed', 'sticky'].includes(dom.parentElement.style.position)) return true\n return findParentFixed(dom.parentElement)\n}\nasync function renderImage(\n Html2Canvas: typeof html2canvas,\n html2canvasOptions: Partial<Html2CanvasOptions>,\n rect: DOMRect,\n options?: Omit<ScreenShotOptions, 'Html2Canvas' | keyof Html2CanvasOptions>,\n) {\n if (options && options.beforeCreateCanvas) {\n await options.beforeCreateCanvas()\n }\n const canvas: CanvasImageSource = await Html2Canvas(document.body, {\n ...html2canvasOptions,\n onclone: async (doc: Document, el: HTMLElement) => {\n // find all fixed or sticky dom\n const fixedDom = Array.from(doc.querySelectorAll('*[style*=\"position: fixed\"]')) as HTMLElement[]\n const stickyDom = Array.from(doc.querySelectorAll('*[style*=\"position: sticky\"]')) as HTMLElement[]\n const fixedDomList = new Set([...fixedDom, ...stickyDom])\n for (const dom of fixedDomList) {\n // if parent dom already has fixed or sticky style\n // means that transform will be settle. skip\n if (findParentFixed(dom)) continue\n // use transform move to correct position\n let x = 0\n let y = 0\n if (dom.style.top !== 'auto') {\n y = window.scrollY\n }\n if (dom.style.left !== 'auto') {\n x = window.scrollX\n }\n if (x !== 0 || y !== 0) {\n dom.style.transform = `translate(${x}px, ${y}px)`\n }\n }\n\n const imgs = doc.querySelectorAll('img')\n const promises = Array.from(imgs).map(async (img) => {\n img.src = await imgToBase64(img.src)\n })\n await Promise.all(promises)\n html2canvasOptions.onclone && await html2canvasOptions.onclone(doc, el)\n },\n })\n // 当前canvas为body全局截图,从当前截图中截取想要的部分重新绘制转成base64插入富文本\n let cropCanvas: HTMLCanvasElement | string = document.createElement('canvas')\n cropCanvas.width = rect.width\n cropCanvas.height = rect.height\n const cropCanvasCtx = cropCanvas.getContext('2d')\n cropCanvasCtx.drawImage(\n canvas,\n rect.x + window.scrollX,\n rect.y + window.scrollY,\n rect.width,\n rect.height,\n 0,\n 0,\n rect.width,\n rect.height,\n )\n if (options && options.beforeCreateImage) {\n cropCanvas = await options.beforeCreateImage(cropCanvas)\n }\n return typeof cropCanvas === 'string' ? cropCanvas : cropCanvas.toDataURL()\n}\n\nexport function Screenshot(this: Toolbar & ScreenShotOptionsInQuill) {\n this.quill.options.screenshot = resolveOptions(this.quill.options.screenshot)\n const options = this.quill.options.screenshot\n // @ts-ignore\n const { Html2Canvas, beforeCreateImage, beforeCreateCanvas, ...html2CanvasOptions } = options\n if (!Html2Canvas) {\n throw new Error('ScreenShot module requires html2canvas. Please include the library on the page before FluentEditor.')\n }\n const range = this.quill.getSelection()\n const { wrapper, mask, cutter, coordinate } = init()\n const status: {\n leftClickLockFlag: boolean\n start?: {\n x: number\n y: number\n }\n } = {\n leftClickLockFlag: false,\n start: undefined,\n }\n const cleanLock = lockScroll()\n\n const removeContextmenu = (event: Event) => {\n event.preventDefault()\n wrapper.remove()\n cleanLock()\n document.removeEventListener('contextmenu', removeContextmenu)\n }\n const afterShotCtrl = async (event: MouseEvent) => {\n document.removeEventListener('mousedown', toggleRect)\n const cutterRect = cutter.getBoundingClientRect()\n const target = event.target as HTMLElement\n wrapper.remove()\n cleanLock()\n if (target && target.className === 'ql-screenshot-confirm') {\n const image = await renderImage(Html2Canvas, html2CanvasOptions, cutterRect, { beforeCreateCanvas, beforeCreateImage })\n\n const delta = new Delta()\n .retain(range.index)\n .delete(range.length)\n .insert({ image })\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT)\n }\n status.start = undefined\n }\n const drawRect = (event: MouseEvent) => {\n // 通过鼠标移动描绘截图图层\n const startX = status.start.x\n const startY = status.start.y\n const endX = event.clientX\n const endY = event.clientY\n const width = Math.abs(endX - startX)\n const height = Math.abs(endY - startY)\n const top = startY < endY ? startY : endY\n const left = startX < endX ? startX : endX\n const bottom = window.innerHeight - height - top\n const right = window.innerWidth - width - left\n\n const maskPath = `\n linear-gradient(to top, #fff, #fff) top / 100% ${top}px,\n linear-gradient(to bottom, #fff, #fff) bottom /100% ${bottom}px,\n linear-gradient(to left, #fff, #fff) left / ${left}px 100%,\n linear-gradient(to right, #fff, #fff) right / ${right}px 100%\n `\n Object.assign(cutter.style, {\n width: `${width}px`,\n height: `${height}px`,\n left: `${left}px`,\n top: `${top}px`,\n })\n Object.assign(mask.style, {\n 'mask': maskPath,\n '-webkit-mask-repeat': 'no-repeat',\n })\n coordinate.textContent = `${width}, ${height}`\n }\n const toggleRect = (event: MouseEvent) => {\n // 右键取消截图操作\n if (event.button === 2) {\n document.removeEventListener('mousemove', drawRect)\n document.removeEventListener('mousedown', toggleRect)\n document.addEventListener('contextmenu', removeContextmenu)\n return\n }\n if (!status.leftClickLockFlag) {\n if (status.start) {\n // 如果有起点,则当前触发坐标为终点,移除监听事件并添加确认和取消按钮\n document.removeEventListener('mousemove', drawRect)\n const doneBtn = document.createElement('div')\n doneBtn.innerHTML = `<div class=\"ql-screenshot-confirm\"></div><div class=\"ql-screenshot-cancel\"></div>`\n doneBtn.className = 'ql-screenshot-done'\n doneBtn.addEventListener('click', afterShotCtrl)\n coordinate.remove()\n cutter.appendChild(doneBtn)\n status.leftClickLockFlag = true\n }\n else {\n // 无起点则设置起点坐标,监听鼠标移动\n status.start = { x: event.clientX, y: event.clientY }\n document.addEventListener('mousemove', drawRect)\n }\n }\n }\n document.addEventListener('mousedown', toggleRect)\n}\nScreenshot.toolName = 'screenshot'\n"],"names":["imgToBase64","lockScroll","image"],"mappings":"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"}
@@ -6,6 +6,7 @@ const ICONS_CONFIG = {
6
6
  "undo": icons_config.UNDO_ICON,
7
7
  "redo": icons_config.REDO_ICON,
8
8
  "clean": icons_config.CLEAN_ICON,
9
+ "ai": icons_config.AI_ICON,
9
10
  "bold": icons_config.BOLD_ICON,
10
11
  "italic": icons_config.ITALIC_ICON,
11
12
  "underline": icons_config.UNDERLINE_ICON,
@@ -1 +1 @@
1
- {"version":3,"file":"icons.cjs.js","sources":["../../../src/ui/icons.ts"],"sourcesContent":["import FluentEditor from '../core/fluent-editor'\r\nimport {\r\n ALIGN_CENTER_ICON,\r\n ALIGN_JUSTIFY_ICON,\r\n ALIGN_LEFT_ICON,\r\n ALIGN_RIGHT_ICON,\r\n BACKGROUND_COLOR_ICON,\r\n BLOCKQUOTE_ICON,\r\n BOLD_ICON,\r\n CLEAN_ICON,\r\n CODE_BLOCK_ICON,\r\n CODE_ICON,\r\n COLOR_ICON,\r\n DIVIDER_ICON,\r\n EMOJI_ICON,\r\n FILE_ICON,\r\n FORMAT_PAINTER_ICON,\r\n FULLSCREEN_EXIT_ICON,\r\n FULLSCREEN_ICON,\r\n GLOBAL_LINK_ICON,\r\n HELP_ICON,\r\n IMAGE_ICON,\r\n ITALIC_ICON,\r\n LINK_ICON,\r\n LIST_CHECK_ICON,\r\n LIST_ORDERED_ICON,\r\n LIST_UNORDERED_ICON,\r\n REDO_ICON,\r\n SCREENSHOT_ICON,\r\n STRIKE_ICON,\r\n TABLE_ICON,\r\n UNDERLINE_ICON,\r\n UNDO_ICON,\r\n} from './icons.config'\r\n\r\nconst ICONS_CONFIG: { [key: string]: any } = {\r\n 'undo': UNDO_ICON,\r\n 'redo': REDO_ICON,\r\n 'clean': CLEAN_ICON,\r\n\r\n 'bold': BOLD_ICON,\r\n 'italic': ITALIC_ICON,\r\n 'underline': UNDERLINE_ICON,\r\n 'strike': STRIKE_ICON,\r\n\r\n 'font': '',\r\n 'size': '',\r\n\r\n 'color': COLOR_ICON,\r\n 'background': BACKGROUND_COLOR_ICON,\r\n\r\n 'align': {\r\n '': ALIGN_LEFT_ICON,\r\n 'center': ALIGN_CENTER_ICON,\r\n 'right': ALIGN_RIGHT_ICON,\r\n 'justify': ALIGN_JUSTIFY_ICON,\r\n },\r\n 'list': {\r\n bullet: LIST_UNORDERED_ICON,\r\n ordered: LIST_ORDERED_ICON,\r\n check: LIST_CHECK_ICON,\r\n },\r\n\r\n 'code': CODE_ICON,\r\n 'code-block': CODE_BLOCK_ICON,\r\n 'blockquote': BLOCKQUOTE_ICON,\r\n\r\n 'image': IMAGE_ICON,\r\n 'file': FILE_ICON,\r\n 'link': LINK_ICON,\r\n 'global-link': GLOBAL_LINK_ICON,\r\n 'fullscreen': FULLSCREEN_ICON,\r\n 'fullscreen-exit': FULLSCREEN_EXIT_ICON,\r\n 'emoji': EMOJI_ICON,\r\n 'help': HELP_ICON,\r\n 'screenshot': SCREENSHOT_ICON,\r\n 'format-painter': FORMAT_PAINTER_ICON,\r\n 'divider': DIVIDER_ICON,\r\n}\r\n\r\nconst Icons = FluentEditor.import('ui/icons')\r\nObject.entries(ICONS_CONFIG).forEach(([key, icon]) => {\r\n Icons[key] = icon\r\n})\r\n\r\nexport { ICONS_CONFIG }\r\n\r\nexport default Icons\r\n"],"names":["UNDO_ICON","REDO_ICON","CLEAN_ICON","BOLD_ICON","ITALIC_ICON","UNDERLINE_ICON","STRIKE_ICON","COLOR_ICON","BACKGROUND_COLOR_ICON","ALIGN_LEFT_ICON","ALIGN_CENTER_ICON","ALIGN_RIGHT_ICON","ALIGN_JUSTIFY_ICON","LIST_UNORDERED_ICON","LIST_ORDERED_ICON","LIST_CHECK_ICON","CODE_ICON","CODE_BLOCK_ICON","BLOCKQUOTE_ICON","IMAGE_ICON","FILE_ICON","LINK_ICON","GLOBAL_LINK_ICON","FULLSCREEN_ICON","FULLSCREEN_EXIT_ICON","EMOJI_ICON","HELP_ICON","SCREENSHOT_ICON","FORMAT_PAINTER_ICON","DIVIDER_ICON","FluentEditor"],"mappings":";;;;AAmCA,MAAM,eAAuC;AAAA,EAC3C,QAAQA,aAAA;AAAA,EACR,QAAQC,aAAA;AAAA,EACR,SAASC,aAAA;AAAA,EAET,QAAQC,aAAA;AAAA,EACR,UAAUC,aAAA;AAAA,EACV,aAAaC,aAAA;AAAA,EACb,UAAUC,aAAA;AAAA,EAEV,QAAQ;AAAA,EACR,QAAQ;AAAA,EAER,SAASC,aAAA;AAAA,EACT,cAAcC,aAAA;AAAA,EAEd,SAAS;AAAA,IACP,IAAIC,aAAA;AAAA,IACJ,UAAUC,aAAA;AAAA,IACV,SAASC,aAAA;AAAA,IACT,WAAWC,aAAAA;AAAAA,EACb;AAAA,EACA,QAAQ;AAAA,IACN,QAAQC,aAAA;AAAA,IACR,SAASC,aAAA;AAAA,IACT,OAAOC,aAAAA;AAAAA,EACT;AAAA,EAEA,QAAQC,aAAA;AAAA,EACR,cAAcC,aAAA;AAAA,EACd,cAAcC,aAAA;AAAA,EAEd,SAASC,aAAA;AAAA,EACT,QAAQC,aAAA;AAAA,EACR,QAAQC,aAAA;AAAA,EACR,eAAeC,aAAA;AAAA,EACf,cAAcC,aAAA;AAAA,EACd,mBAAmBC,aAAA;AAAA,EACnB,SAASC,aAAA;AAAA,EACT,QAAQC,aAAA;AAAA,EACR,cAAcC,aAAA;AAAA,EACd,kBAAkBC,aAAA;AAAA,EAClB,WAAWC,aAAAA;AACb;AAEM,MAAA,QAAQC,aAAAA,QAAa,OAAO,UAAU;AAC5C,OAAO,QAAQ,YAAY,EAAE,QAAQ,CAAC,CAAC,KAAK,IAAI,MAAM;AACpD,QAAM,GAAG,IAAI;AACf,CAAC;;;"}
1
+ {"version":3,"file":"icons.cjs.js","sources":["../../../src/ui/icons.ts"],"sourcesContent":["import FluentEditor from '../core/fluent-editor'\nimport {\n AI_ICON,\n ALIGN_CENTER_ICON,\n ALIGN_JUSTIFY_ICON,\n ALIGN_LEFT_ICON,\n ALIGN_RIGHT_ICON,\n BACKGROUND_COLOR_ICON,\n BLOCKQUOTE_ICON,\n BOLD_ICON,\n CLEAN_ICON,\n CODE_BLOCK_ICON,\n CODE_ICON,\n COLOR_ICON,\n DIVIDER_ICON,\n EMOJI_ICON,\n FILE_ICON,\n FORMAT_PAINTER_ICON,\n FULLSCREEN_EXIT_ICON,\n FULLSCREEN_ICON,\n GLOBAL_LINK_ICON,\n HELP_ICON,\n IMAGE_ICON,\n ITALIC_ICON,\n LINK_ICON,\n LIST_CHECK_ICON,\n LIST_ORDERED_ICON,\n LIST_UNORDERED_ICON,\n REDO_ICON,\n SCREENSHOT_ICON,\n STRIKE_ICON,\n UNDERLINE_ICON,\n UNDO_ICON,\n} from './icons.config'\n\nconst ICONS_CONFIG: { [key: string]: any } = {\n 'undo': UNDO_ICON,\n 'redo': REDO_ICON,\n 'clean': CLEAN_ICON,\n 'ai': AI_ICON,\n\n 'bold': BOLD_ICON,\n 'italic': ITALIC_ICON,\n 'underline': UNDERLINE_ICON,\n 'strike': STRIKE_ICON,\n\n 'font': '',\n 'size': '',\n\n 'color': COLOR_ICON,\n 'background': BACKGROUND_COLOR_ICON,\n\n 'align': {\n '': ALIGN_LEFT_ICON,\n 'center': ALIGN_CENTER_ICON,\n 'right': ALIGN_RIGHT_ICON,\n 'justify': ALIGN_JUSTIFY_ICON,\n },\n 'list': {\n bullet: LIST_UNORDERED_ICON,\n ordered: LIST_ORDERED_ICON,\n check: LIST_CHECK_ICON,\n },\n\n 'code': CODE_ICON,\n 'code-block': CODE_BLOCK_ICON,\n 'blockquote': BLOCKQUOTE_ICON,\n\n 'image': IMAGE_ICON,\n 'file': FILE_ICON,\n 'link': LINK_ICON,\n 'global-link': GLOBAL_LINK_ICON,\n 'fullscreen': FULLSCREEN_ICON,\n 'fullscreen-exit': FULLSCREEN_EXIT_ICON,\n 'emoji': EMOJI_ICON,\n 'help': HELP_ICON,\n 'screenshot': SCREENSHOT_ICON,\n 'format-painter': FORMAT_PAINTER_ICON,\n 'divider': DIVIDER_ICON,\n}\n\nconst Icons = FluentEditor.import('ui/icons')\nObject.entries(ICONS_CONFIG).forEach(([key, icon]) => {\n Icons[key] = icon\n})\n\nexport { ICONS_CONFIG }\n\nexport default Icons\n"],"names":["UNDO_ICON","REDO_ICON","CLEAN_ICON","AI_ICON","BOLD_ICON","ITALIC_ICON","UNDERLINE_ICON","STRIKE_ICON","COLOR_ICON","BACKGROUND_COLOR_ICON","ALIGN_LEFT_ICON","ALIGN_CENTER_ICON","ALIGN_RIGHT_ICON","ALIGN_JUSTIFY_ICON","LIST_UNORDERED_ICON","LIST_ORDERED_ICON","LIST_CHECK_ICON","CODE_ICON","CODE_BLOCK_ICON","BLOCKQUOTE_ICON","IMAGE_ICON","FILE_ICON","LINK_ICON","GLOBAL_LINK_ICON","FULLSCREEN_ICON","FULLSCREEN_EXIT_ICON","EMOJI_ICON","HELP_ICON","SCREENSHOT_ICON","FORMAT_PAINTER_ICON","DIVIDER_ICON","FluentEditor"],"mappings":";;;;AAmCA,MAAM,eAAuC;AAAA,EAC3C,QAAQA,aAAA;AAAA,EACR,QAAQC,aAAA;AAAA,EACR,SAASC,aAAA;AAAA,EACT,MAAMC,aAAA;AAAA,EAEN,QAAQC,aAAA;AAAA,EACR,UAAUC,aAAA;AAAA,EACV,aAAaC,aAAA;AAAA,EACb,UAAUC,aAAA;AAAA,EAEV,QAAQ;AAAA,EACR,QAAQ;AAAA,EAER,SAASC,aAAA;AAAA,EACT,cAAcC,aAAA;AAAA,EAEd,SAAS;AAAA,IACP,IAAIC,aAAA;AAAA,IACJ,UAAUC,aAAA;AAAA,IACV,SAASC,aAAA;AAAA,IACT,WAAWC,aAAAA;AAAAA,EACb;AAAA,EACA,QAAQ;AAAA,IACN,QAAQC,aAAA;AAAA,IACR,SAASC,aAAA;AAAA,IACT,OAAOC,aAAAA;AAAAA,EACT;AAAA,EAEA,QAAQC,aAAA;AAAA,EACR,cAAcC,aAAA;AAAA,EACd,cAAcC,aAAA;AAAA,EAEd,SAASC,aAAA;AAAA,EACT,QAAQC,aAAA;AAAA,EACR,QAAQC,aAAA;AAAA,EACR,eAAeC,aAAA;AAAA,EACf,cAAcC,aAAA;AAAA,EACd,mBAAmBC,aAAA;AAAA,EACnB,SAASC,aAAA;AAAA,EACT,QAAQC,aAAA;AAAA,EACR,cAAcC,aAAA;AAAA,EACd,kBAAkBC,aAAA;AAAA,EAClB,WAAWC,aAAAA;AACb;AAEM,MAAA,QAAQC,aAAAA,QAAa,OAAO,UAAU;AAC5C,OAAO,QAAQ,YAAY,EAAE,QAAQ,CAAC,CAAC,KAAK,IAAI,MAAM;AACpD,QAAM,GAAG,IAAI;AACf,CAAC;;;"}