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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (487) hide show
  1. package/README.md +7 -24
  2. package/es/config/editor.config.es.js +0 -7
  3. package/es/config/editor.config.es.js.map +1 -1
  4. package/es/config/editor.utils.es.js +0 -2
  5. package/es/config/editor.utils.es.js.map +1 -1
  6. package/es/config/i18n/en-us.es.js +0 -13
  7. package/es/config/i18n/en-us.es.js.map +1 -1
  8. package/es/config/i18n/zh-cn.es.js +0 -13
  9. package/es/config/i18n/zh-cn.es.js.map +1 -1
  10. package/es/config/index.es.js +8 -13
  11. package/es/config/index.es.js.map +1 -1
  12. package/es/config/types/index.es.js +0 -20
  13. package/es/config/types/index.es.js.map +1 -1
  14. package/es/core/fluent-editor.es.js +7 -5
  15. package/es/core/fluent-editor.es.js.map +1 -1
  16. package/es/fluent-editor.es.js +36 -22
  17. package/es/fluent-editor.es.js.map +1 -1
  18. package/es/formats/emoji.es.js +14 -0
  19. package/es/formats/emoji.es.js.map +1 -0
  20. package/es/formats/index.es.js +11 -0
  21. package/es/formats/index.es.js.map +1 -0
  22. package/es/formats/soft-break.es.js +12 -5
  23. package/es/formats/soft-break.es.js.map +1 -1
  24. package/es/formats/strike.es.js +8 -5
  25. package/es/formats/strike.es.js.map +1 -1
  26. package/es/formats/video.es.js +14 -10
  27. package/es/formats/video.es.js.map +1 -1
  28. package/es/index.es.js +92 -32
  29. package/es/index.es.js.map +1 -1
  30. package/es/modules/counter.es.js +8 -3
  31. package/es/modules/counter.es.js.map +1 -1
  32. package/es/modules/custom-clipboard.es.js +23 -27
  33. package/es/modules/custom-clipboard.es.js.map +1 -1
  34. package/es/modules/custom-image/actions/action.es.js +19 -0
  35. package/es/modules/custom-image/actions/action.es.js.map +1 -0
  36. package/es/modules/custom-image/actions/{CustomResizeAction.es.js → custom-resize-action.es.js} +24 -11
  37. package/es/modules/custom-image/actions/{CustomResizeAction.es.js.map → custom-resize-action.es.js.map} +1 -1
  38. package/es/modules/custom-image/actions/{DeleteAction.es.js → delete-action.es.js} +8 -5
  39. package/es/modules/custom-image/actions/delete-action.es.js.map +1 -0
  40. package/es/modules/custom-image/actions/image-toolbar-buttons.es.js +137 -0
  41. package/es/modules/custom-image/actions/image-toolbar-buttons.es.js.map +1 -0
  42. package/es/modules/custom-image/actions/index.es.js +18 -0
  43. package/es/modules/custom-image/actions/index.es.js.map +1 -0
  44. package/es/modules/custom-image/actions/toolbar-action.es.js +33 -0
  45. package/es/modules/custom-image/actions/toolbar-action.es.js.map +1 -0
  46. package/es/modules/custom-image/actions/toolbar.es.js +110 -0
  47. package/es/modules/custom-image/actions/toolbar.es.js.map +1 -0
  48. package/es/modules/custom-image/{BlotFormatter.es.js → blot-formatter.es.js} +23 -50
  49. package/es/modules/custom-image/blot-formatter.es.js.map +1 -0
  50. package/es/modules/custom-image/image.es.js +34 -21
  51. package/es/modules/custom-image/image.es.js.map +1 -1
  52. package/es/modules/custom-image/index.es.js +9 -0
  53. package/es/modules/custom-image/index.es.js.map +1 -0
  54. package/es/modules/custom-image/options.es.js +85 -0
  55. package/es/modules/custom-image/options.es.js.map +1 -0
  56. package/es/modules/custom-image/specs/blot-spec.es.js +33 -0
  57. package/es/modules/custom-image/specs/blot-spec.es.js.map +1 -0
  58. package/es/modules/custom-image/specs/{CustomImageSpec.es.js → custom-image-spec.es.js} +13 -14
  59. package/es/modules/custom-image/specs/custom-image-spec.es.js.map +1 -0
  60. package/es/modules/custom-image/specs/image-spec.es.js +32 -0
  61. package/es/modules/custom-image/specs/image-spec.es.js.map +1 -0
  62. package/es/modules/custom-image/specs/index.es.js +9 -0
  63. package/es/modules/custom-image/specs/index.es.js.map +1 -0
  64. package/es/modules/custom-uploader.es.js +63 -194
  65. package/es/modules/custom-uploader.es.js.map +1 -1
  66. package/es/modules/divider.es.js +8 -7
  67. package/es/modules/divider.es.js.map +1 -1
  68. package/es/modules/emoji.es.js +175 -0
  69. package/es/modules/emoji.es.js.map +1 -0
  70. package/es/modules/file/formats/file.es.js +13 -13
  71. package/es/modules/file/formats/file.es.js.map +1 -1
  72. package/es/modules/file/index.es.js +6 -29
  73. package/es/modules/file/index.es.js.map +1 -1
  74. package/es/modules/file/modules/file-bar.es.js +11 -3
  75. package/es/modules/file/modules/file-bar.es.js.map +1 -1
  76. package/es/modules/file/modules/file-module.es.js +35 -0
  77. package/es/modules/file/modules/file-module.es.js.map +1 -0
  78. package/es/modules/i18n.es.js +33 -11
  79. package/es/modules/i18n.es.js.map +1 -1
  80. package/es/modules/index.es.js +26 -0
  81. package/es/modules/index.es.js.map +1 -0
  82. package/es/modules/link/formats/link.es.js +14 -10
  83. package/es/modules/link/formats/link.es.js.map +1 -1
  84. package/es/modules/link/index.es.js +4 -12
  85. package/es/modules/link/index.es.js.map +1 -1
  86. package/es/modules/link/modules/tooltip.es.js +31 -21
  87. package/es/modules/link/modules/tooltip.es.js.map +1 -1
  88. package/es/modules/mathlive/formats.es.js +10 -7
  89. package/es/modules/mathlive/formats.es.js.map +1 -1
  90. package/es/modules/mathlive/index.es.js +6 -30
  91. package/es/modules/mathlive/index.es.js.map +1 -1
  92. package/es/modules/mathlive/module.es.js +40 -0
  93. package/es/modules/mathlive/module.es.js.map +1 -0
  94. package/es/modules/mathlive/tooltip.es.js +9 -5
  95. package/es/modules/mathlive/tooltip.es.js.map +1 -1
  96. package/es/modules/mention/index.es.js +7 -0
  97. package/es/modules/{emoji/emoji-list → mention}/index.es.js.map +1 -1
  98. package/es/modules/mention/{MentionLink.es.js → mention-link.es.js} +14 -6
  99. package/es/modules/mention/mention-link.es.js.map +1 -0
  100. package/es/modules/mention/{Mention.es.js → mention.es.js} +28 -20
  101. package/es/modules/mention/mention.es.js.map +1 -0
  102. package/es/modules/shortcut-key/index.es.js +17 -1
  103. package/es/modules/shortcut-key/index.es.js.map +1 -1
  104. package/es/modules/syntax.es.js +4 -0
  105. package/es/modules/syntax.es.js.map +1 -1
  106. package/es/modules/table-up/index.es.js +9 -2
  107. package/es/modules/table-up/index.es.js.map +1 -1
  108. package/es/modules/toolbar/better-picker.es.js +5 -0
  109. package/es/modules/toolbar/better-picker.es.js.map +1 -1
  110. package/es/modules/toolbar/better-toolbar.es.js +138 -0
  111. package/es/modules/toolbar/better-toolbar.es.js.map +1 -0
  112. package/es/modules/toolbar/index.es.js +5 -135
  113. package/es/modules/toolbar/index.es.js.map +1 -1
  114. package/es/modules/toolbar/toolbar-tip.es.js +6 -1
  115. package/es/modules/toolbar/toolbar-tip.es.js.map +1 -1
  116. package/es/node_modules/.pnpm/@emoji-mart_data@1.2.1/node_modules/@emoji-mart/data/sets/15/native.json.es.js +40145 -0
  117. package/es/node_modules/.pnpm/@emoji-mart_data@1.2.1/node_modules/@emoji-mart/data/sets/15/native.json.es.js.map +1 -0
  118. package/es/node_modules/.pnpm/@floating-ui_core@1.7.2/node_modules/@floating-ui/core/dist/floating-ui.core.es.js +938 -0
  119. package/es/node_modules/.pnpm/@floating-ui_core@1.7.2/node_modules/@floating-ui/core/dist/floating-ui.core.es.js.map +1 -0
  120. package/es/node_modules/.pnpm/@floating-ui_dom@1.7.2/node_modules/@floating-ui/dom/dist/floating-ui.dom.es.js +624 -0
  121. package/es/node_modules/.pnpm/@floating-ui_dom@1.7.2/node_modules/@floating-ui/dom/dist/floating-ui.dom.es.js.map +1 -0
  122. package/es/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.es.js +174 -0
  123. package/es/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.es.js.map +1 -0
  124. package/es/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.es.js +159 -0
  125. package/es/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.es.js.map +1 -0
  126. package/es/node_modules/.pnpm/emoji-mart@5.6.0/node_modules/emoji-mart/dist/module.es.js +2849 -0
  127. package/es/node_modules/.pnpm/emoji-mart@5.6.0/node_modules/emoji-mart/dist/module.es.js.map +1 -0
  128. package/es/themes/snow.es.js +18 -15
  129. package/es/themes/snow.es.js.map +1 -1
  130. package/es/tools/fullscreen.es.js.map +1 -1
  131. package/es/ui/icons.config.es.js +8 -0
  132. package/es/ui/icons.config.es.js.map +1 -1
  133. package/es/ui/icons.es.js.map +1 -1
  134. package/es/utils/is.es.js +4 -0
  135. package/es/utils/is.es.js.map +1 -1
  136. package/lib/config/editor.config.cjs.js +0 -7
  137. package/lib/config/editor.config.cjs.js.map +1 -1
  138. package/lib/config/editor.utils.cjs.js +0 -2
  139. package/lib/config/editor.utils.cjs.js.map +1 -1
  140. package/lib/config/i18n/en-us.cjs.js +0 -13
  141. package/lib/config/i18n/en-us.cjs.js.map +1 -1
  142. package/lib/config/i18n/zh-cn.cjs.js +0 -13
  143. package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
  144. package/lib/config/index.cjs.js +6 -11
  145. package/lib/config/index.cjs.js.map +1 -1
  146. package/lib/config/types/index.cjs.js +0 -20
  147. package/lib/config/types/index.cjs.js.map +1 -1
  148. package/lib/core/fluent-editor.cjs.js +6 -4
  149. package/lib/core/fluent-editor.cjs.js.map +1 -1
  150. package/lib/fluent-editor.cjs.js +44 -30
  151. package/lib/fluent-editor.cjs.js.map +1 -1
  152. package/lib/formats/emoji.cjs.js +14 -0
  153. package/lib/formats/emoji.cjs.js.map +1 -0
  154. package/lib/formats/index.cjs.js +11 -0
  155. package/lib/formats/index.cjs.js.map +1 -0
  156. package/lib/formats/soft-break.cjs.js +13 -6
  157. package/lib/formats/soft-break.cjs.js.map +1 -1
  158. package/lib/formats/strike.cjs.js +9 -6
  159. package/lib/formats/strike.cjs.js.map +1 -1
  160. package/lib/formats/video.cjs.js +15 -11
  161. package/lib/formats/video.cjs.js.map +1 -1
  162. package/lib/index.cjs.js +112 -34
  163. package/lib/index.cjs.js.map +1 -1
  164. package/lib/modules/counter.cjs.js +8 -3
  165. package/lib/modules/counter.cjs.js.map +1 -1
  166. package/lib/modules/custom-clipboard.cjs.js +23 -27
  167. package/lib/modules/custom-clipboard.cjs.js.map +1 -1
  168. package/lib/modules/custom-image/actions/action.cjs.js +19 -0
  169. package/lib/modules/custom-image/actions/action.cjs.js.map +1 -0
  170. package/lib/modules/custom-image/actions/{CustomResizeAction.cjs.js → custom-resize-action.cjs.js} +26 -13
  171. package/lib/modules/custom-image/actions/{CustomResizeAction.cjs.js.map → custom-resize-action.cjs.js.map} +1 -1
  172. package/lib/modules/custom-image/actions/{DeleteAction.cjs.js → delete-action.cjs.js} +10 -7
  173. package/lib/modules/custom-image/actions/delete-action.cjs.js.map +1 -0
  174. package/lib/modules/custom-image/actions/image-toolbar-buttons.cjs.js +137 -0
  175. package/lib/modules/custom-image/actions/image-toolbar-buttons.cjs.js.map +1 -0
  176. package/lib/modules/custom-image/actions/index.cjs.js +18 -0
  177. package/lib/modules/custom-image/actions/index.cjs.js.map +1 -0
  178. package/lib/modules/custom-image/actions/toolbar-action.cjs.js +33 -0
  179. package/lib/modules/custom-image/actions/toolbar-action.cjs.js.map +1 -0
  180. package/lib/modules/custom-image/actions/toolbar.cjs.js +110 -0
  181. package/lib/modules/custom-image/actions/toolbar.cjs.js.map +1 -0
  182. package/lib/modules/custom-image/{BlotFormatter.cjs.js → blot-formatter.cjs.js} +24 -51
  183. package/lib/modules/custom-image/blot-formatter.cjs.js.map +1 -0
  184. package/lib/modules/custom-image/image.cjs.js +35 -22
  185. package/lib/modules/custom-image/image.cjs.js.map +1 -1
  186. package/lib/modules/custom-image/index.cjs.js +9 -0
  187. package/lib/modules/custom-image/index.cjs.js.map +1 -0
  188. package/lib/modules/custom-image/options.cjs.js +85 -0
  189. package/lib/modules/custom-image/options.cjs.js.map +1 -0
  190. package/lib/modules/custom-image/specs/blot-spec.cjs.js +33 -0
  191. package/lib/modules/custom-image/specs/blot-spec.cjs.js.map +1 -0
  192. package/lib/modules/custom-image/specs/{CustomImageSpec.cjs.js → custom-image-spec.cjs.js} +14 -15
  193. package/lib/modules/custom-image/specs/custom-image-spec.cjs.js.map +1 -0
  194. package/lib/modules/custom-image/specs/image-spec.cjs.js +32 -0
  195. package/lib/modules/custom-image/specs/image-spec.cjs.js.map +1 -0
  196. package/lib/modules/custom-image/specs/index.cjs.js +9 -0
  197. package/lib/modules/custom-image/specs/index.cjs.js.map +1 -0
  198. package/lib/modules/custom-uploader.cjs.js +64 -195
  199. package/lib/modules/custom-uploader.cjs.js.map +1 -1
  200. package/lib/modules/divider.cjs.js +9 -8
  201. package/lib/modules/divider.cjs.js.map +1 -1
  202. package/lib/modules/emoji.cjs.js +175 -0
  203. package/lib/modules/emoji.cjs.js.map +1 -0
  204. package/lib/modules/file/formats/file.cjs.js +14 -14
  205. package/lib/modules/file/formats/file.cjs.js.map +1 -1
  206. package/lib/modules/file/index.cjs.js +5 -28
  207. package/lib/modules/file/index.cjs.js.map +1 -1
  208. package/lib/modules/file/modules/file-bar.cjs.js +12 -4
  209. package/lib/modules/file/modules/file-bar.cjs.js.map +1 -1
  210. package/lib/modules/file/modules/file-module.cjs.js +35 -0
  211. package/lib/modules/file/modules/file-module.cjs.js.map +1 -0
  212. package/lib/modules/i18n.cjs.js +32 -10
  213. package/lib/modules/i18n.cjs.js.map +1 -1
  214. package/lib/modules/index.cjs.js +26 -0
  215. package/lib/modules/index.cjs.js.map +1 -0
  216. package/lib/modules/link/formats/link.cjs.js +15 -11
  217. package/lib/modules/link/formats/link.cjs.js.map +1 -1
  218. package/lib/modules/link/index.cjs.js +4 -12
  219. package/lib/modules/link/index.cjs.js.map +1 -1
  220. package/lib/modules/link/modules/tooltip.cjs.js +30 -20
  221. package/lib/modules/link/modules/tooltip.cjs.js.map +1 -1
  222. package/lib/modules/mathlive/formats.cjs.js +11 -8
  223. package/lib/modules/mathlive/formats.cjs.js.map +1 -1
  224. package/lib/modules/mathlive/index.cjs.js +5 -29
  225. package/lib/modules/mathlive/index.cjs.js.map +1 -1
  226. package/lib/modules/mathlive/module.cjs.js +40 -0
  227. package/lib/modules/mathlive/module.cjs.js.map +1 -0
  228. package/lib/modules/mathlive/tooltip.cjs.js +10 -6
  229. package/lib/modules/mathlive/tooltip.cjs.js.map +1 -1
  230. package/lib/modules/mention/index.cjs.js +7 -0
  231. package/lib/modules/{emoji/emoji-list → mention}/index.cjs.js.map +1 -1
  232. package/lib/modules/mention/{MentionLink.cjs.js → mention-link.cjs.js} +15 -7
  233. package/lib/modules/mention/mention-link.cjs.js.map +1 -0
  234. package/lib/modules/mention/{Mention.cjs.js → mention.cjs.js} +30 -22
  235. package/lib/modules/mention/mention.cjs.js.map +1 -0
  236. package/lib/modules/shortcut-key/index.cjs.js +16 -0
  237. package/lib/modules/shortcut-key/index.cjs.js.map +1 -1
  238. package/lib/modules/syntax.cjs.js +4 -0
  239. package/lib/modules/syntax.cjs.js.map +1 -1
  240. package/lib/modules/table-up/index.cjs.js +9 -2
  241. package/lib/modules/table-up/index.cjs.js.map +1 -1
  242. package/lib/modules/toolbar/better-picker.cjs.js +5 -0
  243. package/lib/modules/toolbar/better-picker.cjs.js.map +1 -1
  244. package/lib/modules/toolbar/better-toolbar.cjs.js +138 -0
  245. package/lib/modules/toolbar/better-toolbar.cjs.js.map +1 -0
  246. package/lib/modules/toolbar/index.cjs.js +6 -136
  247. package/lib/modules/toolbar/index.cjs.js.map +1 -1
  248. package/lib/modules/toolbar/toolbar-tip.cjs.js +6 -1
  249. package/lib/modules/toolbar/toolbar-tip.cjs.js.map +1 -1
  250. package/lib/node_modules/.pnpm/@emoji-mart_data@1.2.1/node_modules/@emoji-mart/data/sets/15/native.json.cjs.js +40145 -0
  251. package/lib/node_modules/.pnpm/@emoji-mart_data@1.2.1/node_modules/@emoji-mart/data/sets/15/native.json.cjs.js.map +1 -0
  252. package/lib/node_modules/.pnpm/@floating-ui_core@1.7.2/node_modules/@floating-ui/core/dist/floating-ui.core.cjs.js +938 -0
  253. package/lib/node_modules/.pnpm/@floating-ui_core@1.7.2/node_modules/@floating-ui/core/dist/floating-ui.core.cjs.js.map +1 -0
  254. package/lib/node_modules/.pnpm/@floating-ui_dom@1.7.2/node_modules/@floating-ui/dom/dist/floating-ui.dom.cjs.js +624 -0
  255. package/lib/node_modules/.pnpm/@floating-ui_dom@1.7.2/node_modules/@floating-ui/dom/dist/floating-ui.dom.cjs.js.map +1 -0
  256. package/lib/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.cjs.js +159 -0
  257. package/lib/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.cjs.js.map +1 -0
  258. package/lib/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.cjs.js +174 -0
  259. package/lib/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.cjs.js.map +1 -0
  260. package/lib/node_modules/.pnpm/emoji-mart@5.6.0/node_modules/emoji-mart/dist/module.cjs.js +2847 -0
  261. package/lib/node_modules/.pnpm/emoji-mart@5.6.0/node_modules/emoji-mart/dist/module.cjs.js.map +1 -0
  262. package/lib/themes/snow.cjs.js +19 -16
  263. package/lib/themes/snow.cjs.js.map +1 -1
  264. package/lib/tools/fullscreen.cjs.js.map +1 -1
  265. package/lib/ui/icons.cjs.js.map +1 -1
  266. package/lib/ui/icons.config.cjs.js +8 -0
  267. package/lib/ui/icons.config.cjs.js.map +1 -1
  268. package/lib/utils/is.cjs.js +4 -0
  269. package/lib/utils/is.cjs.js.map +1 -1
  270. package/package.json +8 -7
  271. package/style.css +8 -952
  272. package/types/config/editor.config.d.ts +0 -274
  273. package/types/config/editor.utils.d.ts +0 -1
  274. package/types/config/i18n/en-us.d.ts +0 -13
  275. package/types/config/i18n/zh-cn.d.ts +0 -13
  276. package/types/config/index.d.ts +2 -1
  277. package/types/config/types/editor-config.interface.d.ts +0 -26
  278. package/types/config/types/editor-modules.interface.d.ts +22 -11
  279. package/types/config/types/index.d.ts +0 -20
  280. package/types/config/types/type.d.ts +0 -4
  281. package/types/core/fluent-editor.d.ts +3 -2
  282. package/types/formats/emoji.d.ts +9 -0
  283. package/types/formats/index.d.ts +4 -0
  284. package/types/formats/soft-break.d.ts +6 -7
  285. package/types/formats/strike.d.ts +6 -4
  286. package/types/formats/video.d.ts +4 -6
  287. package/types/index.d.ts +5 -3
  288. package/types/modules/counter.d.ts +9 -2
  289. package/types/modules/custom-clipboard.d.ts +4 -7
  290. package/types/modules/custom-image/Options.d.ts +34 -23
  291. package/types/modules/custom-image/actions/Action.d.ts +5 -3
  292. package/types/modules/custom-image/actions/custom-resize-action.d.ts +24 -0
  293. package/types/modules/custom-image/actions/delete-action.d.ts +7 -0
  294. package/types/modules/custom-image/actions/image-toolbar-buttons.d.ts +17 -0
  295. package/types/modules/custom-image/actions/index.d.ts +6 -0
  296. package/types/modules/custom-image/actions/toolbar-action.d.ts +12 -0
  297. package/types/modules/custom-image/actions/toolbar.d.ts +20 -0
  298. package/types/modules/custom-image/blot-formatter.d.ts +24 -0
  299. package/types/modules/custom-image/image-bar.d.ts +9 -7
  300. package/types/modules/custom-image/image.d.ts +22 -23
  301. package/types/modules/custom-image/index.d.ts +4 -0
  302. package/types/modules/custom-image/specs/blot-spec.d.ts +13 -0
  303. package/types/modules/custom-image/specs/custom-image-spec.d.ts +18 -0
  304. package/types/modules/custom-image/specs/image-spec.d.ts +9 -0
  305. package/types/modules/custom-image/specs/index.d.ts +3 -0
  306. package/types/modules/custom-uploader.d.ts +38 -28
  307. package/types/modules/divider.d.ts +6 -4
  308. package/types/modules/emoji/formats/emoji-blot.d.ts +9 -7
  309. package/types/modules/emoji/index.d.ts +3 -10
  310. package/types/modules/emoji/modules/emoji.d.ts +6 -6
  311. package/types/modules/emoji/modules/toolbar-emoji.d.ts +7 -6
  312. package/types/modules/emoji.d.ts +35 -0
  313. package/types/modules/file/formats/file.d.ts +14 -10
  314. package/types/modules/file/index.d.ts +3 -11
  315. package/types/modules/file/modules/file-bar.d.ts +1 -1
  316. package/types/modules/file/modules/file-module.d.ts +10 -0
  317. package/types/modules/i18n.d.ts +4 -5
  318. package/types/modules/index.d.ts +15 -0
  319. package/types/modules/link/formats/link.d.ts +5 -5
  320. package/types/modules/link/index.d.ts +2 -6
  321. package/types/modules/link/modules/tooltip.d.ts +5 -10
  322. package/types/modules/mathlive/formats.d.ts +2 -2
  323. package/types/modules/mathlive/index.d.ts +3 -9
  324. package/types/modules/mathlive/module.d.ts +10 -0
  325. package/types/modules/mathlive/tooltip.d.ts +1 -1
  326. package/types/modules/mention/Mention.d.ts +3 -4
  327. package/types/modules/mention/index.d.ts +2 -0
  328. package/types/modules/mention/mention-link.d.ts +17 -0
  329. package/types/modules/shortcut-key/index.d.ts +16 -41
  330. package/types/modules/table-up/index.d.ts +27 -27
  331. package/types/modules/toolbar/better-toolbar.d.ts +8 -0
  332. package/types/modules/toolbar/index.d.ts +2 -8
  333. package/types/tools/fullscreen.d.ts +5 -1
  334. package/types/ui/icons.config.d.ts +1 -0
  335. package/types/utils/is.d.ts +3 -1
  336. package/es/config/types/additional-toolbar-item.interface.es.js +0 -2
  337. package/es/config/types/additional-toolbar-item.interface.es.js.map +0 -1
  338. package/es/config/types/content-change.interface.es.js +0 -2
  339. package/es/config/types/content-change.interface.es.js.map +0 -1
  340. package/es/config/types/content-save.interface.es.js +0 -2
  341. package/es/config/types/content-save.interface.es.js.map +0 -1
  342. package/es/config/types/counter-option.interface.es.js +0 -2
  343. package/es/config/types/counter-option.interface.es.js.map +0 -1
  344. package/es/config/types/editor-toolbar.interface.es.js +0 -2
  345. package/es/config/types/editor-toolbar.interface.es.js.map +0 -1
  346. package/es/config/types/file-operation.interface.es.js +0 -2
  347. package/es/config/types/file-operation.interface.es.js.map +0 -1
  348. package/es/config/types/focus-change.interface.es.js +0 -2
  349. package/es/config/types/focus-change.interface.es.js.map +0 -1
  350. package/es/config/types/fullscreen-module.interface.es.js +0 -2
  351. package/es/config/types/fullscreen-module.interface.es.js.map +0 -1
  352. package/es/config/types/help-panel-item.interface.es.js +0 -2
  353. package/es/config/types/help-panel-item.interface.es.js.map +0 -1
  354. package/es/config/types/help-panel-option.interface.es.js +0 -2
  355. package/es/config/types/help-panel-option.interface.es.js.map +0 -1
  356. package/es/config/types/image-module.interface.es.js +0 -2
  357. package/es/config/types/image-module.interface.es.js.map +0 -1
  358. package/es/config/types/image-upload.interface.es.js +0 -2
  359. package/es/config/types/image-upload.interface.es.js.map +0 -1
  360. package/es/config/types/load-on-demand-module.interface.es.js +0 -2
  361. package/es/config/types/load-on-demand-module.interface.es.js.map +0 -1
  362. package/es/config/types/mention-module.interface.es.js +0 -2
  363. package/es/config/types/mention-module.interface.es.js.map +0 -1
  364. package/es/config/types/paste-change.interface.es.js +0 -2
  365. package/es/config/types/paste-change.interface.es.js.map +0 -1
  366. package/es/config/types/quick-menu-module.interface.es.js +0 -2
  367. package/es/config/types/quick-menu-module.interface.es.js.map +0 -1
  368. package/es/config/types/range.interface.es.js +0 -2
  369. package/es/config/types/range.interface.es.js.map +0 -1
  370. package/es/config/types/registry-options.interface.es.js +0 -2
  371. package/es/config/types/registry-options.interface.es.js.map +0 -1
  372. package/es/config/types/selection-change.interface.es.js +0 -2
  373. package/es/config/types/selection-change.interface.es.js.map +0 -1
  374. package/es/config/types/toolbar-item.interface.es.js +0 -2
  375. package/es/config/types/toolbar-item.interface.es.js.map +0 -1
  376. package/es/config/types/validate-error.interface.es.js +0 -2
  377. package/es/config/types/validate-error.interface.es.js.map +0 -1
  378. package/es/modules/custom-image/BlotFormatter.es.js.map +0 -1
  379. package/es/modules/custom-image/Options.es.js +0 -95
  380. package/es/modules/custom-image/Options.es.js.map +0 -1
  381. package/es/modules/custom-image/actions/Action.es.js +0 -15
  382. package/es/modules/custom-image/actions/Action.es.js.map +0 -1
  383. package/es/modules/custom-image/actions/DeleteAction.es.js.map +0 -1
  384. package/es/modules/custom-image/image-bar.es.js +0 -127
  385. package/es/modules/custom-image/image-bar.es.js.map +0 -1
  386. package/es/modules/custom-image/specs/BlotSpec.es.js +0 -27
  387. package/es/modules/custom-image/specs/BlotSpec.es.js.map +0 -1
  388. package/es/modules/custom-image/specs/CustomImageSpec.es.js.map +0 -1
  389. package/es/modules/custom-image/specs/ImageSpec.es.js +0 -29
  390. package/es/modules/custom-image/specs/ImageSpec.es.js.map +0 -1
  391. package/es/modules/emoji/emoji-list/index.es.js +0 -5
  392. package/es/modules/emoji/emoji-list/people.es.js +0 -114
  393. package/es/modules/emoji/emoji-list/people.es.js.map +0 -1
  394. package/es/modules/emoji/emoji-list.es.js +0 -9
  395. package/es/modules/emoji/emoji-list.es.js.map +0 -1
  396. package/es/modules/emoji/emoji-map.es.js +0 -9
  397. package/es/modules/emoji/emoji-map.es.js.map +0 -1
  398. package/es/modules/emoji/emoji-sprite.es.js +0 -5
  399. package/es/modules/emoji/emoji-sprite.es.js.map +0 -1
  400. package/es/modules/emoji/formats/emoji-blot.es.js +0 -41
  401. package/es/modules/emoji/formats/emoji-blot.es.js.map +0 -1
  402. package/es/modules/emoji/index.es.js +0 -8
  403. package/es/modules/emoji/index.es.js.map +0 -1
  404. package/es/modules/emoji/modules/emoji.es.js +0 -248
  405. package/es/modules/emoji/modules/emoji.es.js.map +0 -1
  406. package/es/modules/emoji/modules/toolbar-emoji.es.js +0 -153
  407. package/es/modules/emoji/modules/toolbar-emoji.es.js.map +0 -1
  408. package/es/modules/emoji/utils.es.js +0 -19
  409. package/es/modules/emoji/utils.es.js.map +0 -1
  410. package/es/modules/mention/Mention.es.js.map +0 -1
  411. package/es/modules/mention/MentionLink.es.js.map +0 -1
  412. package/lib/config/types/additional-toolbar-item.interface.cjs.js +0 -2
  413. package/lib/config/types/additional-toolbar-item.interface.cjs.js.map +0 -1
  414. package/lib/config/types/content-change.interface.cjs.js +0 -2
  415. package/lib/config/types/content-change.interface.cjs.js.map +0 -1
  416. package/lib/config/types/content-save.interface.cjs.js +0 -2
  417. package/lib/config/types/content-save.interface.cjs.js.map +0 -1
  418. package/lib/config/types/counter-option.interface.cjs.js +0 -2
  419. package/lib/config/types/counter-option.interface.cjs.js.map +0 -1
  420. package/lib/config/types/editor-toolbar.interface.cjs.js +0 -2
  421. package/lib/config/types/editor-toolbar.interface.cjs.js.map +0 -1
  422. package/lib/config/types/file-operation.interface.cjs.js +0 -2
  423. package/lib/config/types/file-operation.interface.cjs.js.map +0 -1
  424. package/lib/config/types/focus-change.interface.cjs.js +0 -2
  425. package/lib/config/types/focus-change.interface.cjs.js.map +0 -1
  426. package/lib/config/types/fullscreen-module.interface.cjs.js +0 -2
  427. package/lib/config/types/fullscreen-module.interface.cjs.js.map +0 -1
  428. package/lib/config/types/help-panel-item.interface.cjs.js +0 -2
  429. package/lib/config/types/help-panel-item.interface.cjs.js.map +0 -1
  430. package/lib/config/types/help-panel-option.interface.cjs.js +0 -2
  431. package/lib/config/types/help-panel-option.interface.cjs.js.map +0 -1
  432. package/lib/config/types/image-module.interface.cjs.js +0 -2
  433. package/lib/config/types/image-module.interface.cjs.js.map +0 -1
  434. package/lib/config/types/image-upload.interface.cjs.js +0 -2
  435. package/lib/config/types/image-upload.interface.cjs.js.map +0 -1
  436. package/lib/config/types/load-on-demand-module.interface.cjs.js +0 -2
  437. package/lib/config/types/load-on-demand-module.interface.cjs.js.map +0 -1
  438. package/lib/config/types/mention-module.interface.cjs.js +0 -2
  439. package/lib/config/types/mention-module.interface.cjs.js.map +0 -1
  440. package/lib/config/types/paste-change.interface.cjs.js +0 -2
  441. package/lib/config/types/paste-change.interface.cjs.js.map +0 -1
  442. package/lib/config/types/quick-menu-module.interface.cjs.js +0 -2
  443. package/lib/config/types/quick-menu-module.interface.cjs.js.map +0 -1
  444. package/lib/config/types/range.interface.cjs.js +0 -2
  445. package/lib/config/types/range.interface.cjs.js.map +0 -1
  446. package/lib/config/types/registry-options.interface.cjs.js +0 -2
  447. package/lib/config/types/registry-options.interface.cjs.js.map +0 -1
  448. package/lib/config/types/selection-change.interface.cjs.js +0 -2
  449. package/lib/config/types/selection-change.interface.cjs.js.map +0 -1
  450. package/lib/config/types/toolbar-item.interface.cjs.js +0 -2
  451. package/lib/config/types/toolbar-item.interface.cjs.js.map +0 -1
  452. package/lib/config/types/validate-error.interface.cjs.js +0 -2
  453. package/lib/config/types/validate-error.interface.cjs.js.map +0 -1
  454. package/lib/modules/custom-image/BlotFormatter.cjs.js.map +0 -1
  455. package/lib/modules/custom-image/Options.cjs.js +0 -95
  456. package/lib/modules/custom-image/Options.cjs.js.map +0 -1
  457. package/lib/modules/custom-image/actions/Action.cjs.js +0 -15
  458. package/lib/modules/custom-image/actions/Action.cjs.js.map +0 -1
  459. package/lib/modules/custom-image/actions/DeleteAction.cjs.js.map +0 -1
  460. package/lib/modules/custom-image/image-bar.cjs.js +0 -127
  461. package/lib/modules/custom-image/image-bar.cjs.js.map +0 -1
  462. package/lib/modules/custom-image/specs/BlotSpec.cjs.js +0 -27
  463. package/lib/modules/custom-image/specs/BlotSpec.cjs.js.map +0 -1
  464. package/lib/modules/custom-image/specs/CustomImageSpec.cjs.js.map +0 -1
  465. package/lib/modules/custom-image/specs/ImageSpec.cjs.js +0 -29
  466. package/lib/modules/custom-image/specs/ImageSpec.cjs.js.map +0 -1
  467. package/lib/modules/emoji/emoji-list/index.cjs.js +0 -5
  468. package/lib/modules/emoji/emoji-list/people.cjs.js +0 -114
  469. package/lib/modules/emoji/emoji-list/people.cjs.js.map +0 -1
  470. package/lib/modules/emoji/emoji-list.cjs.js +0 -9
  471. package/lib/modules/emoji/emoji-list.cjs.js.map +0 -1
  472. package/lib/modules/emoji/emoji-map.cjs.js +0 -9
  473. package/lib/modules/emoji/emoji-map.cjs.js.map +0 -1
  474. package/lib/modules/emoji/emoji-sprite.cjs.js +0 -5
  475. package/lib/modules/emoji/emoji-sprite.cjs.js.map +0 -1
  476. package/lib/modules/emoji/formats/emoji-blot.cjs.js +0 -41
  477. package/lib/modules/emoji/formats/emoji-blot.cjs.js.map +0 -1
  478. package/lib/modules/emoji/index.cjs.js +0 -8
  479. package/lib/modules/emoji/index.cjs.js.map +0 -1
  480. package/lib/modules/emoji/modules/emoji.cjs.js +0 -248
  481. package/lib/modules/emoji/modules/emoji.cjs.js.map +0 -1
  482. package/lib/modules/emoji/modules/toolbar-emoji.cjs.js +0 -153
  483. package/lib/modules/emoji/modules/toolbar-emoji.cjs.js.map +0 -1
  484. package/lib/modules/emoji/utils.cjs.js +0 -19
  485. package/lib/modules/emoji/utils.cjs.js.map +0 -1
  486. package/lib/modules/mention/Mention.cjs.js.map +0 -1
  487. package/lib/modules/mention/MentionLink.cjs.js.map +0 -1
@@ -1,6 +1,13 @@
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
- const Embed = Quill.imports["blots/embed"];
5
+ const Embed = Quill.import("blots/embed");
3
6
  class SoftBreak extends Embed {
7
+ constructor() {
8
+ super(...arguments);
9
+ __publicField(this, "remove");
10
+ }
4
11
  static create() {
5
12
  const node = super.create();
6
13
  return node;
@@ -14,10 +21,10 @@ class SoftBreak extends Embed {
14
21
  return 1;
15
22
  }
16
23
  }
17
- SoftBreak.blotName = "soft-break";
18
- SoftBreak.tagName = "BR";
19
- SoftBreak.className = "ql-soft-break";
24
+ __publicField(SoftBreak, "blotName", "soft-break");
25
+ __publicField(SoftBreak, "tagName", "BR");
26
+ __publicField(SoftBreak, "className", "ql-soft-break");
20
27
  export {
21
- SoftBreak as default
28
+ SoftBreak
22
29
  };
23
30
  //# sourceMappingURL=soft-break.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"soft-break.es.js","sources":["../../../src/formats/soft-break.ts"],"sourcesContent":["import Quill from 'quill'\r\n\r\nconst Embed = Quill.imports['blots/embed']\r\n\r\nclass SoftBreak extends Embed {\r\n static blotName: string\r\n static tagName: string\r\n static className: string\r\n domNode: any\r\n prev: any\r\n next: any\r\n remove: () => void\r\n\r\n static create() {\r\n const node = super.create()\r\n return node\r\n }\r\n\r\n optimize() {\r\n // li的开头结尾,移除软回车\r\n if (this.prev === null) {\r\n this.remove()\r\n }\r\n }\r\n\r\n length() {\r\n return 1\r\n }\r\n}\r\nSoftBreak.blotName = 'soft-break'\r\nSoftBreak.tagName = 'BR'\r\nSoftBreak.className = 'ql-soft-break'\r\n\r\nexport default SoftBreak\r\n"],"names":[],"mappings":";AAEA,MAAM,QAAQ,MAAM,QAAQ,aAAa;AAEzC,MAAM,kBAAkB,MAAM;AAAA,EAS5B,OAAO,SAAS;AACR,UAAA,OAAO,MAAM,OAAO;AACnB,WAAA;AAAA,EAAA;AAAA,EAGT,WAAW;AAEL,QAAA,KAAK,SAAS,MAAM;AACtB,WAAK,OAAO;AAAA,IAAA;AAAA,EACd;AAAA,EAGF,SAAS;AACA,WAAA;AAAA,EAAA;AAEX;AACA,UAAU,WAAW;AACrB,UAAU,UAAU;AACpB,UAAU,YAAY;"}
1
+ {"version":3,"file":"soft-break.es.js","sources":["../../../src/formats/soft-break.ts"],"sourcesContent":["import type TypeEmbed from 'quill/blots/embed'\r\nimport Quill from 'quill'\r\n\r\nconst Embed = Quill.import('blots/embed') as typeof TypeEmbed\r\n\r\nexport class SoftBreak extends Embed {\r\n static blotName = 'soft-break'\r\n static tagName = 'BR'\r\n static className = 'ql-soft-break'\r\n remove: () => void\r\n\r\n static create() {\r\n const node = super.create()\r\n return node\r\n }\r\n\r\n optimize() {\r\n // li的开头结尾,移除软回车\r\n if (this.prev === null) {\r\n this.remove()\r\n }\r\n }\r\n\r\n length() {\r\n return 1\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;AAGA,MAAM,QAAQ,MAAM,OAAO,aAAa;AAEjC,MAAM,kBAAkB,MAAM;AAAA,EAA9B;AAAA;AAIL;AAAA;AAAA,EAEA,OAAO,SAAS;AACR,UAAA,OAAO,MAAM,OAAO;AACnB,WAAA;AAAA,EAAA;AAAA,EAGT,WAAW;AAEL,QAAA,KAAK,SAAS,MAAM;AACtB,WAAK,OAAO;AAAA,IAAA;AAAA,EACd;AAAA,EAGF,SAAS;AACA,WAAA;AAAA,EAAA;AAEX;AApBE,cADW,WACJ,YAAW;AAClB,cAFW,WAEJ,WAAU;AACjB,cAHW,WAGJ,aAAY;"}
@@ -1,12 +1,15 @@
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
- const Inline = Quill.imports["blots/inline"];
5
+ const Inline = Quill.import("blots/inline");
3
6
  class StrikeBlot extends Inline {
4
7
  // 此处删除了formats方法,当前tag非span,则并不需要进行特殊处理去重写formats方法
5
8
  }
6
- StrikeBlot.blotName = "strike";
7
- StrikeBlot.tagName = "u";
8
- StrikeBlot.className = "ql-custom-strike";
9
+ __publicField(StrikeBlot, "blotName", "strike");
10
+ __publicField(StrikeBlot, "tagName", "u");
11
+ __publicField(StrikeBlot, "className", "ql-custom-strike");
9
12
  export {
10
- StrikeBlot as default
13
+ StrikeBlot
11
14
  };
12
15
  //# sourceMappingURL=strike.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"strike.es.js","sources":["../../../src/formats/strike.ts"],"sourcesContent":["import Quill from 'quill'\r\n\r\nconst Inline = Quill.imports['blots/inline']\r\n\r\n// @dynamic\r\nclass StrikeBlot extends Inline {\r\n static blotName: string\r\n static className: string\r\n static tagName: string\r\n // 此处删除了formats方法,当前tag非span,则并不需要进行特殊处理去重写formats方法\r\n}\r\nStrikeBlot.blotName = 'strike'\r\nStrikeBlot.tagName = 'u'\r\nStrikeBlot.className = 'ql-custom-strike'\r\n\r\nexport default StrikeBlot\r\n"],"names":[],"mappings":";AAEA,MAAM,SAAS,MAAM,QAAQ,cAAc;AAG3C,MAAM,mBAAmB,OAAO;AAAA;AAKhC;AACA,WAAW,WAAW;AACtB,WAAW,UAAU;AACrB,WAAW,YAAY;"}
1
+ {"version":3,"file":"strike.es.js","sources":["../../../src/formats/strike.ts"],"sourcesContent":["import type TypeInline from 'quill/blots/inline'\r\nimport Quill from 'quill'\r\n\r\nconst Inline = Quill.import('blots/inline') as typeof TypeInline\r\n\r\nexport class StrikeBlot extends Inline {\r\n static blotName = 'strike'\r\n static tagName = 'u'\r\n static className = 'ql-custom-strike'\r\n // 此处删除了formats方法,当前tag非span,则并不需要进行特殊处理去重写formats方法\r\n}\r\n"],"names":[],"mappings":";;;;AAGA,MAAM,SAAS,MAAM,OAAO,cAAc;AAEnC,MAAM,mBAAmB,OAAO;AAAA;AAKvC;AAJE,cADW,YACJ,YAAW;AAClB,cAFW,YAEJ,WAAU;AACjB,cAHW,YAGJ,aAAY;"}
@@ -1,8 +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
  import { sanitize } from "../config/editor.utils.es.js";
3
- const BlockEmbed = Quill.imports["blots/block/embed"];
6
+ const BlockEmbed = Quill.import("blots/block/embed");
4
7
  const VIDEO_ATTRIBUTES = ["id", "title", "src"];
5
- class Video extends BlockEmbed {
8
+ const _Video = class _Video extends BlockEmbed {
6
9
  static sanitize(url) {
7
10
  return sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL;
8
11
  }
@@ -14,7 +17,7 @@ class Video extends BlockEmbed {
14
17
  if (value[key]) {
15
18
  switch (key) {
16
19
  case "src": {
17
- const src = Video.sanitize(value[key]);
20
+ const src = _Video.sanitize(value[key]);
18
21
  node.setAttribute(key, src);
19
22
  break;
20
23
  }
@@ -40,13 +43,14 @@ class Video extends BlockEmbed {
40
43
  });
41
44
  return formats;
42
45
  }
43
- }
44
- Video.blotName = "video";
45
- Video.tagName = "VIDEO";
46
- Video.SANITIZED_URL = "about:blank";
47
- Video.PROTOCOL_WHITELIST = ["http", "https"];
48
- Video.className = "ql-video-item";
46
+ };
47
+ __publicField(_Video, "blotName", "video");
48
+ __publicField(_Video, "tagName", "VIDEO");
49
+ __publicField(_Video, "SANITIZED_URL", "about:blank");
50
+ __publicField(_Video, "PROTOCOL_WHITELIST", ["http", "https", "blob"]);
51
+ __publicField(_Video, "className", "ql-video");
52
+ let Video = _Video;
49
53
  export {
50
- Video as default
54
+ Video
51
55
  };
52
56
  //# sourceMappingURL=video.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"video.es.js","sources":["../../../src/formats/video.ts"],"sourcesContent":["import type { Parchment as TypeParchment } from 'quill'\r\nimport Quill from 'quill'\r\nimport { sanitize } from '../config/editor.utils'\r\n\r\nconst BlockEmbed = Quill.imports['blots/block/embed'] as TypeParchment.BlotConstructor\r\nconst VIDEO_ATTRIBUTES = ['id', 'title', 'src']\r\n\r\nclass Video extends BlockEmbed {\r\n static blotName: string\r\n static tagName: string\r\n static SANITIZED_URL: string\r\n static PROTOCOL_WHITELIST: string[]\r\n static className: string\r\n statics: any\r\n domNode: any\r\n\r\n static sanitize(url) {\r\n return sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL\r\n }\r\n\r\n static create(value) {\r\n const node = super.create(value) as HTMLElement\r\n node.setAttribute('contenteditable', 'false')\r\n node.setAttribute('controls', 'controls')\r\n VIDEO_ATTRIBUTES.forEach((key) => {\r\n if (value[key]) {\r\n switch (key) {\r\n case 'src':{ const src = Video.sanitize(value[key])\r\n node.setAttribute(key, src)\r\n break\r\n }\r\n case 'title': {\r\n node.setAttribute(key, value[key])\r\n break\r\n }\r\n default: {\r\n node.dataset[key] = value[key]\r\n }\r\n }\r\n }\r\n })\r\n return node\r\n }\r\n\r\n static value(domNode) {\r\n const formats: any = {}\r\n VIDEO_ATTRIBUTES.forEach((key) => {\r\n const value = domNode.getAttribute(key) || domNode.dataset[key]\r\n if (value) {\r\n formats[key] = value\r\n }\r\n })\r\n return formats\r\n }\r\n}\r\nVideo.blotName = 'video'\r\nVideo.tagName = 'VIDEO'\r\nVideo.SANITIZED_URL = 'about:blank'\r\nVideo.PROTOCOL_WHITELIST = ['http', 'https']\r\nVideo.className = 'ql-video-item'\r\n\r\nexport default Video\r\n"],"names":[],"mappings":";;AAIA,MAAM,aAAa,MAAM,QAAQ,mBAAmB;AACpD,MAAM,mBAAmB,CAAC,MAAM,SAAS,KAAK;AAE9C,MAAM,cAAc,WAAW;AAAA,EAS7B,OAAO,SAAS,KAAK;AACnB,WAAO,SAAS,KAAK,KAAK,kBAAkB,IAAI,MAAM,KAAK;AAAA,EAAA;AAAA,EAG7D,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,mBAAmB,OAAO;AACvC,SAAA,aAAa,YAAY,UAAU;AACvB,qBAAA,QAAQ,CAAC,QAAQ;AAC5B,UAAA,MAAM,GAAG,GAAG;AACd,gBAAQ,KAAK;AAAA,UACX,KAAK,OAAM;AAAE,kBAAM,MAAM,MAAM,SAAS,MAAM,GAAG,CAAC;AAC3C,iBAAA,aAAa,KAAK,GAAG;AAC1B;AAAA,UAAA;AAAA,UAEF,KAAK,SAAS;AACZ,iBAAK,aAAa,KAAK,MAAM,GAAG,CAAC;AACjC;AAAA,UAAA;AAAA,UAEF,SAAS;AACP,iBAAK,QAAQ,GAAG,IAAI,MAAM,GAAG;AAAA,UAAA;AAAA,QAC/B;AAAA,MACF;AAAA,IACF,CACD;AACM,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,MAAM,SAAS;AACpB,UAAM,UAAe,CAAC;AACL,qBAAA,QAAQ,CAAC,QAAQ;AAChC,YAAM,QAAQ,QAAQ,aAAa,GAAG,KAAK,QAAQ,QAAQ,GAAG;AAC9D,UAAI,OAAO;AACT,gBAAQ,GAAG,IAAI;AAAA,MAAA;AAAA,IACjB,CACD;AACM,WAAA;AAAA,EAAA;AAEX;AACA,MAAM,WAAW;AACjB,MAAM,UAAU;AAChB,MAAM,gBAAgB;AACtB,MAAM,qBAAqB,CAAC,QAAQ,OAAO;AAC3C,MAAM,YAAY;"}
1
+ {"version":3,"file":"video.es.js","sources":["../../../src/formats/video.ts"],"sourcesContent":["import type { BlockEmbed as TypeBlockEmbed } from 'quill/blots/block'\r\nimport Quill from 'quill'\r\nimport { sanitize } from '../config/editor.utils'\r\n\r\nconst BlockEmbed = Quill.import('blots/block/embed') as typeof TypeBlockEmbed\r\nconst VIDEO_ATTRIBUTES = ['id', 'title', 'src']\r\n\r\nexport class Video extends BlockEmbed {\r\n static blotName = 'video'\r\n static tagName = 'VIDEO'\r\n static SANITIZED_URL = 'about:blank'\r\n static PROTOCOL_WHITELIST = ['http', 'https', 'blob']\r\n static className = 'ql-video'\r\n\r\n static sanitize(url) {\r\n return sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL\r\n }\r\n\r\n static create(value) {\r\n const node = super.create(value) as HTMLElement\r\n node.setAttribute('contenteditable', 'false')\r\n node.setAttribute('controls', 'controls')\r\n VIDEO_ATTRIBUTES.forEach((key) => {\r\n if (value[key]) {\r\n switch (key) {\r\n case 'src':{ const src = Video.sanitize(value[key])\r\n node.setAttribute(key, src)\r\n break\r\n }\r\n case 'title': {\r\n node.setAttribute(key, value[key])\r\n break\r\n }\r\n default: {\r\n node.dataset[key] = value[key]\r\n }\r\n }\r\n }\r\n })\r\n return node\r\n }\r\n\r\n static value(domNode) {\r\n const formats: any = {}\r\n VIDEO_ATTRIBUTES.forEach((key) => {\r\n const value = domNode.getAttribute(key) || domNode.dataset[key]\r\n if (value) {\r\n formats[key] = value\r\n }\r\n })\r\n return formats\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;;AAIA,MAAM,aAAa,MAAM,OAAO,mBAAmB;AACnD,MAAM,mBAAmB,CAAC,MAAM,SAAS,KAAK;AAEvC,MAAM,SAAN,MAAM,eAAc,WAAW;AAAA,EAOpC,OAAO,SAAS,KAAK;AACnB,WAAO,SAAS,KAAK,KAAK,kBAAkB,IAAI,MAAM,KAAK;AAAA,EAAA;AAAA,EAG7D,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,mBAAmB,OAAO;AACvC,SAAA,aAAa,YAAY,UAAU;AACvB,qBAAA,QAAQ,CAAC,QAAQ;AAC5B,UAAA,MAAM,GAAG,GAAG;AACd,gBAAQ,KAAK;AAAA,UACX,KAAK,OAAM;AAAE,kBAAM,MAAM,OAAM,SAAS,MAAM,GAAG,CAAC;AAC3C,iBAAA,aAAa,KAAK,GAAG;AAC1B;AAAA,UAAA;AAAA,UAEF,KAAK,SAAS;AACZ,iBAAK,aAAa,KAAK,MAAM,GAAG,CAAC;AACjC;AAAA,UAAA;AAAA,UAEF,SAAS;AACP,iBAAK,QAAQ,GAAG,IAAI,MAAM,GAAG;AAAA,UAAA;AAAA,QAC/B;AAAA,MACF;AAAA,IACF,CACD;AACM,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,MAAM,SAAS;AACpB,UAAM,UAAe,CAAC;AACL,qBAAA,QAAQ,CAAC,QAAQ;AAChC,YAAM,QAAQ,QAAQ,aAAa,GAAG,KAAK,QAAQ,QAAQ,GAAG;AAC9D,UAAI,OAAO;AACT,gBAAQ,GAAG,IAAI;AAAA,MAAA;AAAA,IACjB,CACD;AACM,WAAA;AAAA,EAAA;AAEX;AA5CE,cADW,QACJ,YAAW;AAClB,cAFW,QAEJ,WAAU;AACjB,cAHW,QAGJ,iBAAgB;AACvB,cAJW,QAIJ,sBAAqB,CAAC,QAAQ,SAAS,MAAM;AACpD,cALW,QAKJ,aAAY;AALd,IAAM,QAAN;"}
package/es/index.es.js CHANGED
@@ -1,42 +1,102 @@
1
1
  import "./fluent-editor.es.js";
2
- import { getListValue, inputFile, namespace } from "./config/index.es.js";
3
- import { generateTableUp } from "./modules/table-up/index.es.js";
4
- import { generateToolbarTip } from "./modules/toolbar/toolbar-tip.es.js";
2
+ import "./attributors/index.es.js";
3
+ import "./config/types/index.es.js";
4
+ import "./formats/index.es.js";
5
+ import "./modules/index.es.js";
5
6
  import { generateTableUpShortKeyMenu } from "quill-shortcut-key";
7
+ import { AttributeMap, Delta, Op, OpIterator, Parchment, Range } from "quill/core";
6
8
  import FluentEditor from "./core/fluent-editor.es.js";
7
- import { AUDIO_VIDEO_UPLOADER_MIME_TYPES, BIG_DELTA_LIMIT, CHANGE_LANGUAGE_EVENT, COMPRESSED_UPLOADER_MIME_TYPES, DOC_UPLOADER_MIME_TYPES, FILE_UPLOADER_MIME_TYPES, IMAGE_UPLOADER_MIME_TYPES, LANG_CONF, OTHER_FILE_UPLOADER_MIME_TYPES, PPT_UPLOADER_MIME_TYPES, XSL_UPLOADER_MIME_TYPES, defaultLanguage } from "./config/editor.config.es.js";
8
- import { getEventComposedPath, hadProtocol, hexToRgbA, imageFileToUrl, imageUrlToFile, isInside, isNullOrUndefined, isPureIE, omit, replaceDeltaImage, sanitize, splitWithBreak } from "./config/editor.utils.es.js";
9
+ import { SizeStyle } from "./attributors/font-size.es.js";
10
+ import { FontStyle } from "./attributors/font-style.es.js";
11
+ import { LineHeightStyle } from "./attributors/line-height.es.js";
12
+ import { TextIndentStyle } from "./attributors/text-indent.es.js";
13
+ import { EmojiBlot } from "./formats/emoji.es.js";
14
+ import { SoftBreak } from "./formats/soft-break.es.js";
15
+ import { StrikeBlot } from "./formats/strike.es.js";
16
+ import { Video } from "./formats/video.es.js";
17
+ import { CustomClipboard } from "./modules/custom-clipboard.es.js";
18
+ import { Action } from "./modules/custom-image/actions/action.es.js";
19
+ import { CustomResizeAction } from "./modules/custom-image/actions/custom-resize-action.es.js";
20
+ import { DeleteAction } from "./modules/custom-image/actions/delete-action.es.js";
21
+ import { ALIGN_ATTR, ImageToolbarButtons, alignmentHandler, setAlignStyle } from "./modules/custom-image/actions/image-toolbar-buttons.es.js";
22
+ import { ImageToolbar } from "./modules/custom-image/actions/toolbar.es.js";
23
+ import { ImageToolbarAction } from "./modules/custom-image/actions/toolbar-action.es.js";
24
+ import { BlotFormatter } from "./modules/custom-image/blot-formatter.es.js";
25
+ import { CustomImage } from "./modules/custom-image/image.es.js";
26
+ import { BlotSpec } from "./modules/custom-image/specs/blot-spec.es.js";
27
+ import { CustomImageSpec } from "./modules/custom-image/specs/custom-image-spec.es.js";
28
+ import { ImageSpec } from "./modules/custom-image/specs/image-spec.es.js";
29
+ import { FileUploader } from "./modules/custom-uploader.es.js";
30
+ import { DividerBlot } from "./modules/divider.es.js";
31
+ import { EmojiModule } from "./modules/emoji.es.js";
32
+ import { File } from "./modules/file/formats/file.es.js";
33
+ import { FileBar } from "./modules/file/modules/file-bar.es.js";
34
+ import { FileModule } from "./modules/file/modules/file-module.es.js";
35
+ import { I18N } from "./modules/i18n.es.js";
36
+ import { LinkBlot } from "./modules/link/formats/link.es.js";
37
+ import { LinkTooltip } from "./modules/link/modules/tooltip.es.js";
38
+ import { MathliveBlot } from "./modules/mathlive/formats.es.js";
39
+ import { MathliveModule } from "./modules/mathlive/module.es.js";
40
+ import { MathliveTooltip } from "./modules/mathlive/tooltip.es.js";
41
+ import { Mention } from "./modules/mention/mention.es.js";
42
+ import { MentionLink } from "./modules/mention/mention-link.es.js";
43
+ import { ShortCutKey, shortKey } from "./modules/shortcut-key/index.es.js";
44
+ import { generateTableUp } from "./modules/table-up/index.es.js";
45
+ import { ColorPicker, Picker } from "./modules/toolbar/better-picker.es.js";
46
+ import { BetterToolbar } from "./modules/toolbar/better-toolbar.es.js";
47
+ import { generateToolbarTip } from "./modules/toolbar/toolbar-tip.es.js";
9
48
  export {
10
- AUDIO_VIDEO_UPLOADER_MIME_TYPES,
11
- BIG_DELTA_LIMIT,
12
- CHANGE_LANGUAGE_EVENT,
13
- COMPRESSED_UPLOADER_MIME_TYPES,
14
- DOC_UPLOADER_MIME_TYPES,
15
- FILE_UPLOADER_MIME_TYPES,
16
- IMAGE_UPLOADER_MIME_TYPES,
17
- LANG_CONF,
18
- OTHER_FILE_UPLOADER_MIME_TYPES,
19
- PPT_UPLOADER_MIME_TYPES,
20
- XSL_UPLOADER_MIME_TYPES,
49
+ ALIGN_ATTR,
50
+ Action,
51
+ AttributeMap,
52
+ BetterToolbar,
53
+ BlotFormatter,
54
+ BlotSpec,
55
+ ColorPicker,
56
+ CustomClipboard,
57
+ CustomImage,
58
+ CustomImageSpec,
59
+ CustomResizeAction,
60
+ DeleteAction,
61
+ Delta,
62
+ DividerBlot,
63
+ EmojiBlot,
64
+ EmojiModule,
65
+ File,
66
+ FileBar,
67
+ FileModule,
68
+ FileUploader,
69
+ FontStyle,
70
+ I18N,
71
+ ImageSpec,
72
+ ImageToolbar,
73
+ ImageToolbarAction,
74
+ ImageToolbarButtons,
75
+ LineHeightStyle,
76
+ LinkBlot,
77
+ LinkTooltip,
78
+ MathliveBlot,
79
+ MathliveModule,
80
+ MathliveTooltip,
81
+ Mention,
82
+ MentionLink,
83
+ Op,
84
+ OpIterator,
85
+ Parchment,
86
+ Picker,
87
+ Range,
88
+ ShortCutKey,
89
+ SizeStyle,
90
+ SoftBreak,
91
+ StrikeBlot,
92
+ TextIndentStyle,
93
+ Video,
94
+ alignmentHandler,
21
95
  FluentEditor as default,
22
- defaultLanguage,
23
96
  generateTableUp,
24
97
  generateTableUpShortKeyMenu,
25
98
  generateToolbarTip,
26
- getEventComposedPath,
27
- getListValue,
28
- hadProtocol,
29
- hexToRgbA,
30
- imageFileToUrl,
31
- imageUrlToFile,
32
- inputFile,
33
- isInside,
34
- isNullOrUndefined,
35
- isPureIE,
36
- namespace,
37
- omit,
38
- replaceDeltaImage,
39
- sanitize,
40
- splitWithBreak
99
+ setAlignStyle,
100
+ shortKey
41
101
  };
42
102
  //# sourceMappingURL=index.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
1
+ {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,10 +1,14 @@
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
  import "../config/index.es.js";
3
6
  import { CHANGE_LANGUAGE_EVENT } from "../config/editor.config.es.js";
4
7
  class Counter {
5
8
  constructor(quill, options) {
6
- this.quill = quill;
7
- this.renderCount = () => {
9
+ __publicField(this, "container");
10
+ __publicField(this, "options");
11
+ __publicField(this, "renderCount", () => {
8
12
  setTimeout(() => {
9
13
  const { format, count: totalCount, unit, template: counterTemplate, errorTemplate } = this.options;
10
14
  const count = this.getContentLength(format);
@@ -26,7 +30,8 @@ class Counter {
26
30
  this.container.innerHTML = desc;
27
31
  }
28
32
  });
29
- };
33
+ });
34
+ this.quill = quill;
30
35
  this.options = this.resolveOptions(options);
31
36
  this.container = quill.addContainer("ql-counter");
32
37
  quill.on(Quill.events.TEXT_CHANGE, this.renderCount);
@@ -1 +1 @@
1
- {"version":3,"file":"counter.es.js","sources":["../../../src/modules/counter.ts"],"sourcesContent":["import type { ICounterOption } from '../config/types'\r\nimport type FluentEditor from '../fluent-editor'\r\nimport Quill from 'quill'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../config'\r\n\r\nexport default class Counter {\r\n container: HTMLDivElement\r\n options: ICounterOption\r\n\r\n constructor(public quill: FluentEditor, options: ICounterOption) {\r\n this.options = this.resolveOptions(options)\r\n this.container = quill.addContainer('ql-counter')\r\n quill.on(Quill.events.TEXT_CHANGE, this.renderCount)\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.options = this.resolveOptions(options)\r\n this.renderCount()\r\n })\r\n this.renderCount()\r\n }\r\n\r\n resolveOptions(options: ICounterOption) {\r\n return Object.assign({\r\n format: 'text',\r\n unit: 'char',\r\n template: this.quill.getLangText('counter-template'),\r\n count: 500,\r\n }, options)\r\n }\r\n\r\n renderCount = () => {\r\n setTimeout(() => {\r\n // @ts-ignore\r\n const { format, count: totalCount, unit, template: counterTemplate, errorTemplate } = this.options\r\n const count = this.getContentLength(format)\r\n const restCount = totalCount - count\r\n const countUnit = unit === 'char' ? this.quill.getLangText('char') : this.quill.getLangText('word')\r\n let template: any = counterTemplate\r\n if (typeof template === 'function') {\r\n template = template(count, restCount)\r\n }\r\n const desc = template.replace('{{count}}', count)\r\n .replace('{{totalCount}}', String(totalCount))\r\n .replace('{{restCount}}', String(restCount))\r\n .replace(/{{countUnit}}/g, countUnit)\r\n\r\n let limitTemplate: any = errorTemplate || this.quill.getLangText('counter-limit-tips')\r\n if (typeof limitTemplate === 'function') {\r\n limitTemplate = limitTemplate(count, restCount)\r\n }\r\n const limitTips = limitTemplate.replace('{{countUnit}}', countUnit)\r\n if (restCount < 0) {\r\n this.container.innerHTML = errorTemplate ? limitTips : `<span style=\"color:red\">${limitTips}</span>`\r\n }\r\n else {\r\n this.container.innerHTML = desc\r\n }\r\n })\r\n }\r\n\r\n getContentLength(format) {\r\n let content = this.quill.getText()\r\n if (format === 'html') {\r\n let html = this.quill.root.innerHTML\r\n // 编辑器初始时\r\n if (html === '<p><br></p>' || html === '<div><br><div>') {\r\n html = ''\r\n }\r\n content = html\r\n }\r\n const text = content.replace(/\\s/g, '').trim()\r\n if (this.options.unit === 'word') {\r\n return !content.trim() ? 0 : content.trim().split(/\\s+/).length\r\n }\r\n return text.length\r\n }\r\n}\r\n"],"names":[],"mappings":";;;AAKA,MAAqB,QAAQ;AAAA,EAI3B,YAAmB,OAAqB,SAAyB;AAA9C,SAAA,QAAA;AAoBnB,SAAA,cAAc,MAAM;AAClB,iBAAW,MAAM;AAET,cAAA,EAAE,QAAQ,OAAO,YAAY,MAAM,UAAU,iBAAiB,kBAAkB,KAAK;AACrF,cAAA,QAAQ,KAAK,iBAAiB,MAAM;AAC1C,cAAM,YAAY,aAAa;AACzB,cAAA,YAAY,SAAS,SAAS,KAAK,MAAM,YAAY,MAAM,IAAI,KAAK,MAAM,YAAY,MAAM;AAClG,YAAI,WAAgB;AAChB,YAAA,OAAO,aAAa,YAAY;AACvB,qBAAA,SAAS,OAAO,SAAS;AAAA,QAAA;AAEhC,cAAA,OAAO,SAAS,QAAQ,aAAa,KAAK,EAC7C,QAAQ,kBAAkB,OAAO,UAAU,CAAC,EAC5C,QAAQ,iBAAiB,OAAO,SAAS,CAAC,EAC1C,QAAQ,kBAAkB,SAAS;AAEtC,YAAI,gBAAqB,iBAAiB,KAAK,MAAM,YAAY,oBAAoB;AACjF,YAAA,OAAO,kBAAkB,YAAY;AACvB,0BAAA,cAAc,OAAO,SAAS;AAAA,QAAA;AAEhD,cAAM,YAAY,cAAc,QAAQ,iBAAiB,SAAS;AAClE,YAAI,YAAY,GAAG;AACjB,eAAK,UAAU,YAAY,gBAAgB,YAAY,2BAA2B,SAAS;AAAA,QAAA,OAExF;AACH,eAAK,UAAU,YAAY;AAAA,QAAA;AAAA,MAC7B,CACD;AAAA,IACH;AA/CO,SAAA,UAAU,KAAK,eAAe,OAAO;AACrC,SAAA,YAAY,MAAM,aAAa,YAAY;AAChD,UAAM,GAAG,MAAM,OAAO,aAAa,KAAK,WAAW;AACnD,SAAK,MAAM,QAAQ,GAAG,uBAAuB,MAAM;AAC5C,WAAA,UAAU,KAAK,eAAe,OAAO;AAC1C,WAAK,YAAY;AAAA,IAAA,CAClB;AACD,SAAK,YAAY;AAAA,EAAA;AAAA,EAGnB,eAAe,SAAyB;AACtC,WAAO,OAAO,OAAO;AAAA,MACnB,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU,KAAK,MAAM,YAAY,kBAAkB;AAAA,MACnD,OAAO;AAAA,OACN,OAAO;AAAA,EAAA;AAAA,EAiCZ,iBAAiB,QAAQ;AACnB,QAAA,UAAU,KAAK,MAAM,QAAQ;AACjC,QAAI,WAAW,QAAQ;AACjB,UAAA,OAAO,KAAK,MAAM,KAAK;AAEvB,UAAA,SAAS,iBAAiB,SAAS,kBAAkB;AAChD,eAAA;AAAA,MAAA;AAEC,gBAAA;AAAA,IAAA;AAEZ,UAAM,OAAO,QAAQ,QAAQ,OAAO,EAAE,EAAE,KAAK;AACzC,QAAA,KAAK,QAAQ,SAAS,QAAQ;AACzB,aAAA,CAAC,QAAQ,KAAA,IAAS,IAAI,QAAQ,OAAO,MAAM,KAAK,EAAE;AAAA,IAAA;AAE3D,WAAO,KAAK;AAAA,EAAA;AAEhB;"}
1
+ {"version":3,"file":"counter.es.js","sources":["../../../src/modules/counter.ts"],"sourcesContent":["import type { AnyFunction } from '../config'\r\nimport type FluentEditor from '../fluent-editor'\r\nimport Quill from 'quill'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../config'\r\n\r\nexport interface ICounterOption {\r\n format?: 'text' | 'html'\r\n unit?: 'word' | 'char'\r\n count?: number\r\n template?: string | AnyFunction\r\n errorTemplate?: string | AnyFunction\r\n}\r\n\r\nexport default class Counter {\r\n container: HTMLDivElement\r\n options: ICounterOption\r\n\r\n constructor(public quill: FluentEditor, options: ICounterOption) {\r\n this.options = this.resolveOptions(options)\r\n this.container = quill.addContainer('ql-counter')\r\n quill.on(Quill.events.TEXT_CHANGE, this.renderCount)\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.options = this.resolveOptions(options)\r\n this.renderCount()\r\n })\r\n this.renderCount()\r\n }\r\n\r\n resolveOptions(options: ICounterOption) {\r\n return Object.assign({\r\n format: 'text',\r\n unit: 'char',\r\n template: this.quill.getLangText('counter-template'),\r\n count: 500,\r\n }, options)\r\n }\r\n\r\n renderCount = () => {\r\n setTimeout(() => {\r\n // @ts-ignore\r\n const { format, count: totalCount, unit, template: counterTemplate, errorTemplate } = this.options\r\n const count = this.getContentLength(format)\r\n const restCount = totalCount - count\r\n const countUnit = unit === 'char' ? this.quill.getLangText('char') : this.quill.getLangText('word')\r\n let template: any = counterTemplate\r\n if (typeof template === 'function') {\r\n template = template(count, restCount)\r\n }\r\n const desc = template.replace('{{count}}', count)\r\n .replace('{{totalCount}}', String(totalCount))\r\n .replace('{{restCount}}', String(restCount))\r\n .replace(/{{countUnit}}/g, countUnit)\r\n\r\n let limitTemplate: any = errorTemplate || this.quill.getLangText('counter-limit-tips')\r\n if (typeof limitTemplate === 'function') {\r\n limitTemplate = limitTemplate(count, restCount)\r\n }\r\n const limitTips = limitTemplate.replace('{{countUnit}}', countUnit)\r\n if (restCount < 0) {\r\n this.container.innerHTML = errorTemplate ? limitTips : `<span style=\"color:red\">${limitTips}</span>`\r\n }\r\n else {\r\n this.container.innerHTML = desc\r\n }\r\n })\r\n }\r\n\r\n getContentLength(format) {\r\n let content = this.quill.getText()\r\n if (format === 'html') {\r\n let html = this.quill.root.innerHTML\r\n // 编辑器初始时\r\n if (html === '<p><br></p>' || html === '<div><br><div>') {\r\n html = ''\r\n }\r\n content = html\r\n }\r\n const text = content.replace(/\\s/g, '').trim()\r\n if (this.options.unit === 'word') {\r\n return !content.trim() ? 0 : content.trim().split(/\\s+/).length\r\n }\r\n return text.length\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;;;AAaA,MAAqB,QAAQ;AAAA,EAI3B,YAAmB,OAAqB,SAAyB;AAHjE;AACA;AAsBA,uCAAc,MAAM;AAClB,iBAAW,MAAM;AAET,cAAA,EAAE,QAAQ,OAAO,YAAY,MAAM,UAAU,iBAAiB,kBAAkB,KAAK;AACrF,cAAA,QAAQ,KAAK,iBAAiB,MAAM;AAC1C,cAAM,YAAY,aAAa;AACzB,cAAA,YAAY,SAAS,SAAS,KAAK,MAAM,YAAY,MAAM,IAAI,KAAK,MAAM,YAAY,MAAM;AAClG,YAAI,WAAgB;AAChB,YAAA,OAAO,aAAa,YAAY;AACvB,qBAAA,SAAS,OAAO,SAAS;AAAA,QAAA;AAEhC,cAAA,OAAO,SAAS,QAAQ,aAAa,KAAK,EAC7C,QAAQ,kBAAkB,OAAO,UAAU,CAAC,EAC5C,QAAQ,iBAAiB,OAAO,SAAS,CAAC,EAC1C,QAAQ,kBAAkB,SAAS;AAEtC,YAAI,gBAAqB,iBAAiB,KAAK,MAAM,YAAY,oBAAoB;AACjF,YAAA,OAAO,kBAAkB,YAAY;AACvB,0BAAA,cAAc,OAAO,SAAS;AAAA,QAAA;AAEhD,cAAM,YAAY,cAAc,QAAQ,iBAAiB,SAAS;AAClE,YAAI,YAAY,GAAG;AACjB,eAAK,UAAU,YAAY,gBAAgB,YAAY,2BAA2B,SAAS;AAAA,QAAA,OAExF;AACH,eAAK,UAAU,YAAY;AAAA,QAAA;AAAA,MAC7B,CACD;AAAA,IACH;AAhDmB,SAAA,QAAA;AACZ,SAAA,UAAU,KAAK,eAAe,OAAO;AACrC,SAAA,YAAY,MAAM,aAAa,YAAY;AAChD,UAAM,GAAG,MAAM,OAAO,aAAa,KAAK,WAAW;AACnD,SAAK,MAAM,QAAQ,GAAG,uBAAuB,MAAM;AAC5C,WAAA,UAAU,KAAK,eAAe,OAAO;AAC1C,WAAK,YAAY;AAAA,IAAA,CAClB;AACD,SAAK,YAAY;AAAA,EAAA;AAAA,EAGnB,eAAe,SAAyB;AACtC,WAAO,OAAO,OAAO;AAAA,MACnB,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU,KAAK,MAAM,YAAY,kBAAkB;AAAA,MACnD,OAAO;AAAA,OACN,OAAO;AAAA,EAAA;AAAA,EAiCZ,iBAAiB,QAAQ;AACnB,QAAA,UAAU,KAAK,MAAM,QAAQ;AACjC,QAAI,WAAW,QAAQ;AACjB,UAAA,OAAO,KAAK,MAAM,KAAK;AAEvB,UAAA,SAAS,iBAAiB,SAAS,kBAAkB;AAChD,eAAA;AAAA,MAAA;AAEC,gBAAA;AAAA,IAAA;AAEZ,UAAM,OAAO,QAAQ,QAAQ,OAAO,EAAE,EAAE,KAAK;AACzC,QAAA,KAAK,QAAQ,SAAS,QAAQ;AACzB,aAAA,CAAC,QAAQ,KAAA,IAAS,IAAI,QAAQ,OAAO,MAAM,KAAK,EAAE;AAAA,IAAA;AAE3D,WAAO,KAAK;AAAA,EAAA;AAEhB;"}
@@ -1,7 +1,8 @@
1
1
  import Quill from "quill";
2
2
  import { ERROR_IMAGE_PLACEHOLDER_EN, ERROR_IMAGE_PLACEHOLDER_CN } from "../config/base64-image.es.js";
3
3
  import { BIG_DELTA_LIMIT } from "../config/editor.config.es.js";
4
- import { isNullOrUndefined, replaceDeltaImage, imageFileToUrl, imageUrlToFile, splitWithBreak, omit, hexToRgbA } from "../config/editor.utils.es.js";
4
+ import { isNullOrUndefined, replaceDeltaImage, imageUrlToFile, splitWithBreak, omit, hexToRgbA } from "../config/editor.utils.es.js";
5
+ import { isString } from "../utils/is.es.js";
5
6
  const Clipboard = Quill.import("modules/clipboard");
6
7
  const Delta = Quill.import("delta");
7
8
  class CustomClipboard extends Clipboard {
@@ -10,26 +11,23 @@ class CustomClipboard extends Clipboard {
10
11
  const textMatchers = [];
11
12
  this.matchers.forEach((pair) => {
12
13
  const [selector, matcher] = pair;
13
- switch (selector) {
14
- case Node.TEXT_NODE:
15
- textMatchers.push(matcher);
16
- break;
17
- case Node.ELEMENT_NODE:
18
- elementMatchers.push(matcher);
19
- break;
20
- default: {
21
- const vRegex = /v:(.+)/;
22
- const nodeList = vRegex.test(selector) ? Array.from(container.getElementsByTagName(selector)) : Array.from(container.querySelectorAll(selector));
23
- nodeList.forEach((node) => {
24
- if (nodeMatches.has(node)) {
25
- const matches = nodeMatches.get(node);
26
- matches.push(matcher);
27
- } else {
28
- nodeMatches.set(node, [matcher]);
29
- }
30
- });
31
- break;
32
- }
14
+ if (selector === Node.TEXT_NODE) {
15
+ textMatchers.push(matcher);
16
+ } else if (selector === Node.ELEMENT_NODE) {
17
+ elementMatchers.push(matcher);
18
+ } else if (isString(selector)) {
19
+ const vRegex = /v:(.+)/;
20
+ const nodeList = Array.from(
21
+ vRegex.test(selector) ? container.getElementsByTagName(selector) : container.querySelectorAll(selector)
22
+ );
23
+ nodeList.forEach((node) => {
24
+ if (nodeMatches.has(node)) {
25
+ const matches = nodeMatches.get(node);
26
+ matches.push(matcher);
27
+ } else {
28
+ nodeMatches.set(node, [matcher]);
29
+ }
30
+ });
33
31
  }
34
32
  });
35
33
  return [elementMatchers, textMatchers];
@@ -113,7 +111,7 @@ class CustomClipboard extends Clipboard {
113
111
  const linePos = { index: range.index, length: range.length, fix: 0 };
114
112
  const [line, offset] = this.quill.getLine(range.index);
115
113
  const handlePasteContent = (content) => {
116
- let pastedContent = content;
114
+ const pastedContent = content;
117
115
  const oldDelta = new Delta().retain(linePos.index).delete(linePos.length);
118
116
  const delta = oldDelta.concat(pastedContent);
119
117
  setTimeout(() => {
@@ -122,7 +120,7 @@ class CustomClipboard extends Clipboard {
122
120
  delta.length() - linePos.length - linePos.fix,
123
121
  Quill.sources.SILENT
124
122
  );
125
- this.quill.scrollIntoView();
123
+ this.quill.scrollSelectionIntoView();
126
124
  if (loadingTipsContainer) {
127
125
  loadingTipsContainer.remove();
128
126
  }
@@ -188,11 +186,9 @@ class CustomClipboard extends Clipboard {
188
186
  return new Promise((resolve) => {
189
187
  resolve(originalUrls[index]);
190
188
  });
191
- } else if (this.quill.options.uploadOption.imageUploadToServer) {
189
+ } else {
192
190
  const range = this.getImgSelection(pastedDelta, imageIndexs[index]);
193
191
  this.quill.uploader.upload(range, [imageFile]);
194
- } else {
195
- return imageFileToUrl(imageFile);
196
192
  }
197
193
  })
198
194
  );
@@ -408,6 +404,6 @@ function renderStyles(html) {
408
404
  return convertedString;
409
405
  }
410
406
  export {
411
- CustomClipboard as default
407
+ CustomClipboard
412
408
  };
413
409
  //# sourceMappingURL=custom-clipboard.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"custom-clipboard.es.js","sources":["../../../src/modules/custom-clipboard.ts"],"sourcesContent":["import type { Parchment as TypeParchment } from 'quill'\r\nimport type TypeBlock from 'quill/blots/block'\r\nimport type TypeClipboard from 'quill/modules/clipboard'\r\nimport type FluentEditor from '../fluent-editor'\r\nimport Quill from 'quill'\r\nimport {\r\n ERROR_IMAGE_PLACEHOLDER_CN,\r\n ERROR_IMAGE_PLACEHOLDER_EN,\r\n} from '../config/base64-image'\r\nimport { BIG_DELTA_LIMIT } from '../config/editor.config'\r\nimport {\r\n hexToRgbA,\r\n imageFileToUrl,\r\n imageUrlToFile,\r\n isNullOrUndefined,\r\n omit,\r\n replaceDeltaImage,\r\n splitWithBreak,\r\n} from '../config/editor.utils'\r\n\r\nconst Clipboard = Quill.import('modules/clipboard') as typeof TypeClipboard\r\nconst Delta = Quill.import('delta')\r\n\r\nclass CustomClipboard extends Clipboard {\r\n quill: FluentEditor\r\n convert\r\n onCopy\r\n matchers\r\n\r\n prepareMatching(container, nodeMatches) {\r\n const elementMatchers = []\r\n const textMatchers = []\r\n this.matchers.forEach((pair) => {\r\n const [selector, matcher] = pair\r\n switch (selector) {\r\n case Node.TEXT_NODE:\r\n textMatchers.push(matcher)\r\n break\r\n case Node.ELEMENT_NODE:\r\n elementMatchers.push(matcher)\r\n break\r\n default: {\r\n // word 的 v:shape 系列标签只能通过 getElementsByTagName 获取\r\n const vRegex = /v:(.+)/\r\n const nodeList = vRegex.test(selector)\r\n ? Array.from(container.getElementsByTagName(selector))\r\n : Array.from(container.querySelectorAll(selector))\r\n nodeList.forEach((node) => {\r\n if (nodeMatches.has(node)) {\r\n const matches = nodeMatches.get(node)\r\n matches.push(matcher)\r\n }\r\n else {\r\n nodeMatches.set(node, [matcher])\r\n }\r\n })\r\n break\r\n }\r\n }\r\n })\r\n return [elementMatchers, textMatchers]\r\n }\r\n\r\n onCaptureCopy(e, isCut = false) {\r\n if (e.defaultPrevented) {\r\n return\r\n }\r\n e.preventDefault()\r\n const [range] = this.quill.selection.getRange()\r\n if (isNullOrUndefined(range)) {\r\n return\r\n }\r\n const { html, text } = this.onCopy(range, isCut)\r\n\r\n // 兼容IE11浏览器`\r\n if (!e.clipboardData) {\r\n e.clipboardData = {\r\n types: 'text/plain',\r\n setData: (_type, value) => {\r\n // @ts-ignore\r\n return window.clipboardData.setData('Text', value)\r\n },\r\n }\r\n }\r\n\r\n // 复制代码时移除utf8中产生的不间断空格\\u00A0\r\n let plainText = text\r\n if (html.startsWith('<pre>')) {\r\n plainText = text.replace(/\\u00A0/g, ' ')\r\n }\r\n\r\n e.clipboardData.setData('text/html', html)\r\n e.clipboardData.setData('text/plain', plainText)\r\n if (isCut) {\r\n this.quill.deleteText(range, Quill.sources.USER)\r\n }\r\n }\r\n\r\n onCapturePaste(e: ClipboardEvent) {\r\n if (e.defaultPrevented || !this.quill.isEnabled()) {\r\n return\r\n }\r\n e.preventDefault()\r\n const range = this.quill.getSelection(true)\r\n if (isNullOrUndefined(range)) {\r\n return\r\n }\r\n\r\n // 兼容IE11浏览器\r\n if (!e.clipboardData) {\r\n // @ts-ignore\r\n e.clipboardData = {\r\n types: 'text/plain',\r\n getData: () => {\r\n // @ts-ignore\r\n return window.clipboardData.getData('Text')\r\n },\r\n }\r\n }\r\n\r\n const html = e.clipboardData.getData('text/html')\r\n const text = e.clipboardData.getData('text/plain')\r\n const files = Array.from(e.clipboardData.files || [])\r\n const msExcelCheck = /<meta.*?Microsoft Excel\\s[\\d].*?>/\r\n\r\n if (html.search(msExcelCheck) === -1 && files.length > 0) {\r\n this.quill.uploader.upload(range, files)\r\n }\r\n else {\r\n const msWordCheck1\r\n = /<meta\\s*name=\"?generator\"?\\s*content=\"?microsoft\\s*word\\s*\\d+\"?\\/?>/i\r\n const msWordCheck2 = /xmlns:o=\"urn:schemas-microsoft-com/i\r\n const result = { html, text, files, rtf: null }\r\n if (html.search(msExcelCheck) !== -1) {\r\n result.html = renderStyles(html)\r\n }\r\n if (msWordCheck1.test(html) || msWordCheck2.test(html)) {\r\n // TODO: 当word文档包含heading时text/rtf读取为空,无法获取hex图片,待修复。可参考ckeditor5/issues/2493\r\n result.rtf = e.clipboardData.getData('text/rtf')\r\n }\r\n this.onPaste(range, result)\r\n }\r\n }\r\n\r\n onPaste(range, { html, text, files: clipboardFiles, rtf }) {\r\n const hexImages = this.extractImageDataFromRtf(rtf)\r\n const rootBgColor = getComputedStyle(this.quill.root).backgroundColor\r\n const formats = this.quill.getFormat(range.index)\r\n let pastedDelta = this.convert({ text, html }, formats)\r\n pastedDelta = replaceDeltaWhiteSpace(pastedDelta, rootBgColor)\r\n const deltaLength = pastedDelta.ops.length\r\n\r\n let loadingTipsContainer\r\n if (deltaLength > BIG_DELTA_LIMIT) {\r\n loadingTipsContainer = this.quill.addContainer('ql-loading-tips')\r\n loadingTipsContainer.innerHTML = this.quill.getLangText('pasting')\r\n }\r\n\r\n const linePos = { index: range.index, length: range.length, fix: 0 }\r\n const [line, offset] = this.quill.getLine(range.index)\r\n\r\n const handlePasteContent = (content: any) => {\r\n let pastedContent = content\r\n\r\n const oldDelta = new Delta().retain(linePos.index).delete(linePos.length)\r\n const delta = oldDelta.concat(pastedContent)\r\n\r\n setTimeout(() => {\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n this.quill.setSelection(\r\n delta.length() - linePos.length - linePos.fix,\r\n Quill.sources.SILENT,\r\n )\r\n this.quill.scrollIntoView()\r\n if (loadingTipsContainer) {\r\n loadingTipsContainer.remove()\r\n }\r\n })\r\n }\r\n\r\n ;(async () => {\r\n try {\r\n const [files, placeholders, originalUrls, imageIndexs] = this.flipFilesArray(\r\n await this.extractFilesFromDelta(\r\n pastedDelta,\r\n clipboardFiles,\r\n hexImages,\r\n ),\r\n )\r\n\r\n if (files.length === 0) {\r\n handlePasteContent(pastedDelta)\r\n }\r\n else {\r\n if (this.quill.options.editorPaste && this.quill.options.editorPaste.observers.length !== 0) {\r\n // 设置editorPaste回调的情况\r\n this.quill.options.editorPaste.emit({\r\n files,\r\n callback: ({ code, message, data }) => {\r\n if (code === 0) {\r\n const { imageUrls } = data\r\n pastedDelta = replaceDeltaImage(\r\n pastedDelta,\r\n imageUrls,\r\n placeholders,\r\n )\r\n handlePasteContent(pastedDelta)\r\n }\r\n else {\r\n console.error('error message:', message)\r\n }\r\n },\r\n })\r\n }\r\n else {\r\n // 没有originalUrls 也没有文件粘贴\r\n if (files[0] !== undefined || originalUrls.length === 0) {\r\n // 没有设置editorPaste回调的情况下,File格式的占位图需要手动转换成url格式,插入到编辑器中\r\n const imageUrls = await this.files2urls(\r\n files,\r\n placeholders,\r\n originalUrls,\r\n pastedDelta,\r\n imageIndexs,\r\n )\r\n pastedDelta = replaceDeltaImage(\r\n pastedDelta,\r\n imageUrls,\r\n placeholders,\r\n )\r\n }\r\n handlePasteContent(pastedDelta)\r\n }\r\n }\r\n }\r\n catch (_e) {\r\n throw new Error('Paste failed.')\r\n }\r\n })()\r\n }\r\n\r\n files2urls(files, placeholders, originalUrls, pastedDelta, imageIndexs) {\r\n return Promise.all(\r\n files.map(async (imageFile, index) => {\r\n const netImgExp = /^((http|https)\\:)?\\/\\/([\\s\\S]+)$/\r\n if (\r\n !placeholders[index]\r\n && originalUrls[index]\r\n && netImgExp.test(originalUrls[index])\r\n ) {\r\n // 不是占位图的普通url图片直接返回url\r\n return new Promise((resolve) => {\r\n resolve(originalUrls[index])\r\n })\r\n }\r\n else if (this.quill.options.uploadOption.imageUploadToServer) {\r\n const range = this.getImgSelection(pastedDelta, imageIndexs[index])\r\n this.quill.uploader.upload(range, [imageFile])\r\n }\r\n else {\r\n // 占位图或者跨域图需要手动转换成url格式\r\n return imageFileToUrl(imageFile)\r\n }\r\n }),\r\n )\r\n }\r\n\r\n flipFilesArray(filesArr) {\r\n const files = []\r\n const placeholders = []\r\n const originalUrls = []\r\n const imageIndexs = []\r\n filesArr.forEach((item: any) => {\r\n if (item) {\r\n const [file, placeholder, originalUrl, imageIndex] = item\r\n files.push(file)\r\n placeholders.push(placeholder)\r\n originalUrls.push(originalUrl)\r\n if (imageIndex === 0 || imageIndex) {\r\n imageIndexs.push(imageIndex)\r\n }\r\n }\r\n })\r\n return [files, placeholders, originalUrls, imageIndexs]\r\n }\r\n\r\n // 将图片从hex转为base64\r\n convertHexToBase64(hexString) {\r\n return btoa(\r\n hexString\r\n .match(/\\w{2}/g)\r\n .map((char) => {\r\n return String.fromCharCode(Number.parseInt(char, 16))\r\n })\r\n .join(''),\r\n )\r\n }\r\n\r\n // 匹配rtf中的图片,存储为{hex, type}对象数组\r\n extractImageDataFromRtf(rtfData) {\r\n if (!rtfData) {\r\n return []\r\n }\r\n\r\n const regexPictureHeader\r\n = /{\\\\pict[\\s\\S]+?\\\\bliptag-?\\d+(\\\\blipupi-?\\d+)?({\\\\\\*\\\\blipuid\\s?[\\da-fA-F]+)?[\\s}]*?/\r\n const regexPicture = new RegExp(\r\n `(?:(${regexPictureHeader.source}))([\\\\da-fA-F\\\\s]+)\\\\}`,\r\n 'g',\r\n )\r\n const images = rtfData.match(regexPicture)\r\n const result = []\r\n\r\n if (images) {\r\n for (const image of images) {\r\n let imageType = ''\r\n\r\n if (image.includes('\\\\pngblip')) {\r\n imageType = 'image/png'\r\n }\r\n else if (image.includes('\\\\jpegblip')) {\r\n imageType = 'image/jpeg'\r\n }\r\n\r\n if (imageType) {\r\n result.push({\r\n hex: image\r\n .replace(regexPictureHeader, '')\r\n .replace(/[^\\da-fA-F]/g, ''),\r\n type: imageType,\r\n })\r\n }\r\n }\r\n }\r\n\r\n return result\r\n }\r\n\r\n extractFilesFromDelta(delta, clipboardFiles, hexImages?) {\r\n let index = -1\r\n return Promise.all(\r\n delta.map(async (op) => {\r\n index++\r\n const image = op.insert.image\r\n if (!image || image.hasExisted) {\r\n return\r\n }\r\n\r\n let file\r\n let isPlaceholderImage = false\r\n let imageIndex\r\n try {\r\n // hex 图片存在则为 file:/// 协议本地图片,使用 hex 图片转为 base64 读取\r\n const hexImage = hexImages.length && hexImages.shift()\r\n const newImage\r\n = hexImage\r\n && `data:${hexImage.type};base64,${this.convertHexToBase64(\r\n hexImage.hex,\r\n )}`\r\n imageIndex = index\r\n file = await imageUrlToFile(newImage || image.src || image)\r\n }\r\n catch (_err) {\r\n if (clipboardFiles.length !== 0) {\r\n // 跨域获取图片失败时从剪切板获取图片\r\n const clipboardFile = clipboardFiles[0]\r\n const imageType\r\n = clipboardFile.type?.indexOf('image') === -1\r\n ? 'image/png'\r\n : clipboardFile.type\r\n const blob = clipboardFile.slice(0, clipboardFile.size, imageType)\r\n file = new File([blob], `image-CORS-${new Date().getTime()}.png`, {\r\n type: imageType,\r\n })\r\n }\r\n else if (image.src.startsWith('http')) {\r\n // 什么都不做\r\n }\r\n else {\r\n // 剪切板中无图片,用失败占位图替换\r\n const errorImagePlaceholderJpg\r\n = this.quill.getLangText('img-error') === 'Image Copy Error'\r\n ? ERROR_IMAGE_PLACEHOLDER_EN\r\n : ERROR_IMAGE_PLACEHOLDER_CN\r\n file = await imageUrlToFile(errorImagePlaceholderJpg, true)\r\n isPlaceholderImage = true\r\n }\r\n }\r\n\r\n return [file, isPlaceholderImage, image, imageIndex]\r\n }),\r\n )\r\n }\r\n\r\n getImgSelection(delta, imageIndex) {\r\n let length = 0\r\n delta.ops.every((op, index) => {\r\n if (index === imageIndex) {\r\n return false\r\n }\r\n if (typeof op.insert === 'string') {\r\n length += op.insert.length\r\n }\r\n return true\r\n })\r\n const range = {\r\n index: length,\r\n length: 0,\r\n }\r\n return range\r\n }\r\n}\r\n\r\nfunction rebuildDelta(delta, cellLine) {\r\n const { cell: cellId, colspan, row: rowId, rowspan } = cellLine\r\n const buildedDelta = delta.reduce((newDelta, op) => {\r\n if (op.insert && typeof op.insert === 'string') {\r\n const lines = splitWithBreak(op.insert)\r\n\r\n lines.forEach((text) => {\r\n if (text === '\\n') {\r\n // 对换行增加 table-cell-line 格式,以避免表格断开\r\n newDelta.insert('\\n', {\r\n ...op.attributes,\r\n 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan },\r\n })\r\n }\r\n else {\r\n text = text.endsWith('\\r') ? text.slice(0, -1) : text\r\n newDelta.insert(\r\n text,\r\n omit(op.attributes, ['table', 'table-cell-line']),\r\n )\r\n }\r\n })\r\n }\r\n else {\r\n newDelta.insert(op.insert, op.attributes)\r\n }\r\n\r\n return newDelta\r\n }, new Delta())\r\n\r\n return buildedDelta\r\n}\r\n\r\nfunction replaceStrWhiteSpace(str) {\r\n const isWhiteSpace = value => /^(\\u3000|\\u0020){1}$/.test(value) // 空白字符\r\n let textWithWhiteSpace = ''\r\n let beginHasChar = false\r\n for (const char of str) {\r\n if (isWhiteSpace(char) && !beginHasChar) {\r\n textWithWhiteSpace += '\\u00A0'\r\n }\r\n else {\r\n textWithWhiteSpace += char\r\n beginHasChar = true\r\n }\r\n }\r\n return textWithWhiteSpace\r\n}\r\n\r\nfunction replaceDeltaWhiteSpace(delta, rootBgColor?) {\r\n return delta.reduce((newDelta, op) => {\r\n // fix: 当粘贴文字颜色和编辑器背景色一致且自身无背景色的情况下移除文字颜色样式,避免误导用户粘贴无效\r\n if (\r\n rootBgColor\r\n && op.attributes\r\n && op.attributes.color\r\n && !op.attributes.background\r\n ) {\r\n const originColor = op.attributes.color\r\n const fontColor\r\n = originColor.indexOf('#') === 0 ? hexToRgbA(originColor) : originColor\r\n if (\r\n fontColor === rootBgColor\r\n || (fontColor === 'rgba(255,255,255,1)'\r\n && rootBgColor === 'rgba(0, 0, 0, 0)')\r\n ) {\r\n delete op.attributes.color\r\n }\r\n }\r\n if (op.insert && typeof op.insert === 'string') {\r\n const lines = splitWithBreak(op.insert)\r\n let insertWithWhiteSpace = ''\r\n lines.forEach((text) => {\r\n insertWithWhiteSpace += replaceStrWhiteSpace(text)\r\n })\r\n newDelta.insert(insertWithWhiteSpace, op.attributes)\r\n }\r\n else {\r\n newDelta.insert(op.insert, op.attributes)\r\n }\r\n return newDelta\r\n }, new Delta())\r\n}\r\n\r\nfunction renderStyles(html) {\r\n let htmlString = html\r\n // Trim unnecessary parts.\r\n htmlString = htmlString.substring(\r\n htmlString.indexOf('<html '),\r\n htmlString.length,\r\n )\r\n htmlString = htmlString.substring(\r\n 0,\r\n htmlString.lastIndexOf('</html>') + '</html>'.length,\r\n )\r\n\r\n // Add temporary iframe.\r\n const iframe = document.createElement('iframe')\r\n iframe.style.display = 'none'\r\n document.body.appendChild(iframe)\r\n\r\n const iframeDoc = iframe.contentDocument || iframe.contentWindow.document\r\n iframeDoc.open()\r\n iframeDoc.write(htmlString)\r\n iframeDoc.close()\r\n\r\n let collection\r\n let pointer\r\n const rules\r\n = iframeDoc.styleSheets[iframeDoc.styleSheets.length - 1].cssRules\r\n\r\n // Convert internal styles to inline style of respective node.\r\n for (let idx = 0; idx < rules.length; idx++) {\r\n if ((rules[idx] as CSSStyleRule).selectorText === '') {\r\n continue\r\n }\r\n collection = iframeDoc.body.querySelectorAll(\r\n (rules[idx] as CSSStyleRule).selectorText,\r\n )\r\n\r\n for (pointer = 0; pointer < collection.length; pointer++) {\r\n collection[pointer].style.cssText += (\r\n rules[idx] as CSSStyleRule\r\n ).style.cssText\r\n }\r\n }\r\n\r\n // @ts-ignore\r\n const convertedString = iframeDoc.firstChild.outerHTML\r\n // Remove temporary iframe.\r\n iframe.parentNode.removeChild(iframe)\r\n\r\n return convertedString\r\n}\r\n\r\nexport default CustomClipboard\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"custom-clipboard.es.js","sources":["../../../src/modules/custom-clipboard.ts"],"sourcesContent":["import type TypeClipboard from 'quill/modules/clipboard'\r\nimport type FluentEditor from '../fluent-editor'\r\nimport Quill from 'quill'\r\nimport {\r\n ERROR_IMAGE_PLACEHOLDER_CN,\r\n ERROR_IMAGE_PLACEHOLDER_EN,\r\n} from '../config/base64-image'\r\nimport { BIG_DELTA_LIMIT } from '../config/editor.config'\r\nimport {\r\n hexToRgbA,\r\n imageUrlToFile,\r\n isNullOrUndefined,\r\n omit,\r\n replaceDeltaImage,\r\n splitWithBreak,\r\n} from '../config/editor.utils'\r\nimport { isString } from '../utils/is'\r\n\r\nconst Clipboard = Quill.import('modules/clipboard') as typeof TypeClipboard\r\nconst Delta = Quill.import('delta')\r\n\r\nexport class CustomClipboard extends Clipboard {\r\n declare quill: FluentEditor\r\n\r\n prepareMatching(container: HTMLElement, nodeMatches) {\r\n const elementMatchers = []\r\n const textMatchers = []\r\n this.matchers.forEach((pair) => {\r\n const [selector, matcher] = pair\r\n if (selector === Node.TEXT_NODE) {\r\n textMatchers.push(matcher)\r\n }\r\n else if (selector === Node.ELEMENT_NODE) {\r\n elementMatchers.push(matcher)\r\n }\r\n else if (isString(selector)) {\r\n // word 的 v:shape 系列标签只能通过 getElementsByTagName 获取\r\n const vRegex = /v:(.+)/\r\n const nodeList = Array.from(\r\n vRegex.test(selector)\r\n ? container.getElementsByTagName(selector)\r\n : container.querySelectorAll(selector),\r\n )\r\n nodeList.forEach((node) => {\r\n if (nodeMatches.has(node)) {\r\n const matches = nodeMatches.get(node)\r\n matches.push(matcher)\r\n }\r\n else {\r\n nodeMatches.set(node, [matcher])\r\n }\r\n })\r\n }\r\n })\r\n return [elementMatchers, textMatchers]\r\n }\r\n\r\n onCaptureCopy(e, isCut = false) {\r\n if (e.defaultPrevented) {\r\n return\r\n }\r\n e.preventDefault()\r\n const [range] = this.quill.selection.getRange()\r\n if (isNullOrUndefined(range)) {\r\n return\r\n }\r\n const { html, text } = this.onCopy(range, isCut)\r\n\r\n // 兼容IE11浏览器`\r\n if (!e.clipboardData) {\r\n e.clipboardData = {\r\n types: 'text/plain',\r\n setData: (_type, value) => {\r\n // @ts-ignore\r\n return window.clipboardData.setData('Text', value)\r\n },\r\n }\r\n }\r\n\r\n // 复制代码时移除utf8中产生的不间断空格\\u00A0\r\n let plainText = text\r\n if (html.startsWith('<pre>')) {\r\n plainText = text.replace(/\\u00A0/g, ' ')\r\n }\r\n\r\n e.clipboardData.setData('text/html', html)\r\n e.clipboardData.setData('text/plain', plainText)\r\n if (isCut) {\r\n this.quill.deleteText(range, Quill.sources.USER)\r\n }\r\n }\r\n\r\n onCapturePaste(e: ClipboardEvent) {\r\n if (e.defaultPrevented || !this.quill.isEnabled()) {\r\n return\r\n }\r\n e.preventDefault()\r\n const range = this.quill.getSelection(true)\r\n if (isNullOrUndefined(range)) {\r\n return\r\n }\r\n\r\n // 兼容IE11浏览器\r\n if (!e.clipboardData) {\r\n // @ts-ignore\r\n e.clipboardData = {\r\n types: 'text/plain',\r\n getData: () => {\r\n // @ts-ignore\r\n return window.clipboardData.getData('Text')\r\n },\r\n }\r\n }\r\n\r\n const html = e.clipboardData.getData('text/html')\r\n const text = e.clipboardData.getData('text/plain')\r\n const files = Array.from(e.clipboardData.files || [])\r\n const msExcelCheck = /<meta.*?Microsoft Excel\\s[\\d].*?>/\r\n\r\n if (html.search(msExcelCheck) === -1 && files.length > 0) {\r\n this.quill.uploader.upload(range, files)\r\n }\r\n else {\r\n const msWordCheck1\r\n = /<meta\\s*name=\"?generator\"?\\s*content=\"?microsoft\\s*word\\s*\\d+\"?\\/?>/i\r\n const msWordCheck2 = /xmlns:o=\"urn:schemas-microsoft-com/i\r\n const result = { html, text, files, rtf: null }\r\n if (html.search(msExcelCheck) !== -1) {\r\n result.html = renderStyles(html)\r\n }\r\n if (msWordCheck1.test(html) || msWordCheck2.test(html)) {\r\n // TODO: 当word文档包含heading时text/rtf读取为空,无法获取hex图片,待修复。可参考ckeditor5/issues/2493\r\n result.rtf = e.clipboardData.getData('text/rtf')\r\n }\r\n this.onPaste(range, result)\r\n }\r\n }\r\n\r\n onPaste(range, { html, text, files: clipboardFiles, rtf }) {\r\n const hexImages = this.extractImageDataFromRtf(rtf)\r\n const rootBgColor = getComputedStyle(this.quill.root).backgroundColor\r\n const formats = this.quill.getFormat(range.index)\r\n let pastedDelta = this.convert({ text, html }, formats)\r\n pastedDelta = replaceDeltaWhiteSpace(pastedDelta, rootBgColor)\r\n const deltaLength = pastedDelta.ops.length\r\n\r\n let loadingTipsContainer\r\n if (deltaLength > BIG_DELTA_LIMIT) {\r\n loadingTipsContainer = this.quill.addContainer('ql-loading-tips')\r\n loadingTipsContainer.innerHTML = this.quill.getLangText('pasting')\r\n }\r\n\r\n const linePos = { index: range.index, length: range.length, fix: 0 }\r\n const [line, offset] = this.quill.getLine(range.index)\r\n\r\n const handlePasteContent = (content: any) => {\r\n const pastedContent = content\r\n\r\n const oldDelta = new Delta().retain(linePos.index).delete(linePos.length)\r\n const delta = oldDelta.concat(pastedContent)\r\n\r\n setTimeout(() => {\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n this.quill.setSelection(\r\n delta.length() - linePos.length - linePos.fix,\r\n Quill.sources.SILENT,\r\n )\r\n this.quill.scrollSelectionIntoView()\r\n if (loadingTipsContainer) {\r\n loadingTipsContainer.remove()\r\n }\r\n })\r\n }\r\n\r\n ;(async () => {\r\n try {\r\n const [files, placeholders, originalUrls, imageIndexs] = this.flipFilesArray(\r\n await this.extractFilesFromDelta(\r\n pastedDelta,\r\n clipboardFiles,\r\n hexImages,\r\n ),\r\n )\r\n\r\n if (files.length === 0) {\r\n handlePasteContent(pastedDelta)\r\n }\r\n else {\r\n if (this.quill.options.editorPaste && this.quill.options.editorPaste.observers.length !== 0) {\r\n // 设置editorPaste回调的情况\r\n this.quill.options.editorPaste.emit({\r\n files,\r\n callback: ({ code, message, data }) => {\r\n if (code === 0) {\r\n const { imageUrls } = data\r\n pastedDelta = replaceDeltaImage(\r\n pastedDelta,\r\n imageUrls,\r\n placeholders,\r\n )\r\n handlePasteContent(pastedDelta)\r\n }\r\n else {\r\n console.error('error message:', message)\r\n }\r\n },\r\n })\r\n }\r\n else {\r\n // 没有originalUrls 也没有文件粘贴\r\n if (files[0] !== undefined || originalUrls.length === 0) {\r\n // 没有设置editorPaste回调的情况下,File格式的占位图需要手动转换成url格式,插入到编辑器中\r\n const imageUrls = await this.files2urls(\r\n files,\r\n placeholders,\r\n originalUrls,\r\n pastedDelta,\r\n imageIndexs,\r\n )\r\n pastedDelta = replaceDeltaImage(\r\n pastedDelta,\r\n imageUrls,\r\n placeholders,\r\n )\r\n }\r\n handlePasteContent(pastedDelta)\r\n }\r\n }\r\n }\r\n catch (_e) {\r\n throw new Error('Paste failed.')\r\n }\r\n })()\r\n }\r\n\r\n files2urls(files: File[], placeholders, originalUrls, pastedDelta, imageIndexs) {\r\n return Promise.all(\r\n files.map(async (imageFile, index) => {\r\n const netImgExp = /^((http|https)\\:)?\\/\\/([\\s\\S]+)$/\r\n if (\r\n !placeholders[index]\r\n && originalUrls[index]\r\n && netImgExp.test(originalUrls[index])\r\n ) {\r\n // 不是占位图的普通url图片直接返回url\r\n return new Promise((resolve) => {\r\n resolve(originalUrls[index])\r\n })\r\n }\r\n else {\r\n const range = this.getImgSelection(pastedDelta, imageIndexs[index])\r\n this.quill.uploader.upload(range, [imageFile])\r\n }\r\n }),\r\n )\r\n }\r\n\r\n flipFilesArray(filesArr) {\r\n const files = []\r\n const placeholders = []\r\n const originalUrls = []\r\n const imageIndexs = []\r\n filesArr.forEach((item: any) => {\r\n if (item) {\r\n const [file, placeholder, originalUrl, imageIndex] = item\r\n files.push(file)\r\n placeholders.push(placeholder)\r\n originalUrls.push(originalUrl)\r\n if (imageIndex === 0 || imageIndex) {\r\n imageIndexs.push(imageIndex)\r\n }\r\n }\r\n })\r\n return [files, placeholders, originalUrls, imageIndexs]\r\n }\r\n\r\n // 将图片从hex转为base64\r\n convertHexToBase64(hexString) {\r\n return btoa(\r\n hexString\r\n .match(/\\w{2}/g)\r\n .map((char) => {\r\n return String.fromCharCode(Number.parseInt(char, 16))\r\n })\r\n .join(''),\r\n )\r\n }\r\n\r\n // 匹配rtf中的图片,存储为{hex, type}对象数组\r\n extractImageDataFromRtf(rtfData) {\r\n if (!rtfData) {\r\n return []\r\n }\r\n\r\n const regexPictureHeader\r\n = /{\\\\pict[\\s\\S]+?\\\\bliptag-?\\d+(\\\\blipupi-?\\d+)?({\\\\\\*\\\\blipuid\\s?[\\da-fA-F]+)?[\\s}]*?/\r\n const regexPicture = new RegExp(\r\n `(?:(${regexPictureHeader.source}))([\\\\da-fA-F\\\\s]+)\\\\}`,\r\n 'g',\r\n )\r\n const images = rtfData.match(regexPicture)\r\n const result = []\r\n\r\n if (images) {\r\n for (const image of images) {\r\n let imageType = ''\r\n\r\n if (image.includes('\\\\pngblip')) {\r\n imageType = 'image/png'\r\n }\r\n else if (image.includes('\\\\jpegblip')) {\r\n imageType = 'image/jpeg'\r\n }\r\n\r\n if (imageType) {\r\n result.push({\r\n hex: image\r\n .replace(regexPictureHeader, '')\r\n .replace(/[^\\da-fA-F]/g, ''),\r\n type: imageType,\r\n })\r\n }\r\n }\r\n }\r\n\r\n return result\r\n }\r\n\r\n extractFilesFromDelta(delta, clipboardFiles, hexImages?) {\r\n let index = -1\r\n return Promise.all(\r\n delta.map(async (op) => {\r\n index++\r\n const image = op.insert.image\r\n if (!image || image.hasExisted) {\r\n return\r\n }\r\n\r\n let file\r\n let isPlaceholderImage = false\r\n let imageIndex\r\n try {\r\n // hex 图片存在则为 file:/// 协议本地图片,使用 hex 图片转为 base64 读取\r\n const hexImage = hexImages.length && hexImages.shift()\r\n const newImage\r\n = hexImage\r\n && `data:${hexImage.type};base64,${this.convertHexToBase64(\r\n hexImage.hex,\r\n )}`\r\n imageIndex = index\r\n file = await imageUrlToFile(newImage || image.src || image)\r\n }\r\n catch (_err) {\r\n if (clipboardFiles.length !== 0) {\r\n // 跨域获取图片失败时从剪切板获取图片\r\n const clipboardFile = clipboardFiles[0]\r\n const imageType\r\n = clipboardFile.type?.indexOf('image') === -1\r\n ? 'image/png'\r\n : clipboardFile.type\r\n const blob = clipboardFile.slice(0, clipboardFile.size, imageType)\r\n file = new File([blob], `image-CORS-${new Date().getTime()}.png`, {\r\n type: imageType,\r\n })\r\n }\r\n else if (image.src.startsWith('http')) {\r\n // 什么都不做\r\n }\r\n else {\r\n // 剪切板中无图片,用失败占位图替换\r\n const errorImagePlaceholderJpg\r\n = this.quill.getLangText('img-error') === 'Image Copy Error'\r\n ? ERROR_IMAGE_PLACEHOLDER_EN\r\n : ERROR_IMAGE_PLACEHOLDER_CN\r\n file = await imageUrlToFile(errorImagePlaceholderJpg, true)\r\n isPlaceholderImage = true\r\n }\r\n }\r\n\r\n return [file, isPlaceholderImage, image, imageIndex]\r\n }),\r\n )\r\n }\r\n\r\n getImgSelection(delta, imageIndex) {\r\n let length = 0\r\n delta.ops.every((op, index) => {\r\n if (index === imageIndex) {\r\n return false\r\n }\r\n if (typeof op.insert === 'string') {\r\n length += op.insert.length\r\n }\r\n return true\r\n })\r\n const range = {\r\n index: length,\r\n length: 0,\r\n }\r\n return range\r\n }\r\n}\r\n\r\nfunction rebuildDelta(delta, cellLine) {\r\n const { cell: cellId, colspan, row: rowId, rowspan } = cellLine\r\n const buildedDelta = delta.reduce((newDelta, op) => {\r\n if (op.insert && typeof op.insert === 'string') {\r\n const lines = splitWithBreak(op.insert)\r\n\r\n lines.forEach((text) => {\r\n if (text === '\\n') {\r\n // 对换行增加 table-cell-line 格式,以避免表格断开\r\n newDelta.insert('\\n', {\r\n ...op.attributes,\r\n 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan },\r\n })\r\n }\r\n else {\r\n text = text.endsWith('\\r') ? text.slice(0, -1) : text\r\n newDelta.insert(\r\n text,\r\n omit(op.attributes, ['table', 'table-cell-line']),\r\n )\r\n }\r\n })\r\n }\r\n else {\r\n newDelta.insert(op.insert, op.attributes)\r\n }\r\n\r\n return newDelta\r\n }, new Delta())\r\n\r\n return buildedDelta\r\n}\r\n\r\nfunction replaceStrWhiteSpace(str) {\r\n const isWhiteSpace = value => /^(\\u3000|\\u0020){1}$/.test(value) // 空白字符\r\n let textWithWhiteSpace = ''\r\n let beginHasChar = false\r\n for (const char of str) {\r\n if (isWhiteSpace(char) && !beginHasChar) {\r\n textWithWhiteSpace += '\\u00A0'\r\n }\r\n else {\r\n textWithWhiteSpace += char\r\n beginHasChar = true\r\n }\r\n }\r\n return textWithWhiteSpace\r\n}\r\n\r\nfunction replaceDeltaWhiteSpace(delta, rootBgColor?) {\r\n return delta.reduce((newDelta, op) => {\r\n // fix: 当粘贴文字颜色和编辑器背景色一致且自身无背景色的情况下移除文字颜色样式,避免误导用户粘贴无效\r\n if (\r\n rootBgColor\r\n && op.attributes\r\n && op.attributes.color\r\n && !op.attributes.background\r\n ) {\r\n const originColor = op.attributes.color\r\n const fontColor\r\n = originColor.indexOf('#') === 0 ? hexToRgbA(originColor) : originColor\r\n if (\r\n fontColor === rootBgColor\r\n || (fontColor === 'rgba(255,255,255,1)'\r\n && rootBgColor === 'rgba(0, 0, 0, 0)')\r\n ) {\r\n delete op.attributes.color\r\n }\r\n }\r\n if (op.insert && typeof op.insert === 'string') {\r\n const lines = splitWithBreak(op.insert)\r\n let insertWithWhiteSpace = ''\r\n lines.forEach((text) => {\r\n insertWithWhiteSpace += replaceStrWhiteSpace(text)\r\n })\r\n newDelta.insert(insertWithWhiteSpace, op.attributes)\r\n }\r\n else {\r\n newDelta.insert(op.insert, op.attributes)\r\n }\r\n return newDelta\r\n }, new Delta())\r\n}\r\n\r\nfunction renderStyles(html) {\r\n let htmlString = html\r\n // Trim unnecessary parts.\r\n htmlString = htmlString.substring(\r\n htmlString.indexOf('<html '),\r\n htmlString.length,\r\n )\r\n htmlString = htmlString.substring(\r\n 0,\r\n htmlString.lastIndexOf('</html>') + '</html>'.length,\r\n )\r\n\r\n // Add temporary iframe.\r\n const iframe = document.createElement('iframe')\r\n iframe.style.display = 'none'\r\n document.body.appendChild(iframe)\r\n\r\n const iframeDoc = iframe.contentDocument || iframe.contentWindow.document\r\n iframeDoc.open()\r\n iframeDoc.write(htmlString)\r\n iframeDoc.close()\r\n\r\n let collection\r\n let pointer\r\n const rules\r\n = iframeDoc.styleSheets[iframeDoc.styleSheets.length - 1].cssRules\r\n\r\n // Convert internal styles to inline style of respective node.\r\n for (let idx = 0; idx < rules.length; idx++) {\r\n if ((rules[idx] as CSSStyleRule).selectorText === '') {\r\n continue\r\n }\r\n collection = iframeDoc.body.querySelectorAll(\r\n (rules[idx] as CSSStyleRule).selectorText,\r\n )\r\n\r\n for (pointer = 0; pointer < collection.length; pointer++) {\r\n collection[pointer].style.cssText += (\r\n rules[idx] as CSSStyleRule\r\n ).style.cssText\r\n }\r\n }\r\n\r\n // @ts-ignore\r\n const convertedString = iframeDoc.firstChild.outerHTML\r\n // Remove temporary iframe.\r\n iframe.parentNode.removeChild(iframe)\r\n\r\n return convertedString\r\n}\r\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
+ class Action {
5
+ constructor(formatter) {
6
+ __publicField(this, "formatter");
7
+ this.formatter = formatter;
8
+ }
9
+ onCreate() {
10
+ }
11
+ onDestroy() {
12
+ }
13
+ onUpdate() {
14
+ }
15
+ }
16
+ export {
17
+ Action
18
+ };
19
+ //# sourceMappingURL=action.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action.es.js","sources":["../../../../../src/modules/custom-image/actions/action.ts"],"sourcesContent":["import type { BlotFormatter } from '../blot-formatter'\r\n\r\nexport class Action {\r\n formatter: BlotFormatter\r\n\r\n constructor(formatter: BlotFormatter) {\r\n this.formatter = formatter\r\n }\r\n\r\n onCreate() {}\r\n\r\n onDestroy() {}\r\n\r\n onUpdate() {}\r\n}\r\n"],"names":[],"mappings":";;;AAEO,MAAM,OAAO;AAAA,EAGlB,YAAY,WAA0B;AAFtC;AAGE,SAAK,YAAY;AAAA,EAAA;AAAA,EAGnB,WAAW;AAAA,EAAA;AAAA,EAEX,YAAY;AAAA,EAAA;AAAA,EAEZ,WAAW;AAAA,EAAA;AACb;"}