@opentiny/fluent-editor 3.19.0 → 3.19.1-alpha.0

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 (388) hide show
  1. package/README.md +97 -96
  2. package/es/config/base64-image.es.js +9 -0
  3. package/es/config/base64-image.es.js.map +1 -0
  4. package/es/config/editor.config.es.js +86 -0
  5. package/es/config/editor.config.es.js.map +1 -0
  6. package/es/config/editor.utils.es.js +141 -0
  7. package/es/config/editor.utils.es.js.map +1 -0
  8. package/es/config/i18n/en-us.es.js +90 -0
  9. package/es/config/i18n/en-us.es.js.map +1 -0
  10. package/es/config/i18n/zh-cn.es.js +90 -0
  11. package/es/config/i18n/zh-cn.es.js.map +1 -0
  12. package/es/config/icons.config.es.js +301 -0
  13. package/es/config/icons.config.es.js.map +1 -0
  14. package/es/config/types/additional-toolbar-item.interface.es.js +2 -0
  15. package/es/config/types/additional-toolbar-item.interface.es.js.map +1 -0
  16. package/es/config/types/content-change.interface.es.js +2 -0
  17. package/es/config/types/content-change.interface.es.js.map +1 -0
  18. package/es/config/types/content-save.interface.es.js +2 -0
  19. package/es/config/types/content-save.interface.es.js.map +1 -0
  20. package/es/config/types/counter-option.interface.es.js +2 -0
  21. package/es/config/types/counter-option.interface.es.js.map +1 -0
  22. package/es/config/types/editor-config.interface.es.js +2 -0
  23. package/es/config/types/editor-config.interface.es.js.map +1 -0
  24. package/es/config/types/editor-modules.interface.es.js +2 -0
  25. package/es/config/types/editor-modules.interface.es.js.map +1 -0
  26. package/es/config/types/file-operation.interface.es.js +2 -0
  27. package/es/config/types/file-operation.interface.es.js.map +1 -0
  28. package/es/config/types/focus-change.interface.es.js +2 -0
  29. package/es/config/types/focus-change.interface.es.js.map +1 -0
  30. package/es/config/types/fullscreen-module.interface.es.js +2 -0
  31. package/es/config/types/fullscreen-module.interface.es.js.map +1 -0
  32. package/es/config/types/help-panel-item.interface.es.js +2 -0
  33. package/es/config/types/help-panel-item.interface.es.js.map +1 -0
  34. package/es/config/types/help-panel-option.interface.es.js +2 -0
  35. package/es/config/types/help-panel-option.interface.es.js.map +1 -0
  36. package/es/config/types/image-module.interface.es.js +2 -0
  37. package/es/config/types/image-module.interface.es.js.map +1 -0
  38. package/es/config/types/image-upload.interface.es.js +2 -0
  39. package/es/config/types/image-upload.interface.es.js.map +1 -0
  40. package/es/config/types/index.es.js +23 -0
  41. package/es/config/types/index.es.js.map +1 -0
  42. package/es/config/types/load-on-demand-module.interface.es.js +2 -0
  43. package/es/config/types/load-on-demand-module.interface.es.js.map +1 -0
  44. package/es/config/types/mention-module.interface.es.js +2 -0
  45. package/es/config/types/mention-module.interface.es.js.map +1 -0
  46. package/es/config/types/paste-change.interface.es.js +2 -0
  47. package/es/config/types/paste-change.interface.es.js.map +1 -0
  48. package/es/config/types/quick-menu-module.interface.es.js +2 -0
  49. package/es/config/types/quick-menu-module.interface.es.js.map +1 -0
  50. package/es/config/types/range.interface.es.js +2 -0
  51. package/es/config/types/range.interface.es.js.map +1 -0
  52. package/es/config/types/registry-options.interface.es.js +2 -0
  53. package/es/config/types/registry-options.interface.es.js.map +1 -0
  54. package/es/config/types/selection-change.interface.es.js +2 -0
  55. package/es/config/types/selection-change.interface.es.js.map +1 -0
  56. package/es/config/types/toolbar-item.interface.es.js +2 -0
  57. package/es/config/types/toolbar-item.interface.es.js.map +1 -0
  58. package/es/config/types/type.es.js +2 -0
  59. package/es/config/types/type.es.js.map +1 -0
  60. package/es/config/types/validate-error.interface.es.js +2 -0
  61. package/es/config/types/validate-error.interface.es.js.map +1 -0
  62. package/es/config.es.js +168 -0
  63. package/es/config.es.js.map +1 -0
  64. package/es/counter/index.es.js +60 -0
  65. package/es/counter/index.es.js.map +1 -0
  66. package/es/custom-clipboard.es.js +469 -0
  67. package/es/custom-clipboard.es.js.map +1 -0
  68. package/es/custom-image/BlotFormatter.es.js +136 -0
  69. package/es/custom-image/BlotFormatter.es.js.map +1 -0
  70. package/es/custom-image/Options.es.js +95 -0
  71. package/es/custom-image/Options.es.js.map +1 -0
  72. package/es/custom-image/actions/Action.es.js +15 -0
  73. package/es/custom-image/actions/Action.es.js.map +1 -0
  74. package/es/custom-image/actions/CustomResizeAction.es.js +158 -0
  75. package/es/custom-image/actions/CustomResizeAction.es.js.map +1 -0
  76. package/es/custom-image/actions/DeleteAction.es.js +31 -0
  77. package/es/custom-image/actions/DeleteAction.es.js.map +1 -0
  78. package/es/custom-image/image.es.js +95 -0
  79. package/es/custom-image/image.es.js.map +1 -0
  80. package/es/custom-image/specs/BlotSpec.es.js +27 -0
  81. package/es/custom-image/specs/BlotSpec.es.js.map +1 -0
  82. package/es/custom-image/specs/CustomImageSpec.es.js +117 -0
  83. package/es/custom-image/specs/CustomImageSpec.es.js.map +1 -0
  84. package/es/custom-image/specs/ImageSpec.es.js +29 -0
  85. package/es/custom-image/specs/ImageSpec.es.js.map +1 -0
  86. package/es/custom-uploader.es.js +161 -0
  87. package/es/custom-uploader.es.js.map +1 -0
  88. package/es/emoji/emoji-list/index.es.js +5 -0
  89. package/es/emoji/emoji-list/index.es.js.map +1 -0
  90. package/es/emoji/emoji-list/people.es.js +114 -0
  91. package/es/emoji/emoji-list/people.es.js.map +1 -0
  92. package/es/emoji/emoji-list.es.js +9 -0
  93. package/es/emoji/emoji-list.es.js.map +1 -0
  94. package/es/emoji/emoji-map.es.js +9 -0
  95. package/es/emoji/emoji-map.es.js.map +1 -0
  96. package/es/emoji/formats/emoji-blot.es.js +41 -0
  97. package/es/emoji/formats/emoji-blot.es.js.map +1 -0
  98. package/es/emoji/index.es.js +8 -0
  99. package/es/emoji/index.es.js.map +1 -0
  100. package/es/emoji/modules/emoji.es.js +248 -0
  101. package/es/emoji/modules/emoji.es.js.map +1 -0
  102. package/es/emoji/modules/toolbar-emoji.es.js +153 -0
  103. package/es/emoji/modules/toolbar-emoji.es.js.map +1 -0
  104. package/es/emoji/utils.es.js +19 -0
  105. package/es/emoji/utils.es.js.map +1 -0
  106. package/es/file/formats/file.es.js +56 -0
  107. package/es/file/formats/file.es.js.map +1 -0
  108. package/es/file/index.es.js +32 -0
  109. package/es/file/index.es.js.map +1 -0
  110. package/es/file/modules/file-bar.es.js +123 -0
  111. package/es/file/modules/file-bar.es.js.map +1 -0
  112. package/es/fluent-editor.es.js +163 -0
  113. package/es/fluent-editor.es.js.map +1 -0
  114. package/es/format-painter/index.es.js +66 -0
  115. package/es/format-painter/index.es.js.map +1 -0
  116. package/es/global-link/constants.es.js +9 -0
  117. package/es/global-link/constants.es.js.map +1 -0
  118. package/es/global-link/formats/customer-widget-link.es.js +28 -0
  119. package/es/global-link/formats/customer-widget-link.es.js.map +1 -0
  120. package/es/global-link/formats/doc-link.es.js +42 -0
  121. package/es/global-link/formats/doc-link.es.js.map +1 -0
  122. package/es/global-link/formats/wiki-link.es.js +34 -0
  123. package/es/global-link/formats/wiki-link.es.js.map +1 -0
  124. package/es/global-link/formats/work-item-link.es.js +36 -0
  125. package/es/global-link/formats/work-item-link.es.js.map +1 -0
  126. package/es/global-link/global-link-panel.es.js +2 -0
  127. package/es/global-link/global-link-panel.es.js.map +1 -0
  128. package/es/global-link/index.es.js +139 -0
  129. package/es/global-link/index.es.js.map +1 -0
  130. package/es/global-link/utils/createTable.es.js +50 -0
  131. package/es/global-link/utils/createTable.es.js.map +1 -0
  132. package/es/index.es.js +5 -0
  133. package/es/index.es.js.map +1 -0
  134. package/es/lineheight.es.js +11 -0
  135. package/es/lineheight.es.js.map +1 -0
  136. package/es/link/formats/link.es.js +34 -0
  137. package/es/link/formats/link.es.js.map +1 -0
  138. package/es/link/index.es.js +32 -0
  139. package/es/link/index.es.js.map +1 -0
  140. package/es/link/modules/tooltip.es.js +275 -0
  141. package/es/link/modules/tooltip.es.js.map +1 -0
  142. package/es/mention/Mention.es.js +329 -0
  143. package/es/mention/Mention.es.js.map +1 -0
  144. package/es/mention/MentionLink.es.js +37 -0
  145. package/es/mention/MentionLink.es.js.map +1 -0
  146. package/es/mention/constants.es.js +9 -0
  147. package/es/mention/constants.es.js.map +1 -0
  148. package/es/quick-menu/index.es.js +82 -0
  149. package/es/quick-menu/index.es.js.map +1 -0
  150. package/es/screenshot/index.es.js +147 -0
  151. package/es/screenshot/index.es.js.map +1 -0
  152. package/es/soft-break/index.es.js +23 -0
  153. package/es/soft-break/index.es.js.map +1 -0
  154. package/es/strike/index.es.js +12 -0
  155. package/es/strike/index.es.js.map +1 -0
  156. package/es/syntax/index.es.js +30 -0
  157. package/es/syntax/index.es.js.map +1 -0
  158. package/es/table/better-table.es.js +434 -0
  159. package/es/table/better-table.es.js.map +1 -0
  160. package/es/table/formats/header.es.js +94 -0
  161. package/es/table/formats/header.es.js.map +1 -0
  162. package/es/table/formats/list.es.js +163 -0
  163. package/es/table/formats/list.es.js.map +1 -0
  164. package/es/table/formats/table.es.js +970 -0
  165. package/es/table/formats/table.es.js.map +1 -0
  166. package/es/table/modules/table-column-tool.es.js +400 -0
  167. package/es/table/modules/table-column-tool.es.js.map +1 -0
  168. package/es/table/modules/table-operation-menu.es.js +457 -0
  169. package/es/table/modules/table-operation-menu.es.js.map +1 -0
  170. package/es/table/modules/table-scroll-bar.es.js +190 -0
  171. package/es/table/modules/table-scroll-bar.es.js.map +1 -0
  172. package/es/table/modules/table-selection.es.js +306 -0
  173. package/es/table/modules/table-selection.es.js.map +1 -0
  174. package/es/table/table-config.es.js +74 -0
  175. package/es/table/table-config.es.js.map +1 -0
  176. package/es/table/utils/index.es.js +54 -0
  177. package/es/table/utils/index.es.js.map +1 -0
  178. package/es/table/utils/node-matchers.es.js +292 -0
  179. package/es/table/utils/node-matchers.es.js.map +1 -0
  180. package/es/toolbar/better-picker.es.js +307 -0
  181. package/es/toolbar/better-picker.es.js.map +1 -0
  182. package/es/toolbar/index.es.js +139 -0
  183. package/es/toolbar/index.es.js.map +1 -0
  184. package/es/types/vue.d.es.js +2 -0
  185. package/es/types/vue.d.es.js.map +1 -0
  186. package/es/utils/debounce.es.js +112 -0
  187. package/es/utils/debounce.es.js.map +1 -0
  188. package/es/utils/method.es.js +68 -0
  189. package/es/utils/method.es.js.map +1 -0
  190. package/es/video/index.es.js +49 -0
  191. package/es/video/index.es.js.map +1 -0
  192. package/lib/config/base64-image.cjs.js +9 -0
  193. package/lib/config/base64-image.cjs.js.map +1 -0
  194. package/lib/config/editor.config.cjs.js +86 -0
  195. package/lib/config/editor.config.cjs.js.map +1 -0
  196. package/lib/config/editor.utils.cjs.js +141 -0
  197. package/lib/config/editor.utils.cjs.js.map +1 -0
  198. package/lib/config/i18n/en-us.cjs.js +90 -0
  199. package/lib/config/i18n/en-us.cjs.js.map +1 -0
  200. package/lib/config/i18n/zh-cn.cjs.js +90 -0
  201. package/lib/config/i18n/zh-cn.cjs.js.map +1 -0
  202. package/lib/config/icons.config.cjs.js +301 -0
  203. package/lib/config/icons.config.cjs.js.map +1 -0
  204. package/lib/config/types/additional-toolbar-item.interface.cjs.js +2 -0
  205. package/lib/config/types/additional-toolbar-item.interface.cjs.js.map +1 -0
  206. package/lib/config/types/content-change.interface.cjs.js +2 -0
  207. package/lib/config/types/content-change.interface.cjs.js.map +1 -0
  208. package/lib/config/types/content-save.interface.cjs.js +2 -0
  209. package/lib/config/types/content-save.interface.cjs.js.map +1 -0
  210. package/lib/config/types/counter-option.interface.cjs.js +2 -0
  211. package/lib/config/types/counter-option.interface.cjs.js.map +1 -0
  212. package/lib/config/types/editor-config.interface.cjs.js +2 -0
  213. package/lib/config/types/editor-config.interface.cjs.js.map +1 -0
  214. package/lib/config/types/editor-modules.interface.cjs.js +2 -0
  215. package/lib/config/types/editor-modules.interface.cjs.js.map +1 -0
  216. package/lib/config/types/file-operation.interface.cjs.js +2 -0
  217. package/lib/config/types/file-operation.interface.cjs.js.map +1 -0
  218. package/lib/config/types/focus-change.interface.cjs.js +2 -0
  219. package/lib/config/types/focus-change.interface.cjs.js.map +1 -0
  220. package/lib/config/types/fullscreen-module.interface.cjs.js +2 -0
  221. package/lib/config/types/fullscreen-module.interface.cjs.js.map +1 -0
  222. package/lib/config/types/help-panel-item.interface.cjs.js +2 -0
  223. package/lib/config/types/help-panel-item.interface.cjs.js.map +1 -0
  224. package/lib/config/types/help-panel-option.interface.cjs.js +2 -0
  225. package/lib/config/types/help-panel-option.interface.cjs.js.map +1 -0
  226. package/lib/config/types/image-module.interface.cjs.js +2 -0
  227. package/lib/config/types/image-module.interface.cjs.js.map +1 -0
  228. package/lib/config/types/image-upload.interface.cjs.js +2 -0
  229. package/lib/config/types/image-upload.interface.cjs.js.map +1 -0
  230. package/lib/config/types/index.cjs.js +24 -0
  231. package/lib/config/types/index.cjs.js.map +1 -0
  232. package/lib/config/types/load-on-demand-module.interface.cjs.js +2 -0
  233. package/lib/config/types/load-on-demand-module.interface.cjs.js.map +1 -0
  234. package/lib/config/types/mention-module.interface.cjs.js +2 -0
  235. package/lib/config/types/mention-module.interface.cjs.js.map +1 -0
  236. package/lib/config/types/paste-change.interface.cjs.js +2 -0
  237. package/lib/config/types/paste-change.interface.cjs.js.map +1 -0
  238. package/lib/config/types/quick-menu-module.interface.cjs.js +2 -0
  239. package/lib/config/types/quick-menu-module.interface.cjs.js.map +1 -0
  240. package/lib/config/types/range.interface.cjs.js +2 -0
  241. package/lib/config/types/range.interface.cjs.js.map +1 -0
  242. package/lib/config/types/registry-options.interface.cjs.js +2 -0
  243. package/lib/config/types/registry-options.interface.cjs.js.map +1 -0
  244. package/lib/config/types/selection-change.interface.cjs.js +2 -0
  245. package/lib/config/types/selection-change.interface.cjs.js.map +1 -0
  246. package/lib/config/types/toolbar-item.interface.cjs.js +2 -0
  247. package/lib/config/types/toolbar-item.interface.cjs.js.map +1 -0
  248. package/lib/config/types/type.cjs.js +2 -0
  249. package/lib/config/types/type.cjs.js.map +1 -0
  250. package/lib/config/types/validate-error.interface.cjs.js +2 -0
  251. package/lib/config/types/validate-error.interface.cjs.js.map +1 -0
  252. package/lib/config.cjs.js +168 -0
  253. package/lib/config.cjs.js.map +1 -0
  254. package/lib/counter/index.cjs.js +60 -0
  255. package/lib/counter/index.cjs.js.map +1 -0
  256. package/lib/custom-clipboard.cjs.js +469 -0
  257. package/lib/custom-clipboard.cjs.js.map +1 -0
  258. package/lib/custom-image/BlotFormatter.cjs.js +136 -0
  259. package/lib/custom-image/BlotFormatter.cjs.js.map +1 -0
  260. package/lib/custom-image/Options.cjs.js +95 -0
  261. package/lib/custom-image/Options.cjs.js.map +1 -0
  262. package/lib/custom-image/actions/Action.cjs.js +15 -0
  263. package/lib/custom-image/actions/Action.cjs.js.map +1 -0
  264. package/lib/custom-image/actions/CustomResizeAction.cjs.js +158 -0
  265. package/lib/custom-image/actions/CustomResizeAction.cjs.js.map +1 -0
  266. package/lib/custom-image/actions/DeleteAction.cjs.js +31 -0
  267. package/lib/custom-image/actions/DeleteAction.cjs.js.map +1 -0
  268. package/lib/custom-image/image.cjs.js +95 -0
  269. package/lib/custom-image/image.cjs.js.map +1 -0
  270. package/lib/custom-image/specs/BlotSpec.cjs.js +27 -0
  271. package/lib/custom-image/specs/BlotSpec.cjs.js.map +1 -0
  272. package/lib/custom-image/specs/CustomImageSpec.cjs.js +117 -0
  273. package/lib/custom-image/specs/CustomImageSpec.cjs.js.map +1 -0
  274. package/lib/custom-image/specs/ImageSpec.cjs.js +29 -0
  275. package/lib/custom-image/specs/ImageSpec.cjs.js.map +1 -0
  276. package/lib/custom-uploader.cjs.js +161 -0
  277. package/lib/custom-uploader.cjs.js.map +1 -0
  278. package/lib/emoji/emoji-list/index.cjs.js +5 -0
  279. package/lib/emoji/emoji-list/index.cjs.js.map +1 -0
  280. package/lib/emoji/emoji-list/people.cjs.js +114 -0
  281. package/lib/emoji/emoji-list/people.cjs.js.map +1 -0
  282. package/lib/emoji/emoji-list.cjs.js +9 -0
  283. package/lib/emoji/emoji-list.cjs.js.map +1 -0
  284. package/lib/emoji/emoji-map.cjs.js +9 -0
  285. package/lib/emoji/emoji-map.cjs.js.map +1 -0
  286. package/lib/emoji/formats/emoji-blot.cjs.js +41 -0
  287. package/lib/emoji/formats/emoji-blot.cjs.js.map +1 -0
  288. package/lib/emoji/index.cjs.js +8 -0
  289. package/lib/emoji/index.cjs.js.map +1 -0
  290. package/lib/emoji/modules/emoji.cjs.js +248 -0
  291. package/lib/emoji/modules/emoji.cjs.js.map +1 -0
  292. package/lib/emoji/modules/toolbar-emoji.cjs.js +153 -0
  293. package/lib/emoji/modules/toolbar-emoji.cjs.js.map +1 -0
  294. package/lib/emoji/utils.cjs.js +19 -0
  295. package/lib/emoji/utils.cjs.js.map +1 -0
  296. package/lib/file/formats/file.cjs.js +56 -0
  297. package/lib/file/formats/file.cjs.js.map +1 -0
  298. package/lib/file/index.cjs.js +32 -0
  299. package/lib/file/index.cjs.js.map +1 -0
  300. package/lib/file/modules/file-bar.cjs.js +123 -0
  301. package/lib/file/modules/file-bar.cjs.js.map +1 -0
  302. package/lib/fluent-editor.cjs.js +163 -0
  303. package/lib/fluent-editor.cjs.js.map +1 -0
  304. package/lib/format-painter/index.cjs.js +66 -0
  305. package/lib/format-painter/index.cjs.js.map +1 -0
  306. package/lib/global-link/constants.cjs.js +9 -0
  307. package/lib/global-link/constants.cjs.js.map +1 -0
  308. package/lib/global-link/formats/customer-widget-link.cjs.js +28 -0
  309. package/lib/global-link/formats/customer-widget-link.cjs.js.map +1 -0
  310. package/lib/global-link/formats/doc-link.cjs.js +42 -0
  311. package/lib/global-link/formats/doc-link.cjs.js.map +1 -0
  312. package/lib/global-link/formats/wiki-link.cjs.js +34 -0
  313. package/lib/global-link/formats/wiki-link.cjs.js.map +1 -0
  314. package/lib/global-link/formats/work-item-link.cjs.js +36 -0
  315. package/lib/global-link/formats/work-item-link.cjs.js.map +1 -0
  316. package/lib/global-link/global-link-panel.cjs.js +2 -0
  317. package/lib/global-link/global-link-panel.cjs.js.map +1 -0
  318. package/lib/global-link/index.cjs.js +139 -0
  319. package/lib/global-link/index.cjs.js.map +1 -0
  320. package/lib/global-link/utils/createTable.cjs.js +50 -0
  321. package/lib/global-link/utils/createTable.cjs.js.map +1 -0
  322. package/lib/index.cjs.js +5 -0
  323. package/lib/index.cjs.js.map +1 -0
  324. package/lib/lineheight.cjs.js +11 -0
  325. package/lib/lineheight.cjs.js.map +1 -0
  326. package/lib/link/formats/link.cjs.js +34 -0
  327. package/lib/link/formats/link.cjs.js.map +1 -0
  328. package/lib/link/index.cjs.js +32 -0
  329. package/lib/link/index.cjs.js.map +1 -0
  330. package/lib/link/modules/tooltip.cjs.js +275 -0
  331. package/lib/link/modules/tooltip.cjs.js.map +1 -0
  332. package/lib/mention/Mention.cjs.js +329 -0
  333. package/lib/mention/Mention.cjs.js.map +1 -0
  334. package/lib/mention/MentionLink.cjs.js +37 -0
  335. package/lib/mention/MentionLink.cjs.js.map +1 -0
  336. package/lib/mention/constants.cjs.js +9 -0
  337. package/lib/mention/constants.cjs.js.map +1 -0
  338. package/lib/quick-menu/index.cjs.js +82 -0
  339. package/lib/quick-menu/index.cjs.js.map +1 -0
  340. package/lib/screenshot/index.cjs.js +147 -0
  341. package/lib/screenshot/index.cjs.js.map +1 -0
  342. package/lib/soft-break/index.cjs.js +23 -0
  343. package/lib/soft-break/index.cjs.js.map +1 -0
  344. package/lib/strike/index.cjs.js +12 -0
  345. package/lib/strike/index.cjs.js.map +1 -0
  346. package/lib/syntax/index.cjs.js +30 -0
  347. package/lib/syntax/index.cjs.js.map +1 -0
  348. package/lib/table/better-table.cjs.js +434 -0
  349. package/lib/table/better-table.cjs.js.map +1 -0
  350. package/lib/table/formats/header.cjs.js +94 -0
  351. package/lib/table/formats/header.cjs.js.map +1 -0
  352. package/lib/table/formats/list.cjs.js +163 -0
  353. package/lib/table/formats/list.cjs.js.map +1 -0
  354. package/lib/table/formats/table.cjs.js +970 -0
  355. package/lib/table/formats/table.cjs.js.map +1 -0
  356. package/lib/table/modules/table-column-tool.cjs.js +400 -0
  357. package/lib/table/modules/table-column-tool.cjs.js.map +1 -0
  358. package/lib/table/modules/table-operation-menu.cjs.js +457 -0
  359. package/lib/table/modules/table-operation-menu.cjs.js.map +1 -0
  360. package/lib/table/modules/table-scroll-bar.cjs.js +190 -0
  361. package/lib/table/modules/table-scroll-bar.cjs.js.map +1 -0
  362. package/lib/table/modules/table-selection.cjs.js +306 -0
  363. package/lib/table/modules/table-selection.cjs.js.map +1 -0
  364. package/lib/table/table-config.cjs.js +74 -0
  365. package/lib/table/table-config.cjs.js.map +1 -0
  366. package/lib/table/utils/index.cjs.js +54 -0
  367. package/lib/table/utils/index.cjs.js.map +1 -0
  368. package/lib/table/utils/node-matchers.cjs.js +292 -0
  369. package/lib/table/utils/node-matchers.cjs.js.map +1 -0
  370. package/lib/toolbar/better-picker.cjs.js +308 -0
  371. package/lib/toolbar/better-picker.cjs.js.map +1 -0
  372. package/lib/toolbar/index.cjs.js +139 -0
  373. package/lib/toolbar/index.cjs.js.map +1 -0
  374. package/lib/types/vue.d.cjs.js +2 -0
  375. package/lib/types/vue.d.cjs.js.map +1 -0
  376. package/lib/utils/debounce.cjs.js +112 -0
  377. package/lib/utils/debounce.cjs.js.map +1 -0
  378. package/lib/utils/method.cjs.js +68 -0
  379. package/lib/utils/method.cjs.js.map +1 -0
  380. package/lib/video/index.cjs.js +49 -0
  381. package/lib/video/index.cjs.js.map +1 -0
  382. package/package.json +63 -65
  383. package/theme/index.css +4742 -0
  384. package/index.cjs.js +0 -374
  385. package/index.cjs.js.map +0 -1
  386. package/index.es.js +0 -51095
  387. package/index.es.js.map +0 -1
  388. package/style.css +0 -7
@@ -0,0 +1,248 @@
1
+ import Quill from "quill";
2
+ import emojiList from "../emoji-list.es.js";
3
+ const Module = Quill.imports["core/module"];
4
+ class ShortNameEmoji extends Module {
5
+ constructor(quill, options) {
6
+ super(quill, options);
7
+ this.emojiList = options.emojiList;
8
+ this.quill = quill;
9
+ this.onClose = options.onClose;
10
+ this.onOpen = options.onOpen;
11
+ this.container = document.createElement("ul");
12
+ this.container.classList.add("emoji_completions");
13
+ this.quill.container.appendChild(this.container);
14
+ this.container.style.position = "absolute";
15
+ this.container.style.display = "none";
16
+ this.onSelectionChange = this.maybeUnfocus.bind(this);
17
+ this.onTextChange = this.update.bind(this);
18
+ this.open = false;
19
+ this.atIndex = null;
20
+ this.focusedButton = null;
21
+ this.isWhiteSpace = function(ch) {
22
+ let whiteSpace = false;
23
+ if (/\s/.test(ch)) {
24
+ whiteSpace = true;
25
+ }
26
+ return whiteSpace;
27
+ };
28
+ quill.keyboard.addBinding({
29
+ // TODO: Once Quill supports using event.key change this to ":"
30
+ key: 186,
31
+ // ":" instead of 190 in Safari. Since it's the same key it doesn't matter if we register both.
32
+ shiftKey: true
33
+ }, this.triggerPicker.bind(this));
34
+ quill.keyboard.addBinding({
35
+ // gecko based browsers (firefox) use 59 as the keycode for semicolon,
36
+ // which makes a colon character when combined with shift
37
+ key: 59,
38
+ shiftKey: true
39
+ }, this.triggerPicker.bind(this));
40
+ quill.keyboard.addBinding({
41
+ key: 39,
42
+ // ArrowRight
43
+ collapsed: true
44
+ }, this.handleArrow.bind(this));
45
+ quill.keyboard.addBinding({
46
+ key: 40,
47
+ // ArrowRight
48
+ collapsed: true
49
+ }, this.handleArrow.bind(this));
50
+ }
51
+ triggerPicker(range, _context) {
52
+ if (this.open) return true;
53
+ if (range.length > 0) {
54
+ this.quill.deleteText(range.index, range.length, Quill.sources.USER);
55
+ }
56
+ this.quill.insertText(range.index, ":", "emoji-shortname", Quill.sources.USER);
57
+ const atSignBounds = this.quill.getBounds(range.index);
58
+ this.quill.setSelection(range.index + 1, Quill.sources.SILENT);
59
+ this.atIndex = range.index;
60
+ const paletteMaxPos = atSignBounds.left + 250;
61
+ if (paletteMaxPos > this.quill.container.offsetWidth) {
62
+ this.container.style.left = atSignBounds.left - 250 + "px";
63
+ } else {
64
+ this.container.style.left = atSignBounds.left + "px";
65
+ }
66
+ this.container.style.top = atSignBounds.top + atSignBounds.height + "px";
67
+ this.open = true;
68
+ this.quill.on("text-change", this.onTextChange);
69
+ this.quill.once("selection-change", this.onSelectionChange);
70
+ if (this.onOpen) {
71
+ this.onOpen();
72
+ }
73
+ }
74
+ handleArrow() {
75
+ if (!this.open) return true;
76
+ this.buttons[0].classList.remove("emoji-active");
77
+ this.buttons[0].focus();
78
+ if (this.buttons.length > 1) {
79
+ this.buttons[1].focus();
80
+ }
81
+ }
82
+ update(event) {
83
+ const sel = this.quill.getSelection().index;
84
+ if (this.atIndex >= sel) {
85
+ return this.close(null);
86
+ }
87
+ this.query = this.quill.getText(this.atIndex + 1, sel - this.atIndex - 1);
88
+ try {
89
+ if (this.isWhiteSpace(this.query)) {
90
+ this.close(null);
91
+ return;
92
+ }
93
+ } catch (_e) {
94
+ throw new Error("Close failed");
95
+ }
96
+ this.query = this.query.trim();
97
+ let emojis = this.emojiList;
98
+ emojis.sort(function(a, b) {
99
+ return a.emoji_order - b.emoji_order;
100
+ });
101
+ if (this.query.length < this.options.fuse.minMatchCharLength || emojis.length === 0) {
102
+ this.container.style.display = "none";
103
+ return;
104
+ }
105
+ if (emojis.length > 15) {
106
+ emojis = emojis.slice(0, 15);
107
+ }
108
+ this.renderCompletions(emojis, event);
109
+ }
110
+ maybeUnfocus() {
111
+ if (this.container.querySelector("*:focus")) return;
112
+ this.close(null);
113
+ }
114
+ renderCompletions(emojis, evt) {
115
+ try {
116
+ if (evt) {
117
+ if (evt.key === "Enter" || evt.keyCode === 13) {
118
+ this.close(emojis[0], 1);
119
+ this.container.style.display = "none";
120
+ return;
121
+ } else if (evt.key === "Tab" || evt.keyCode === 9) {
122
+ this.quill.disable();
123
+ this.buttons[0].classList.remove("emoji-active");
124
+ this.buttons[1].focus();
125
+ return;
126
+ }
127
+ }
128
+ if (evt) return;
129
+ } catch (_e) {
130
+ throw new Error("Render failed");
131
+ }
132
+ while (this.container.firstChild) {
133
+ this.container.removeChild(this.container.firstChild);
134
+ }
135
+ const buttons = Array(emojis.length);
136
+ this.buttons = buttons;
137
+ const handler = (i, emoji) => (event) => {
138
+ const arrowLeftKey = event.key === "ArrowLeft" || event.keyCode === 37;
139
+ const arrowUpKey = event.key === "ArrowUp" || event.keyCode === 38;
140
+ const arrowRightKey = event.key === "ArrowRight" || event.keyCode === 39;
141
+ const arrowDownKey = event.key === "ArrowDown" || event.keyCode === 40;
142
+ if (arrowRightKey || arrowDownKey) {
143
+ event.preventDefault();
144
+ buttons[Math.min(buttons.length - 1, i + 1)].focus();
145
+ } else if (event.key === "Tab" || event.keyCode === 9) {
146
+ event.preventDefault();
147
+ if (i + 1 === buttons.length) {
148
+ buttons[0].focus();
149
+ return;
150
+ }
151
+ buttons[Math.min(buttons.length - 1, i + 1)].focus();
152
+ } else if (arrowLeftKey || arrowUpKey) {
153
+ event.preventDefault();
154
+ buttons[Math.max(0, i - 1)].focus();
155
+ } else if (event.key === "Enter" || event.keyCode === 13 || event.key === " " || event.keyCode === 32 || event.key === "Tab" || event.keyCode === 9) {
156
+ event.preventDefault();
157
+ this.quill.enable();
158
+ this.close(emoji);
159
+ }
160
+ };
161
+ emojis.forEach((emoji, i) => {
162
+ const li = makeElement(
163
+ "li",
164
+ {},
165
+ makeElement(
166
+ "button",
167
+ { type: "button" },
168
+ makeElement("span", { className: "button-emoji ap ap-" + emoji.name, innerHTML: emoji.code_decimal }),
169
+ makeElement("span", { className: "unmatched" }, emoji.shortname)
170
+ )
171
+ );
172
+ this.container.appendChild(li);
173
+ buttons[i] = li.firstChild;
174
+ buttons[i].addEventListener("keydown", handler(i, emoji));
175
+ buttons[i].addEventListener("mousedown", () => this.close(emoji));
176
+ buttons[i].addEventListener("focus", () => {
177
+ this.focusedButton = i;
178
+ });
179
+ buttons[i].addEventListener("unfocus", () => {
180
+ this.focusedButton = null;
181
+ });
182
+ });
183
+ this.container.style.display = "block";
184
+ if (this.quill.container.classList.contains("top-emoji")) {
185
+ const x = this.container.querySelectorAll("li");
186
+ let i;
187
+ for (i = 0; i < x.length; i++) {
188
+ x[i].style.display = "block";
189
+ }
190
+ const windowHeight = window.innerHeight;
191
+ const editorPos = this.quill.container.getBoundingClientRect().top;
192
+ if (editorPos > windowHeight / 2 && this.container.offsetHeight > 0) {
193
+ this.container.style.top = "-" + this.container.offsetHeight + "px";
194
+ }
195
+ }
196
+ buttons[0].classList.add("emoji-active");
197
+ }
198
+ close(value, trailingDelete = 0) {
199
+ this.quill.enable();
200
+ this.container.style.display = "none";
201
+ while (this.container.firstChild) {
202
+ this.container.removeChild(this.container.firstChild);
203
+ }
204
+ this.quill.off("selection-change", this.onSelectionChange);
205
+ this.quill.off("text-change", this.onTextChange);
206
+ if (value) {
207
+ this.quill.deleteText(this.atIndex, this.query.length + 1 + trailingDelete, Quill.sources.USER);
208
+ this.quill.insertEmbed(this.atIndex, "emoji", value, Quill.sources.USER);
209
+ setTimeout(() => this.quill.setSelection(this.atIndex + 1), 0);
210
+ }
211
+ this.quill.focus();
212
+ this.open = false;
213
+ if (this.onClose) {
214
+ this.onClose(value);
215
+ }
216
+ }
217
+ }
218
+ ShortNameEmoji.DEFAULTS = {
219
+ emojiList,
220
+ fuse: {
221
+ shouldSort: true,
222
+ threshold: 0.1,
223
+ location: 0,
224
+ distance: 100,
225
+ maxPatternLength: 32,
226
+ minMatchCharLength: 1,
227
+ keys: [
228
+ "shortname"
229
+ ]
230
+ }
231
+ };
232
+ function makeElement(tag, attrs, ...children) {
233
+ const elem = document.createElement(tag);
234
+ Object.keys(attrs).forEach((key) => {
235
+ elem[key] = attrs[key];
236
+ });
237
+ children.forEach((child) => {
238
+ if (typeof child === "string") {
239
+ child = document.createTextNode(child);
240
+ }
241
+ elem.appendChild(child);
242
+ });
243
+ return elem;
244
+ }
245
+ export {
246
+ ShortNameEmoji as default
247
+ };
248
+ //# sourceMappingURL=emoji.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emoji.es.js","sources":["../../../../src/emoji/modules/emoji.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport emojiList from '../emoji-list'\r\n\r\nconst Module = Quill.imports['core/module']\r\n\r\n// @dynamic\r\nclass ShortNameEmoji extends Module {\r\n static DEFAULTS: {\r\n emojiList: any[]\r\n fuse: {\r\n shouldSort: boolean\r\n threshold: number\r\n location: number\r\n distance: number\r\n maxPatternLength: number\r\n minMatchCharLength: number\r\n keys: string[]\r\n }\r\n }\r\n\r\n emojiList: any\r\n quill: any\r\n fuse: any\r\n onOpen: any\r\n onClose: any\r\n container: HTMLUListElement\r\n onSelectionChange: any\r\n onTextChange: any\r\n open: boolean\r\n atIndex: any\r\n focusedButton: any\r\n isWhiteSpace: (ch: any) => boolean\r\n query: any\r\n buttons: any\r\n options: any\r\n constructor(quill, options) {\r\n super(quill, options)\r\n\r\n this.emojiList = options.emojiList\r\n\r\n this.quill = quill\r\n this.onClose = options.onClose\r\n this.onOpen = options.onOpen\r\n this.container = document.createElement('ul')\r\n this.container.classList.add('emoji_completions')\r\n this.quill.container.appendChild(this.container)\r\n this.container.style.position = 'absolute'\r\n this.container.style.display = 'none'\r\n\r\n this.onSelectionChange = this.maybeUnfocus.bind(this)\r\n this.onTextChange = this.update.bind(this)\r\n\r\n this.open = false\r\n this.atIndex = null\r\n this.focusedButton = null\r\n\r\n this.isWhiteSpace = function (ch) {\r\n let whiteSpace = false\r\n if (/\\s/.test(ch)) {\r\n whiteSpace = true\r\n }\r\n return whiteSpace\r\n }\r\n\r\n quill.keyboard.addBinding({\r\n // TODO: Once Quill supports using event.key change this to \":\"\r\n key: 186, // \":\" instead of 190 in Safari. Since it's the same key it doesn't matter if we register both.\r\n shiftKey: true,\r\n }, this.triggerPicker.bind(this))\r\n\r\n quill.keyboard.addBinding({\r\n // gecko based browsers (firefox) use 59 as the keycode for semicolon,\r\n // which makes a colon character when combined with shift\r\n key: 59,\r\n shiftKey: true,\r\n }, this.triggerPicker.bind(this))\r\n\r\n quill.keyboard.addBinding({\r\n key: 39, // ArrowRight\r\n collapsed: true,\r\n }, this.handleArrow.bind(this))\r\n\r\n quill.keyboard.addBinding({\r\n key: 40, // ArrowRight\r\n collapsed: true,\r\n }, this.handleArrow.bind(this))\r\n // TODO: Add keybindings for Enter (13) and Tab (9) directly on the quill editor\r\n }\r\n\r\n triggerPicker(range, _context) {\r\n if (this.open) return true\r\n if (range.length > 0) {\r\n this.quill.deleteText(range.index, range.length, Quill.sources.USER)\r\n }\r\n\r\n this.quill.insertText(range.index, ':', 'emoji-shortname', Quill.sources.USER)\r\n const atSignBounds = this.quill.getBounds(range.index)\r\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT)\r\n\r\n this.atIndex = range.index\r\n\r\n const paletteMaxPos = atSignBounds.left + 250\r\n if (paletteMaxPos > this.quill.container.offsetWidth) {\r\n this.container.style.left = (atSignBounds.left - 250) + 'px'\r\n }\r\n else {\r\n this.container.style.left = atSignBounds.left + 'px'\r\n }\r\n\r\n this.container.style.top = atSignBounds.top + atSignBounds.height + 'px'\r\n this.open = true\r\n\r\n this.quill.on('text-change', this.onTextChange)\r\n this.quill.once('selection-change', this.onSelectionChange)\r\n if (this.onOpen) {\r\n this.onOpen()\r\n }\r\n }\r\n\r\n handleArrow() {\r\n if (!this.open) return true\r\n this.buttons[0].classList.remove('emoji-active')\r\n this.buttons[0].focus()\r\n if (this.buttons.length > 1) {\r\n this.buttons[1].focus()\r\n }\r\n }\r\n\r\n update(event) {\r\n const sel = this.quill.getSelection().index\r\n if (this.atIndex >= sel) { // Deleted the at character\r\n return this.close(null)\r\n }\r\n this.query = this.quill.getText(this.atIndex + 1, sel - this.atIndex - 1)\r\n\r\n try {\r\n if (this.isWhiteSpace(this.query)) {\r\n this.close(null)\r\n return\r\n }\r\n }\r\n catch (_e) {\r\n throw new Error('Close failed')\r\n }\r\n\r\n this.query = this.query.trim()\r\n\r\n let emojis: any = this.emojiList\r\n emojis.sort(function (a: any, b: any) {\r\n return a.emoji_order - b.emoji_order\r\n })\r\n\r\n if (this.query.length < this.options.fuse.minMatchCharLength || emojis.length === 0) {\r\n this.container.style.display = 'none'\r\n return\r\n }\r\n if (emojis.length > 15) { // return only 15\r\n emojis = emojis.slice(0, 15)\r\n }\r\n this.renderCompletions(emojis, event)\r\n }\r\n\r\n maybeUnfocus() {\r\n if (this.container.querySelector('*:focus')) return\r\n this.close(null)\r\n }\r\n\r\n renderCompletions(emojis, evt) {\r\n try {\r\n if (evt) {\r\n if (evt.key === 'Enter' || evt.keyCode === 13) {\r\n this.close(emojis[0], 1)\r\n this.container.style.display = 'none'\r\n return\r\n }\r\n else if (evt.key === 'Tab' || evt.keyCode === 9) {\r\n this.quill.disable()\r\n this.buttons[0].classList.remove('emoji-active')\r\n this.buttons[1].focus()\r\n return\r\n }\r\n }\r\n if (evt) return\r\n }\r\n catch (_e) {\r\n throw new Error('Render failed')\r\n }\r\n\r\n while (this.container.firstChild) {\r\n this.container.removeChild(this.container.firstChild)\r\n }\r\n const buttons = Array(emojis.length)\r\n this.buttons = buttons\r\n\r\n const handler = (i, emoji) => (event) => {\r\n const arrowLeftKey = event.key === 'ArrowLeft' || event.keyCode === 37\r\n const arrowUpKey = event.key === 'ArrowUp' || event.keyCode === 38\r\n const arrowRightKey = event.key === 'ArrowRight' || event.keyCode === 39\r\n const arrowDownKey = event.key === 'ArrowDown' || event.keyCode === 40\r\n if (arrowRightKey || arrowDownKey) {\r\n event.preventDefault()\r\n buttons[Math.min(buttons.length - 1, i + 1)].focus()\r\n }\r\n else if (event.key === 'Tab' || event.keyCode === 9) {\r\n event.preventDefault()\r\n if ((i + 1) === buttons.length) {\r\n buttons[0].focus()\r\n return\r\n }\r\n buttons[Math.min(buttons.length - 1, i + 1)].focus()\r\n }\r\n else if (arrowLeftKey || arrowUpKey) {\r\n event.preventDefault()\r\n buttons[Math.max(0, i - 1)].focus()\r\n }\r\n else if (event.key === 'Enter' || event.keyCode === 13\r\n || event.key === ' ' || event.keyCode === 32\r\n || event.key === 'Tab' || event.keyCode === 9) {\r\n event.preventDefault()\r\n this.quill.enable()\r\n this.close(emoji)\r\n }\r\n }\r\n\r\n emojis.forEach((emoji, i) => {\r\n const li = makeElement(\r\n 'li', {},\r\n makeElement(\r\n 'button', { type: 'button' },\r\n makeElement('span', { className: 'button-emoji ap ap-' + emoji.name, innerHTML: emoji.code_decimal }),\r\n makeElement('span', { className: 'unmatched' }, emoji.shortname),\r\n ),\r\n )\r\n this.container.appendChild(li)\r\n buttons[i] = li.firstChild\r\n // Events will be GC-ed with button on each re-render:\r\n buttons[i].addEventListener('keydown', handler(i, emoji))\r\n buttons[i].addEventListener('mousedown', () => this.close(emoji))\r\n buttons[i].addEventListener('focus', () => {\r\n this.focusedButton = i\r\n })\r\n buttons[i].addEventListener('unfocus', () => {\r\n this.focusedButton = null\r\n })\r\n })\r\n\r\n this.container.style.display = 'block'\r\n // emoji palette on top\r\n if (this.quill.container.classList.contains('top-emoji')) {\r\n const x = this.container.querySelectorAll('li')\r\n let i\r\n for (i = 0; i < x.length; i++) {\r\n x[i].style.display = 'block'\r\n }\r\n\r\n const windowHeight = window.innerHeight\r\n const editorPos = this.quill.container.getBoundingClientRect().top\r\n if (editorPos > windowHeight / 2 && this.container.offsetHeight > 0) {\r\n this.container.style.top = '-' + this.container.offsetHeight + 'px'\r\n }\r\n }\r\n\r\n buttons[0].classList.add('emoji-active')\r\n }\r\n\r\n close(value, trailingDelete = 0) {\r\n this.quill.enable()\r\n this.container.style.display = 'none'\r\n while (this.container.firstChild) {\r\n this.container.removeChild(this.container.firstChild)\r\n }\r\n this.quill.off('selection-change', this.onSelectionChange)\r\n this.quill.off('text-change', this.onTextChange)\r\n if (value) {\r\n this.quill.deleteText(this.atIndex, this.query.length + 1 + trailingDelete, Quill.sources.USER)\r\n this.quill.insertEmbed(this.atIndex, 'emoji', value, Quill.sources.USER)\r\n setTimeout(() => this.quill.setSelection(this.atIndex + 1), 0)\r\n }\r\n this.quill.focus()\r\n this.open = false\r\n if (this.onClose) {\r\n this.onClose(value)\r\n }\r\n }\r\n}\r\n\r\nShortNameEmoji.DEFAULTS = {\r\n emojiList: emojiList,\r\n fuse: {\r\n shouldSort: true,\r\n threshold: 0.1,\r\n location: 0,\r\n distance: 100,\r\n maxPatternLength: 32,\r\n minMatchCharLength: 1,\r\n keys: [\r\n 'shortname',\r\n ],\r\n },\r\n}\r\n\r\nfunction makeElement(tag, attrs, ...children) {\r\n const elem = document.createElement(tag)\r\n Object.keys(attrs).forEach((key) => {\r\n elem[key] = attrs[key]\r\n })\r\n children.forEach((child) => {\r\n if (typeof child === 'string') {\r\n child = document.createTextNode(child)\r\n }\r\n elem.appendChild(child)\r\n })\r\n return elem\r\n}\r\n\r\nexport default ShortNameEmoji\r\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,153 @@
1
+ import Quill from "quill";
2
+ import { EMOJI_SPRITE } from "../../config/base64-image.es.js";
3
+ import emojiList from "../emoji-list.es.js";
4
+ const Module = Quill.imports["core/module"];
5
+ class ToolbarEmoji extends Module {
6
+ constructor(quill, options) {
7
+ super(quill, options);
8
+ this.quill = quill;
9
+ this.toolbar = quill.getModule("toolbar");
10
+ if (typeof this.toolbar !== "undefined") {
11
+ this.toolbar.addHandler("emoji", this.checkPalatteExist);
12
+ }
13
+ let emojiStyle = document.querySelector("style#devui-emoji-sprite");
14
+ if (!emojiStyle) {
15
+ emojiStyle = document.createElement("style");
16
+ emojiStyle.setAttribute("id", "devui-emoji-sprite");
17
+ emojiStyle.innerHTML = `.ap{background-image:url(${EMOJI_SPRITE})}`;
18
+ document.head.appendChild(emojiStyle);
19
+ }
20
+ }
21
+ checkPalatteExist() {
22
+ const quill = this.quill;
23
+ fnCheckDialogOpen(quill);
24
+ this.quill.on("text-change", function(_delta, _oldDelta, source) {
25
+ if (source === "user") {
26
+ fnClose();
27
+ fnUpdateRange(quill);
28
+ }
29
+ });
30
+ }
31
+ }
32
+ function fnClose() {
33
+ const eleEmojiPlate = document.getElementById("emoji-palette");
34
+ document.getElementById("emoji-close-div").style.display = "none";
35
+ if (eleEmojiPlate) {
36
+ eleEmojiPlate.remove();
37
+ }
38
+ }
39
+ function fnCheckDialogOpen(quill) {
40
+ const elementExists = document.getElementById("emoji-palette");
41
+ if (elementExists) {
42
+ elementExists.remove();
43
+ } else {
44
+ fnShowEmojiPalatte(quill);
45
+ }
46
+ }
47
+ function fnUpdateRange(quill) {
48
+ const range = quill.getSelection();
49
+ return range;
50
+ }
51
+ function fnShowEmojiPalatte(quill) {
52
+ const eleEmojiArea = document.createElement("div");
53
+ const range = quill.getSelection();
54
+ const atSignBounds = quill.getBounds(range.index);
55
+ quill.container.appendChild(eleEmojiArea);
56
+ const containerRect = quill.container.getBoundingClientRect();
57
+ const paletteMaxPos = atSignBounds.left + 250;
58
+ eleEmojiArea.id = "emoji-palette";
59
+ eleEmojiArea.style.top = 10 + atSignBounds.top + atSignBounds.height + containerRect.top + "px";
60
+ if (paletteMaxPos > quill.container.offsetWidth) {
61
+ eleEmojiArea.style.left = atSignBounds.left + containerRect.left - 250 + "px";
62
+ } else {
63
+ eleEmojiArea.style.left = atSignBounds.left + containerRect.left + "px";
64
+ }
65
+ const tabToolbar = document.createElement("div");
66
+ tabToolbar.id = "tab-toolbar";
67
+ eleEmojiArea.appendChild(tabToolbar);
68
+ const panel = document.createElement("div");
69
+ panel.id = "tab-panel";
70
+ eleEmojiArea.appendChild(panel);
71
+ const emojiType = [
72
+ { type: "p", name: "people", content: '<div class="i-people"></div>' },
73
+ { type: "n", name: "nature", content: '<div class="i-nature"></div>' },
74
+ { type: "d", name: "food", content: '<div class="i-food"></div>' },
75
+ { type: "s", name: "symbols", content: '<div class="i-symbols"></div>' },
76
+ { type: "a", name: "activity", content: '<div class="i-activity"></div>' },
77
+ { type: "t", name: "travel", content: '<div class="i-travel"></div>' },
78
+ { type: "o", name: "objects", content: '<div class="i-objects"></div>' },
79
+ { type: "f", name: "flags", content: '<div class="i-flags"></div>' }
80
+ ];
81
+ const tabElementHolder = document.createElement("ul");
82
+ tabToolbar.appendChild(tabElementHolder);
83
+ if (document.getElementById("emoji-close-div") === null) {
84
+ const closeDiv = document.createElement("div");
85
+ closeDiv.id = "emoji-close-div";
86
+ closeDiv.addEventListener("click", fnClose, false);
87
+ document.getElementsByTagName("body")[0].appendChild(closeDiv);
88
+ } else {
89
+ document.getElementById("emoji-close-div").style.display = "block";
90
+ }
91
+ emojiType.forEach(function(emojiTypeItem) {
92
+ const tabElement = document.createElement("li");
93
+ tabElement.classList.add("emoji-tab");
94
+ tabElement.classList.add("filter-" + emojiTypeItem.name);
95
+ const tabValue = emojiTypeItem.content;
96
+ tabElement.innerHTML = tabValue;
97
+ tabElement.dataset.filter = emojiTypeItem.type;
98
+ tabElementHolder.appendChild(tabElement);
99
+ const emojiFilter = document.querySelector(".filter-" + emojiTypeItem.name);
100
+ emojiFilter.addEventListener("click", function() {
101
+ const tab = document.querySelector(".emoji-tab.active");
102
+ if (tab) {
103
+ tab.classList.remove("active");
104
+ }
105
+ emojiFilter.classList.toggle("active");
106
+ fnUpdateEmojiContainer(emojiFilter, panel, quill);
107
+ });
108
+ });
109
+ fnEmojiPanelInit(panel, quill);
110
+ }
111
+ function fnEmojiPanelInit(panel, quill) {
112
+ fnEmojiElementsToPanel("p", panel, quill);
113
+ document.querySelector(".filter-people").classList.add("active");
114
+ }
115
+ function fnEmojiElementsToPanel(_type, panel, quill) {
116
+ const result = emojiList;
117
+ result.sort(function(a, b) {
118
+ return a.emoji_order - b.emoji_order;
119
+ });
120
+ quill.focus();
121
+ const range = fnUpdateRange(quill);
122
+ result.forEach(function(emoji) {
123
+ const span = document.createElement("span");
124
+ const t = document.createTextNode(emoji.shortname);
125
+ span.appendChild(t);
126
+ span.classList.add("bem");
127
+ span.classList.add("bem-" + emoji.name);
128
+ span.classList.add("ap");
129
+ span.classList.add("ap-" + emoji.name);
130
+ const output = String(String(emoji.code_decimal));
131
+ span.innerHTML = output + " ";
132
+ panel.appendChild(span);
133
+ const customButton = document.querySelector(".bem-" + emoji.name);
134
+ if (customButton) {
135
+ customButton.addEventListener("click", function() {
136
+ quill.insertEmbed(range.index, "emoji", emoji, Quill.sources.USER);
137
+ setTimeout(() => quill.setSelection(range.index + 1), 0);
138
+ fnClose();
139
+ });
140
+ }
141
+ });
142
+ }
143
+ function fnUpdateEmojiContainer(emojiFilter, panel, quill) {
144
+ while (panel.firstChild) {
145
+ panel.removeChild(panel.firstChild);
146
+ }
147
+ const type = emojiFilter.dataset.filter;
148
+ fnEmojiElementsToPanel(type, panel, quill);
149
+ }
150
+ export {
151
+ ToolbarEmoji as default
152
+ };
153
+ //# sourceMappingURL=toolbar-emoji.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbar-emoji.es.js","sources":["../../../../src/emoji/modules/toolbar-emoji.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { EMOJI_SPRITE as emojiSprite } from '../../config/base64-image'\r\nimport emojiList from '../emoji-list'\r\n\r\nconst Module = Quill.imports['core/module']\r\n\r\nclass ToolbarEmoji extends Module {\r\n quill: any\r\n toolbar: any\r\n constructor(quill, options) {\r\n super(quill, options)\r\n\r\n this.quill = quill\r\n this.toolbar = quill.getModule('toolbar')\r\n if (typeof this.toolbar !== 'undefined') {\r\n this.toolbar.addHandler('emoji', this.checkPalatteExist)\r\n }\r\n\r\n // 在emoji模块加载时判断并插入emoji精灵图样式,防止重复插入\r\n let emojiStyle = document.querySelector('style#devui-emoji-sprite')\r\n if (!emojiStyle) {\r\n emojiStyle = document.createElement('style')\r\n emojiStyle.setAttribute('id', 'devui-emoji-sprite')\r\n emojiStyle.innerHTML = `.ap{background-image:url(${emojiSprite})}`\r\n document.head.appendChild(emojiStyle)\r\n }\r\n }\r\n\r\n checkPalatteExist() {\r\n const quill = this.quill\r\n fnCheckDialogOpen(quill)\r\n this.quill.on('text-change', function (_delta, _oldDelta, source) {\r\n if (source === 'user') {\r\n fnClose()\r\n fnUpdateRange(quill)\r\n }\r\n })\r\n }\r\n}\r\n\r\nfunction fnClose() {\r\n const eleEmojiPlate = document.getElementById('emoji-palette')\r\n document.getElementById('emoji-close-div').style.display = 'none'\r\n if (eleEmojiPlate) {\r\n eleEmojiPlate.remove()\r\n }\r\n}\r\n\r\nfunction fnCheckDialogOpen(quill) {\r\n const elementExists = document.getElementById('emoji-palette')\r\n if (elementExists) {\r\n elementExists.remove()\r\n }\r\n else {\r\n fnShowEmojiPalatte(quill)\r\n }\r\n}\r\n\r\nfunction fnUpdateRange(quill) {\r\n const range = quill.getSelection()\r\n return range\r\n}\r\n\r\nfunction fnShowEmojiPalatte(quill) {\r\n const eleEmojiArea = document.createElement('div')\r\n const range = quill.getSelection()\r\n const atSignBounds = quill.getBounds(range.index)\r\n\r\n quill.container.appendChild(eleEmojiArea)\r\n const containerRect = quill.container.getBoundingClientRect()\r\n const paletteMaxPos = atSignBounds.left + 250 // palette max width is 250\r\n eleEmojiArea.id = 'emoji-palette'\r\n eleEmojiArea.style.top = 10 + atSignBounds.top + atSignBounds.height + containerRect.top + 'px'\r\n if (paletteMaxPos > quill.container.offsetWidth) {\r\n eleEmojiArea.style.left = (atSignBounds.left + containerRect.left - 250) + 'px'\r\n }\r\n else {\r\n eleEmojiArea.style.left = atSignBounds.left + containerRect.left + 'px'\r\n }\r\n\r\n const tabToolbar = document.createElement('div')\r\n tabToolbar.id = 'tab-toolbar'\r\n eleEmojiArea.appendChild(tabToolbar)\r\n\r\n // panel\r\n const panel = document.createElement('div')\r\n panel.id = 'tab-panel'\r\n eleEmojiArea.appendChild(panel)\r\n\r\n const emojiType = [\r\n { type: 'p', name: 'people', content: '<div class=\"i-people\"></div>' },\r\n { type: 'n', name: 'nature', content: '<div class=\"i-nature\"></div>' },\r\n { type: 'd', name: 'food', content: '<div class=\"i-food\"></div>' },\r\n { type: 's', name: 'symbols', content: '<div class=\"i-symbols\"></div>' },\r\n { type: 'a', name: 'activity', content: '<div class=\"i-activity\"></div>' },\r\n { type: 't', name: 'travel', content: '<div class=\"i-travel\"></div>' },\r\n { type: 'o', name: 'objects', content: '<div class=\"i-objects\"></div>' },\r\n { type: 'f', name: 'flags', content: '<div class=\"i-flags\"></div>' },\r\n ]\r\n\r\n const tabElementHolder = document.createElement('ul')\r\n tabToolbar.appendChild(tabElementHolder)\r\n\r\n if (document.getElementById('emoji-close-div') === null) {\r\n const closeDiv = document.createElement('div')\r\n closeDiv.id = 'emoji-close-div'\r\n closeDiv.addEventListener('click', fnClose, false)\r\n document.getElementsByTagName('body')[0].appendChild(closeDiv)\r\n }\r\n else {\r\n document.getElementById('emoji-close-div').style.display = 'block'\r\n }\r\n\r\n emojiType.forEach(function (emojiTypeItem) {\r\n // add tab bar\r\n const tabElement = document.createElement('li')\r\n tabElement.classList.add('emoji-tab')\r\n tabElement.classList.add('filter-' + emojiTypeItem.name)\r\n const tabValue = emojiTypeItem.content\r\n tabElement.innerHTML = tabValue\r\n tabElement.dataset.filter = emojiTypeItem.type\r\n tabElementHolder.appendChild(tabElement)\r\n\r\n const emojiFilter = document.querySelector('.filter-' + emojiTypeItem.name)\r\n emojiFilter.addEventListener('click', function () {\r\n const tab = document.querySelector('.emoji-tab.active')\r\n if (tab) {\r\n tab.classList.remove('active')\r\n }\r\n emojiFilter.classList.toggle('active')\r\n fnUpdateEmojiContainer(emojiFilter, panel, quill)\r\n })\r\n })\r\n fnEmojiPanelInit(panel, quill)\r\n}\r\n\r\nfunction fnEmojiPanelInit(panel, quill) {\r\n fnEmojiElementsToPanel('p', panel, quill)\r\n document.querySelector('.filter-people').classList.add('active')\r\n}\r\n\r\nfunction fnEmojiElementsToPanel(_type, panel, quill) {\r\n const result = emojiList\r\n result.sort(function (a: any, b: any) {\r\n return a.emoji_order - b.emoji_order\r\n })\r\n\r\n quill.focus()\r\n const range = fnUpdateRange(quill)\r\n\r\n result.forEach(function (emoji: any) {\r\n const span = document.createElement('span')\r\n const t = document.createTextNode(emoji.shortname)\r\n span.appendChild(t)\r\n span.classList.add('bem')\r\n span.classList.add('bem-' + emoji.name)\r\n span.classList.add('ap')\r\n span.classList.add('ap-' + emoji.name)\r\n const output = String(String(emoji.code_decimal))\r\n span.innerHTML = output + ' '\r\n panel.appendChild(span)\r\n\r\n const customButton = document.querySelector('.bem-' + emoji.name)\r\n if (customButton) {\r\n customButton.addEventListener('click', function () {\r\n quill.insertEmbed(range.index, 'emoji', emoji, Quill.sources.USER)\r\n setTimeout(() => quill.setSelection(range.index + 1), 0)\r\n fnClose()\r\n })\r\n }\r\n })\r\n}\r\n\r\nfunction fnUpdateEmojiContainer(emojiFilter, panel, quill) {\r\n while (panel.firstChild) {\r\n panel.removeChild(panel.firstChild)\r\n }\r\n const type = emojiFilter.dataset.filter\r\n fnEmojiElementsToPanel(type, panel, quill)\r\n}\r\n\r\nexport default ToolbarEmoji\r\n"],"names":["emojiSprite"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ function createEmoji(emojiArr) {
2
+ const emojiList = [];
3
+ emojiArr.forEach((emojiItem) => {
4
+ const [name, unicode, shortname, codeDecimal, category, emojiOrder] = emojiItem;
5
+ emojiList.push({
6
+ name,
7
+ unicode,
8
+ shortname,
9
+ codeDecimal,
10
+ category,
11
+ emojiOrder
12
+ });
13
+ });
14
+ return emojiList;
15
+ }
16
+ export {
17
+ createEmoji
18
+ };
19
+ //# sourceMappingURL=utils.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.es.js","sources":["../../../src/emoji/utils.ts"],"sourcesContent":["export function createEmoji(emojiArr) {\r\n const emojiList = []\r\n emojiArr.forEach((emojiItem) => {\r\n const [name, unicode, shortname, codeDecimal, category, emojiOrder] = emojiItem\r\n emojiList.push({\r\n name,\r\n unicode,\r\n shortname,\r\n codeDecimal,\r\n category,\r\n emojiOrder,\r\n })\r\n })\r\n return emojiList\r\n}\r\n"],"names":[],"mappings":"AAAO,SAAS,YAAY,UAAU;AACpC,QAAM,YAAY,CAAA;AACT,WAAA,QAAQ,CAAC,cAAc;AAC9B,UAAM,CAAC,MAAM,SAAS,WAAW,aAAa,UAAU,UAAU,IAAI;AACtE,cAAU,KAAK;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EAAA,CACF;AACM,SAAA;AACT;"}
@@ -0,0 +1,56 @@
1
+ import Quill from "quill";
2
+ import { sanitize } from "../../config/editor.utils.es.js";
3
+ const Embed = Quill.imports["blots/embed"];
4
+ const FILE_ATTRIBUTES = ["id", "title", "size", "lastModified"];
5
+ class File extends Embed {
6
+ static create(value) {
7
+ const node = super.create(value);
8
+ const size = value.size / 1024;
9
+ const fixSize = !size ? 0 : size < 1 ? 1 : size.toFixed(0);
10
+ node.classList.add("icon-file");
11
+ node.setAttribute("contenteditable", false);
12
+ const fileSvg = '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326z m1.8 562H232V136h302v216c0 23.2 18.8 42 42 42h216v494z" p-id="2307"></path></svg>';
13
+ node.innerHTML = `${fileSvg} ${value.title} (${fixSize} KB)`;
14
+ const src = File.sanitize(value.src);
15
+ if (src) {
16
+ node.href = src;
17
+ node.target = "_blank";
18
+ }
19
+ FILE_ATTRIBUTES.forEach((key) => {
20
+ if (value[key]) {
21
+ node.dataset[key] = value[key];
22
+ }
23
+ });
24
+ return node;
25
+ }
26
+ static value(domNode) {
27
+ return File.getFormats(domNode);
28
+ }
29
+ static formats(domNode) {
30
+ return File.getFormats(domNode);
31
+ }
32
+ static getFormats(domNode) {
33
+ const formats = {};
34
+ const href = File.sanitize(domNode.href);
35
+ if (href) {
36
+ formats.src = href;
37
+ }
38
+ FILE_ATTRIBUTES.forEach((key) => {
39
+ if (domNode.dataset[key]) {
40
+ formats[key] = domNode.dataset[key];
41
+ }
42
+ });
43
+ return formats;
44
+ }
45
+ static sanitize(url) {
46
+ return sanitize(url, this.PROTOCOL_WHITELIST) && url || "";
47
+ }
48
+ }
49
+ File.blotName = "file";
50
+ File.tagName = "A";
51
+ File.className = "ql-file-item";
52
+ File.PROTOCOL_WHITELIST = ["http", "https"];
53
+ export {
54
+ File as default
55
+ };
56
+ //# sourceMappingURL=file.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.es.js","sources":["../../../../src/file/formats/file.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { sanitize } from '../../config/editor.utils'\r\n\r\nconst Embed = Quill.imports['blots/embed']\r\nconst FILE_ATTRIBUTES = ['id', 'title', 'size', 'lastModified']\r\n\r\nclass File extends Embed {\r\n static blotName: string\r\n static tagName: string\r\n static className: string\r\n static PROTOCOL_WHITELIST: string[]\r\n statics: any\r\n domNode: any\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n const size = value.size / 1024\r\n const fixSize = !size ? 0 : size < 1 ? 1 : size.toFixed(0)\r\n node.classList.add('icon-file')\r\n node.setAttribute('contenteditable', false)\r\n const fileSvg = '<svg viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"><path d=\"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326z m1.8 562H232V136h302v216c0 23.2 18.8 42 42 42h216v494z\" p-id=\"2307\"></path></svg>'\r\n node.innerHTML = `${fileSvg} ${value.title} (${fixSize} KB)`\r\n const src = File.sanitize(value.src)\r\n if (src) {\r\n node.href = src\r\n node.target = '_blank'\r\n }\r\n FILE_ATTRIBUTES.forEach((key) => {\r\n if (value[key]) {\r\n node.dataset[key] = value[key]\r\n }\r\n })\r\n return node\r\n }\r\n\r\n static value(domNode) {\r\n return File.getFormats(domNode)\r\n }\r\n\r\n static formats(domNode) {\r\n return File.getFormats(domNode)\r\n }\r\n\r\n static getFormats(domNode) {\r\n const formats: any = {}\r\n const href = File.sanitize(domNode.href)\r\n if (href) {\r\n formats.src = href\r\n }\r\n FILE_ATTRIBUTES.forEach((key) => {\r\n if (domNode.dataset[key]) {\r\n formats[key] = domNode.dataset[key]\r\n }\r\n })\r\n return formats\r\n }\r\n\r\n static sanitize(url) {\r\n return (sanitize(url, this.PROTOCOL_WHITELIST) && url) || ''\r\n }\r\n}\r\nFile.blotName = 'file'\r\nFile.tagName = 'A'\r\nFile.className = 'ql-file-item'\r\nFile.PROTOCOL_WHITELIST = ['http', 'https']\r\n\r\nexport default File\r\n"],"names":[],"mappings":";;AAGA,MAAM,QAAQ,MAAM,QAAQ,aAAa;AACzC,MAAM,kBAAkB,CAAC,MAAM,SAAS,QAAQ,cAAc;AAE9D,MAAM,aAAa,MAAM;AAAA,EAQvB,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AACzB,UAAA,OAAO,MAAM,OAAO;AACpB,UAAA,UAAU,CAAC,OAAO,IAAI,OAAO,IAAI,IAAI,KAAK,QAAQ,CAAC;AACpD,SAAA,UAAU,IAAI,WAAW;AACzB,SAAA,aAAa,mBAAmB,KAAK;AAC1C,UAAM,UAAU;AAChB,SAAK,YAAY,GAAG,OAAO,IAAI,MAAM,KAAK,KAAK,OAAO;AACtD,UAAM,MAAM,KAAK,SAAS,MAAM,GAAG;AACnC,QAAI,KAAK;AACP,WAAK,OAAO;AACZ,WAAK,SAAS;AAAA,IAChB;AACgB,oBAAA,QAAQ,CAAC,QAAQ;AAC3B,UAAA,MAAM,GAAG,GAAG;AACd,aAAK,QAAQ,GAAG,IAAI,MAAM,GAAG;AAAA,MAC/B;AAAA,IAAA,CACD;AACM,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,SAAS;AACb,WAAA,KAAK,WAAW,OAAO;AAAA,EAChC;AAAA,EAEA,OAAO,QAAQ,SAAS;AACf,WAAA,KAAK,WAAW,OAAO;AAAA,EAChC;AAAA,EAEA,OAAO,WAAW,SAAS;AACzB,UAAM,UAAe,CAAA;AACrB,UAAM,OAAO,KAAK,SAAS,QAAQ,IAAI;AACvC,QAAI,MAAM;AACR,cAAQ,MAAM;AAAA,IAChB;AACgB,oBAAA,QAAQ,CAAC,QAAQ;AAC3B,UAAA,QAAQ,QAAQ,GAAG,GAAG;AACxB,gBAAQ,GAAG,IAAI,QAAQ,QAAQ,GAAG;AAAA,MACpC;AAAA,IAAA,CACD;AACM,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,SAAS,KAAK;AACnB,WAAQ,SAAS,KAAK,KAAK,kBAAkB,KAAK,OAAQ;AAAA,EAC5D;AACF;AACA,KAAK,WAAW;AAChB,KAAK,UAAU;AACf,KAAK,YAAY;AACjB,KAAK,qBAAqB,CAAC,QAAQ,OAAO;"}
@@ -0,0 +1,32 @@
1
+ import Quill from "quill";
2
+ import File from "./formats/file.es.js";
3
+ import FileBar from "./modules/file-bar.es.js";
4
+ const Module = Quill.imports["core/module"];
5
+ class FileModule extends Module {
6
+ static register() {
7
+ Quill.register("formats/file", File, true);
8
+ }
9
+ constructor(quill, options) {
10
+ super(quill, options);
11
+ this.quill = quill;
12
+ quill.root.addEventListener("click", (event) => this.clickEvent(event), false);
13
+ }
14
+ clickEvent(event) {
15
+ event.preventDefault();
16
+ const target = event.target;
17
+ const fileDom = target.closest("a.ql-file-item");
18
+ if (fileDom) {
19
+ if (this.fileBar) {
20
+ this.fileBar.destroy();
21
+ }
22
+ this.fileBar = new FileBar(this.quill, fileDom);
23
+ } else if (this.fileBar && !target.closest(".ql-file-bar")) {
24
+ this.fileBar.destroy();
25
+ this.fileBar = null;
26
+ }
27
+ }
28
+ }
29
+ export {
30
+ FileModule as default
31
+ };
32
+ //# sourceMappingURL=index.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es.js","sources":["../../../src/file/index.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport File from './formats/file'\r\nimport FileBar from './modules/file-bar'\r\n\r\nconst Module = Quill.imports['core/module']\r\n\r\nclass FileModule extends Module {\r\n quill: any\r\n fileBar: FileBar\r\n\r\n static register() {\r\n Quill.register('formats/file', File, true)\r\n }\r\n\r\n constructor(quill, options) {\r\n super(quill, options)\r\n this.quill = quill\r\n quill.root.addEventListener('click', event => this.clickEvent(event), false)\r\n }\r\n\r\n clickEvent(event) {\r\n event.preventDefault()\r\n const target = event.target\r\n const fileDom = target.closest('a.ql-file-item')\r\n if (fileDom) {\r\n if (this.fileBar) {\r\n this.fileBar.destroy()\r\n }\r\n this.fileBar = new FileBar(this.quill, fileDom)\r\n }\r\n else if (this.fileBar && !target.closest('.ql-file-bar')) {\r\n this.fileBar.destroy()\r\n this.fileBar = null\r\n }\r\n }\r\n}\r\n\r\nexport default FileModule\r\n"],"names":[],"mappings":";;;AAIA,MAAM,SAAS,MAAM,QAAQ,aAAa;AAE1C,MAAM,mBAAmB,OAAO;AAAA,EAI9B,OAAO,WAAW;AACV,UAAA,SAAS,gBAAgB,MAAM,IAAI;AAAA,EAC3C;AAAA,EAEA,YAAY,OAAO,SAAS;AAC1B,UAAM,OAAO,OAAO;AACpB,SAAK,QAAQ;AACP,UAAA,KAAK,iBAAiB,SAAS,CAAA,UAAS,KAAK,WAAW,KAAK,GAAG,KAAK;AAAA,EAC7E;AAAA,EAEA,WAAW,OAAO;AAChB,UAAM,eAAe;AACrB,UAAM,SAAS,MAAM;AACf,UAAA,UAAU,OAAO,QAAQ,gBAAgB;AAC/C,QAAI,SAAS;AACX,UAAI,KAAK,SAAS;AAChB,aAAK,QAAQ;MACf;AACA,WAAK,UAAU,IAAI,QAAQ,KAAK,OAAO,OAAO;AAAA,IAAA,WAEvC,KAAK,WAAW,CAAC,OAAO,QAAQ,cAAc,GAAG;AACxD,WAAK,QAAQ;AACb,WAAK,UAAU;AAAA,IACjB;AAAA,EACF;AACF;"}