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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (602) hide show
  1. package/README.md +88 -105
  2. package/es/attributors/line-height.es.js.map +1 -1
  3. package/es/config/base64-image.es.js.map +1 -1
  4. package/es/config/editor.config.es.js +0 -7
  5. package/es/config/editor.config.es.js.map +1 -1
  6. package/es/config/editor.utils.es.js +0 -2
  7. package/es/config/editor.utils.es.js.map +1 -1
  8. package/es/config/i18n/en-us.es.js +0 -13
  9. package/es/config/i18n/en-us.es.js.map +1 -1
  10. package/es/config/i18n/zh-cn.es.js +0 -13
  11. package/es/config/i18n/zh-cn.es.js.map +1 -1
  12. package/es/config/index.es.js +8 -13
  13. package/es/config/index.es.js.map +1 -1
  14. package/es/config/types/index.es.js +0 -20
  15. package/es/config/types/index.es.js.map +1 -1
  16. package/es/core/fluent-editor.es.js +7 -5
  17. package/es/core/fluent-editor.es.js.map +1 -1
  18. package/es/fluent-editor.es.js +38 -22
  19. package/es/fluent-editor.es.js.map +1 -1
  20. package/es/formats/emoji.es.js +14 -0
  21. package/es/formats/emoji.es.js.map +1 -0
  22. package/es/formats/index.es.js +11 -0
  23. package/es/formats/index.es.js.map +1 -0
  24. package/es/formats/soft-break.es.js +12 -5
  25. package/es/formats/soft-break.es.js.map +1 -1
  26. package/es/formats/strike.es.js +8 -5
  27. package/es/formats/strike.es.js.map +1 -1
  28. package/es/formats/video.es.js +14 -10
  29. package/es/formats/video.es.js.map +1 -1
  30. package/es/index.es.js +94 -32
  31. package/es/index.es.js.map +1 -1
  32. package/es/modules/ai/constants.es.js +50 -0
  33. package/es/modules/ai/constants.es.js.map +1 -0
  34. package/es/modules/ai/icons.es.js +319 -0
  35. package/es/modules/ai/icons.es.js.map +1 -0
  36. package/es/modules/ai/index.es.js +670 -0
  37. package/es/modules/ai/index.es.js.map +1 -0
  38. package/es/modules/collaborative-editing/awareness/awareness.es.js +93 -0
  39. package/es/modules/collaborative-editing/awareness/awareness.es.js.map +1 -0
  40. package/es/modules/collaborative-editing/awareness/index.es.js +8 -0
  41. package/es/modules/{emoji/emoji-list → collaborative-editing/awareness}/index.es.js.map +1 -1
  42. package/es/modules/collaborative-editing/awareness/y-indexeddb.es.js +12 -0
  43. package/es/modules/collaborative-editing/awareness/y-indexeddb.es.js.map +1 -0
  44. package/es/modules/collaborative-editing/collaborative-editing.es.js +105 -0
  45. package/es/modules/collaborative-editing/collaborative-editing.es.js.map +1 -0
  46. package/es/modules/collaborative-editing/index.es.js +6 -0
  47. package/es/modules/collaborative-editing/index.es.js.map +1 -0
  48. package/es/modules/collaborative-editing/module.es.js +35 -0
  49. package/es/modules/collaborative-editing/module.es.js.map +1 -0
  50. package/es/modules/collaborative-editing/provider/providerRegistry.es.js +28 -0
  51. package/es/modules/collaborative-editing/provider/providerRegistry.es.js.map +1 -0
  52. package/es/modules/collaborative-editing/provider/webrtc.es.js +99 -0
  53. package/es/modules/collaborative-editing/provider/webrtc.es.js.map +1 -0
  54. package/es/modules/collaborative-editing/provider/websocket.es.js +111 -0
  55. package/es/modules/collaborative-editing/provider/websocket.es.js.map +1 -0
  56. package/es/modules/collaborative-editing/types.es.js +2 -0
  57. package/es/modules/collaborative-editing/types.es.js.map +1 -0
  58. package/es/modules/counter.es.js +8 -3
  59. package/es/modules/counter.es.js.map +1 -1
  60. package/es/modules/custom-clipboard.es.js +23 -27
  61. package/es/modules/custom-clipboard.es.js.map +1 -1
  62. package/es/modules/custom-image/actions/action.es.js +19 -0
  63. package/es/modules/custom-image/actions/action.es.js.map +1 -0
  64. package/es/modules/custom-image/actions/{CustomResizeAction.es.js → custom-resize-action.es.js} +24 -11
  65. package/es/modules/custom-image/actions/custom-resize-action.es.js.map +1 -0
  66. package/es/modules/custom-image/actions/{DeleteAction.es.js → delete-action.es.js} +8 -5
  67. package/es/modules/custom-image/actions/delete-action.es.js.map +1 -0
  68. package/es/modules/custom-image/actions/image-toolbar-buttons.es.js +137 -0
  69. package/es/modules/custom-image/actions/image-toolbar-buttons.es.js.map +1 -0
  70. package/es/modules/custom-image/actions/index.es.js +18 -0
  71. package/es/modules/custom-image/actions/index.es.js.map +1 -0
  72. package/es/modules/custom-image/actions/toolbar-action.es.js +33 -0
  73. package/es/modules/custom-image/actions/toolbar-action.es.js.map +1 -0
  74. package/es/modules/custom-image/actions/toolbar.es.js +110 -0
  75. package/es/modules/custom-image/actions/toolbar.es.js.map +1 -0
  76. package/es/modules/custom-image/{BlotFormatter.es.js → blot-formatter.es.js} +27 -50
  77. package/es/modules/custom-image/blot-formatter.es.js.map +1 -0
  78. package/es/modules/custom-image/image.es.js +41 -21
  79. package/es/modules/custom-image/image.es.js.map +1 -1
  80. package/es/modules/custom-image/index.es.js +9 -0
  81. package/es/modules/custom-image/index.es.js.map +1 -0
  82. package/es/modules/custom-image/options.es.js +88 -0
  83. package/es/modules/custom-image/options.es.js.map +1 -0
  84. package/es/modules/custom-image/specs/blot-spec.es.js +33 -0
  85. package/es/modules/custom-image/specs/blot-spec.es.js.map +1 -0
  86. package/es/modules/custom-image/specs/{CustomImageSpec.es.js → custom-image-spec.es.js} +13 -14
  87. package/es/modules/custom-image/specs/custom-image-spec.es.js.map +1 -0
  88. package/es/modules/custom-image/specs/image-spec.es.js +32 -0
  89. package/es/modules/custom-image/specs/image-spec.es.js.map +1 -0
  90. package/es/modules/custom-image/specs/index.es.js +9 -0
  91. package/es/modules/custom-image/specs/index.es.js.map +1 -0
  92. package/es/modules/custom-uploader.es.js +63 -194
  93. package/es/modules/custom-uploader.es.js.map +1 -1
  94. package/es/modules/divider.es.js +8 -7
  95. package/es/modules/divider.es.js.map +1 -1
  96. package/es/modules/emoji.es.js +167 -0
  97. package/es/modules/emoji.es.js.map +1 -0
  98. package/es/modules/file/formats/file.es.js +13 -13
  99. package/es/modules/file/formats/file.es.js.map +1 -1
  100. package/es/modules/file/index.es.js +6 -29
  101. package/es/modules/file/index.es.js.map +1 -1
  102. package/es/modules/file/modules/file-bar.es.js +11 -3
  103. package/es/modules/file/modules/file-bar.es.js.map +1 -1
  104. package/es/modules/file/modules/file-module.es.js +35 -0
  105. package/es/modules/file/modules/file-module.es.js.map +1 -0
  106. package/es/modules/i18n.es.js +33 -11
  107. package/es/modules/i18n.es.js.map +1 -1
  108. package/es/modules/index.es.js +27 -0
  109. package/es/modules/index.es.js.map +1 -0
  110. package/es/modules/link/formats/link.es.js +14 -10
  111. package/es/modules/link/formats/link.es.js.map +1 -1
  112. package/es/modules/link/index.es.js +4 -12
  113. package/es/modules/link/index.es.js.map +1 -1
  114. package/es/modules/link/modules/tooltip.es.js +31 -21
  115. package/es/modules/link/modules/tooltip.es.js.map +1 -1
  116. package/es/modules/mathlive/formats.es.js +10 -7
  117. package/es/modules/mathlive/formats.es.js.map +1 -1
  118. package/es/modules/mathlive/index.es.js +6 -30
  119. package/es/modules/mathlive/index.es.js.map +1 -1
  120. package/es/modules/mathlive/module.es.js +40 -0
  121. package/es/modules/mathlive/module.es.js.map +1 -0
  122. package/es/modules/mathlive/tooltip.es.js +9 -5
  123. package/es/modules/mathlive/tooltip.es.js.map +1 -1
  124. package/es/modules/mention/constants.es.js.map +1 -1
  125. package/es/modules/mention/index.es.js +7 -0
  126. package/es/modules/mention/index.es.js.map +1 -0
  127. package/es/modules/mention/{MentionLink.es.js → mention-link.es.js} +14 -6
  128. package/es/modules/mention/mention-link.es.js.map +1 -0
  129. package/es/modules/mention/{Mention.es.js → mention.es.js} +28 -20
  130. package/es/modules/mention/mention.es.js.map +1 -0
  131. package/es/modules/shortcut-key/index.es.js +17 -1
  132. package/es/modules/shortcut-key/index.es.js.map +1 -1
  133. package/es/modules/syntax.es.js +4 -0
  134. package/es/modules/syntax.es.js.map +1 -1
  135. package/es/modules/table-up/index.es.js +21 -8
  136. package/es/modules/table-up/index.es.js.map +1 -1
  137. package/es/modules/toolbar/better-picker.es.js +5 -0
  138. package/es/modules/toolbar/better-picker.es.js.map +1 -1
  139. package/es/modules/toolbar/better-toolbar.es.js +138 -0
  140. package/es/modules/toolbar/better-toolbar.es.js.map +1 -0
  141. package/es/modules/toolbar/index.es.js +5 -135
  142. package/es/modules/toolbar/index.es.js.map +1 -1
  143. package/es/modules/toolbar/toolbar-tip.es.js +6 -1
  144. package/es/modules/toolbar/toolbar-tip.es.js.map +1 -1
  145. package/es/themes/snow.es.js +32 -15
  146. package/es/themes/snow.es.js.map +1 -1
  147. package/es/tools/format-painter.es.js +8 -2
  148. package/es/tools/format-painter.es.js.map +1 -1
  149. package/es/tools/fullscreen.es.js.map +1 -1
  150. package/es/tools/screenshot.es.js.map +1 -1
  151. package/es/ui/icons.config.es.js +53 -0
  152. package/es/ui/icons.config.es.js.map +1 -1
  153. package/es/ui/icons.es.js +2 -1
  154. package/es/ui/icons.es.js.map +1 -1
  155. package/es/utils/debounce.es.js.map +1 -1
  156. package/es/utils/is.es.js +4 -0
  157. package/es/utils/is.es.js.map +1 -1
  158. package/es/utils/method.es.js.map +1 -1
  159. package/lib/attributors/line-height.cjs.js.map +1 -1
  160. package/lib/config/base64-image.cjs.js.map +1 -1
  161. package/lib/config/editor.config.cjs.js +0 -7
  162. package/lib/config/editor.config.cjs.js.map +1 -1
  163. package/lib/config/editor.utils.cjs.js +0 -2
  164. package/lib/config/editor.utils.cjs.js.map +1 -1
  165. package/lib/config/i18n/en-us.cjs.js +0 -13
  166. package/lib/config/i18n/en-us.cjs.js.map +1 -1
  167. package/lib/config/i18n/zh-cn.cjs.js +0 -13
  168. package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
  169. package/lib/config/index.cjs.js +6 -11
  170. package/lib/config/index.cjs.js.map +1 -1
  171. package/lib/config/types/index.cjs.js +0 -20
  172. package/lib/config/types/index.cjs.js.map +1 -1
  173. package/lib/core/fluent-editor.cjs.js +6 -4
  174. package/lib/core/fluent-editor.cjs.js.map +1 -1
  175. package/lib/fluent-editor.cjs.js +46 -30
  176. package/lib/fluent-editor.cjs.js.map +1 -1
  177. package/lib/formats/emoji.cjs.js +14 -0
  178. package/lib/formats/emoji.cjs.js.map +1 -0
  179. package/lib/formats/index.cjs.js +11 -0
  180. package/lib/formats/index.cjs.js.map +1 -0
  181. package/lib/formats/soft-break.cjs.js +13 -6
  182. package/lib/formats/soft-break.cjs.js.map +1 -1
  183. package/lib/formats/strike.cjs.js +9 -6
  184. package/lib/formats/strike.cjs.js.map +1 -1
  185. package/lib/formats/video.cjs.js +15 -11
  186. package/lib/formats/video.cjs.js.map +1 -1
  187. package/lib/index.cjs.js +114 -34
  188. package/lib/index.cjs.js.map +1 -1
  189. package/lib/modules/ai/constants.cjs.js +50 -0
  190. package/lib/modules/ai/constants.cjs.js.map +1 -0
  191. package/lib/modules/ai/icons.cjs.js +319 -0
  192. package/lib/modules/ai/icons.cjs.js.map +1 -0
  193. package/lib/modules/ai/index.cjs.js +670 -0
  194. package/lib/modules/ai/index.cjs.js.map +1 -0
  195. package/lib/modules/collaborative-editing/awareness/awareness.cjs.js +110 -0
  196. package/lib/modules/collaborative-editing/awareness/awareness.cjs.js.map +1 -0
  197. package/lib/modules/collaborative-editing/awareness/index.cjs.js +8 -0
  198. package/lib/modules/collaborative-editing/awareness/index.cjs.js.map +1 -0
  199. package/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js +12 -0
  200. package/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js.map +1 -0
  201. package/lib/modules/collaborative-editing/collaborative-editing.cjs.js +122 -0
  202. package/lib/modules/collaborative-editing/collaborative-editing.cjs.js.map +1 -0
  203. package/lib/modules/collaborative-editing/index.cjs.js +6 -0
  204. package/lib/modules/{emoji/emoji-list → collaborative-editing}/index.cjs.js.map +1 -1
  205. package/lib/modules/collaborative-editing/module.cjs.js +35 -0
  206. package/lib/modules/collaborative-editing/module.cjs.js.map +1 -0
  207. package/lib/modules/collaborative-editing/provider/providerRegistry.cjs.js +28 -0
  208. package/lib/modules/collaborative-editing/provider/providerRegistry.cjs.js.map +1 -0
  209. package/lib/modules/collaborative-editing/provider/webrtc.cjs.js +116 -0
  210. package/lib/modules/collaborative-editing/provider/webrtc.cjs.js.map +1 -0
  211. package/lib/modules/collaborative-editing/provider/websocket.cjs.js +128 -0
  212. package/lib/modules/collaborative-editing/provider/websocket.cjs.js.map +1 -0
  213. package/lib/modules/collaborative-editing/types.cjs.js +2 -0
  214. package/lib/modules/collaborative-editing/types.cjs.js.map +1 -0
  215. package/lib/modules/counter.cjs.js +8 -3
  216. package/lib/modules/counter.cjs.js.map +1 -1
  217. package/lib/modules/custom-clipboard.cjs.js +23 -27
  218. package/lib/modules/custom-clipboard.cjs.js.map +1 -1
  219. package/lib/modules/custom-image/actions/action.cjs.js +19 -0
  220. package/lib/modules/custom-image/actions/action.cjs.js.map +1 -0
  221. package/lib/modules/custom-image/actions/{CustomResizeAction.cjs.js → custom-resize-action.cjs.js} +26 -13
  222. package/lib/modules/custom-image/actions/custom-resize-action.cjs.js.map +1 -0
  223. package/lib/modules/custom-image/actions/{DeleteAction.cjs.js → delete-action.cjs.js} +10 -7
  224. package/lib/modules/custom-image/actions/delete-action.cjs.js.map +1 -0
  225. package/lib/modules/custom-image/actions/image-toolbar-buttons.cjs.js +137 -0
  226. package/lib/modules/custom-image/actions/image-toolbar-buttons.cjs.js.map +1 -0
  227. package/lib/modules/custom-image/actions/index.cjs.js +18 -0
  228. package/lib/modules/custom-image/actions/index.cjs.js.map +1 -0
  229. package/lib/modules/custom-image/actions/toolbar-action.cjs.js +33 -0
  230. package/lib/modules/custom-image/actions/toolbar-action.cjs.js.map +1 -0
  231. package/lib/modules/custom-image/actions/toolbar.cjs.js +110 -0
  232. package/lib/modules/custom-image/actions/toolbar.cjs.js.map +1 -0
  233. package/lib/modules/custom-image/{BlotFormatter.cjs.js → blot-formatter.cjs.js} +28 -51
  234. package/lib/modules/custom-image/blot-formatter.cjs.js.map +1 -0
  235. package/lib/modules/custom-image/image.cjs.js +42 -22
  236. package/lib/modules/custom-image/image.cjs.js.map +1 -1
  237. package/lib/modules/custom-image/index.cjs.js +9 -0
  238. package/lib/modules/custom-image/index.cjs.js.map +1 -0
  239. package/lib/modules/custom-image/options.cjs.js +88 -0
  240. package/lib/modules/custom-image/options.cjs.js.map +1 -0
  241. package/lib/modules/custom-image/specs/blot-spec.cjs.js +33 -0
  242. package/lib/modules/custom-image/specs/blot-spec.cjs.js.map +1 -0
  243. package/lib/modules/custom-image/specs/{CustomImageSpec.cjs.js → custom-image-spec.cjs.js} +14 -15
  244. package/lib/modules/custom-image/specs/custom-image-spec.cjs.js.map +1 -0
  245. package/lib/modules/custom-image/specs/image-spec.cjs.js +32 -0
  246. package/lib/modules/custom-image/specs/image-spec.cjs.js.map +1 -0
  247. package/lib/modules/custom-image/specs/index.cjs.js +9 -0
  248. package/lib/modules/custom-image/specs/index.cjs.js.map +1 -0
  249. package/lib/modules/custom-uploader.cjs.js +64 -195
  250. package/lib/modules/custom-uploader.cjs.js.map +1 -1
  251. package/lib/modules/divider.cjs.js +9 -8
  252. package/lib/modules/divider.cjs.js.map +1 -1
  253. package/lib/modules/emoji.cjs.js +167 -0
  254. package/lib/modules/emoji.cjs.js.map +1 -0
  255. package/lib/modules/file/formats/file.cjs.js +14 -14
  256. package/lib/modules/file/formats/file.cjs.js.map +1 -1
  257. package/lib/modules/file/index.cjs.js +5 -28
  258. package/lib/modules/file/index.cjs.js.map +1 -1
  259. package/lib/modules/file/modules/file-bar.cjs.js +12 -4
  260. package/lib/modules/file/modules/file-bar.cjs.js.map +1 -1
  261. package/lib/modules/file/modules/file-module.cjs.js +35 -0
  262. package/lib/modules/file/modules/file-module.cjs.js.map +1 -0
  263. package/lib/modules/i18n.cjs.js +32 -10
  264. package/lib/modules/i18n.cjs.js.map +1 -1
  265. package/lib/modules/index.cjs.js +27 -0
  266. package/lib/modules/index.cjs.js.map +1 -0
  267. package/lib/modules/link/formats/link.cjs.js +15 -11
  268. package/lib/modules/link/formats/link.cjs.js.map +1 -1
  269. package/lib/modules/link/index.cjs.js +4 -12
  270. package/lib/modules/link/index.cjs.js.map +1 -1
  271. package/lib/modules/link/modules/tooltip.cjs.js +30 -20
  272. package/lib/modules/link/modules/tooltip.cjs.js.map +1 -1
  273. package/lib/modules/mathlive/formats.cjs.js +11 -8
  274. package/lib/modules/mathlive/formats.cjs.js.map +1 -1
  275. package/lib/modules/mathlive/index.cjs.js +5 -29
  276. package/lib/modules/mathlive/index.cjs.js.map +1 -1
  277. package/lib/modules/mathlive/module.cjs.js +40 -0
  278. package/lib/modules/mathlive/module.cjs.js.map +1 -0
  279. package/lib/modules/mathlive/tooltip.cjs.js +10 -6
  280. package/lib/modules/mathlive/tooltip.cjs.js.map +1 -1
  281. package/lib/modules/mention/constants.cjs.js.map +1 -1
  282. package/lib/modules/mention/index.cjs.js +7 -0
  283. package/lib/modules/mention/index.cjs.js.map +1 -0
  284. package/lib/modules/mention/{MentionLink.cjs.js → mention-link.cjs.js} +15 -7
  285. package/lib/modules/mention/mention-link.cjs.js.map +1 -0
  286. package/lib/modules/mention/{Mention.cjs.js → mention.cjs.js} +30 -22
  287. package/lib/modules/mention/mention.cjs.js.map +1 -0
  288. package/lib/modules/shortcut-key/index.cjs.js +16 -0
  289. package/lib/modules/shortcut-key/index.cjs.js.map +1 -1
  290. package/lib/modules/syntax.cjs.js +4 -0
  291. package/lib/modules/syntax.cjs.js.map +1 -1
  292. package/lib/modules/table-up/index.cjs.js +21 -8
  293. package/lib/modules/table-up/index.cjs.js.map +1 -1
  294. package/lib/modules/toolbar/better-picker.cjs.js +5 -0
  295. package/lib/modules/toolbar/better-picker.cjs.js.map +1 -1
  296. package/lib/modules/toolbar/better-toolbar.cjs.js +138 -0
  297. package/lib/modules/toolbar/better-toolbar.cjs.js.map +1 -0
  298. package/lib/modules/toolbar/index.cjs.js +6 -136
  299. package/lib/modules/toolbar/index.cjs.js.map +1 -1
  300. package/lib/modules/toolbar/toolbar-tip.cjs.js +6 -1
  301. package/lib/modules/toolbar/toolbar-tip.cjs.js.map +1 -1
  302. package/lib/themes/snow.cjs.js +33 -16
  303. package/lib/themes/snow.cjs.js.map +1 -1
  304. package/lib/tools/format-painter.cjs.js +8 -2
  305. package/lib/tools/format-painter.cjs.js.map +1 -1
  306. package/lib/tools/fullscreen.cjs.js.map +1 -1
  307. package/lib/tools/screenshot.cjs.js.map +1 -1
  308. package/lib/ui/icons.cjs.js +1 -0
  309. package/lib/ui/icons.cjs.js.map +1 -1
  310. package/lib/ui/icons.config.cjs.js +53 -0
  311. package/lib/ui/icons.config.cjs.js.map +1 -1
  312. package/lib/utils/debounce.cjs.js.map +1 -1
  313. package/lib/utils/is.cjs.js +4 -0
  314. package/lib/utils/is.cjs.js.map +1 -1
  315. package/lib/utils/method.cjs.js.map +1 -1
  316. package/package.json +68 -59
  317. package/style.css +2359 -2251
  318. package/types/attributors/font-size.d.ts +1 -1
  319. package/types/attributors/font-style.d.ts +1 -1
  320. package/types/attributors/index.d.ts +4 -4
  321. package/types/attributors/line-height.d.ts +1 -1
  322. package/types/attributors/text-indent.d.ts +1 -1
  323. package/types/config/base64-image.d.ts +2 -2
  324. package/types/config/editor.config.d.ts +11 -285
  325. package/types/config/editor.utils.d.ts +40 -41
  326. package/types/config/i18n/en-us.d.ts +123 -136
  327. package/types/config/i18n/zh-cn.d.ts +123 -136
  328. package/types/config/index.d.ts +7 -6
  329. package/types/config/types/editor-config.interface.d.ts +11 -35
  330. package/types/config/types/editor-modules.interface.d.ts +41 -31
  331. package/types/config/types/index.d.ts +3 -23
  332. package/types/config/types/type.d.ts +2 -6
  333. package/types/core/fluent-editor.d.ts +11 -11
  334. package/types/fluent-editor.d.ts +1 -2
  335. package/types/formats/emoji.d.ts +8 -0
  336. package/types/formats/index.d.ts +4 -0
  337. package/types/formats/soft-break.d.ts +12 -14
  338. package/types/formats/strike.d.ts +8 -7
  339. package/types/formats/video.d.ts +13 -16
  340. package/types/index.d.ts +7 -6
  341. package/types/modules/ai/constants.d.ts +30 -0
  342. package/types/modules/ai/icons.d.ts +21 -0
  343. package/types/modules/ai/index.d.ts +96 -0
  344. package/types/modules/ai/types.d.ts +16 -0
  345. package/types/modules/collaborative-editing/awareness/awareness.d.ts +28 -0
  346. package/types/modules/collaborative-editing/awareness/index.d.ts +2 -0
  347. package/types/modules/collaborative-editing/awareness/y-indexeddb.d.ts +2 -0
  348. package/types/modules/collaborative-editing/collaborative-editing.d.ts +24 -0
  349. package/types/modules/collaborative-editing/index.d.ts +2 -0
  350. package/types/modules/collaborative-editing/module.d.ts +11 -0
  351. package/types/modules/collaborative-editing/provider/index.d.ts +3 -0
  352. package/types/modules/collaborative-editing/provider/providerRegistry.d.ts +25 -0
  353. package/types/modules/collaborative-editing/provider/webrtc.d.ts +36 -0
  354. package/types/modules/collaborative-editing/provider/websocket.d.ts +40 -0
  355. package/types/modules/collaborative-editing/types.d.ts +37 -0
  356. package/types/modules/counter.d.ts +22 -16
  357. package/types/modules/custom-clipboard.d.ts +23 -27
  358. package/types/modules/custom-image/actions/action.d.ts +8 -0
  359. package/types/modules/custom-image/actions/{CustomResizeAction.d.ts → custom-resize-action.d.ts} +23 -24
  360. package/types/modules/custom-image/actions/delete-action.d.ts +6 -0
  361. package/types/modules/custom-image/actions/image-toolbar-buttons.d.ts +16 -0
  362. package/types/modules/custom-image/actions/index.d.ts +6 -0
  363. package/types/modules/custom-image/actions/toolbar-action.d.ts +11 -0
  364. package/types/modules/custom-image/actions/toolbar.d.ts +19 -0
  365. package/types/modules/custom-image/blot-formatter.d.ts +23 -0
  366. package/types/modules/custom-image/image.d.ts +28 -28
  367. package/types/modules/custom-image/index.d.ts +4 -0
  368. package/types/modules/custom-image/options.d.ts +47 -0
  369. package/types/modules/custom-image/specs/blot-spec.d.ts +12 -0
  370. package/types/modules/custom-image/specs/{CustomImageSpec.d.ts → custom-image-spec.d.ts} +17 -21
  371. package/types/modules/custom-image/specs/image-spec.d.ts +8 -0
  372. package/types/modules/custom-image/specs/index.d.ts +3 -0
  373. package/types/modules/custom-uploader.d.ts +40 -31
  374. package/types/modules/divider.d.ts +8 -7
  375. package/types/modules/emoji.d.ts +39 -0
  376. package/types/modules/file/formats/file.d.ts +18 -15
  377. package/types/modules/file/index.d.ts +3 -11
  378. package/types/modules/file/modules/file-bar.d.ts +14 -14
  379. package/types/modules/file/modules/file-module.d.ts +9 -0
  380. package/types/modules/i18n.d.ts +13 -15
  381. package/types/modules/index.d.ts +16 -0
  382. package/types/modules/link/formats/link.d.ts +14 -15
  383. package/types/modules/link/index.d.ts +2 -6
  384. package/types/modules/link/modules/tooltip.d.ts +26 -32
  385. package/types/modules/mathlive/formats.d.ts +20 -21
  386. package/types/modules/mathlive/index.d.ts +3 -9
  387. package/types/modules/mathlive/module.d.ts +9 -0
  388. package/types/modules/mathlive/tooltip.d.ts +14 -15
  389. package/types/modules/mention/constants.d.ts +3 -3
  390. package/types/modules/mention/index.d.ts +2 -0
  391. package/types/modules/mention/{MentionLink.d.ts → mention-link.d.ts} +15 -15
  392. package/types/modules/mention/{Mention.d.ts → mention.d.ts} +52 -54
  393. package/types/modules/shortcut-key/index.d.ts +67 -93
  394. package/types/modules/syntax.d.ts +12 -13
  395. package/types/modules/table-up/index.d.ts +32 -64
  396. package/types/modules/toolbar/better-picker.d.ts +13 -14
  397. package/types/modules/toolbar/better-toolbar.d.ts +7 -0
  398. package/types/modules/toolbar/index.d.ts +3 -9
  399. package/types/modules/toolbar/toolbar-tip.d.ts +7 -8
  400. package/types/themes/snow.d.ts +9 -10
  401. package/types/tools/format-painter.d.ts +12 -14
  402. package/types/tools/fullscreen.d.ts +6 -3
  403. package/types/tools/screenshot.d.ts +17 -18
  404. package/types/ui/icons.config.d.ts +38 -36
  405. package/types/ui/icons.d.ts +6 -6
  406. package/types/utils/debounce.d.ts +6 -6
  407. package/types/utils/image.d.ts +1 -1
  408. package/types/utils/is.d.ts +6 -4
  409. package/types/utils/method.d.ts +6 -6
  410. package/types/utils/scroll-lock.d.ts +6 -6
  411. package/es/config/types/additional-toolbar-item.interface.es.js +0 -2
  412. package/es/config/types/additional-toolbar-item.interface.es.js.map +0 -1
  413. package/es/config/types/content-change.interface.es.js +0 -2
  414. package/es/config/types/content-change.interface.es.js.map +0 -1
  415. package/es/config/types/content-save.interface.es.js +0 -2
  416. package/es/config/types/content-save.interface.es.js.map +0 -1
  417. package/es/config/types/counter-option.interface.es.js +0 -2
  418. package/es/config/types/counter-option.interface.es.js.map +0 -1
  419. package/es/config/types/editor-toolbar.interface.es.js +0 -2
  420. package/es/config/types/editor-toolbar.interface.es.js.map +0 -1
  421. package/es/config/types/file-operation.interface.es.js +0 -2
  422. package/es/config/types/file-operation.interface.es.js.map +0 -1
  423. package/es/config/types/focus-change.interface.es.js +0 -2
  424. package/es/config/types/focus-change.interface.es.js.map +0 -1
  425. package/es/config/types/fullscreen-module.interface.es.js +0 -2
  426. package/es/config/types/fullscreen-module.interface.es.js.map +0 -1
  427. package/es/config/types/help-panel-item.interface.es.js +0 -2
  428. package/es/config/types/help-panel-item.interface.es.js.map +0 -1
  429. package/es/config/types/help-panel-option.interface.es.js +0 -2
  430. package/es/config/types/help-panel-option.interface.es.js.map +0 -1
  431. package/es/config/types/image-module.interface.es.js +0 -2
  432. package/es/config/types/image-module.interface.es.js.map +0 -1
  433. package/es/config/types/image-upload.interface.es.js +0 -2
  434. package/es/config/types/image-upload.interface.es.js.map +0 -1
  435. package/es/config/types/load-on-demand-module.interface.es.js +0 -2
  436. package/es/config/types/load-on-demand-module.interface.es.js.map +0 -1
  437. package/es/config/types/mention-module.interface.es.js +0 -2
  438. package/es/config/types/mention-module.interface.es.js.map +0 -1
  439. package/es/config/types/paste-change.interface.es.js +0 -2
  440. package/es/config/types/paste-change.interface.es.js.map +0 -1
  441. package/es/config/types/quick-menu-module.interface.es.js +0 -2
  442. package/es/config/types/quick-menu-module.interface.es.js.map +0 -1
  443. package/es/config/types/range.interface.es.js +0 -2
  444. package/es/config/types/range.interface.es.js.map +0 -1
  445. package/es/config/types/registry-options.interface.es.js +0 -2
  446. package/es/config/types/registry-options.interface.es.js.map +0 -1
  447. package/es/config/types/selection-change.interface.es.js +0 -2
  448. package/es/config/types/selection-change.interface.es.js.map +0 -1
  449. package/es/config/types/toolbar-item.interface.es.js +0 -2
  450. package/es/config/types/toolbar-item.interface.es.js.map +0 -1
  451. package/es/config/types/validate-error.interface.es.js +0 -2
  452. package/es/config/types/validate-error.interface.es.js.map +0 -1
  453. package/es/modules/custom-image/BlotFormatter.es.js.map +0 -1
  454. package/es/modules/custom-image/Options.es.js +0 -95
  455. package/es/modules/custom-image/Options.es.js.map +0 -1
  456. package/es/modules/custom-image/actions/Action.es.js +0 -15
  457. package/es/modules/custom-image/actions/Action.es.js.map +0 -1
  458. package/es/modules/custom-image/actions/CustomResizeAction.es.js.map +0 -1
  459. package/es/modules/custom-image/actions/DeleteAction.es.js.map +0 -1
  460. package/es/modules/custom-image/image-bar.es.js +0 -127
  461. package/es/modules/custom-image/image-bar.es.js.map +0 -1
  462. package/es/modules/custom-image/specs/BlotSpec.es.js +0 -27
  463. package/es/modules/custom-image/specs/BlotSpec.es.js.map +0 -1
  464. package/es/modules/custom-image/specs/CustomImageSpec.es.js.map +0 -1
  465. package/es/modules/custom-image/specs/ImageSpec.es.js +0 -29
  466. package/es/modules/custom-image/specs/ImageSpec.es.js.map +0 -1
  467. package/es/modules/emoji/emoji-list/index.es.js +0 -5
  468. package/es/modules/emoji/emoji-list/people.es.js +0 -114
  469. package/es/modules/emoji/emoji-list/people.es.js.map +0 -1
  470. package/es/modules/emoji/emoji-list.es.js +0 -9
  471. package/es/modules/emoji/emoji-list.es.js.map +0 -1
  472. package/es/modules/emoji/emoji-map.es.js +0 -9
  473. package/es/modules/emoji/emoji-map.es.js.map +0 -1
  474. package/es/modules/emoji/emoji-sprite.es.js +0 -5
  475. package/es/modules/emoji/emoji-sprite.es.js.map +0 -1
  476. package/es/modules/emoji/formats/emoji-blot.es.js +0 -41
  477. package/es/modules/emoji/formats/emoji-blot.es.js.map +0 -1
  478. package/es/modules/emoji/index.es.js +0 -8
  479. package/es/modules/emoji/index.es.js.map +0 -1
  480. package/es/modules/emoji/modules/emoji.es.js +0 -248
  481. package/es/modules/emoji/modules/emoji.es.js.map +0 -1
  482. package/es/modules/emoji/modules/toolbar-emoji.es.js +0 -153
  483. package/es/modules/emoji/modules/toolbar-emoji.es.js.map +0 -1
  484. package/es/modules/emoji/utils.es.js +0 -19
  485. package/es/modules/emoji/utils.es.js.map +0 -1
  486. package/es/modules/mention/Mention.es.js.map +0 -1
  487. package/es/modules/mention/MentionLink.es.js.map +0 -1
  488. package/lib/config/types/additional-toolbar-item.interface.cjs.js +0 -2
  489. package/lib/config/types/additional-toolbar-item.interface.cjs.js.map +0 -1
  490. package/lib/config/types/content-change.interface.cjs.js +0 -2
  491. package/lib/config/types/content-change.interface.cjs.js.map +0 -1
  492. package/lib/config/types/content-save.interface.cjs.js +0 -2
  493. package/lib/config/types/content-save.interface.cjs.js.map +0 -1
  494. package/lib/config/types/counter-option.interface.cjs.js +0 -2
  495. package/lib/config/types/counter-option.interface.cjs.js.map +0 -1
  496. package/lib/config/types/editor-toolbar.interface.cjs.js +0 -2
  497. package/lib/config/types/editor-toolbar.interface.cjs.js.map +0 -1
  498. package/lib/config/types/file-operation.interface.cjs.js +0 -2
  499. package/lib/config/types/file-operation.interface.cjs.js.map +0 -1
  500. package/lib/config/types/focus-change.interface.cjs.js +0 -2
  501. package/lib/config/types/focus-change.interface.cjs.js.map +0 -1
  502. package/lib/config/types/fullscreen-module.interface.cjs.js +0 -2
  503. package/lib/config/types/fullscreen-module.interface.cjs.js.map +0 -1
  504. package/lib/config/types/help-panel-item.interface.cjs.js +0 -2
  505. package/lib/config/types/help-panel-item.interface.cjs.js.map +0 -1
  506. package/lib/config/types/help-panel-option.interface.cjs.js +0 -2
  507. package/lib/config/types/help-panel-option.interface.cjs.js.map +0 -1
  508. package/lib/config/types/image-module.interface.cjs.js +0 -2
  509. package/lib/config/types/image-module.interface.cjs.js.map +0 -1
  510. package/lib/config/types/image-upload.interface.cjs.js +0 -2
  511. package/lib/config/types/image-upload.interface.cjs.js.map +0 -1
  512. package/lib/config/types/load-on-demand-module.interface.cjs.js +0 -2
  513. package/lib/config/types/load-on-demand-module.interface.cjs.js.map +0 -1
  514. package/lib/config/types/mention-module.interface.cjs.js +0 -2
  515. package/lib/config/types/mention-module.interface.cjs.js.map +0 -1
  516. package/lib/config/types/paste-change.interface.cjs.js +0 -2
  517. package/lib/config/types/paste-change.interface.cjs.js.map +0 -1
  518. package/lib/config/types/quick-menu-module.interface.cjs.js +0 -2
  519. package/lib/config/types/quick-menu-module.interface.cjs.js.map +0 -1
  520. package/lib/config/types/range.interface.cjs.js +0 -2
  521. package/lib/config/types/range.interface.cjs.js.map +0 -1
  522. package/lib/config/types/registry-options.interface.cjs.js +0 -2
  523. package/lib/config/types/registry-options.interface.cjs.js.map +0 -1
  524. package/lib/config/types/selection-change.interface.cjs.js +0 -2
  525. package/lib/config/types/selection-change.interface.cjs.js.map +0 -1
  526. package/lib/config/types/toolbar-item.interface.cjs.js +0 -2
  527. package/lib/config/types/toolbar-item.interface.cjs.js.map +0 -1
  528. package/lib/config/types/validate-error.interface.cjs.js +0 -2
  529. package/lib/config/types/validate-error.interface.cjs.js.map +0 -1
  530. package/lib/modules/custom-image/BlotFormatter.cjs.js.map +0 -1
  531. package/lib/modules/custom-image/Options.cjs.js +0 -95
  532. package/lib/modules/custom-image/Options.cjs.js.map +0 -1
  533. package/lib/modules/custom-image/actions/Action.cjs.js +0 -15
  534. package/lib/modules/custom-image/actions/Action.cjs.js.map +0 -1
  535. package/lib/modules/custom-image/actions/CustomResizeAction.cjs.js.map +0 -1
  536. package/lib/modules/custom-image/actions/DeleteAction.cjs.js.map +0 -1
  537. package/lib/modules/custom-image/image-bar.cjs.js +0 -127
  538. package/lib/modules/custom-image/image-bar.cjs.js.map +0 -1
  539. package/lib/modules/custom-image/specs/BlotSpec.cjs.js +0 -27
  540. package/lib/modules/custom-image/specs/BlotSpec.cjs.js.map +0 -1
  541. package/lib/modules/custom-image/specs/CustomImageSpec.cjs.js.map +0 -1
  542. package/lib/modules/custom-image/specs/ImageSpec.cjs.js +0 -29
  543. package/lib/modules/custom-image/specs/ImageSpec.cjs.js.map +0 -1
  544. package/lib/modules/emoji/emoji-list/index.cjs.js +0 -5
  545. package/lib/modules/emoji/emoji-list/people.cjs.js +0 -114
  546. package/lib/modules/emoji/emoji-list/people.cjs.js.map +0 -1
  547. package/lib/modules/emoji/emoji-list.cjs.js +0 -9
  548. package/lib/modules/emoji/emoji-list.cjs.js.map +0 -1
  549. package/lib/modules/emoji/emoji-map.cjs.js +0 -9
  550. package/lib/modules/emoji/emoji-map.cjs.js.map +0 -1
  551. package/lib/modules/emoji/emoji-sprite.cjs.js +0 -5
  552. package/lib/modules/emoji/emoji-sprite.cjs.js.map +0 -1
  553. package/lib/modules/emoji/formats/emoji-blot.cjs.js +0 -41
  554. package/lib/modules/emoji/formats/emoji-blot.cjs.js.map +0 -1
  555. package/lib/modules/emoji/index.cjs.js +0 -8
  556. package/lib/modules/emoji/index.cjs.js.map +0 -1
  557. package/lib/modules/emoji/modules/emoji.cjs.js +0 -248
  558. package/lib/modules/emoji/modules/emoji.cjs.js.map +0 -1
  559. package/lib/modules/emoji/modules/toolbar-emoji.cjs.js +0 -153
  560. package/lib/modules/emoji/modules/toolbar-emoji.cjs.js.map +0 -1
  561. package/lib/modules/emoji/utils.cjs.js +0 -19
  562. package/lib/modules/emoji/utils.cjs.js.map +0 -1
  563. package/lib/modules/mention/Mention.cjs.js.map +0 -1
  564. package/lib/modules/mention/MentionLink.cjs.js.map +0 -1
  565. package/types/config/types/additional-toolbar-item.interface.d.ts +0 -8
  566. package/types/config/types/content-change.interface.d.ts +0 -13
  567. package/types/config/types/content-save.interface.d.ts +0 -6
  568. package/types/config/types/counter-option.interface.d.ts +0 -9
  569. package/types/config/types/editor-toolbar.interface.d.ts +0 -6
  570. package/types/config/types/file-operation.interface.d.ts +0 -12
  571. package/types/config/types/focus-change.interface.d.ts +0 -4
  572. package/types/config/types/fullscreen-module.interface.d.ts +0 -4
  573. package/types/config/types/help-panel-item.interface.d.ts +0 -5
  574. package/types/config/types/help-panel-option.interface.d.ts +0 -7
  575. package/types/config/types/image-module.interface.d.ts +0 -3
  576. package/types/config/types/image-upload.interface.d.ts +0 -7
  577. package/types/config/types/load-on-demand-module.interface.d.ts +0 -5
  578. package/types/config/types/mention-module.interface.d.ts +0 -8
  579. package/types/config/types/paste-change.interface.d.ts +0 -6
  580. package/types/config/types/quick-menu-module.interface.d.ts +0 -3
  581. package/types/config/types/range.interface.d.ts +0 -4
  582. package/types/config/types/registry-options.interface.d.ts +0 -5
  583. package/types/config/types/selection-change.interface.d.ts +0 -8
  584. package/types/config/types/toolbar-item.interface.d.ts +0 -13
  585. package/types/config/types/validate-error.interface.d.ts +0 -13
  586. package/types/modules/custom-image/BlotFormatter.d.ts +0 -29
  587. package/types/modules/custom-image/Options.d.ts +0 -36
  588. package/types/modules/custom-image/actions/Action.d.ts +0 -7
  589. package/types/modules/custom-image/actions/DeleteAction.d.ts +0 -7
  590. package/types/modules/custom-image/image-bar.d.ts +0 -15
  591. package/types/modules/custom-image/specs/BlotSpec.d.ts +0 -13
  592. package/types/modules/custom-image/specs/ImageSpec.d.ts +0 -10
  593. package/types/modules/emoji/emoji-list/index.d.ts +0 -1
  594. package/types/modules/emoji/emoji-list/people.d.ts +0 -1
  595. package/types/modules/emoji/emoji-list.d.ts +0 -2
  596. package/types/modules/emoji/emoji-map.d.ts +0 -2
  597. package/types/modules/emoji/emoji-sprite.d.ts +0 -1
  598. package/types/modules/emoji/formats/emoji-blot.d.ts +0 -13
  599. package/types/modules/emoji/index.d.ts +0 -10
  600. package/types/modules/emoji/modules/emoji.d.ts +0 -38
  601. package/types/modules/emoji/modules/toolbar-emoji.d.ts +0 -8
  602. package/types/modules/emoji/utils.d.ts +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mention.es.js","sources":["../../../../src/modules/mention/mention.ts"],"sourcesContent":["import Quill from 'quill'\nimport { isNullOrUndefined } from '../../config/editor.utils'\nimport { DEFAULT_MENTION_CHAR, ON_MENTION_LINK_REMOVE } from './constants'\nimport { MentionLink } from './mention-link'\n\nconst Delta = Quill.import('delta')\nconst Parchment = Quill.import('parchment')\nconst { Scope } = Parchment\n\nexport interface MentionOption {\n containerClass?: string\n // dataAttributes?: string[]\n defaultLink?: string\n itemActiveClass?: string\n itemKey: string\n itemClass?: string\n listClass?: string\n listHideClass?: string\n maxHeight?: number\n mentionChar?: string\n remove?: (data: any) => void\n renderMentionItem?: (data: any) => string | HTMLElement\n renderMentionText?: (data: any) => string | HTMLElement\n search?: (term: string) => Promise<any[]> | any[]\n searchKey: string\n select?: (data: any) => void\n target?: string\n}\n\nexport class Mention {\n private readonly options: MentionOption\n private readonly mentionListEL: HTMLUListElement\n private activeMentionIndex = 0\n private latestMentionList: any[]\n private latestMentionCharPos: number\n private latestCaretPos: number\n private searchTerm = ''\n private needInsertBr = true\n private readonly defaultOptions: MentionOption = {\n defaultLink: '#',\n target: '_blank',\n mentionChar: DEFAULT_MENTION_CHAR,\n maxHeight: 200,\n renderMentionItem(data: any) {\n let mentionItem = data.name || data.id\n if (this.itemKey) {\n mentionItem = data[this.itemKey]\n }\n const dom = document.createElement('SPAN')\n dom.textContent = mentionItem\n return dom\n },\n renderMentionText(data: any) {\n let mentionText = data.name || data.id\n if (this.itemKey) {\n mentionText = data[this.itemKey]\n }\n return `${mentionText}`\n },\n containerClass: 'ql-mention-list-container',\n listClass: 'ql-mention-list',\n listHideClass: 'ql-mention-list--hide',\n itemClass: 'ql-mention-item',\n itemActiveClass: 'ql-mention-item--active',\n itemKey: 'name',\n searchKey: 'name',\n // dataAttributes: ['id'],\n select(_data: any) {},\n remove(_data: any) {},\n }\n\n static register() {\n Quill.register(MentionLink)\n }\n\n // @ts-ignore\n constructor(private quill: Quill, options: MentionOption) {\n if (!options.search) {\n console.warn('please provide a search function!')\n return\n }\n\n this.options = Object.assign(this.defaultOptions, options)\n const container = document.createElement('div')\n container.classList.add('ql-mention-list-container')\n if (this.options.containerClass !== 'ql-mention-list-container') {\n container.classList.add(this.options.containerClass)\n }\n this.mentionListEL = document.createElement('ul')\n this.mentionListEL.classList.add(this.options.listClass, this.options.listHideClass)\n this.mentionListEL.style.cssText += `\n max-height: ${this.options.maxHeight}px;\n `\n\n quill.on(Quill.events.TEXT_CHANGE, this.handleTextChange)\n quill.keyboard.addBinding({ key: 'ArrowUp' }, this.handleArrowUpKey)\n quill.keyboard.addBinding({ key: 'ArrowDown' }, this.handleArrowDownKey)\n quill.keyboard.addBinding({ key: 'Enter' }, this.handleEnterKey)\n quill.keyboard.addBinding({ key: 'Tab' }, this.handleEnterKey)\n quill.keyboard.addBinding({ key: 'Escape' }, this.handleEscapeKey)\n quill.keyboard.bindings.Enter.unshift(quill.keyboard.bindings.Enter.pop())\n quill.keyboard.bindings.Tab.unshift(quill.keyboard.bindings.Tab.pop())\n quill.keyboard.bindings.Escape.unshift(quill.keyboard.bindings.Escape.pop())\n\n const customKeyboardEnter = {\n key: 'Enter',\n shiftKey: null,\n handler: (range, context) => {\n const lineFormats = Object.keys(context.format).reduce(\n (formats, format) => {\n if (\n this.quill.scroll.query(format, Scope.BLOCK)\n && !Array.isArray(context.format[format])\n ) {\n formats[format] = context.format[format]\n }\n return formats\n },\n {},\n )\n\n // fix: 解决@提醒之后插入多余空行和光标位置不对的问题\n let selectionIndex = range.index - this.searchTerm.length\n let delta = new Delta()\n .retain(range.index)\n .delete(range.length)\n if (this.needInsertBr) {\n delta = delta.insert('\\n', lineFormats)\n selectionIndex = range.index + 1\n }\n\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(selectionIndex, Quill.sources.SILENT)\n this.quill.focus()\n\n Object.keys(context.format).forEach((name) => {\n if (!isNullOrUndefined(lineFormats[name])) return\n if (Array.isArray(context.format[name])) return\n if (name === 'code' || name === 'link') return\n this.quill.format(name, context.format[name], Quill.sources.USER)\n })\n\n this.needInsertBr = true // 标记是否是输入@提醒的Enter\n },\n }\n\n // 用自定义的Enter替换内置的Enter\n quill.keyboard.bindings.Enter = quill.keyboard.bindings.Enter.map((item) => {\n const buildinKeyboardEnter = item.format === undefined && item.shiftKey === null\n if (buildinKeyboardEnter) {\n return customKeyboardEnter\n }\n else {\n return item\n }\n })\n\n this.on('click', this.handleMouseClick)\n this.on('mouseover', this.handleMouseEnter)\n quill.emitter.on(ON_MENTION_LINK_REMOVE, async ({ mention, name }) => {\n const [result] = (mention && [mention]) || (await this.options.search(name))\n this.options.remove(result)\n })\n container.appendChild(this.mentionListEL)\n quill.container.parentElement.insertBefore(container, quill.container)\n }\n\n on(eventName, callback) {\n this.mentionListEL.addEventListener(eventName, (evt) => {\n let\n target = evt.target\n let targetItemEL\n\n while (this.mentionListEL.contains(target) && target !== this.mentionListEL) {\n if (target.classList.contains(this.options.itemClass)) {\n targetItemEL = target\n }\n target = target.parentElement\n }\n\n if (targetItemEL) {\n callback.call(this, targetItemEL, this.getMentionItemIndex(targetItemEL))\n }\n })\n }\n\n getMentionItemIndex(itemEl: Element) {\n return [].reduce.call(this.mentionListEL.children, (index, item, idx) => item === itemEl ? idx : index, -1)\n }\n\n handleTextChange = (_delta, _oldDelta, source) => {\n // defer handler to make sure that we can get correct quill selection range.\n setTimeout(() => {\n if (Quill.sources.USER === source) {\n const range = this.quill.getSelection()\n if (!range) {\n return\n }\n\n const caretPos = this.latestCaretPos = range.index\n // beforeCaretText的计算有问题,没有把图片内容和@提醒内容的非字符内容算进去\n const content = this.quill.getContents()\n const beforeCaretText = content.reduce((newText, op) => {\n if (typeof op.insert === 'string') {\n return (newText += op.insert)\n }\n else {\n return (newText += ' ') // 将图片内容和@提醒内容的非字符内容置为' ',算一个位置\n }\n }, '')\n const mentionCharPos = beforeCaretText.lastIndexOf(this.options.mentionChar)\n\n if (mentionCharPos > -1) {\n const searchTerm = beforeCaretText.substring(mentionCharPos + this.options.mentionChar.length, caretPos)\n this.searchTerm = searchTerm\n if (!''.startsWith.call(searchTerm, ' ')) {\n this.latestMentionCharPos = mentionCharPos\n this.searchMentionListByTerm(searchTerm)\n }\n else {\n this.hideMentionList()\n }\n }\n else {\n this.hideMentionList()\n }\n }\n })\n }\n\n handleMouseClick(_itemEl: HTMLLIElement, index: number) {\n this.selectMentionItem(index, true)\n this.quill.focus()\n }\n\n handleMouseEnter(_itemEl: HTMLLIElement, index: number) {\n this.activeMentionIndex = index\n this.highlightMentionItem(index)\n }\n\n handleArrowUpKey = () => {\n if (this.isOpen()) {\n this.activeMentionIndex\n = (this.activeMentionIndex + this.latestMentionList.length - 1) % this.latestMentionList.length\n this.highlightMentionItem(this.activeMentionIndex)\n return false\n }\n return true\n }\n\n handleArrowDownKey = () => {\n if (this.isOpen()) {\n this.activeMentionIndex = (this.activeMentionIndex + 1) % this.latestMentionList.length\n this.highlightMentionItem(this.activeMentionIndex)\n return false\n }\n return true\n }\n\n handleEnterKey = () => {\n if (this.isOpen()) {\n this.selectMentionItem()\n this.needInsertBr = false\n }\n return true\n }\n\n handleEscapeKey = () => {\n if (this.isOpen()) {\n this.hideMentionList()\n return false\n }\n return true\n }\n\n getActiveMentionItem() {\n return this.mentionListEL.querySelector(`.${this.options.itemActiveClass}`)\n }\n\n isOpen() {\n return !this.mentionListEL.classList.contains(this.options.listHideClass)\n }\n\n async searchMentionListByTerm(term: string) {\n const mentionList = await this.options.search(term)\n this.latestMentionList = mentionList\n if (!mentionList || mentionList.length === 0) {\n return this.hideMentionList()\n }\n\n this.showMentionList(mentionList)\n }\n\n showMentionList(mentionList: any[]) {\n if (!this.isOpen()) {\n this.mentionListEL.classList.remove(this.options.listHideClass)\n }\n this.activeMentionIndex = 0\n this.setMentionListPos()\n this.render(mentionList)\n }\n\n hideMentionList() {\n if (this.isOpen()) {\n this.activeMentionIndex = 0\n this.mentionListEL.classList.add(this.options.listHideClass)\n }\n }\n\n setMentionListPos() {\n const cursorIndex = this.quill.selection.savedRange.index\n const cursorBounds = this.quill.getBounds(cursorIndex)\n const { left, top } = cursorBounds\n const container = this.quill.container\n const hostElement = container.parentNode as HTMLDivElement\n const { left: editorLeft, top: editorTop } = container.getBoundingClientRect()\n const { left: hostElementLeft, top: hostElementTop } = hostElement.getBoundingClientRect()\n const relativeLeft = editorLeft - hostElementLeft\n const relativeTop = editorTop - hostElementTop\n const menuLeft = left + relativeLeft - 5\n const menuTop = top + relativeTop + 20\n this.mentionListEL.style.cssText += `\n left: ${menuLeft}px;\n top: ${menuTop}px;\n `\n }\n\n render(mentionList: any[]) {\n const wrapEl = document.createElement('div');\n\n [].forEach.call(mentionList, (mentionItem, index) => {\n const mentionItemEl = document.createElement('li')\n mentionItemEl.classList.add(this.options.itemClass)\n if (index === this.activeMentionIndex) {\n mentionItemEl.classList.add(this.options.itemActiveClass)\n }\n const renderResult = this.options.renderMentionItem(mentionItem)\n if (typeof renderResult === 'string') {\n mentionItemEl.insertAdjacentHTML('afterbegin', renderResult)\n }\n else {\n mentionItemEl.insertAdjacentElement('afterbegin', renderResult)\n }\n wrapEl.appendChild(mentionItemEl)\n })\n\n this.mentionListEL.innerHTML = wrapEl.innerHTML\n }\n\n highlightMentionItem(index: number) {\n const oldActiveItem = this.getActiveMentionItem()\n if (oldActiveItem) {\n oldActiveItem.classList.remove(this.options.itemActiveClass)\n }\n\n const newActiveItem = this.mentionListEL.querySelector(`.${this.options.itemClass}:nth-of-type(${index + 1})`)\n if (newActiveItem) {\n newActiveItem.classList.add(this.options.itemActiveClass)\n this.scrollIntoView(newActiveItem)\n }\n }\n\n scrollIntoView(node: Element): void {\n const nodeAsAny: any = node\n if (nodeAsAny.scrollIntoViewIfNeeded) {\n nodeAsAny.scrollIntoViewIfNeeded(false)\n return\n }\n if (node.scrollIntoView) {\n node.scrollIntoView(false)\n }\n }\n\n selectMentionItem(index = this.activeMentionIndex, isClick?: boolean) {\n const activeMentionItem = this.latestMentionList[index]\n this.insertMentionBlot(activeMentionItem, isClick)\n this.options.select(activeMentionItem)\n this.hideMentionList()\n }\n\n insertMentionBlot(activeMentionItem: any, isClick?: boolean) {\n const mention = this.options.renderMentionText(activeMentionItem)\n const delta = new Delta()\n .retain(this.latestMentionCharPos)\n .delete(this.latestCaretPos - this.latestMentionCharPos)\n .insert({\n [MentionLink.blotName]: {\n char: this.options.mentionChar,\n text: mention,\n mention: activeMentionItem,\n link: activeMentionItem.link || this.options.defaultLink,\n target: activeMentionItem.target || this.options.target,\n searchKey: this.options.searchKey,\n },\n })\n if (isClick) {\n this.quill.updateContents(delta, Quill.sources.USER)\n }\n else {\n this.quill.updateContents(delta, Quill.sources.API)\n }\n this.quill.setSelection(this.latestMentionCharPos + 1, Quill.sources.API)\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import Quill from "quill";
2
- import QuillShortcutKey, { defaultShortKey } from "quill-shortcut-key";
2
+ import QuillShortcutKey, { searchAndSort, defaultShortKey } from "quill-shortcut-key";
3
3
  import "../../config/index.es.js";
4
4
  import { CHANGE_LANGUAGE_EVENT } from "../../config/editor.config.es.js";
5
5
  class ShortCutKey extends QuillShortcutKey {
@@ -9,6 +9,7 @@ class ShortCutKey extends QuillShortcutKey {
9
9
  this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {
10
10
  this.destroyMenuList();
11
11
  this.options = this.resolveOptions(options);
12
+ this.menuSorter = searchAndSort.bind(this, this.getAllMenuItems());
12
13
  this.placeholderTip.remove();
13
14
  this.placeholderTip = this.initPlaceholder();
14
15
  this.placeholderUpdate();
@@ -25,6 +26,21 @@ class ShortCutKey extends QuillShortcutKey {
25
26
  if (value.isMenuItemsAdd) {
26
27
  value.menuItems = [...defaultMenuItems, ...value.menuItems];
27
28
  }
29
+ const deepCopyMenuItems = (items) => {
30
+ return items.map((item) => {
31
+ const value2 = {
32
+ ...item
33
+ };
34
+ if (item.title) {
35
+ value2.title = this.quill.getLangText(item.title);
36
+ }
37
+ if (item.type === "group") {
38
+ value2.children = deepCopyMenuItems(item.children);
39
+ }
40
+ return value2;
41
+ });
42
+ };
43
+ value.menuItems = deepCopyMenuItems(value.menuItems);
28
44
  return value;
29
45
  }
30
46
  defaultMenuList() {
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../../../../src/modules/shortcut-key/index.ts"],"sourcesContent":["import type { Range } from 'quill'\r\nimport type { QuillShortcutKeyInputOptions, QuillShortcutKeyOptions } from 'quill-shortcut-key'\r\nimport type { Context } from 'quill/modules/keyboard'\r\nimport type TypeToolbar from 'quill/modules/toolbar'\r\nimport type FluentEditor from '../../fluent-editor'\r\nimport Quill from 'quill'\r\nimport QuillShortcutKey, { defaultShortKey } from 'quill-shortcut-key'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\r\n\r\ninterface ShortCutKeyCustomOptions { isMenuItemsAdd: boolean }\r\ntype ShortCutKeyInputOptions = QuillShortcutKeyInputOptions & ShortCutKeyCustomOptions\r\ntype ShortCutKeyOptions = QuillShortcutKeyOptions & ShortCutKeyCustomOptions\r\n\r\nexport class ShortCutKey extends QuillShortcutKey {\r\n options: ShortCutKeyOptions\r\n constructor(public quill: FluentEditor, options: Partial<ShortCutKeyInputOptions>) {\r\n super(quill, options)\r\n\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.destroyMenuList()\r\n this.options = this.resolveOptions(options)\r\n this.placeholderTip.remove()\r\n this.placeholderTip = this.initPlaceholder()\r\n this.placeholderUpdate()\r\n })\r\n }\r\n\r\n resolveOptions(options: Partial<ShortCutKeyInputOptions>) {\r\n const defaultMenuItems = this.defaultMenuList()\r\n const value = Object.assign({\r\n placeholder: this.quill.getLangText('input-recall-menu-placeholder'),\r\n menuItems: defaultMenuItems,\r\n isMenuItemsAdd: false,\r\n menuKeyboardControls: () => false,\r\n }, options)\r\n if (value.isMenuItemsAdd) {\r\n value.menuItems = [...defaultMenuItems, ...value.menuItems]\r\n }\r\n\r\n return value\r\n }\r\n\r\n defaultMenuList() {\r\n const icons = Quill.import('ui/icons') as Record<string, any>\r\n const toolbarHandler = (format: string) => {\r\n return function (range: Range | null) {\r\n if (!range) return\r\n const toolbarModule = this.getModule('toolbar') as TypeToolbar\r\n if (!toolbarModule) return\r\n toolbarModule.handlers[format].call(toolbarModule, true)\r\n }\r\n }\r\n const formatHandler = (format: string, value: any) => {\r\n return function (this: Quill, range: Range | null) {\r\n if (!range) return\r\n this.formatLine(range.index, 0, format, value, Quill.sources.USER)\r\n }\r\n }\r\n\r\n return [\r\n ...new Array(6).fill(0).map((_, i) => ({\r\n type: 'item' as const,\r\n name: `h${i + 1}`,\r\n alias: ['header', `head${i + 1}`],\r\n icon: icons.header[i + 1],\r\n title: this.quill.getLangText(`header-${i + 1}`),\r\n onClick: formatHandler('header', i + 1),\r\n })),\r\n {\r\n type: 'item' as const,\r\n name: 'yy',\r\n alias: ['blockquote'],\r\n icon: icons.blockquote,\r\n title: this.quill.getLangText('blockquote'),\r\n onClick: formatHandler('blockquote', true),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'dm',\r\n alias: ['code', 'codeblock'],\r\n icon: icons['code-block'],\r\n title: this.quill.getLangText('code-block'),\r\n onClick: formatHandler('code-block', true),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'lj',\r\n alias: ['link'],\r\n icon: icons.link,\r\n title: this.quill.getLangText('link'),\r\n onClick(this: Quill, range: Range | null, _: any) {\r\n if (!range) return\r\n const title = 'link'\r\n const link = prompt('Enter link URL')\r\n if (!link) return\r\n this.insertText(range.index, title, Quill.sources.USER)\r\n this.formatText(range.index, range.length + title.length, 'link', link, Quill.sources.USER)\r\n this.setSelection({ index: range.index, length: range.index + title.length })\r\n },\r\n },\r\n {\r\n type: 'group' as const,\r\n name: 'lb',\r\n alias: [],\r\n hideSearch: true,\r\n icon: icons.list.bullet,\r\n title: this.quill.getLangText('list'),\r\n children: [\r\n {\r\n type: 'item' as const,\r\n name: 'wxlb',\r\n alias: ['list', 'bullet'],\r\n icon: icons.list.bullet,\r\n title: this.quill.getLangText('list-bullet'),\r\n onClick: formatHandler('list', 'bullet'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'yxlb',\r\n alias: ['list', 'ordered'],\r\n icon: icons.list.ordered,\r\n title: this.quill.getLangText('list-ordered'),\r\n onClick: formatHandler('list', 'ordered'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'rwlb',\r\n alias: ['list', 'check'],\r\n icon: icons.list.check,\r\n title: this.quill.getLangText('list-check'),\r\n onClick: formatHandler('list', 'unchecked'),\r\n },\r\n ],\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'bq',\r\n alias: ['emoji'],\r\n icon: icons.emoji,\r\n title: this.quill.getLangText('emoji'),\r\n onClick(this: Quill, range: Range | null, _: any) {\r\n if (!range) return\r\n const toolbarModule = this.getModule('toolbar') as TypeToolbar\r\n if (!toolbarModule) return\r\n // TODO: keyboard handler emoji select(in emoji module)\r\n toolbarModule.handlers.emoji.call(toolbarModule, true)\r\n },\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'jp',\r\n alias: ['screenshot'],\r\n icon: icons.screenshot,\r\n title: this.quill.getLangText('screenshot'),\r\n onClick: toolbarHandler('screenshot'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'gs',\r\n alias: ['formula'],\r\n icon: icons.formula,\r\n title: this.quill.getLangText('formula'),\r\n onClick: toolbarHandler('formula'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'tp',\r\n alias: ['image', 'pic', 'picture'],\r\n icon: icons.image,\r\n title: this.quill.getLangText('image'),\r\n onClick: toolbarHandler('image'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'sp',\r\n alias: ['video'],\r\n icon: icons.video,\r\n title: this.quill.getLangText('video'),\r\n onClick: toolbarHandler('video'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'wj',\r\n alias: ['file'],\r\n icon: icons.file,\r\n title: this.quill.getLangText('file'),\r\n onClick: toolbarHandler('file'),\r\n },\r\n ]\r\n }\r\n}\r\n\r\nexport const shortKey = {\r\n ...defaultShortKey,\r\n link: {\r\n key: 'k',\r\n shortKey: true,\r\n handler(_, context: Context) {\r\n const toolbar = this.quill.getModule('toolbar') as TypeToolbar\r\n if (!toolbar) return\r\n toolbar.handlers.link.call(toolbar, !context.format.link)\r\n },\r\n },\r\n color: {\r\n key: 'c',\r\n altKey: true,\r\n shortKey: true,\r\n handler() {\r\n const selected = this.quill.getModule('toolbar').container.querySelector('.ql-color.ql-color-picker .ql-picker-options .ql-selected')\r\n this.quill.format('color', selected?.dataset?.value || false, Quill.sources.USER)\r\n },\r\n },\r\n background: {\r\n key: 'b',\r\n altKey: true,\r\n shortKey: true,\r\n handler() {\r\n const selected = this.quill.getModule('toolbar').container.querySelector('.ql-background.ql-color-picker .ql-picker-options .ql-selected')\r\n this.quill.format('background', selected?.dataset?.value || false, Quill.sources.USER)\r\n },\r\n },\r\n}\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../../../../src/modules/shortcut-key/index.ts"],"sourcesContent":["import type { Range } from 'quill'\r\nimport type { Menu, MenuItemsGroup, QuillShortcutKeyInputOptions, QuillShortcutKeyOptions } from 'quill-shortcut-key'\r\nimport type { Context } from 'quill/modules/keyboard'\r\nimport type TypeToolbar from 'quill/modules/toolbar'\r\nimport type FluentEditor from '../../fluent-editor'\r\nimport Quill from 'quill'\r\nimport QuillShortcutKey, { defaultShortKey, searchAndSort } from 'quill-shortcut-key'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\r\n\r\nexport interface ShortCutKeyCustomOptions { isMenuItemsAdd: boolean }\r\nexport type ShortCutKeyInputOptions = QuillShortcutKeyInputOptions & ShortCutKeyCustomOptions\r\nexport type ShortCutKeyOptions = QuillShortcutKeyOptions & ShortCutKeyCustomOptions\r\n\r\nexport class ShortCutKey extends QuillShortcutKey {\r\n constructor(public quill: FluentEditor, options: Partial<ShortCutKeyInputOptions>) {\r\n super(quill, options)\r\n\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.destroyMenuList()\r\n this.options = this.resolveOptions(options)\r\n this.menuSorter = searchAndSort.bind(this, this.getAllMenuItems()) as (searchText: string) => Menu\r\n this.placeholderTip.remove()\r\n this.placeholderTip = this.initPlaceholder()\r\n this.placeholderUpdate()\r\n })\r\n }\r\n\r\n resolveOptions(options: Partial<ShortCutKeyInputOptions>) {\r\n const defaultMenuItems = this.defaultMenuList()\r\n const value: ShortCutKeyOptions = Object.assign({\r\n placeholder: this.quill.getLangText('input-recall-menu-placeholder'),\r\n menuItems: defaultMenuItems,\r\n isMenuItemsAdd: false,\r\n menuKeyboardControls: () => false,\r\n }, options)\r\n if (value.isMenuItemsAdd) {\r\n value.menuItems = [...defaultMenuItems, ...value.menuItems]\r\n }\r\n\r\n const deepCopyMenuItems = (items: Menu): Menu => {\r\n return items.map((item) => {\r\n const value = {\r\n ...item,\r\n }\r\n if (item.title) {\r\n value.title = this.quill.getLangText(item.title)\r\n }\r\n if (item.type === 'group') {\r\n (value as MenuItemsGroup).children = deepCopyMenuItems(item.children)\r\n }\r\n return value\r\n })\r\n }\r\n value.menuItems = deepCopyMenuItems(value.menuItems)\r\n return value\r\n }\r\n\r\n defaultMenuList() {\r\n const icons = Quill.import('ui/icons') as Record<string, any>\r\n const toolbarHandler = (format: string) => {\r\n return function (this: Quill, range: Range | null) {\r\n if (!range) return\r\n const toolbarModule = this.getModule('toolbar') as TypeToolbar\r\n if (!toolbarModule) return\r\n toolbarModule.handlers[format].call(toolbarModule, true)\r\n }\r\n }\r\n const formatHandler = (format: string, value: any) => {\r\n return function (this: Quill, range: Range | null) {\r\n if (!range) return\r\n this.formatLine(range.index, 0, format, value, Quill.sources.USER)\r\n }\r\n }\r\n\r\n return [\r\n ...new Array(6).fill(0).map((_, i) => ({\r\n type: 'item' as const,\r\n name: `h${i + 1}`,\r\n alias: ['header', `head${i + 1}`],\r\n icon: icons.header[i + 1],\r\n title: this.quill.getLangText(`header-${i + 1}`),\r\n onClick: formatHandler('header', i + 1),\r\n })),\r\n {\r\n type: 'item' as const,\r\n name: 'yy',\r\n alias: ['blockquote'],\r\n icon: icons.blockquote,\r\n title: this.quill.getLangText('blockquote'),\r\n onClick: formatHandler('blockquote', true),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'dm',\r\n alias: ['code', 'codeblock'],\r\n icon: icons['code-block'],\r\n title: this.quill.getLangText('code-block'),\r\n onClick: formatHandler('code-block', true),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'lj',\r\n alias: ['link'],\r\n icon: icons.link,\r\n title: this.quill.getLangText('link'),\r\n onClick(this: Quill, range: Range | null, _: any) {\r\n if (!range) return\r\n const title = 'link'\r\n const link = prompt('Enter link URL')\r\n if (!link) return\r\n this.insertText(range.index, title, Quill.sources.USER)\r\n this.formatText(range.index, range.length + title.length, 'link', link, Quill.sources.USER)\r\n this.setSelection({ index: range.index, length: range.index + title.length })\r\n },\r\n },\r\n {\r\n type: 'group' as const,\r\n name: 'lb',\r\n alias: [],\r\n hideSearch: true,\r\n icon: icons.list.bullet,\r\n title: this.quill.getLangText('list'),\r\n children: [\r\n {\r\n type: 'item' as const,\r\n name: 'wxlb',\r\n alias: ['list', 'bullet'],\r\n icon: icons.list.bullet,\r\n title: this.quill.getLangText('list-bullet'),\r\n onClick: formatHandler('list', 'bullet'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'yxlb',\r\n alias: ['list', 'ordered'],\r\n icon: icons.list.ordered,\r\n title: this.quill.getLangText('list-ordered'),\r\n onClick: formatHandler('list', 'ordered'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'rwlb',\r\n alias: ['list', 'check'],\r\n icon: icons.list.check,\r\n title: this.quill.getLangText('list-check'),\r\n onClick: formatHandler('list', 'unchecked'),\r\n },\r\n ],\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'bq',\r\n alias: ['emoji'],\r\n icon: icons.emoji,\r\n title: this.quill.getLangText('emoji'),\r\n onClick(this: Quill, range: Range | null, _: any) {\r\n if (!range) return\r\n const toolbarModule = this.getModule('toolbar') as TypeToolbar\r\n if (!toolbarModule) return\r\n // TODO: keyboard handler emoji select(in emoji module)\r\n toolbarModule.handlers.emoji.call(toolbarModule, true)\r\n },\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'jp',\r\n alias: ['screenshot'],\r\n icon: icons.screenshot,\r\n title: this.quill.getLangText('screenshot'),\r\n onClick: toolbarHandler('screenshot'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'gs',\r\n alias: ['formula'],\r\n icon: icons.formula,\r\n title: this.quill.getLangText('formula'),\r\n onClick: toolbarHandler('formula'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'tp',\r\n alias: ['image', 'pic', 'picture'],\r\n icon: icons.image,\r\n title: this.quill.getLangText('image'),\r\n onClick: toolbarHandler('image'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'sp',\r\n alias: ['video'],\r\n icon: icons.video,\r\n title: this.quill.getLangText('video'),\r\n onClick: toolbarHandler('video'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'wj',\r\n alias: ['file'],\r\n icon: icons.file,\r\n title: this.quill.getLangText('file'),\r\n onClick: toolbarHandler('file'),\r\n },\r\n ]\r\n }\r\n}\r\n\r\nexport const shortKey = {\r\n ...defaultShortKey,\r\n link: {\r\n key: 'k',\r\n shortKey: true,\r\n handler(this: { quill: Quill }, _: any, context: Context) {\r\n const toolbar = this.quill.getModule('toolbar') as TypeToolbar\r\n if (!toolbar) return\r\n toolbar.handlers.link.call(toolbar, !context.format.link)\r\n },\r\n },\r\n color: {\r\n key: 'c',\r\n altKey: true,\r\n shortKey: true,\r\n handler(this: { quill: Quill }) {\r\n const selected = (this.quill.getModule('toolbar') as TypeToolbar).container!.querySelector('.ql-color.ql-color-picker .ql-picker-options .ql-selected') as HTMLElement\r\n this.quill.format('color', selected?.dataset?.value || false, Quill.sources.USER)\r\n },\r\n },\r\n background: {\r\n key: 'b',\r\n altKey: true,\r\n shortKey: true,\r\n handler(this: { quill: Quill }) {\r\n const selected = (this.quill.getModule('toolbar') as TypeToolbar).container!.querySelector('.ql-background.ql-color-picker .ql-picker-options .ql-selected') as HTMLElement\r\n this.quill.format('background', selected?.dataset?.value || false, Quill.sources.USER)\r\n },\r\n },\r\n}\r\n"],"names":["value"],"mappings":"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"}
@@ -1,7 +1,11 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
1
4
  import Quill from "quill";
2
5
  const Syntax = Quill.import("modules/syntax");
3
6
  class CustomSyntax extends Syntax {
4
7
  }
8
+ __publicField(CustomSyntax, "DEFAULTS");
5
9
  CustomSyntax.DEFAULTS = {
6
10
  hljs: (() => {
7
11
  return window.hljs;
@@ -1 +1 @@
1
- {"version":3,"file":"syntax.es.js","sources":["../../../src/modules/syntax.ts"],"sourcesContent":["import type TypeSyntax from 'quill/modules/syntax'\r\nimport Quill from 'quill'\r\n\r\nconst Syntax = Quill.import('modules/syntax') as typeof TypeSyntax\r\n\r\n// @dynamic\r\nclass CustomSyntax extends Syntax {\r\n static DEFAULTS: { hljs: any, interval: number, languages: { key: string, label: string }[] }\r\n}\r\n\r\nCustomSyntax.DEFAULTS = {\r\n hljs: (() => {\r\n // @ts-ignore\r\n return window.hljs\r\n })(),\r\n interval: 1000,\r\n languages: [\r\n { key: 'plain', label: 'Plain' },\r\n { key: 'bash', label: 'Bash' },\r\n { key: 'cpp', label: 'C++' },\r\n { key: 'cs', label: 'C#' },\r\n { key: 'css', label: 'CSS' },\r\n { key: 'diff', label: 'Diff' },\r\n { key: 'xml', label: 'HTML/XML' },\r\n { key: 'java', label: 'Java' },\r\n { key: 'javascript', label: 'Javascript' },\r\n { key: 'markdown', label: 'Markdown' },\r\n { key: 'php', label: 'PHP' },\r\n { key: 'python', label: 'Python' },\r\n { key: 'ruby', label: 'Ruby' },\r\n { key: 'sql', label: 'SQL' },\r\n ],\r\n}\r\n\r\nexport default CustomSyntax\r\n"],"names":[],"mappings":";AAGA,MAAM,SAAS,MAAM,OAAO,gBAAgB;AAG5C,MAAM,qBAAqB,OAAO;AAElC;AAEA,aAAa,WAAW;AAAA,EACtB,OAAO,MAAM;AAEX,WAAO,OAAO;AAAA,EAAA,GACb;AAAA,EACH,UAAU;AAAA,EACV,WAAW;AAAA,IACT,EAAE,KAAK,SAAS,OAAO,QAAQ;AAAA,IAC/B,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,IAC3B,EAAE,KAAK,MAAM,OAAO,KAAK;AAAA,IACzB,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,IAC3B,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,OAAO,OAAO,WAAW;AAAA,IAChC,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,cAAc,OAAO,aAAa;AAAA,IACzC,EAAE,KAAK,YAAY,OAAO,WAAW;AAAA,IACrC,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,IAC3B,EAAE,KAAK,UAAU,OAAO,SAAS;AAAA,IACjC,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,EAAA;AAE/B;"}
1
+ {"version":3,"file":"syntax.es.js","sources":["../../../src/modules/syntax.ts"],"sourcesContent":["import type TypeSyntax from 'quill/modules/syntax'\nimport Quill from 'quill'\n\nconst Syntax = Quill.import('modules/syntax') as typeof TypeSyntax\n\n// @dynamic\nclass CustomSyntax extends Syntax {\n static DEFAULTS: { hljs: any, interval: number, languages: { key: string, label: string }[] }\n}\n\nCustomSyntax.DEFAULTS = {\n hljs: (() => {\n // @ts-ignore\n return window.hljs\n })(),\n interval: 1000,\n languages: [\n { key: 'plain', label: 'Plain' },\n { key: 'bash', label: 'Bash' },\n { key: 'cpp', label: 'C++' },\n { key: 'cs', label: 'C#' },\n { key: 'css', label: 'CSS' },\n { key: 'diff', label: 'Diff' },\n { key: 'xml', label: 'HTML/XML' },\n { key: 'java', label: 'Java' },\n { key: 'javascript', label: 'Javascript' },\n { key: 'markdown', label: 'Markdown' },\n { key: 'php', label: 'PHP' },\n { key: 'python', label: 'Python' },\n { key: 'ruby', label: 'Ruby' },\n { key: 'sql', label: 'SQL' },\n ],\n}\n\nexport default CustomSyntax\n"],"names":[],"mappings":";;;;AAGA,MAAM,SAAS,MAAM,OAAO,gBAAgB;AAG5C,MAAM,qBAAqB,OAAO;AAElC;AADE,cADI,cACG;AAGT,aAAa,WAAW;AAAA,EACtB,OAAO,MAAM;AAEX,WAAO,OAAO;AAAA,EAAA,GACb;AAAA,EACH,UAAU;AAAA,EACV,WAAW;AAAA,IACT,EAAE,KAAK,SAAS,OAAO,QAAQ;AAAA,IAC/B,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,IAC3B,EAAE,KAAK,MAAM,OAAO,KAAK;AAAA,IACzB,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,IAC3B,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,OAAO,OAAO,WAAW;AAAA,IAChC,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,cAAc,OAAO,aAAa;AAAA,IACzC,EAAE,KAAK,YAAY,OAAO,WAAW;AAAA,IACrC,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,IAC3B,EAAE,KAAK,UAAU,OAAO,SAAS;AAAA,IACjC,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,EAAA;AAE/B;"}
@@ -1,10 +1,19 @@
1
1
  import "../../config/index.es.js";
2
+ import { isFunction } from "../../utils/is.es.js";
2
3
  import { CHANGE_LANGUAGE_EVENT } from "../../config/editor.config.es.js";
3
4
  function generateTableUp(QuillTableUp) {
4
5
  return class extends QuillTableUp {
5
6
  constructor(quill, options) {
6
7
  super(quill, options);
7
8
  this.quill = quill;
9
+ if (!this.quill.options["format-painter"]) this.quill.options["format-painter"] = {};
10
+ const currentIgnoreFormat = this.quill.options["format-painter"].ignoreFormat || [];
11
+ this.quill.options["format-painter"].ignoreFormat = Array.from(
12
+ /* @__PURE__ */ new Set([
13
+ ...currentIgnoreFormat,
14
+ "table-up-cell-inner"
15
+ ])
16
+ );
8
17
  this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {
9
18
  this.options.texts = this.resolveTexts(options.texts);
10
19
  const toolbar = this.quill.getModule("toolbar");
@@ -17,15 +26,16 @@ function generateTableUp(QuillTableUp) {
17
26
  }
18
27
  }
19
28
  }
20
- if (this.tableSelection) {
21
- this.tableSelection.destroy();
22
- }
23
- if (this.options.selection) {
24
- this.tableSelection = new this.options.selection(this, this.quill, this.options.selectionOptions);
25
- }
29
+ Object.keys(this.modules).forEach((key) => {
30
+ if (isFunction(this.modules[key].destroy)) {
31
+ this.modules[key].destroy();
32
+ }
33
+ });
34
+ this.modules = {};
35
+ this.initModules();
26
36
  });
27
37
  }
28
- resolveTexts(options) {
38
+ resolveTexts(options = {}) {
29
39
  return Object.assign({
30
40
  fullCheckboxText: this.quill.getLangText("fullCheckboxText"),
31
41
  customBtnText: this.quill.getLangText("customBtnText"),
@@ -51,7 +61,10 @@ function generateTableUp(QuillTableUp) {
51
61
  DeleteTable: this.quill.getLangText("DeleteTable"),
52
62
  BackgroundColor: this.quill.getLangText("BackgroundColor"),
53
63
  BorderColor: this.quill.getLangText("BorderColor")
54
- }, options);
64
+ }, Object.entries(options).reduce((pre, [key, value]) => {
65
+ pre[key] = this.quill.getLangText(value);
66
+ return pre;
67
+ }, {}));
55
68
  }
56
69
  };
57
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../../../../src/modules/table-up/index.ts"],"sourcesContent":["import type { Parchment } from 'quill'\r\nimport type Toolbar from 'quill/modules/toolbar'\r\nimport type BaseTheme from 'quill/themes/base'\r\nimport type Picker from 'quill/ui/picker'\r\nimport type { Constructor } from '../../config/types'\r\nimport type FluentEditor from '../../core/fluent-editor'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\r\n\r\ninterface QuillTheme extends BaseTheme {\r\n pickers: QuillThemePicker[]\r\n}\r\ntype QuillThemePicker = (Picker & { options: HTMLElement })\r\ninterface InternalModule {\r\n show: () => void\r\n hide: () => void\r\n update: () => void\r\n destroy: () => void\r\n}\r\ninterface InternalTableSelectionModule extends InternalModule {\r\n dragging: boolean\r\n boundary: {\r\n x: number\r\n y: number\r\n x1: number\r\n y1: number\r\n width: number\r\n height: number\r\n } | null\r\n selectedTds: Parchment.Blot[]\r\n cellSelect: HTMLElement\r\n tableMenu?: InternalModule\r\n computeSelectedTds: (\r\n startPoint: {\r\n x: number\r\n y: number\r\n },\r\n endPoint: {\r\n x: number\r\n y: number\r\n }\r\n ) => Parchment.Blot[]\r\n updateWithSelectedTds: () => void\r\n}\r\nexport function generateTableUp(QuillTableUp: Constructor) {\r\n return class extends QuillTableUp {\r\n tableSelection?: InternalTableSelectionModule\r\n constructor(public quill: FluentEditor, options: Partial<any>) {\r\n super(quill, options)\r\n\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.options.texts = this.resolveTexts(options.texts)\r\n const toolbar = this.quill.getModule('toolbar') as Toolbar\r\n if (toolbar && (this.quill.theme as QuillTheme).pickers) {\r\n const [, select] = (toolbar.controls as [string, HTMLElement][] || []).find(([name]) => name === this.statics.toolName) || []\r\n if (select && select.tagName.toLocaleLowerCase() === 'select') {\r\n const picker = (this.quill.theme as QuillTheme).pickers.find(picker => picker.select === select)\r\n if (picker) {\r\n this.buildCustomSelect(this.options.customSelect, picker)\r\n }\r\n }\r\n }\r\n if (this.tableSelection) {\r\n this.tableSelection.destroy()\r\n }\r\n if (this.options.selection) {\r\n // eslint-disable-next-line new-cap\r\n this.tableSelection = new this.options.selection(this, this.quill, this.options.selectionOptions)\r\n }\r\n })\r\n }\r\n\r\n resolveTexts(options: Partial<Record<string, string>>) {\r\n return Object.assign({\r\n fullCheckboxText: this.quill.getLangText('fullCheckboxText'),\r\n customBtnText: this.quill.getLangText('customBtnText'),\r\n confirmText: this.quill.getLangText('confirmText'),\r\n cancelText: this.quill.getLangText('cancelText'),\r\n rowText: this.quill.getLangText('rowText'),\r\n colText: this.quill.getLangText('colText'),\r\n notPositiveNumberError: this.quill.getLangText('notPositiveNumberError'),\r\n custom: this.quill.getLangText('custom'),\r\n clear: this.quill.getLangText('clear'),\r\n transparent: this.quill.getLangText('transparent'),\r\n perWidthInsufficient: this.quill.getLangText('perWidthInsufficient'),\r\n CopyCell: this.quill.getLangText('CopyCell'),\r\n CutCell: this.quill.getLangText('CutCell'),\r\n InsertTop: this.quill.getLangText('InsertTop'),\r\n InsertRight: this.quill.getLangText('InsertRight'),\r\n InsertBottom: this.quill.getLangText('InsertBottom'),\r\n InsertLeft: this.quill.getLangText('InsertLeft'),\r\n MergeCell: this.quill.getLangText('MergeCell'),\r\n SplitCell: this.quill.getLangText('SplitCell'),\r\n DeleteRow: this.quill.getLangText('DeleteRow'),\r\n DeleteColumn: this.quill.getLangText('DeleteColumn'),\r\n DeleteTable: this.quill.getLangText('DeleteTable'),\r\n BackgroundColor: this.quill.getLangText('BackgroundColor'),\r\n BorderColor: this.quill.getLangText('BorderColor'),\r\n }, options)\r\n }\r\n }\r\n}\r\n"],"names":["picker"],"mappings":";;AA2CO,SAAS,gBAAgB,cAA2B;AACzD,SAAO,cAAc,aAAa;AAAA,IAEhC,YAAmB,OAAqB,SAAuB;AAC7D,YAAM,OAAO,OAAO;AADH,WAAA,QAAA;AAGjB,WAAK,MAAM,QAAQ,GAAG,uBAAuB,MAAM;AACjD,aAAK,QAAQ,QAAQ,KAAK,aAAa,QAAQ,KAAK;AACpD,cAAM,UAAU,KAAK,MAAM,UAAU,SAAS;AAC9C,YAAI,WAAY,KAAK,MAAM,MAAqB,SAAS;AACvD,gBAAM,CAAA,EAAG,MAAM,KAAK,QAAQ,YAAuC,CAAI,GAAA,KAAK,CAAC,CAAC,IAAI,MAAM,SAAS,KAAK,QAAQ,QAAQ,KAAK,CAAC;AAC5H,cAAI,UAAU,OAAO,QAAQ,kBAAA,MAAwB,UAAU;AACvD,kBAAA,SAAU,KAAK,MAAM,MAAqB,QAAQ,KAAK,CAAAA,YAAUA,QAAO,WAAW,MAAM;AAC/F,gBAAI,QAAQ;AACV,mBAAK,kBAAkB,KAAK,QAAQ,cAAc,MAAM;AAAA,YAAA;AAAA,UAC1D;AAAA,QACF;AAEF,YAAI,KAAK,gBAAgB;AACvB,eAAK,eAAe,QAAQ;AAAA,QAAA;AAE1B,YAAA,KAAK,QAAQ,WAAW;AAErB,eAAA,iBAAiB,IAAI,KAAK,QAAQ,UAAU,MAAM,KAAK,OAAO,KAAK,QAAQ,gBAAgB;AAAA,QAAA;AAAA,MAClG,CACD;AAAA,IAAA;AAAA,IAGH,aAAa,SAA0C;AACrD,aAAO,OAAO,OAAO;AAAA,QACnB,kBAAkB,KAAK,MAAM,YAAY,kBAAkB;AAAA,QAC3D,eAAe,KAAK,MAAM,YAAY,eAAe;AAAA,QACrD,aAAa,KAAK,MAAM,YAAY,aAAa;AAAA,QACjD,YAAY,KAAK,MAAM,YAAY,YAAY;AAAA,QAC/C,SAAS,KAAK,MAAM,YAAY,SAAS;AAAA,QACzC,SAAS,KAAK,MAAM,YAAY,SAAS;AAAA,QACzC,wBAAwB,KAAK,MAAM,YAAY,wBAAwB;AAAA,QACvE,QAAQ,KAAK,MAAM,YAAY,QAAQ;AAAA,QACvC,OAAO,KAAK,MAAM,YAAY,OAAO;AAAA,QACrC,aAAa,KAAK,MAAM,YAAY,aAAa;AAAA,QACjD,sBAAsB,KAAK,MAAM,YAAY,sBAAsB;AAAA,QACnE,UAAU,KAAK,MAAM,YAAY,UAAU;AAAA,QAC3C,SAAS,KAAK,MAAM,YAAY,SAAS;AAAA,QACzC,WAAW,KAAK,MAAM,YAAY,WAAW;AAAA,QAC7C,aAAa,KAAK,MAAM,YAAY,aAAa;AAAA,QACjD,cAAc,KAAK,MAAM,YAAY,cAAc;AAAA,QACnD,YAAY,KAAK,MAAM,YAAY,YAAY;AAAA,QAC/C,WAAW,KAAK,MAAM,YAAY,WAAW;AAAA,QAC7C,WAAW,KAAK,MAAM,YAAY,WAAW;AAAA,QAC7C,WAAW,KAAK,MAAM,YAAY,WAAW;AAAA,QAC7C,cAAc,KAAK,MAAM,YAAY,cAAc;AAAA,QACnD,aAAa,KAAK,MAAM,YAAY,aAAa;AAAA,QACjD,iBAAiB,KAAK,MAAM,YAAY,iBAAiB;AAAA,QACzD,aAAa,KAAK,MAAM,YAAY,aAAa;AAAA,SAChD,OAAO;AAAA,IAAA;AAAA,EAEd;AACF;"}
1
+ {"version":3,"file":"index.es.js","sources":["../../../../src/modules/table-up/index.ts"],"sourcesContent":["import type Toolbar from 'quill/modules/toolbar'\r\nimport type BaseTheme from 'quill/themes/base'\r\nimport type Picker from 'quill/ui/picker'\r\nimport type { Constructor } from '../../config/types'\r\nimport type FluentEditor from '../../core/fluent-editor'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\r\nimport { isFunction } from '../../utils/is'\r\n\r\ninterface QuillTheme extends BaseTheme {\r\n pickers: QuillThemePicker[]\r\n}\r\ntype QuillThemePicker = (Picker & { options: HTMLElement })\r\n\r\nexport function generateTableUp(QuillTableUp: Constructor) {\r\n return class extends QuillTableUp {\r\n constructor(public quill: FluentEditor, options: Partial<any>) {\r\n super(quill, options)\r\n\r\n if (!this.quill.options['format-painter']) this.quill.options['format-painter'] = {}\r\n const currentIgnoreFormat = this.quill.options['format-painter'].ignoreFormat || []\r\n this.quill.options['format-painter'].ignoreFormat = Array.from(\r\n new Set([\r\n ...currentIgnoreFormat,\r\n 'table-up-cell-inner',\r\n ]),\r\n )\r\n\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.options.texts = this.resolveTexts(options.texts)\r\n const toolbar = this.quill.getModule('toolbar') as Toolbar\r\n if (toolbar && (this.quill.theme as QuillTheme).pickers) {\r\n const [, select] = (toolbar.controls as [string, HTMLElement][] || []).find(([name]) => name === this.statics.toolName) || []\r\n if (select && select.tagName.toLocaleLowerCase() === 'select') {\r\n const picker = (this.quill.theme as QuillTheme).pickers.find(picker => picker.select === select)\r\n if (picker) {\r\n this.buildCustomSelect(this.options.customSelect, picker)\r\n }\r\n }\r\n }\r\n\r\n Object.keys(this.modules).forEach((key) => {\r\n if (isFunction(this.modules[key].destroy)) {\r\n this.modules[key].destroy()\r\n }\r\n })\r\n this.modules = {}\r\n this.initModules()\r\n })\r\n }\r\n\r\n resolveTexts(options: Record<string, string> = {}) {\r\n return Object.assign({\r\n fullCheckboxText: this.quill.getLangText('fullCheckboxText'),\r\n customBtnText: this.quill.getLangText('customBtnText'),\r\n confirmText: this.quill.getLangText('confirmText'),\r\n cancelText: this.quill.getLangText('cancelText'),\r\n rowText: this.quill.getLangText('rowText'),\r\n colText: this.quill.getLangText('colText'),\r\n notPositiveNumberError: this.quill.getLangText('notPositiveNumberError'),\r\n custom: this.quill.getLangText('custom'),\r\n clear: this.quill.getLangText('clear'),\r\n transparent: this.quill.getLangText('transparent'),\r\n perWidthInsufficient: this.quill.getLangText('perWidthInsufficient'),\r\n CopyCell: this.quill.getLangText('CopyCell'),\r\n CutCell: this.quill.getLangText('CutCell'),\r\n InsertTop: this.quill.getLangText('InsertTop'),\r\n InsertRight: this.quill.getLangText('InsertRight'),\r\n InsertBottom: this.quill.getLangText('InsertBottom'),\r\n InsertLeft: this.quill.getLangText('InsertLeft'),\r\n MergeCell: this.quill.getLangText('MergeCell'),\r\n SplitCell: this.quill.getLangText('SplitCell'),\r\n DeleteRow: this.quill.getLangText('DeleteRow'),\r\n DeleteColumn: this.quill.getLangText('DeleteColumn'),\r\n DeleteTable: this.quill.getLangText('DeleteTable'),\r\n BackgroundColor: this.quill.getLangText('BackgroundColor'),\r\n BorderColor: this.quill.getLangText('BorderColor'),\r\n }, Object.entries(options).reduce((pre, [key, value]) => {\r\n pre[key] = this.quill.getLangText(value)\r\n return pre\r\n }, {} as Record<string, string>))\r\n }\r\n }\r\n}\r\n"],"names":["picker"],"mappings":"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"}
@@ -1,3 +1,6 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
1
4
  import { EasyColorPicker } from "quill-easy-color";
2
5
  import FluentEditor from "../../core/fluent-editor.es.js";
3
6
  const OriginPicker = FluentEditor.import("ui/picker");
@@ -52,6 +55,8 @@ class ColorPicker extends EasyColorPicker {
52
55
  return item;
53
56
  }
54
57
  }
58
+ __publicField(ColorPicker, "clearText");
59
+ __publicField(ColorPicker, "customText");
55
60
  export {
56
61
  ColorPicker,
57
62
  Picker
@@ -1 +1 @@
1
- {"version":3,"file":"better-picker.es.js","sources":["../../../../src/modules/toolbar/better-picker.ts"],"sourcesContent":["import type TypePicker from 'quill/ui/picker'\r\nimport { EasyColorPicker } from 'quill-easy-color'\r\nimport FluentEditor from '../../core/fluent-editor'\r\n\r\nconst OriginPicker = FluentEditor.import('ui/picker') as typeof TypePicker\r\nexport class Picker extends OriginPicker {\r\n buildLabel() {\r\n const label = document.createElement('span')\r\n label.classList.add('ql-picker-label')\r\n label.innerHTML = `<i class=\"icon\" />`\r\n label.tabIndex = 0\r\n label.setAttribute('role', 'button')\r\n label.setAttribute('aria-expanded', 'false')\r\n this.container.appendChild(label)\r\n return label\r\n }\r\n\r\n buildItem(option: HTMLOptionElement) {\r\n const item = super.buildItem(option)\r\n const value = option.getAttribute('value')\r\n item.style.setProperty('--value', value)\r\n return item\r\n }\r\n\r\n selectItem(item: HTMLElement | null, trigger = false) {\r\n const selected = this.container.querySelector('.ql-selected')\r\n if (item === selected || item == null) return\r\n // move ql-selected clear after judge.\r\n // ql-selected is the class for check mark in picker\r\n if (selected != null) {\r\n selected.classList.remove('ql-selected')\r\n }\r\n item.classList.add('ql-selected')\r\n this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(item)\r\n if (item.hasAttribute('data-value')) {\r\n this.label.setAttribute('data-value', item.getAttribute('data-value'))\r\n }\r\n else {\r\n this.label.removeAttribute('data-value')\r\n }\r\n if (item.hasAttribute('data-label')) {\r\n this.label.setAttribute('data-label', item.getAttribute('data-label'))\r\n }\r\n else {\r\n this.label.removeAttribute('data-label')\r\n }\r\n if (trigger) {\r\n this.select.dispatchEvent(new Event('change'))\r\n this.close()\r\n }\r\n }\r\n}\r\n\r\nexport class ColorPicker extends EasyColorPicker {\r\n static clearText: string\r\n static customText: string\r\n\r\n constructor(select: HTMLSelectElement, label: string, options: any) {\r\n super(select, label, options)\r\n }\r\n\r\n buildItem(option: HTMLOptionElement) {\r\n const item = super.buildItem(option)\r\n item.setAttribute('title', option.getAttribute('value'))\r\n return item\r\n }\r\n}\r\n"],"names":[],"mappings":";;AAIA,MAAM,eAAe,aAAa,OAAO,WAAW;AAC7C,MAAM,eAAe,aAAa;AAAA,EACvC,aAAa;AACL,UAAA,QAAQ,SAAS,cAAc,MAAM;AACrC,UAAA,UAAU,IAAI,iBAAiB;AACrC,UAAM,YAAY;AAClB,UAAM,WAAW;AACX,UAAA,aAAa,QAAQ,QAAQ;AAC7B,UAAA,aAAa,iBAAiB,OAAO;AACtC,SAAA,UAAU,YAAY,KAAK;AACzB,WAAA;AAAA,EAAA;AAAA,EAGT,UAAU,QAA2B;AAC7B,UAAA,OAAO,MAAM,UAAU,MAAM;AAC7B,UAAA,QAAQ,OAAO,aAAa,OAAO;AACpC,SAAA,MAAM,YAAY,WAAW,KAAK;AAChC,WAAA;AAAA,EAAA;AAAA,EAGT,WAAW,MAA0B,UAAU,OAAO;AACpD,UAAM,WAAW,KAAK,UAAU,cAAc,cAAc;AACxD,QAAA,SAAS,YAAY,QAAQ,KAAM;AAGvC,QAAI,YAAY,MAAM;AACX,eAAA,UAAU,OAAO,aAAa;AAAA,IAAA;AAEpC,SAAA,UAAU,IAAI,aAAa;AAC3B,SAAA,OAAO,gBAAgB,MAAM,KAAK,KAAK,WAAW,QAAQ,EAAE,QAAQ,IAAI;AACzE,QAAA,KAAK,aAAa,YAAY,GAAG;AACnC,WAAK,MAAM,aAAa,cAAc,KAAK,aAAa,YAAY,CAAC;AAAA,IAAA,OAElE;AACE,WAAA,MAAM,gBAAgB,YAAY;AAAA,IAAA;AAErC,QAAA,KAAK,aAAa,YAAY,GAAG;AACnC,WAAK,MAAM,aAAa,cAAc,KAAK,aAAa,YAAY,CAAC;AAAA,IAAA,OAElE;AACE,WAAA,MAAM,gBAAgB,YAAY;AAAA,IAAA;AAEzC,QAAI,SAAS;AACX,WAAK,OAAO,cAAc,IAAI,MAAM,QAAQ,CAAC;AAC7C,WAAK,MAAM;AAAA,IAAA;AAAA,EACb;AAEJ;AAEO,MAAM,oBAAoB,gBAAgB;AAAA,EAI/C,YAAY,QAA2B,OAAe,SAAc;AAC5D,UAAA,QAAQ,OAAO,OAAO;AAAA,EAAA;AAAA,EAG9B,UAAU,QAA2B;AAC7B,UAAA,OAAO,MAAM,UAAU,MAAM;AACnC,SAAK,aAAa,SAAS,OAAO,aAAa,OAAO,CAAC;AAChD,WAAA;AAAA,EAAA;AAEX;"}
1
+ {"version":3,"file":"better-picker.es.js","sources":["../../../../src/modules/toolbar/better-picker.ts"],"sourcesContent":["import type TypePicker from 'quill/ui/picker'\nimport { EasyColorPicker } from 'quill-easy-color'\nimport FluentEditor from '../../core/fluent-editor'\n\nconst OriginPicker = FluentEditor.import('ui/picker') as typeof TypePicker\nexport class Picker extends OriginPicker {\n buildLabel() {\n const label = document.createElement('span')\n label.classList.add('ql-picker-label')\n label.innerHTML = `<i class=\"icon\" />`\n label.tabIndex = 0\n label.setAttribute('role', 'button')\n label.setAttribute('aria-expanded', 'false')\n this.container.appendChild(label)\n return label\n }\n\n buildItem(option: HTMLOptionElement) {\n const item = super.buildItem(option)\n const value = option.getAttribute('value')\n item.style.setProperty('--value', value)\n return item\n }\n\n selectItem(item: HTMLElement | null, trigger = false) {\n const selected = this.container.querySelector('.ql-selected')\n if (item === selected || item == null) return\n // move ql-selected clear after judge.\n // ql-selected is the class for check mark in picker\n if (selected != null) {\n selected.classList.remove('ql-selected')\n }\n item.classList.add('ql-selected')\n this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(item)\n if (item.hasAttribute('data-value')) {\n this.label.setAttribute('data-value', item.getAttribute('data-value'))\n }\n else {\n this.label.removeAttribute('data-value')\n }\n if (item.hasAttribute('data-label')) {\n this.label.setAttribute('data-label', item.getAttribute('data-label'))\n }\n else {\n this.label.removeAttribute('data-label')\n }\n if (trigger) {\n this.select.dispatchEvent(new Event('change'))\n this.close()\n }\n }\n}\n\nexport class ColorPicker extends EasyColorPicker {\n static clearText: string\n static customText: string\n\n constructor(select: HTMLSelectElement, label: string, options: any) {\n super(select, label, options)\n }\n\n buildItem(option: HTMLOptionElement) {\n const item = super.buildItem(option)\n item.setAttribute('title', option.getAttribute('value'))\n return item\n }\n}\n"],"names":[],"mappings":";;;;;AAIA,MAAM,eAAe,aAAa,OAAO,WAAW;AAC7C,MAAM,eAAe,aAAa;AAAA,EACvC,aAAa;AACL,UAAA,QAAQ,SAAS,cAAc,MAAM;AACrC,UAAA,UAAU,IAAI,iBAAiB;AACrC,UAAM,YAAY;AAClB,UAAM,WAAW;AACX,UAAA,aAAa,QAAQ,QAAQ;AAC7B,UAAA,aAAa,iBAAiB,OAAO;AACtC,SAAA,UAAU,YAAY,KAAK;AACzB,WAAA;AAAA,EAAA;AAAA,EAGT,UAAU,QAA2B;AAC7B,UAAA,OAAO,MAAM,UAAU,MAAM;AAC7B,UAAA,QAAQ,OAAO,aAAa,OAAO;AACpC,SAAA,MAAM,YAAY,WAAW,KAAK;AAChC,WAAA;AAAA,EAAA;AAAA,EAGT,WAAW,MAA0B,UAAU,OAAO;AACpD,UAAM,WAAW,KAAK,UAAU,cAAc,cAAc;AACxD,QAAA,SAAS,YAAY,QAAQ,KAAM;AAGvC,QAAI,YAAY,MAAM;AACX,eAAA,UAAU,OAAO,aAAa;AAAA,IAAA;AAEpC,SAAA,UAAU,IAAI,aAAa;AAC3B,SAAA,OAAO,gBAAgB,MAAM,KAAK,KAAK,WAAW,QAAQ,EAAE,QAAQ,IAAI;AACzE,QAAA,KAAK,aAAa,YAAY,GAAG;AACnC,WAAK,MAAM,aAAa,cAAc,KAAK,aAAa,YAAY,CAAC;AAAA,IAAA,OAElE;AACE,WAAA,MAAM,gBAAgB,YAAY;AAAA,IAAA;AAErC,QAAA,KAAK,aAAa,YAAY,GAAG;AACnC,WAAK,MAAM,aAAa,cAAc,KAAK,aAAa,YAAY,CAAC;AAAA,IAAA,OAElE;AACE,WAAA,MAAM,gBAAgB,YAAY;AAAA,IAAA;AAEzC,QAAI,SAAS;AACX,WAAK,OAAO,cAAc,IAAI,MAAM,QAAQ,CAAC;AAC7C,WAAK,MAAM;AAAA,IAAA;AAAA,EACb;AAEJ;AAEO,MAAM,oBAAoB,gBAAgB;AAAA,EAI/C,YAAY,QAA2B,OAAe,SAAc;AAC5D,UAAA,QAAQ,OAAO,OAAO;AAAA,EAAA;AAAA,EAG9B,UAAU,QAA2B;AAC7B,UAAA,OAAO,MAAM,UAAU,MAAM;AACnC,SAAK,aAAa,SAAS,OAAO,aAAa,OAAO,CAAC;AAChD,WAAA;AAAA,EAAA;AAEX;AAZE,cADW,aACJ;AACP,cAFW,aAEJ;"}
@@ -0,0 +1,138 @@
1
+ import Quill from "quill";
2
+ import { isNullOrUndefined } from "../../config/editor.utils.es.js";
3
+ const Delta = Quill.import("delta");
4
+ const Parchment = Quill.import("parchment");
5
+ const levels = ["error", "warn", "log", "info"];
6
+ let level = "warn";
7
+ function debuglogger(method, ...args) {
8
+ if (levels.indexOf(method) <= levels.indexOf(level)) {
9
+ console[method](...args);
10
+ }
11
+ }
12
+ function namespace(ns) {
13
+ return levels.reduce((logger, method) => {
14
+ logger[method] = debuglogger.bind(console, method, ns);
15
+ return logger;
16
+ }, {});
17
+ }
18
+ namespace.level = (newLevel) => {
19
+ level = newLevel;
20
+ };
21
+ debuglogger.level = namespace.level;
22
+ const debug = namespace("quill:toolbar");
23
+ const Toolbar = Quill.import("modules/toolbar");
24
+ class BetterToolbar extends Toolbar {
25
+ update(range) {
26
+ const formats = isNullOrUndefined(range) ? {} : this.quill.getFormat(range);
27
+ this.controls.forEach((pair) => {
28
+ const [format, input] = pair;
29
+ if (input.tagName === "SELECT") {
30
+ const select = input;
31
+ let option;
32
+ if (isNullOrUndefined(range)) {
33
+ option = null;
34
+ } else if (isNullOrUndefined(formats[format])) {
35
+ option = select.querySelector("option[selected]");
36
+ } else if (!Array.isArray(formats[format])) {
37
+ let value = formats[format];
38
+ if (typeof value === "string") {
39
+ value = value.replace(/"/g, '\\"');
40
+ }
41
+ option = select.querySelector(`option[value="${value}"]`);
42
+ }
43
+ if (isNullOrUndefined(option)) {
44
+ select.value = "";
45
+ select.selectedIndex = -1;
46
+ } else {
47
+ option.selected = true;
48
+ }
49
+ } else if (isNullOrUndefined(range)) {
50
+ input.classList.remove("ql-active");
51
+ } else if (input.hasAttribute("value")) {
52
+ let isActive = formats[format] === input.getAttribute("value") || !isNullOrUndefined(formats[format]) && (formats[format].value === input.getAttribute("value") || formats[format].toString() === input.getAttribute("value")) || isNullOrUndefined(formats[format]) && !input.getAttribute("value");
53
+ if (!isActive) {
54
+ const checkFormat = formats[format];
55
+ if (checkFormat === "checked" || checkFormat === "unchecked") {
56
+ isActive = input.getAttribute("value") === "check";
57
+ }
58
+ }
59
+ if (isActive) {
60
+ input.classList.add("ql-active");
61
+ } else {
62
+ input.classList.remove("ql-active");
63
+ }
64
+ } else {
65
+ if (!isNullOrUndefined(formats[format])) {
66
+ input.classList.add("ql-active");
67
+ } else {
68
+ input.classList.remove("ql-active");
69
+ }
70
+ }
71
+ });
72
+ }
73
+ attach(input) {
74
+ let format = Array.from(input.classList).find((className) => {
75
+ return className.indexOf("ql-") === 0;
76
+ });
77
+ if (!format) return;
78
+ format = format.slice("ql-".length);
79
+ if (input.tagName === "BUTTON") {
80
+ input.setAttribute("type", "button");
81
+ }
82
+ if (this.handlers[format] == null && this.quill.scroll.query(format) == null) {
83
+ debug.warn("ignoring attaching to nonexistent format", format, input);
84
+ return;
85
+ }
86
+ const eventName = input.tagName === "SELECT" ? "change" : "click";
87
+ input.addEventListener(eventName, (e) => {
88
+ let value;
89
+ if (input.tagName === "SELECT") {
90
+ const select = input;
91
+ if (select.selectedIndex < 0) return;
92
+ const selected = select.options[select.selectedIndex];
93
+ if (selected.hasAttribute("selected")) {
94
+ value = false;
95
+ } else {
96
+ value = selected.value || false;
97
+ }
98
+ } else {
99
+ const button = input;
100
+ if (button.classList.contains("ql-active")) {
101
+ value = false;
102
+ } else {
103
+ value = button.value || !button.hasAttribute("value");
104
+ }
105
+ e.preventDefault();
106
+ }
107
+ this.quill.focus({ preventScroll: format === "screenshot" });
108
+ const [range] = this.quill.selection.getRange();
109
+ if (this.handlers[format] != null) {
110
+ if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === "blockquote" || format === "code-block" || format === "list" || format === "indent" || format === "clean")) {
111
+ return;
112
+ }
113
+ this.handlers[format].call(this, value);
114
+ } else if (
115
+ // @ts-ignore
116
+ this.quill.scroll.query(format).prototype instanceof Parchment.EmbedBlot
117
+ ) {
118
+ value = prompt(`Enter ${format}`);
119
+ if (!value) return;
120
+ this.quill.updateContents(
121
+ new Delta().retain(range.index).delete(range.length).insert({ [format]: value }),
122
+ Quill.sources.USER
123
+ );
124
+ } else {
125
+ if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === "blockquote" || format === "code-block" || format === "list" || format === "indent" || format === "clean")) {
126
+ return;
127
+ }
128
+ this.quill.format(format, value, Quill.sources.USER);
129
+ }
130
+ this.update(range);
131
+ });
132
+ this.controls.push([format, input]);
133
+ }
134
+ }
135
+ export {
136
+ BetterToolbar
137
+ };
138
+ //# sourceMappingURL=better-toolbar.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"better-toolbar.es.js","sources":["../../../../src/modules/toolbar/better-toolbar.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\nexport class 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 = 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"],"names":[],"mappings":"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"}
@@ -1,140 +1,10 @@
1
- import Quill from "quill";
2
- import { isNullOrUndefined } from "../../config/editor.utils.es.js";
1
+ import { ColorPicker, Picker } from "./better-picker.es.js";
2
+ import { BetterToolbar } from "./better-toolbar.es.js";
3
3
  import { generateToolbarTip } from "./toolbar-tip.es.js";
4
- const Delta = Quill.import("delta");
5
- const Parchment = Quill.import("parchment");
6
- const levels = ["error", "warn", "log", "info"];
7
- let level = "warn";
8
- function debuglogger(method, ...args) {
9
- if (levels.indexOf(method) <= levels.indexOf(level)) {
10
- console[method](...args);
11
- }
12
- }
13
- function namespace(ns) {
14
- return levels.reduce((logger, method) => {
15
- logger[method] = debuglogger.bind(console, method, ns);
16
- return logger;
17
- }, {});
18
- }
19
- namespace.level = (newLevel) => {
20
- level = newLevel;
21
- };
22
- debuglogger.level = namespace.level;
23
- const debug = namespace("quill:toolbar");
24
- const Toolbar = Quill.import("modules/toolbar");
25
- class BetterToolbar extends Toolbar {
26
- update(range) {
27
- const formats = isNullOrUndefined(range) ? {} : this.quill.getFormat(range);
28
- this.controls.forEach((pair) => {
29
- const [format, input] = pair;
30
- if (input.tagName === "SELECT") {
31
- const select = input;
32
- let option;
33
- if (isNullOrUndefined(range)) {
34
- option = null;
35
- } else if (isNullOrUndefined(formats[format])) {
36
- option = select.querySelector("option[selected]");
37
- } else if (!Array.isArray(formats[format])) {
38
- let value = format === "header" ? formats[format].value : formats[format];
39
- if (typeof value === "string") {
40
- value = value.replace(/"/g, '\\"');
41
- }
42
- option = select.querySelector(`option[value="${value}"]`);
43
- }
44
- if (isNullOrUndefined(option)) {
45
- select.value = "";
46
- select.selectedIndex = -1;
47
- } else {
48
- option.selected = true;
49
- }
50
- } else if (isNullOrUndefined(range)) {
51
- input.classList.remove("ql-active");
52
- } else if (input.hasAttribute("value")) {
53
- let isActive = formats[format] === input.getAttribute("value") || !isNullOrUndefined(formats[format]) && (formats[format].value === input.getAttribute("value") || formats[format].toString() === input.getAttribute("value")) || isNullOrUndefined(formats[format]) && !input.getAttribute("value");
54
- if (!isActive) {
55
- const checkFormat = formats[format];
56
- if (checkFormat === "checked" || checkFormat === "unchecked") {
57
- isActive = input.getAttribute("value") === "check";
58
- }
59
- }
60
- if (isActive) {
61
- input.classList.add("ql-active");
62
- } else {
63
- input.classList.remove("ql-active");
64
- }
65
- } else {
66
- if (!isNullOrUndefined(formats[format])) {
67
- input.classList.add("ql-active");
68
- } else {
69
- input.classList.remove("ql-active");
70
- }
71
- }
72
- });
73
- }
74
- attach(input) {
75
- let format = Array.from(input.classList).find((className) => {
76
- return className.indexOf("ql-") === 0;
77
- });
78
- if (!format) return;
79
- format = format.slice("ql-".length);
80
- if (input.tagName === "BUTTON") {
81
- input.setAttribute("type", "button");
82
- }
83
- if (this.handlers[format] == null && this.quill.scroll.query(format) == null) {
84
- debug.warn("ignoring attaching to nonexistent format", format, input);
85
- return;
86
- }
87
- const eventName = input.tagName === "SELECT" ? "change" : "click";
88
- input.addEventListener(eventName, (e) => {
89
- let value;
90
- if (input.tagName === "SELECT") {
91
- const select = input;
92
- if (select.selectedIndex < 0) return;
93
- const selected = select.options[select.selectedIndex];
94
- if (selected.hasAttribute("selected")) {
95
- value = false;
96
- } else {
97
- value = selected.value || false;
98
- }
99
- } else {
100
- const button = input;
101
- if (button.classList.contains("ql-active")) {
102
- value = false;
103
- } else {
104
- value = button.value || !button.hasAttribute("value");
105
- }
106
- e.preventDefault();
107
- }
108
- this.quill.focus({ preventScroll: format === "screenshot" });
109
- const [range] = this.quill.selection.getRange();
110
- if (this.handlers[format] != null) {
111
- if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === "blockquote" || format === "code-block" || format === "list" || format === "indent" || format === "clean")) {
112
- return;
113
- }
114
- this.handlers[format].call(this, value);
115
- } else if (
116
- // @ts-ignore
117
- this.quill.scroll.query(format).prototype instanceof Parchment.EmbedBlot
118
- ) {
119
- value = prompt(`Enter ${format}`);
120
- if (!value) return;
121
- this.quill.updateContents(
122
- new Delta().retain(range.index).delete(range.length).insert({ [format]: value }),
123
- Quill.sources.USER
124
- );
125
- } else {
126
- if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === "blockquote" || format === "code-block" || format === "list" || format === "indent" || format === "clean")) {
127
- return;
128
- }
129
- this.quill.format(format, value, Quill.sources.USER);
130
- }
131
- this.update(range);
132
- });
133
- this.controls.push([format, input]);
134
- }
135
- }
136
4
  export {
137
- BetterToolbar as default,
5
+ BetterToolbar,
6
+ ColorPicker,
7
+ Picker,
138
8
  generateToolbarTip
139
9
  };
140
10
  //# sourceMappingURL=index.es.js.map