@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,457 @@
1
+ import Quill from "quill";
2
+ import { LANG_CONF } from "../../config/editor.config.es.js";
3
+ import { getRelativeRect, arrayFrom, elementRemove, css } from "../utils/index.es.js";
4
+ import { ERROR_LIMIT, OPERATE_MENU_ITEM_CLASS, OPERATE_MENU_COLORPICKER_ITEM_CLASS, MENU_ITEM_HEIGHT, MENU_MIN_HEIGHT, MENU_WIDTH, OPERATE_MENU_DIVIDING_CLASS, OPERATE_MENU_SUBTITLE_CLASS, OPERATE_MENU_COLORPICKER_CLASS } from "../table-config.es.js";
5
+ const MENU_ITEMS_DEFAULT = {
6
+ copyCells: {
7
+ text: "Copy Cells",
8
+ handler() {
9
+ this.onCopy("copy");
10
+ }
11
+ },
12
+ copyTable: {
13
+ text: "Copy Table",
14
+ handler() {
15
+ this.tableColumnTool.destroy();
16
+ this.tableScrollBar.destroy();
17
+ this.tableSelection.clearSelection();
18
+ const dom = this.table.cloneNode(true);
19
+ const trArr = dom.querySelectorAll("tr[data-row]");
20
+ trArr.forEach((tr) => tr.removeAttribute("data-row"));
21
+ dom.style.position = "fixed";
22
+ dom.style.top = 0;
23
+ dom.style.left = 0;
24
+ dom.style.clip = "rect(0,0,0,0)";
25
+ document.body.appendChild(dom);
26
+ this.setCopyRange(dom);
27
+ document.execCommand("copy");
28
+ dom.remove();
29
+ }
30
+ },
31
+ cutCells: {
32
+ text: "Cut Cells",
33
+ handler() {
34
+ this.onCopy("cut");
35
+ }
36
+ },
37
+ emptyCells: {
38
+ text: "Empty Cells",
39
+ handler() {
40
+ const tableContainer = Quill.find(this.table);
41
+ const { selectedTds } = this.tableSelection;
42
+ tableContainer.emptyCells(selectedTds);
43
+ }
44
+ },
45
+ insertColumnRight: {
46
+ text: "Insert Column After",
47
+ handler() {
48
+ const tableContainer = Quill.find(this.table);
49
+ const colIndex = getColToolCellIndexByBoundary(
50
+ this.columnToolCells,
51
+ this.boundary,
52
+ (cellRect, boundary) => {
53
+ return Math.abs(cellRect.x + cellRect.width - boundary.x1) <= ERROR_LIMIT;
54
+ },
55
+ this.quill.root.parentNode
56
+ );
57
+ const newColumn = tableContainer.insertColumn(this.boundary, colIndex, true, this.quill.root.parentNode);
58
+ this.tableColumnTool.updateColToolCells();
59
+ this.quill.update(Quill.sources.USER);
60
+ this.tableSelection.setSelection(
61
+ newColumn[0].domNode.getBoundingClientRect(),
62
+ newColumn[0].domNode.getBoundingClientRect()
63
+ );
64
+ setTimeout(() => this.tableScrollBar.updateScrollBar());
65
+ }
66
+ },
67
+ insertColumnLeft: {
68
+ text: "Insert Column Before",
69
+ handler() {
70
+ const tableContainer = Quill.find(this.table);
71
+ const colIndex = getColToolCellIndexByBoundary(
72
+ this.columnToolCells,
73
+ this.boundary,
74
+ (cellRect, boundary) => {
75
+ return Math.abs(cellRect.x - boundary.x) <= ERROR_LIMIT;
76
+ },
77
+ this.quill.root.parentNode
78
+ );
79
+ const newColumn = tableContainer.insertColumn(this.boundary, colIndex, false, this.quill.root.parentNode);
80
+ this.tableColumnTool.updateColToolCells();
81
+ this.quill.update(Quill.sources.USER);
82
+ this.tableSelection.setSelection(
83
+ newColumn[0].domNode.getBoundingClientRect(),
84
+ newColumn[0].domNode.getBoundingClientRect()
85
+ );
86
+ setTimeout(() => this.tableScrollBar.updateScrollBar());
87
+ }
88
+ },
89
+ insertRowUp: {
90
+ text: "Insert Row Above",
91
+ handler() {
92
+ const tableContainer = Quill.find(this.table);
93
+ const affectedCells = tableContainer.insertRow(this.boundary, false, this.quill.root.parentNode);
94
+ this.tableColumnTool.updateRowToolCells();
95
+ this.quill.update(Quill.sources.USER);
96
+ this.tableSelection.setSelection(
97
+ affectedCells[0].domNode.getBoundingClientRect(),
98
+ affectedCells[0].domNode.getBoundingClientRect()
99
+ );
100
+ setTimeout(() => this.tableScrollBar.resetTableHeight(this.table));
101
+ }
102
+ },
103
+ insertRowDown: {
104
+ text: "Insert Row Below",
105
+ handler() {
106
+ const tableContainer = Quill.find(this.table);
107
+ const affectedCells = tableContainer.insertRow(this.boundary, true, this.quill.root.parentNode);
108
+ this.tableColumnTool.updateRowToolCells();
109
+ this.quill.update(Quill.sources.USER);
110
+ this.tableSelection.setSelection(
111
+ affectedCells[0].domNode.getBoundingClientRect(),
112
+ affectedCells[0].domNode.getBoundingClientRect()
113
+ );
114
+ setTimeout(() => this.tableScrollBar.resetTableHeight(this.table));
115
+ }
116
+ },
117
+ mergeCells: {
118
+ text: "Merge Cells",
119
+ handler() {
120
+ const tableContainer = Quill.find(this.table);
121
+ const rowspan = tableContainer.rows().reduce((sum, row) => {
122
+ const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), this.quill.root.parentNode);
123
+ if (rowRect.y > this.boundary.y - ERROR_LIMIT && rowRect.y + rowRect.height < this.boundary.y + this.boundary.height + ERROR_LIMIT) {
124
+ sum += 1;
125
+ }
126
+ return sum;
127
+ }, 0);
128
+ const colspan = this.columnToolCells.reduce((sum, cell) => {
129
+ const cellRect = getRelativeRect(cell.getBoundingClientRect(), this.quill.root.parentNode);
130
+ if (cellRect.x > this.boundary.x - ERROR_LIMIT && cellRect.x + cellRect.width < this.boundary.x + this.boundary.width + ERROR_LIMIT) {
131
+ sum += 1;
132
+ }
133
+ return sum;
134
+ }, 0);
135
+ const mergedCell = tableContainer.mergeCells(
136
+ this.boundary,
137
+ this.selectedTds,
138
+ rowspan,
139
+ colspan,
140
+ this.quill.root.parentNode
141
+ );
142
+ this.quill.update(Quill.sources.USER);
143
+ this.tableSelection.setSelection(
144
+ mergedCell.domNode.getBoundingClientRect(),
145
+ mergedCell.domNode.getBoundingClientRect()
146
+ );
147
+ }
148
+ },
149
+ unmergeCells: {
150
+ text: "Split Cells",
151
+ handler() {
152
+ const tableContainer = Quill.find(this.table);
153
+ tableContainer.unmergeCells(this.selectedTds, this.quill.root.parentNode);
154
+ this.quill.update(Quill.sources.USER);
155
+ this.tableSelection.clearSelection();
156
+ }
157
+ },
158
+ deleteColumn: {
159
+ text: "Delete Columns",
160
+ handler() {
161
+ const tableContainer = Quill.find(this.table);
162
+ const colIndexes = getColToolCellIndexesByBoundary(
163
+ this.columnToolCells,
164
+ this.boundary,
165
+ (cellRect, boundary) => {
166
+ return cellRect.x + ERROR_LIMIT > boundary.x && cellRect.x + cellRect.width - ERROR_LIMIT < boundary.x1;
167
+ },
168
+ this.quill.root.parentNode
169
+ );
170
+ const isDeleteTable = tableContainer.deleteColumns(this.boundary, colIndexes, this.quill.root.parentNode);
171
+ if (!isDeleteTable) {
172
+ this.tableColumnTool.updateColToolCells();
173
+ this.quill.update(Quill.sources.USER);
174
+ this.tableSelection.clearSelection();
175
+ }
176
+ setTimeout(() => this.tableScrollBar.updateScrollBar());
177
+ }
178
+ },
179
+ deleteRow: {
180
+ text: "Delete Rows",
181
+ handler() {
182
+ const tableContainer = Quill.find(this.table);
183
+ const isDeleteTable = tableContainer.deleteRow(this.boundary, this.quill.root.parentNode);
184
+ if (!isDeleteTable) {
185
+ this.tableColumnTool.updateRowToolCells();
186
+ this.quill.update(Quill.sources.USER);
187
+ this.tableSelection.clearSelection();
188
+ }
189
+ }
190
+ },
191
+ deleteTable: {
192
+ text: "Remove Table",
193
+ handler() {
194
+ const betterTableModule = this.quill.getModule("better-table");
195
+ const tableContainer = Quill.find(this.table);
196
+ betterTableModule.hideTableTools();
197
+ tableContainer.remove();
198
+ this.quill.update(Quill.sources.USER);
199
+ this.quill.focus();
200
+ }
201
+ }
202
+ };
203
+ const DEFAULT_CELL_COLORS = ["white", "red", "yellow", "blue"];
204
+ const NODE_EVENT_MAP = /* @__PURE__ */ new WeakMap();
205
+ const MENU_MIN_HEIHGT = 150;
206
+ const DEFAULT_COLOR_SUBTITLE = LANG_CONF["subTitleBgColor"];
207
+ class TableOperationMenu {
208
+ constructor(params, quill, options) {
209
+ const betterTableModule = quill.getModule("better-table");
210
+ this.tableSelection = betterTableModule.tableSelection;
211
+ this.table = params.table;
212
+ this.quill = quill;
213
+ this.options = options;
214
+ this.menuItems = { ...MENU_ITEMS_DEFAULT, ...options.items };
215
+ this.tableColumnTool = betterTableModule.columnTool;
216
+ this.tableScrollBar = betterTableModule.tableScrollBar;
217
+ this.boundary = this.tableSelection.boundary;
218
+ this.selectedTds = this.tableSelection.selectedTds;
219
+ this.destroyHandler = this.destroy.bind(this);
220
+ this.columnToolCells = this.tableColumnTool.colToolCells();
221
+ this.colorSubTitle = options.color && options.color.text ? options.color.text : DEFAULT_COLOR_SUBTITLE;
222
+ this.cellColors = options.color && options.color.colors ? options.color.colors : DEFAULT_CELL_COLORS;
223
+ this.menuInitial(params);
224
+ this.mount();
225
+ document.addEventListener("click", this.destroyHandler, false);
226
+ }
227
+ mount() {
228
+ this.quill.root.parentNode.appendChild(this.domNode);
229
+ }
230
+ destroy() {
231
+ const menuItems = arrayFrom(
232
+ this.domNode.querySelectorAll("." + OPERATE_MENU_ITEM_CLASS)
233
+ );
234
+ const colorPickerItems = arrayFrom(
235
+ this.domNode.querySelectorAll("." + OPERATE_MENU_COLORPICKER_ITEM_CLASS)
236
+ );
237
+ const nodes = menuItems.concat(colorPickerItems);
238
+ nodes.forEach((node) => {
239
+ if (NODE_EVENT_MAP.has(node)) {
240
+ const unregister = NODE_EVENT_MAP.get(node);
241
+ if (unregister && typeof unregister === "function") {
242
+ unregister();
243
+ }
244
+ }
245
+ });
246
+ elementRemove(this.domNode);
247
+ document.removeEventListener("mousedown", this.destroyHandler, false);
248
+ return null;
249
+ }
250
+ menuInitial({ cell, left, top }) {
251
+ const rowspan = cell.getAttribute("rowspan");
252
+ const colspan = cell.getAttribute("colspan");
253
+ const winHeight = window.innerHeight || Math.max(document.documentElement.clientHeight, document.body.clientHeight);
254
+ const num = Object.keys(this.menuItems) || [];
255
+ const menuHeight = MENU_ITEM_HEIGHT * num.length || MENU_MIN_HEIGHT;
256
+ const transformOffset = checkAndGetViewPointChange(this.quill.root.parentNode, left, top);
257
+ const leftPos = left - transformOffset.offsetX;
258
+ const topPos = top - transformOffset.offsetY;
259
+ const cssContent = {
260
+ "left": `${leftPos}px`,
261
+ "top": `${topPos}px`,
262
+ "min-height": `${MENU_MIN_HEIGHT}px`,
263
+ "width": `${MENU_WIDTH}px`
264
+ };
265
+ if (menuHeight + top > winHeight && menuHeight < winHeight) {
266
+ delete cssContent.top;
267
+ cssContent["bottom"] = "10px";
268
+ }
269
+ this.domNode = document.createElement("div");
270
+ this.domNode.classList.add("qlbt-operation-menu");
271
+ css(this.domNode, cssContent);
272
+ for (const name in this.menuItems) {
273
+ if (this.menuItems[name]) {
274
+ const item = { ...MENU_ITEMS_DEFAULT[name], ...this.menuItems[name] };
275
+ const dom = this.menuItemCreator(item);
276
+ if (name === "mergeCells" && this.tableSelection.selectedTds.length === 1 || name === "unmergeCells" && rowspan === 1 && colspan === 1) {
277
+ dom.classList.add("qlbt-operation-menu-disabled");
278
+ } else {
279
+ dom.addEventListener("mouseup", item.handler.bind(this), false);
280
+ }
281
+ this.domNode.appendChild(dom);
282
+ }
283
+ }
284
+ if (this.options.color && this.options.color !== false) {
285
+ this.domNode.appendChild(dividingCreator());
286
+ this.domNode.appendChild(subTitleCreator(this.colorSubTitle));
287
+ this.domNode.appendChild(this.colorsItemCreator(this.cellColors));
288
+ }
289
+ function dividingCreator() {
290
+ const dividing = document.createElement("div");
291
+ dividing.classList.add(OPERATE_MENU_DIVIDING_CLASS);
292
+ return dividing;
293
+ }
294
+ function subTitleCreator(title) {
295
+ const subTitle = document.createElement("div");
296
+ subTitle.classList.add(OPERATE_MENU_SUBTITLE_CLASS);
297
+ subTitle.innerText = title;
298
+ return subTitle;
299
+ }
300
+ }
301
+ colorsItemCreator(colors) {
302
+ const self = this;
303
+ const node = document.createElement("div");
304
+ node.classList.add(OPERATE_MENU_COLORPICKER_CLASS);
305
+ colors.forEach((color) => {
306
+ const colorBox = colorBoxCreator(color);
307
+ node.appendChild(colorBox);
308
+ });
309
+ function colorBoxCreator(color) {
310
+ const box = document.createElement("div");
311
+ box.classList.add(OPERATE_MENU_COLORPICKER_ITEM_CLASS);
312
+ box.setAttribute("data-color", color);
313
+ box.style.backgroundColor = color;
314
+ const clickHandler = function() {
315
+ const selectedTds = self.tableSelection.selectedTds;
316
+ if (selectedTds && selectedTds.length > 0) {
317
+ selectedTds.forEach((tableCell) => {
318
+ tableCell.domNode.children[0].setAttribute("data-parent-bg", color);
319
+ tableCell.format("cell-bg", color);
320
+ });
321
+ }
322
+ };
323
+ box.addEventListener("click", clickHandler, false);
324
+ NODE_EVENT_MAP.set(box, () => {
325
+ box.removeEventListener("click", clickHandler, false);
326
+ });
327
+ return box;
328
+ }
329
+ return node;
330
+ }
331
+ menuItemCreator({ text }) {
332
+ const node = document.createElement("div");
333
+ node.classList.add("qlbt-operation-menu-item");
334
+ node.innerText = text;
335
+ return node;
336
+ }
337
+ onCopy(operation) {
338
+ const { selectedTds } = this.tableSelection;
339
+ const virtualTable = this.createVirtualTable(selectedTds, operation);
340
+ document.body.appendChild(virtualTable);
341
+ this.setCopyRange(virtualTable);
342
+ this.tableSelection.preSelectedTable = virtualTable;
343
+ this.tableSelection.preSelectedTds = selectedTds;
344
+ document.execCommand("copy");
345
+ virtualTable.remove();
346
+ if (operation === "cut") {
347
+ const tableContainer = Quill.find(this.table);
348
+ tableContainer.emptyCells(selectedTds);
349
+ }
350
+ }
351
+ createVirtualTable(selectedTds, _operation) {
352
+ const virtualTable = document.createElement("table");
353
+ virtualTable.style.position = "fixed";
354
+ virtualTable.style.top = 0;
355
+ virtualTable.style.left = 0;
356
+ virtualTable.style.clip = "rect(0,0,0,0)";
357
+ let preParentSign = "";
358
+ let virtualTr = null;
359
+ selectedTds.forEach((selectedCell) => {
360
+ const { domNode, parent } = selectedCell;
361
+ const currentParentSign = parent.domNode.getAttribute("data-row");
362
+ const rowspan = domNode.firstChild.dataset.rowspan;
363
+ const colspan = domNode.firstChild.dataset.colspan;
364
+ const row = domNode.firstChild.dataset.row;
365
+ const cell = domNode.firstChild.dataset.cell;
366
+ selectedCell.dataCell = cell;
367
+ selectedCell.dataRow = row;
368
+ selectedCell.dataColSpan = colspan;
369
+ selectedCell.dataRowSpan = rowspan;
370
+ if (currentParentSign !== preParentSign) {
371
+ if (preParentSign !== "") {
372
+ virtualTable.appendChild(virtualTr);
373
+ }
374
+ virtualTr = document.createElement("tr");
375
+ preParentSign = currentParentSign;
376
+ }
377
+ const domNodeWidth = domNode.offsetWidth;
378
+ const cloneNode = domNode.cloneNode(true);
379
+ cloneNode.setAttribute("width", domNodeWidth);
380
+ virtualTr.appendChild(cloneNode);
381
+ });
382
+ virtualTable.appendChild(virtualTr);
383
+ return virtualTable;
384
+ }
385
+ setCopyRange(selectedNodes) {
386
+ const range = document.createRange();
387
+ const windowSelectionRange = window.getSelection();
388
+ range.selectNodeContents(selectedNodes);
389
+ windowSelectionRange.removeAllRanges();
390
+ windowSelectionRange.addRange(range);
391
+ }
392
+ groupTableCell(selectedTds) {
393
+ const rowGroup = [];
394
+ let dataRow = "";
395
+ let preDataRow = "";
396
+ let index = 0;
397
+ selectedTds.forEach((tableCell) => {
398
+ dataRow = tableCell.parent.domNode.getAttribute("data-row");
399
+ if (dataRow !== preDataRow) {
400
+ if (preDataRow !== "") {
401
+ index++;
402
+ }
403
+ rowGroup[index] = [];
404
+ preDataRow = dataRow;
405
+ }
406
+ rowGroup[index].push(tableCell);
407
+ });
408
+ return rowGroup;
409
+ }
410
+ }
411
+ function getColToolCellIndexByBoundary(cells, boundary, conditionFn, container) {
412
+ return cells.reduce((findIndex, cell) => {
413
+ const cellRect = getRelativeRect(cell.getBoundingClientRect(), container);
414
+ if (conditionFn(cellRect, boundary)) {
415
+ findIndex = cells.indexOf(cell);
416
+ }
417
+ return findIndex;
418
+ }, false);
419
+ }
420
+ function getColToolCellIndexesByBoundary(cells, boundary, conditionFn, container) {
421
+ return cells.reduce((findIndexes, cell) => {
422
+ const cellRect = getRelativeRect(cell.getBoundingClientRect(), container);
423
+ if (conditionFn(cellRect, boundary)) {
424
+ findIndexes.push(cells.indexOf(cell));
425
+ }
426
+ return findIndexes;
427
+ }, []);
428
+ }
429
+ function checkAndGetViewPointChange(parentContainer, left, top) {
430
+ if (!parentContainer) {
431
+ return {
432
+ offsetX: 0,
433
+ offsetY: 0
434
+ };
435
+ }
436
+ const testEl = document.createElement("div");
437
+ css(testEl, {
438
+ opacity: "0",
439
+ position: "fixed",
440
+ left: `${left}px`,
441
+ top: `${top}px`,
442
+ width: "1px",
443
+ height: "1px",
444
+ zIndex: "-999999"
445
+ });
446
+ parentContainer.appendChild(testEl);
447
+ const testElPosition = testEl.getBoundingClientRect();
448
+ parentContainer.removeChild(testEl);
449
+ return {
450
+ offsetX: testElPosition.left - left,
451
+ offsetY: testElPosition.top - top
452
+ };
453
+ }
454
+ export {
455
+ TableOperationMenu as default
456
+ };
457
+ //# sourceMappingURL=table-operation-menu.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-operation-menu.es.js","sources":["../../../../src/table/modules/table-operation-menu.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { LANG_CONF } from '../../config/editor.config'\r\nimport { elementRemove, arrayFrom, css, getRelativeRect } from '../utils'\r\nimport {\r\n OPERATE_MENU_ITEM_CLASS,\r\n OPERATE_MENU_COLORPICKER_ITEM_CLASS,\r\n OPERATE_MENU_DIVIDING_CLASS,\r\n OPERATE_MENU_SUBTITLE_CLASS,\r\n OPERATE_MENU_COLORPICKER_CLASS,\r\n} from '../table-config'\r\n\r\nimport {\r\n ERROR_LIMIT,\r\n MENU_ITEM_HEIGHT,\r\n MENU_MIN_HEIGHT,\r\n MENU_WIDTH,\r\n} from '../table-config'\r\n\r\nconst MENU_ITEMS_DEFAULT = {\r\n copyCells: {\r\n text: 'Copy Cells',\r\n handler() {\r\n this.onCopy('copy')\r\n },\r\n },\r\n copyTable: {\r\n text: 'Copy Table',\r\n handler() {\r\n this.tableColumnTool.destroy()\r\n this.tableScrollBar.destroy()\r\n this.tableSelection.clearSelection()\r\n const dom = this.table.cloneNode(true)\r\n const trArr = dom.querySelectorAll('tr[data-row]')\r\n trArr.forEach(tr => tr.removeAttribute('data-row'))\r\n dom.style.position = 'fixed'\r\n dom.style.top = 0\r\n dom.style.left = 0\r\n dom.style.clip = 'rect(0,0,0,0)'\r\n document.body.appendChild(dom)\r\n this.setCopyRange(dom)\r\n document.execCommand('copy')\r\n dom.remove()\r\n },\r\n },\r\n cutCells: {\r\n text: 'Cut Cells',\r\n handler() {\r\n this.onCopy('cut')\r\n },\r\n },\r\n emptyCells: {\r\n text: 'Empty Cells',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const { selectedTds } = this.tableSelection\r\n tableContainer.emptyCells(selectedTds)\r\n },\r\n },\r\n insertColumnRight: {\r\n text: 'Insert Column After',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const colIndex = getColToolCellIndexByBoundary(\r\n this.columnToolCells,\r\n this.boundary,\r\n (cellRect, boundary) => {\r\n return Math.abs(cellRect.x + cellRect.width - boundary.x1) <= ERROR_LIMIT\r\n },\r\n this.quill.root.parentNode,\r\n )\r\n\r\n const newColumn = tableContainer.insertColumn(this.boundary, colIndex, true, this.quill.root.parentNode)\r\n\r\n this.tableColumnTool.updateColToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n // fix: the scroll bar will go to the top when insert row/column to the table\r\n // this.quill.setSelection(\r\n // this.quill.getIndex(newColumn[0]),\r\n // 0,\r\n // Quill.sources.SILENT\r\n // )\r\n this.tableSelection.setSelection(\r\n newColumn[0].domNode.getBoundingClientRect(),\r\n newColumn[0].domNode.getBoundingClientRect(),\r\n )\r\n\r\n setTimeout(() => this.tableScrollBar.updateScrollBar())\r\n },\r\n },\r\n\r\n insertColumnLeft: {\r\n text: 'Insert Column Before',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const colIndex = getColToolCellIndexByBoundary(\r\n this.columnToolCells,\r\n this.boundary,\r\n (cellRect, boundary) => {\r\n return Math.abs(cellRect.x - boundary.x) <= ERROR_LIMIT\r\n },\r\n this.quill.root.parentNode,\r\n )\r\n\r\n const newColumn = tableContainer.insertColumn(this.boundary, colIndex, false, this.quill.root.parentNode)\r\n\r\n this.tableColumnTool.updateColToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n // this.quill.setSelection(\r\n // this.quill.getIndex(newColumn[0]),\r\n // 0,\r\n // Quill.sources.SILENT\r\n // )\r\n this.tableSelection.setSelection(\r\n newColumn[0].domNode.getBoundingClientRect(),\r\n newColumn[0].domNode.getBoundingClientRect(),\r\n )\r\n\r\n setTimeout(() => this.tableScrollBar.updateScrollBar())\r\n },\r\n },\r\n\r\n insertRowUp: {\r\n text: 'Insert Row Above',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const affectedCells = tableContainer.insertRow(this.boundary, false, this.quill.root.parentNode)\r\n\r\n this.tableColumnTool.updateRowToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n // this.quill.setSelection(\r\n // this.quill.getIndex(affectedCells[0]),\r\n // 0,\r\n // Quill.sources.SILENT\r\n // )\r\n this.tableSelection.setSelection(\r\n affectedCells[0].domNode.getBoundingClientRect(),\r\n affectedCells[0].domNode.getBoundingClientRect(),\r\n )\r\n\r\n setTimeout(() => this.tableScrollBar.resetTableHeight(this.table))\r\n },\r\n },\r\n\r\n insertRowDown: {\r\n text: 'Insert Row Below',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const affectedCells = tableContainer.insertRow(this.boundary, true, this.quill.root.parentNode)\r\n\r\n this.tableColumnTool.updateRowToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n // this.quill.setSelection(\r\n // this.quill.getIndex(affectedCells[0]),\r\n // 0,\r\n // Quill.sources.SILENT\r\n // )\r\n this.tableSelection.setSelection(\r\n affectedCells[0].domNode.getBoundingClientRect(),\r\n affectedCells[0].domNode.getBoundingClientRect(),\r\n )\r\n\r\n setTimeout(() => this.tableScrollBar.resetTableHeight(this.table))\r\n },\r\n },\r\n\r\n mergeCells: {\r\n text: 'Merge Cells',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n // compute merged Cell rowspan, equal to length of selected rows\r\n const rowspan = tableContainer.rows().reduce((sum, row) => {\r\n const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), this.quill.root.parentNode)\r\n if (\r\n rowRect.y > this.boundary.y - ERROR_LIMIT\r\n && rowRect.y + rowRect.height < this.boundary.y + this.boundary.height + ERROR_LIMIT\r\n ) {\r\n sum += 1\r\n }\r\n return sum\r\n }, 0)\r\n\r\n // compute merged cell colspan, equal to length of selected cols\r\n const colspan = this.columnToolCells.reduce((sum, cell) => {\r\n const cellRect = getRelativeRect(cell.getBoundingClientRect(), this.quill.root.parentNode)\r\n if (\r\n cellRect.x > this.boundary.x - ERROR_LIMIT\r\n && cellRect.x + cellRect.width < this.boundary.x + this.boundary.width + ERROR_LIMIT\r\n ) {\r\n sum += 1\r\n }\r\n return sum\r\n }, 0)\r\n\r\n const mergedCell = tableContainer.mergeCells(\r\n this.boundary,\r\n this.selectedTds,\r\n rowspan,\r\n colspan,\r\n this.quill.root.parentNode,\r\n )\r\n this.quill.update(Quill.sources.USER)\r\n this.tableSelection.setSelection(\r\n mergedCell.domNode.getBoundingClientRect(),\r\n mergedCell.domNode.getBoundingClientRect(),\r\n )\r\n },\r\n },\r\n\r\n unmergeCells: {\r\n text: 'Split Cells',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n tableContainer.unmergeCells(this.selectedTds, this.quill.root.parentNode)\r\n this.quill.update(Quill.sources.USER)\r\n this.tableSelection.clearSelection()\r\n },\r\n },\r\n\r\n deleteColumn: {\r\n text: 'Delete Columns',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const colIndexes = getColToolCellIndexesByBoundary(\r\n this.columnToolCells,\r\n this.boundary,\r\n (cellRect, boundary) => {\r\n return cellRect.x + ERROR_LIMIT > boundary.x && cellRect.x + cellRect.width - ERROR_LIMIT < boundary.x1\r\n },\r\n this.quill.root.parentNode,\r\n )\r\n\r\n const isDeleteTable = tableContainer.deleteColumns(this.boundary, colIndexes, this.quill.root.parentNode)\r\n if (!isDeleteTable) {\r\n this.tableColumnTool.updateColToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n this.tableSelection.clearSelection()\r\n }\r\n\r\n setTimeout(() => this.tableScrollBar.updateScrollBar())\r\n },\r\n },\r\n\r\n deleteRow: {\r\n text: 'Delete Rows',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const isDeleteTable = tableContainer.deleteRow(this.boundary, this.quill.root.parentNode)\r\n if (!isDeleteTable) {\r\n this.tableColumnTool.updateRowToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n this.tableSelection.clearSelection()\r\n }\r\n },\r\n },\r\n\r\n deleteTable: {\r\n text: 'Remove Table',\r\n handler() {\r\n const betterTableModule = this.quill.getModule('better-table')\r\n const tableContainer = Quill.find(this.table)\r\n betterTableModule.hideTableTools()\r\n tableContainer.remove()\r\n this.quill.update(Quill.sources.USER)\r\n // fix: 右键菜单删除表格后编辑器失焦\r\n this.quill.focus()\r\n },\r\n },\r\n}\r\nconst DEFAULT_CELL_COLORS = ['white', 'red', 'yellow', 'blue']\r\nconst NODE_EVENT_MAP = new WeakMap()\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nconst MENU_MIN_HEIHGT = 150\r\nconst DEFAULT_COLOR_SUBTITLE = LANG_CONF['subTitleBgColor']\r\nexport default class TableOperationMenu {\r\n tableSelection: any\r\n table: any\r\n quill: any\r\n options: any\r\n menuItems: any\r\n tableColumnTool: any\r\n tableScrollBar: any\r\n boundary: any\r\n selectedTds: any\r\n destroyHandler: any\r\n columnToolCells: any\r\n colorSubTitle: any\r\n cellColors: any\r\n domNode: any\r\n\r\n constructor(params, quill, options) {\r\n const betterTableModule = quill.getModule('better-table')\r\n this.tableSelection = betterTableModule.tableSelection\r\n this.table = params.table\r\n this.quill = quill\r\n this.options = options\r\n this.menuItems = { ...MENU_ITEMS_DEFAULT, ...options.items }\r\n this.tableColumnTool = betterTableModule.columnTool\r\n // this.tableRowTool = betterTableModule.rowTool\r\n this.tableScrollBar = betterTableModule.tableScrollBar\r\n this.boundary = this.tableSelection.boundary\r\n this.selectedTds = this.tableSelection.selectedTds\r\n this.destroyHandler = this.destroy.bind(this)\r\n this.columnToolCells = this.tableColumnTool.colToolCells()\r\n this.colorSubTitle\r\n = options.color && options.color.text\r\n ? options.color.text\r\n : DEFAULT_COLOR_SUBTITLE\r\n this.cellColors\r\n = options.color && options.color.colors\r\n ? options.color.colors\r\n : DEFAULT_CELL_COLORS\r\n\r\n this.menuInitial(params)\r\n this.mount()\r\n document.addEventListener('click', this.destroyHandler, false)\r\n }\r\n\r\n mount() {\r\n this.quill.root.parentNode.appendChild(this.domNode)\r\n }\r\n\r\n destroy() {\r\n const menuItems = arrayFrom(\r\n this.domNode.querySelectorAll('.' + OPERATE_MENU_ITEM_CLASS),\r\n )\r\n const colorPickerItems = arrayFrom(\r\n this.domNode.querySelectorAll('.' + OPERATE_MENU_COLORPICKER_ITEM_CLASS),\r\n )\r\n const nodes = menuItems.concat(colorPickerItems)\r\n\r\n nodes.forEach((node) => {\r\n if (NODE_EVENT_MAP.has(node)) {\r\n const unregister = NODE_EVENT_MAP.get(node)\r\n\r\n if (unregister && typeof unregister === 'function') {\r\n unregister()\r\n }\r\n }\r\n })\r\n\r\n elementRemove(this.domNode)\r\n document.removeEventListener('mousedown', this.destroyHandler, false)\r\n\r\n return null\r\n }\r\n\r\n menuInitial({ cell, left, top }) {\r\n const rowspan = cell.getAttribute('rowspan')\r\n const colspan = cell.getAttribute('colspan')\r\n const winHeight = window.innerHeight || Math.max(document.documentElement.clientHeight, document.body.clientHeight)\r\n const num = Object.keys(this.menuItems) || []\r\n const menuHeight = MENU_ITEM_HEIGHT * num.length || MENU_MIN_HEIGHT\r\n const transformOffset = checkAndGetViewPointChange(this.quill.root.parentNode, left, top)\r\n const leftPos = left - transformOffset.offsetX\r\n const topPos = top - transformOffset.offsetY\r\n const cssContent = {\r\n 'left': `${leftPos}px`,\r\n 'top': `${topPos}px`,\r\n 'min-height': `${MENU_MIN_HEIGHT}px`,\r\n 'width': `${MENU_WIDTH}px`,\r\n }\r\n\r\n if (menuHeight + top > winHeight && menuHeight < winHeight) {\r\n delete cssContent.top\r\n cssContent['bottom'] = '10px'\r\n }\r\n\r\n this.domNode = document.createElement('div')\r\n this.domNode.classList.add('qlbt-operation-menu')\r\n css(this.domNode, cssContent)\r\n\r\n for (const name in this.menuItems) {\r\n if (this.menuItems[name]) {\r\n const item = { ...MENU_ITEMS_DEFAULT[name], ...this.menuItems[name] }\r\n const dom = this.menuItemCreator(item)\r\n if (\r\n (name === 'mergeCells' && this.tableSelection.selectedTds.length === 1)\r\n || (name === 'unmergeCells' && rowspan === 1 && colspan === 1)\r\n ) {\r\n dom.classList.add('qlbt-operation-menu-disabled')\r\n }\r\n else {\r\n dom.addEventListener('mouseup', item.handler.bind(this), false)\r\n }\r\n this.domNode.appendChild(dom)\r\n }\r\n }\r\n\r\n // if colors option is false, disabled bg color\r\n if (this.options.color && this.options.color !== false) {\r\n this.domNode.appendChild(dividingCreator())\r\n this.domNode.appendChild(subTitleCreator(this.colorSubTitle))\r\n this.domNode.appendChild(this.colorsItemCreator(this.cellColors))\r\n }\r\n\r\n // create dividing line\r\n function dividingCreator() {\r\n const dividing = document.createElement('div')\r\n dividing.classList.add(OPERATE_MENU_DIVIDING_CLASS)\r\n return dividing\r\n }\r\n\r\n // create subtitle for menu\r\n function subTitleCreator(title) {\r\n const subTitle = document.createElement('div')\r\n subTitle.classList.add(OPERATE_MENU_SUBTITLE_CLASS)\r\n subTitle.innerText = title\r\n return subTitle\r\n }\r\n }\r\n\r\n colorsItemCreator(colors) {\r\n const self = this\r\n const node = document.createElement('div')\r\n node.classList.add(OPERATE_MENU_COLORPICKER_CLASS)\r\n\r\n colors.forEach((color) => {\r\n const colorBox = colorBoxCreator(color)\r\n node.appendChild(colorBox)\r\n })\r\n\r\n function colorBoxCreator(color) {\r\n const box = document.createElement('div')\r\n box.classList.add(OPERATE_MENU_COLORPICKER_ITEM_CLASS)\r\n box.setAttribute('data-color', color)\r\n box.style.backgroundColor = color\r\n\r\n const clickHandler = function () {\r\n const selectedTds = self.tableSelection.selectedTds\r\n if (selectedTds && selectedTds.length > 0) {\r\n selectedTds.forEach((tableCell) => {\r\n tableCell.domNode.children[0].setAttribute('data-parent-bg', color)\r\n tableCell.format('cell-bg', color)\r\n })\r\n }\r\n }\r\n\r\n box.addEventListener('click', clickHandler, false)\r\n\r\n NODE_EVENT_MAP.set(box, () => {\r\n box.removeEventListener('click', clickHandler, false)\r\n })\r\n\r\n return box\r\n }\r\n\r\n return node\r\n }\r\n\r\n menuItemCreator({ text }) {\r\n const node = document.createElement('div')\r\n node.classList.add('qlbt-operation-menu-item')\r\n node.innerText = text\r\n // node.addEventListener('click', handler.bind(this), false)\r\n return node\r\n }\r\n\r\n onCopy(operation) {\r\n const { selectedTds } = this.tableSelection\r\n const virtualTable = this.createVirtualTable(selectedTds, operation)\r\n document.body.appendChild(virtualTable)\r\n this.setCopyRange(virtualTable)\r\n this.tableSelection.preSelectedTable = virtualTable\r\n this.tableSelection.preSelectedTds = selectedTds\r\n document.execCommand('copy')\r\n virtualTable.remove()\r\n if (operation === 'cut') {\r\n const tableContainer = Quill.find(this.table)\r\n tableContainer.emptyCells(selectedTds)\r\n }\r\n }\r\n\r\n createVirtualTable(selectedTds, _operation) {\r\n const virtualTable: any = document.createElement('table')\r\n virtualTable.style.position = 'fixed'\r\n virtualTable.style.top = 0\r\n virtualTable.style.left = 0\r\n virtualTable.style.clip = 'rect(0,0,0,0)'\r\n let preParentSign = ''\r\n let virtualTr = null\r\n selectedTds.forEach((selectedCell) => {\r\n const { domNode, parent } = selectedCell\r\n const currentParentSign = parent.domNode.getAttribute('data-row')\r\n const rowspan = domNode.firstChild.dataset.rowspan\r\n const colspan = domNode.firstChild.dataset.colspan\r\n const row = domNode.firstChild.dataset.row\r\n const cell = domNode.firstChild.dataset.cell\r\n\r\n selectedCell.dataCell = cell\r\n selectedCell.dataRow = row\r\n selectedCell.dataColSpan = colspan\r\n selectedCell.dataRowSpan = rowspan\r\n\r\n if (currentParentSign !== preParentSign) {\r\n if (preParentSign !== '') {\r\n virtualTable.appendChild(virtualTr)\r\n }\r\n virtualTr = document.createElement('tr')\r\n preParentSign = currentParentSign\r\n }\r\n\r\n const domNodeWidth = domNode.offsetWidth\r\n const cloneNode = domNode.cloneNode(true)\r\n cloneNode.setAttribute('width', domNodeWidth)\r\n\r\n virtualTr.appendChild(cloneNode)\r\n })\r\n virtualTable.appendChild(virtualTr)\r\n return virtualTable\r\n }\r\n\r\n setCopyRange(selectedNodes) {\r\n const range = document.createRange()\r\n const windowSelectionRange = window.getSelection()\r\n range.selectNodeContents(selectedNodes)\r\n windowSelectionRange.removeAllRanges()\r\n windowSelectionRange.addRange(range)\r\n }\r\n\r\n groupTableCell(selectedTds) {\r\n const rowGroup = []\r\n let dataRow = ''\r\n let preDataRow = ''\r\n let index = 0\r\n selectedTds.forEach((tableCell) => {\r\n dataRow = tableCell.parent.domNode.getAttribute('data-row')\r\n\r\n if (dataRow !== preDataRow) {\r\n if (preDataRow !== '') {\r\n index++\r\n }\r\n rowGroup[index] = []\r\n preDataRow = dataRow\r\n }\r\n\r\n rowGroup[index].push(tableCell)\r\n })\r\n return rowGroup\r\n }\r\n}\r\n\r\nfunction getColToolCellIndexByBoundary(cells, boundary, conditionFn, container) {\r\n return cells.reduce((findIndex, cell) => {\r\n const cellRect = getRelativeRect(cell.getBoundingClientRect(), container)\r\n if (conditionFn(cellRect, boundary)) {\r\n findIndex = cells.indexOf(cell)\r\n }\r\n return findIndex\r\n }, false)\r\n}\r\n\r\nfunction getColToolCellIndexesByBoundary(cells, boundary, conditionFn, container) {\r\n return cells.reduce((findIndexes, cell) => {\r\n const cellRect = getRelativeRect(cell.getBoundingClientRect(), container)\r\n if (conditionFn(cellRect, boundary)) {\r\n findIndexes.push(cells.indexOf(cell))\r\n }\r\n return findIndexes\r\n }, [])\r\n}\r\n\r\nfunction checkAndGetViewPointChange(parentContainer: HTMLElement, left: number, top: number) {\r\n if (!parentContainer) {\r\n return {\r\n offsetX: 0,\r\n offsetY: 0,\r\n }\r\n }\r\n // 模拟一个元素测预测位置和最终位置是否符合,如果不符合则是有transform等造成的偏移\r\n const testEl = document.createElement('div')\r\n css(testEl, {\r\n opacity: '0',\r\n position: 'fixed',\r\n left: `${left}px`,\r\n top: `${top}px`,\r\n width: '1px',\r\n height: '1px',\r\n zIndex: '-999999',\r\n })\r\n parentContainer.appendChild(testEl)\r\n const testElPosition = testEl.getBoundingClientRect()\r\n parentContainer.removeChild(testEl)\r\n return {\r\n offsetX: testElPosition.left - left,\r\n offsetY: testElPosition.top - top,\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}