@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,970 @@
1
+ import Quill from "quill";
2
+ import { compare } from "../../utils/method.es.js";
3
+ import { isNullOrUndefined } from "../../config/editor.utils.es.js";
4
+ import { CELL_IDENTITY_KEYS, CELL_ATTRIBUTES, CELL_DEFAULT, COL_ATTRIBUTES, COL_DEFAULT, ERROR_LIMIT, CELL_MIN_HEIGHT } from "../table-config.es.js";
5
+ import { getRelativeRect } from "../utils/index.es.js";
6
+ import Header from "./header.es.js";
7
+ import ListItem, { ListContainer } from "./list.es.js";
8
+ const Break = Quill.imports["blots/break"];
9
+ const Block = Quill.imports["blots/block"];
10
+ const Container = Quill.imports["blots/container"];
11
+ class TableCellLine extends Block {
12
+ static create(value) {
13
+ const node = super.create(value);
14
+ if (value.tdBgColor) {
15
+ node.setAttribute(`data-parent-bg`, value.tdBgColor);
16
+ delete value.tdBgColor;
17
+ }
18
+ CELL_IDENTITY_KEYS.forEach((key) => {
19
+ const identityMaker = key === "row" ? rowId : cellId;
20
+ node.setAttribute(`data-${key}`, value[key] || identityMaker());
21
+ });
22
+ CELL_ATTRIBUTES.forEach((attrName) => {
23
+ const keyValue = value[attrName] || CELL_DEFAULT[attrName];
24
+ keyValue && node.setAttribute(`data-${attrName}`, keyValue);
25
+ });
26
+ if (value.height) {
27
+ node.setAttribute("height", value.height);
28
+ }
29
+ return node;
30
+ }
31
+ static formats(domNode) {
32
+ const formats = {};
33
+ if (formats["list"]) {
34
+ formats["list"] = domNode.classList.item(0);
35
+ }
36
+ return reduceFormats(domNode, formats);
37
+ }
38
+ toggleAttribute(name, value) {
39
+ if (value) {
40
+ this.domNode.setAttribute(name, value);
41
+ } else {
42
+ this.domNode.removeAttribute(name);
43
+ }
44
+ }
45
+ formatChildren(name, value) {
46
+ this.children.forEach((child) => {
47
+ child.format && child.format(name, value);
48
+ if (!child.domNode.style) {
49
+ return;
50
+ }
51
+ if (child.domNode.tagName === "SPAN" && value) {
52
+ child.domNode.style.backgroundColor = value;
53
+ } else {
54
+ child.domNode.style.backgroundColor = "initial";
55
+ }
56
+ });
57
+ }
58
+ format(name, value) {
59
+ if ([...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS, "parent-bg"].indexOf(name) > -1) {
60
+ if (value) {
61
+ this.domNode.setAttribute(`data-${name}`, value);
62
+ } else {
63
+ this.domNode.removeAttribute(`data-${name}`);
64
+ }
65
+ } else if (name === "header") {
66
+ if (!value) {
67
+ return;
68
+ }
69
+ const { row, cell, rowspan, colspan } = TableCellLine.formats(this.domNode);
70
+ super.format(name, {
71
+ value,
72
+ row,
73
+ cell,
74
+ rowspan,
75
+ colspan
76
+ });
77
+ } else {
78
+ super.format(name, value);
79
+ }
80
+ switch (true) {
81
+ case name === "cell-bg": {
82
+ this.toggleAttribute("data-cell-bg", value);
83
+ }
84
+ }
85
+ }
86
+ optimize(context) {
87
+ super.optimize(context);
88
+ const { row, cell, rowspan, colspan, cellBg } = this.domNode.dataset;
89
+ const formats = TableCellLine.formats(this.domNode);
90
+ const parentFormats = this.parent.formats();
91
+ if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {
92
+ this.wrap(this.statics.requiredContainer.blotName, { row, cell, rowspan, colspan, cellBg });
93
+ } else if (!compare(formats, parentFormats)) {
94
+ this.parent.format("row", formats.row);
95
+ this.parent.format("cell", formats.cell);
96
+ this.parent.format("rowspan", formats.rowspan);
97
+ this.parent.format("colspan", formats.colspan);
98
+ formats["cell-bg"] && this.parent.setCellBg(formats["cell-bg"]);
99
+ }
100
+ const parentHeight = this.domNode.getAttribute("height");
101
+ if (parentHeight) {
102
+ this.parent.domNode.style.height = parentHeight;
103
+ }
104
+ }
105
+ tableCell() {
106
+ return this.parent;
107
+ }
108
+ }
109
+ TableCellLine.blotName = "table-cell-line";
110
+ TableCellLine.className = "qlbt-cell-line";
111
+ TableCellLine.tagName = "DIV";
112
+ class TableCell extends Container {
113
+ static create(value = { row: rowId() }) {
114
+ const node = super.create(value);
115
+ CELL_IDENTITY_KEYS.forEach((key) => {
116
+ node.setAttribute(`data-${key}`, value[key]);
117
+ });
118
+ CELL_ATTRIBUTES.forEach((attrName) => {
119
+ if (value[attrName]) {
120
+ node.setAttribute(attrName, value[attrName]);
121
+ }
122
+ });
123
+ return node;
124
+ }
125
+ static formats(domNode) {
126
+ const formats = {
127
+ height: void 0,
128
+ row: void 0
129
+ };
130
+ formats.height = domNode.getAttribute("height") || void 0;
131
+ if (domNode.hasAttribute("data-row")) {
132
+ formats.row = domNode.getAttribute("data-row");
133
+ }
134
+ if (domNode.hasAttribute("data-cell-bg")) {
135
+ formats["cell-bg"] = domNode.getAttribute("data-cell-bg") || void 0;
136
+ }
137
+ return CELL_ATTRIBUTES.reduce((formats2, attribute) => {
138
+ if (domNode.hasAttribute(attribute)) {
139
+ formats2[attribute] = domNode.getAttribute(attribute);
140
+ }
141
+ return formats2;
142
+ }, formats);
143
+ }
144
+ checkMerge() {
145
+ if (super.checkMerge() && !isNullOrUndefined(this.next.children.head)) {
146
+ const getCellId = (node) => {
147
+ return node.formats && node.formats()[node.statics.blotName] || {
148
+ cell: node.domNode.getAttribute("data-cell")
149
+ };
150
+ };
151
+ const thisHead = getCellId(this.children.head);
152
+ const thisTail = getCellId(this.children.tail);
153
+ const nextHead = getCellId(this.next.children.head);
154
+ const nextTail = getCellId(this.next.children.tail);
155
+ return thisHead.cell === thisTail.cell && thisHead.cell === nextHead.cell && thisHead.cell === nextTail.cell;
156
+ }
157
+ return false;
158
+ }
159
+ cellOffset() {
160
+ if (this.parent) {
161
+ return this.parent.children.indexOf(this);
162
+ }
163
+ return -1;
164
+ }
165
+ formats() {
166
+ const formats = {};
167
+ if (this.domNode.hasAttribute("data-row")) {
168
+ formats["row"] = this.domNode.getAttribute("data-row");
169
+ }
170
+ if (this.domNode.hasAttribute("data-cell")) {
171
+ formats["cell"] = this.domNode.getAttribute("data-cell");
172
+ }
173
+ return CELL_ATTRIBUTES.reduce((tableFormats, attribute) => {
174
+ if (this.domNode.hasAttribute(attribute)) {
175
+ tableFormats[attribute] = this.domNode.getAttribute(attribute);
176
+ }
177
+ return tableFormats;
178
+ }, formats);
179
+ }
180
+ toggleAttribute(name, value) {
181
+ if (value) {
182
+ this.domNode.setAttribute(name, value);
183
+ } else {
184
+ this.domNode.removeAttribute(name);
185
+ }
186
+ }
187
+ formatChildren(name, value) {
188
+ this.children.forEach((child) => {
189
+ child.format(name, value);
190
+ });
191
+ }
192
+ /** this method is for TableCellLine to change cell background color
193
+ * if use `format('cell-bg', value)` will loop trigger
194
+ * TableCellLine.optimize -> TableCell.format -> TableCellLine.optimize ...
195
+ */
196
+ setCellBg(value) {
197
+ if (value) {
198
+ this.domNode.style.backgroundColor = value;
199
+ } else {
200
+ this.domNode.style.backgroundColor = "initial";
201
+ }
202
+ }
203
+ format(name, value) {
204
+ const quill = Quill.find(this.scroll.domNode.parentNode);
205
+ switch (true) {
206
+ case CELL_ATTRIBUTES.indexOf(name) > -1:
207
+ this.toggleAttribute(name, value);
208
+ break;
209
+ case ["row", "cell"].indexOf(name) > -1:
210
+ this.toggleAttribute(`data-${name}`, value);
211
+ break;
212
+ case name === "background": {
213
+ const hasBgColor = this.domNode.querySelectorAll("div.qlbt-cell-line[data-parent-bg]");
214
+ hasBgColor.forEach((child) => child.removeAttribute("data-parent-bg"));
215
+ this.domNode.style.background = "";
216
+ this.domNode.style.backgroundColor = value;
217
+ this.children.head.format("parent-bg", value);
218
+ break;
219
+ }
220
+ case name === "size": {
221
+ const start = quill.getIndex(this.children.head);
222
+ const total = quill.getIndex(this.children.tail) + this.children.tail.length();
223
+ const length = total - start > 0 ? total - start : 0;
224
+ quill.setSelection(start, length, Quill.sources.USER);
225
+ quill.format(name, value, Quill.sources.USER);
226
+ quill.setSelection(start);
227
+ }
228
+ case name === "cell-bg": {
229
+ this.toggleAttribute("data-cell-bg", value);
230
+ this.toggleAttribute("data-parent-bg", value);
231
+ this.formatChildren(name, value);
232
+ this.setCellBg(value);
233
+ }
234
+ }
235
+ }
236
+ optimize(context) {
237
+ const hasBg = Array.from(this.domNode.childNodes).find((item) => item.getAttribute("data-parent-bg"));
238
+ const bgColor = hasBg && hasBg.getAttribute("data-parent-bg");
239
+ if (bgColor && bgColor !== this.domNode.style.backgroundColor) {
240
+ this.domNode.style.backgroundColor = bgColor;
241
+ }
242
+ const rId = this.domNode.getAttribute("data-row");
243
+ if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {
244
+ this.wrap(this.statics.requiredContainer.blotName, {
245
+ row: rId
246
+ });
247
+ } else if (rId !== this.parent.formats().row) {
248
+ this.parent.format("row", rId);
249
+ }
250
+ this.children.forEach((child) => {
251
+ if (isNullOrUndefined(child.next)) {
252
+ return;
253
+ }
254
+ const childFormats = this.getFormat(child.domNode);
255
+ const nextFormats = this.getFormat(child.next.domNode);
256
+ if (childFormats.cell !== nextFormats.cell) {
257
+ const next = this.splitAfter(child);
258
+ if (next) {
259
+ next.optimize();
260
+ }
261
+ if (this.prev) {
262
+ this.prev.optimize();
263
+ }
264
+ }
265
+ });
266
+ super.optimize(context);
267
+ }
268
+ // 兼容读取TableCell中的子blot,包括table-cell-line、line、head
269
+ getFormat(domNode) {
270
+ const formats = {};
271
+ const firstChild = domNode.childNodes[0];
272
+ if (firstChild && domNode.tagName === "OL") {
273
+ formats["list"] = firstChild.classList.item(0);
274
+ }
275
+ return reduceFormats(domNode, formats);
276
+ }
277
+ row() {
278
+ return this.parent;
279
+ }
280
+ rowOffset() {
281
+ if (this.row()) {
282
+ return -1;
283
+ }
284
+ return this.row().rowOffset();
285
+ }
286
+ table() {
287
+ return this.row() && this.row().table();
288
+ }
289
+ }
290
+ TableCell.blotName = "table";
291
+ TableCell.tagName = "TD";
292
+ class TableRow extends Container {
293
+ static create(value) {
294
+ const node = super.create(value);
295
+ if (value.row) {
296
+ node.setAttribute("data-row", value.row);
297
+ }
298
+ return node;
299
+ }
300
+ checkMerge() {
301
+ if (super.checkMerge() && !isNullOrUndefined(this.next.children.head)) {
302
+ const thisHead = this.children.head.formats();
303
+ const thisTail = this.children.tail.formats();
304
+ const nextHead = this.next.children.head.formats();
305
+ const nextTail = this.next.children.tail.formats();
306
+ return thisHead.row === thisTail.row && thisHead.row === nextHead.row && thisHead.row === nextTail.row;
307
+ }
308
+ return false;
309
+ }
310
+ formats() {
311
+ return ["row"].reduce((formats, attrName) => {
312
+ if (this.domNode.hasAttribute(`data-${attrName}`)) {
313
+ formats[attrName] = this.domNode.getAttribute(`data-${attrName}`);
314
+ }
315
+ return formats;
316
+ }, {});
317
+ }
318
+ format(key, value) {
319
+ this.domNode.setAttribute(`data-${key}`, value);
320
+ }
321
+ optimize(context) {
322
+ if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {
323
+ this.wrap(this.statics.requiredContainer.blotName);
324
+ }
325
+ this.children.forEach((child) => {
326
+ if (isNullOrUndefined(child.next)) {
327
+ return;
328
+ }
329
+ const childFormats = child.formats();
330
+ const nextFormats = child.next.formats();
331
+ if (childFormats.row !== nextFormats.row) {
332
+ const next = this.splitAfter(child);
333
+ if (next) {
334
+ next.optimize();
335
+ }
336
+ if (this.prev) {
337
+ this.prev.optimize();
338
+ }
339
+ }
340
+ });
341
+ super.optimize(context);
342
+ }
343
+ rowOffset() {
344
+ if (!this.parent) {
345
+ return -1;
346
+ }
347
+ return this.parent.children.indexOf(this);
348
+ }
349
+ table() {
350
+ return this.parent && this.parent.parent;
351
+ }
352
+ }
353
+ TableRow.blotName = "table-row";
354
+ TableRow.tagName = "TR";
355
+ class TableBody extends Container {
356
+ }
357
+ TableBody.blotName = "table-body";
358
+ TableBody.tagName = "TBODY";
359
+ class TableCol extends Block {
360
+ static create(value) {
361
+ const node = super.create(value);
362
+ COL_ATTRIBUTES.forEach((attrName) => {
363
+ node.setAttribute(`${attrName}`, value[attrName] || COL_DEFAULT[attrName]);
364
+ });
365
+ return node;
366
+ }
367
+ static formats(domNode) {
368
+ return COL_ATTRIBUTES.reduce((formats, attribute) => {
369
+ if (domNode.hasAttribute(`${attribute}`)) {
370
+ formats[attribute] = domNode.getAttribute(`${attribute}`) || void 0;
371
+ }
372
+ return formats;
373
+ }, {});
374
+ }
375
+ format(name, value) {
376
+ if (COL_ATTRIBUTES.indexOf(name) > -1) {
377
+ this.domNode.setAttribute(`${name}`, value || COL_DEFAULT[name]);
378
+ } else {
379
+ super.format(name, value);
380
+ }
381
+ }
382
+ html() {
383
+ return this.domNode.outerHTML;
384
+ }
385
+ }
386
+ TableCol.blotName = "table-col";
387
+ TableCol.tagName = "col";
388
+ class TableColGroup extends Container {
389
+ optimize(context) {
390
+ super.optimize(context);
391
+ if (this.parent && this.statics.requiredContainer && this.parent instanceof this.statics.requiredContainer) {
392
+ this.parent.updateTableWidth();
393
+ }
394
+ if (this.parent.parent.domNode.className === "quill-better-table-wrapper" && this.parent.parent.domNode.tagName === "DIV" && this.parent.domNode.children.length >= 2 && this.parent.domNode.children[0].tagName === "COLGROUP" && this.parent.domNode.children[1].tagName === "TBODY") {
395
+ let trId = "";
396
+ let colSpan = 0;
397
+ let colgroupNumber = 0;
398
+ for (let i = 0; i < this.parent.domNode.children.length; i++) {
399
+ if (this.parent.domNode.children[i].tagName === "TBODY") {
400
+ if (trId === "") {
401
+ trId = this.parent.domNode.children[i].children[0].getAttribute("data-row");
402
+ }
403
+ colSpan = this.findTdColspanInTbody(this.parent.domNode.children[i], trId);
404
+ } else if (this.parent.domNode.children[i].tagName === "COLGROUP") {
405
+ colgroupNumber = this.parent.domNode.children[i].children.length;
406
+ }
407
+ }
408
+ let elementSibling = this.parent.domNode.nextElementSibling;
409
+ while (elementSibling && elementSibling.tagName === "TABLE") {
410
+ for (let i = 0; i < elementSibling.children.length; i++) {
411
+ if (elementSibling.children[i].tagName === "TBODY") {
412
+ colSpan += this.findTdColspanInTbody(elementSibling.children[i], trId);
413
+ }
414
+ }
415
+ elementSibling = elementSibling.nextElementSibling;
416
+ }
417
+ if (colgroupNumber < colSpan) {
418
+ const length = colSpan - colgroupNumber;
419
+ for (let i = 0; i < length; i++) {
420
+ const newCol = document.createElement("col");
421
+ newCol.width = this.parent.domNode.children[0].children[this.parent.domNode.children[0].children.length - 1].width;
422
+ const newBr = document.createElement("br");
423
+ newCol.appendChild(newBr);
424
+ this.parent.domNode.children[0].appendChild(newCol);
425
+ this.parent.domNode.style.width += newCol.width;
426
+ }
427
+ }
428
+ }
429
+ }
430
+ // this.parent.domNode.children[1].children[0].children[0].colSpan
431
+ findTdColspanInTbody(tbody, trId) {
432
+ let colSpan = 0;
433
+ for (let i = 0; i < tbody.children.length; i++) {
434
+ if (tbody.children[i].getAttribute("data-row") !== trId) {
435
+ return colSpan;
436
+ }
437
+ for (let j = 0; j < tbody.children[i].children.length; j++) {
438
+ if (tbody.children[i].children[j].colSpan) {
439
+ colSpan += tbody.children[i].children[j].colSpan;
440
+ }
441
+ }
442
+ }
443
+ return colSpan;
444
+ }
445
+ }
446
+ TableColGroup.blotName = "table-col-group";
447
+ TableColGroup.tagName = "colgroup";
448
+ class TableContainer extends Container {
449
+ static create() {
450
+ const node = super.create();
451
+ return node;
452
+ }
453
+ constructor(scroll, domNode) {
454
+ super(scroll, domNode);
455
+ domNode.setAttribute("contenteditable", false);
456
+ this.updateTableWidth();
457
+ }
458
+ updateTableWidth() {
459
+ let colGroup = this.colGroup();
460
+ if (!colGroup) {
461
+ if (this.parent && this.parent.children.head && this.domNode.hasAttribute("style")) {
462
+ colGroup = this.parent.children.head.children.head;
463
+ this.domNode = this.parent.children.head.domNode;
464
+ } else if (this.domNode.tagName === "TABLE") {
465
+ return;
466
+ } else {
467
+ return;
468
+ }
469
+ }
470
+ const tableWidth = colGroup.children.reduce((sumWidth, col) => {
471
+ const tableCol = col.formats()[TableCol.blotName];
472
+ let tableColWidth = COL_DEFAULT.width;
473
+ if (tableCol && tableCol.width) {
474
+ tableColWidth = parseInt(tableCol.width, 10);
475
+ }
476
+ sumWidth = sumWidth + tableColWidth;
477
+ return sumWidth;
478
+ }, 0);
479
+ this.domNode.removeAttribute("style");
480
+ this.domNode.style.width = `${tableWidth}px`;
481
+ if (colGroup.next) {
482
+ setTimeout(() => {
483
+ let tdIndex = 0;
484
+ let maxTds;
485
+ const colNum = colGroup.children.length;
486
+ const tableRows = this.descendants(TableRow);
487
+ for (let i = 0; i < tableRows.length; i++) {
488
+ const tds = tableRows[i].domNode.querySelectorAll("td");
489
+ if (tds.length === colNum) {
490
+ maxTds = tds;
491
+ break;
492
+ }
493
+ }
494
+ colGroup.children.forEach((col) => {
495
+ if (maxTds && col.domNode.width === "auto") {
496
+ const width = getComputedStyle(maxTds[tdIndex])["width"];
497
+ const num = parseInt(width, 10);
498
+ col.domNode.width = num < COL_DEFAULT.width && COL_DEFAULT.width || num;
499
+ }
500
+ tdIndex++;
501
+ });
502
+ });
503
+ }
504
+ }
505
+ cells(column) {
506
+ return this.rows().map((row) => row.children.at(column));
507
+ }
508
+ colGroup() {
509
+ return this.children.head;
510
+ }
511
+ deleteColumns(compareRect, delIndexes = [], editorWrapper) {
512
+ const [body] = this.descendants(TableBody);
513
+ if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {
514
+ return;
515
+ }
516
+ const tableCells = this.descendants(TableCell);
517
+ const removedCells = [];
518
+ const modifiedCells = [];
519
+ tableCells.forEach((cell) => {
520
+ const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper);
521
+ if (cellRect.x + ERROR_LIMIT > compareRect.x && cellRect.x1 - ERROR_LIMIT < compareRect.x1) {
522
+ removedCells.push(cell);
523
+ } else if (cellRect.x < compareRect.x + ERROR_LIMIT && cellRect.x1 > compareRect.x1 - ERROR_LIMIT) {
524
+ modifiedCells.push(cell);
525
+ }
526
+ });
527
+ if (removedCells.length === tableCells.length) {
528
+ this.tableDestroy();
529
+ return true;
530
+ }
531
+ delIndexes.forEach(() => {
532
+ const col = this.colGroup().children.at(delIndexes[0]);
533
+ if (!col || this.colGroup().children.at(delIndexes[0]).domNode !== this.colGroup().domNode.children[delIndexes[0]]) {
534
+ this.colGroup().domNode.removeChild(this.colGroup().domNode.children[delIndexes[0]]);
535
+ } else {
536
+ col.remove();
537
+ }
538
+ });
539
+ removedCells.forEach((cell) => {
540
+ cell.remove();
541
+ });
542
+ modifiedCells.forEach((cell) => {
543
+ const cellColspan = parseInt(cell.formats().colspan, 10);
544
+ cell.format("colspan", cellColspan - delIndexes.length);
545
+ });
546
+ this.updateTableWidth();
547
+ }
548
+ deleteRow(compareRect, editorWrapper) {
549
+ const [body] = this.descendants(TableBody);
550
+ if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {
551
+ return;
552
+ }
553
+ const tableCells = this.descendants(TableCell);
554
+ const tableRows = this.descendants(TableRow);
555
+ const removedCells = [];
556
+ const modifiedCells = [];
557
+ const fallCells = [];
558
+ tableCells.forEach((cell) => {
559
+ const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper);
560
+ if (cellRect.y > compareRect.y - ERROR_LIMIT && cellRect.y1 < compareRect.y1 + ERROR_LIMIT) {
561
+ removedCells.push(cell);
562
+ } else if (cellRect.y < compareRect.y + ERROR_LIMIT && cellRect.y1 > compareRect.y1 - ERROR_LIMIT) {
563
+ modifiedCells.push(cell);
564
+ if (Math.abs(cellRect.y - compareRect.y) < ERROR_LIMIT) {
565
+ fallCells.push(cell);
566
+ }
567
+ }
568
+ });
569
+ if (removedCells.length === tableCells.length) {
570
+ this.tableDestroy();
571
+ return;
572
+ }
573
+ const removedRowsLength = this.rows().reduce((sum, row) => {
574
+ const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), editorWrapper);
575
+ if (rowRect.y > compareRect.y - ERROR_LIMIT && rowRect.y1 < compareRect.y1 + ERROR_LIMIT) {
576
+ sum += 1;
577
+ }
578
+ return sum;
579
+ }, 0);
580
+ fallCells.forEach((cell) => {
581
+ const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper);
582
+ const nextRow = cell.parent.next;
583
+ const cellsInNextRow = nextRow.children;
584
+ const refCell = cellsInNextRow.reduce((ref, compareCell) => {
585
+ const compareCellRect = getRelativeRect(compareCell.domNode.getBoundingClientRect(), editorWrapper);
586
+ if (cellRect.x1 - compareCellRect.x < ERROR_LIMIT) {
587
+ ref = compareCell;
588
+ }
589
+ return ref;
590
+ }, null);
591
+ nextRow.insertBefore(cell, refCell);
592
+ const curRowId = nextRow.formats().row;
593
+ cell.format("row", curRowId);
594
+ cell.children.forEach((cellLine) => {
595
+ cellLine.format("row", curRowId);
596
+ });
597
+ });
598
+ modifiedCells.forEach((cell) => {
599
+ const cellRowspan = parseInt(cell.formats().rowspan, 10);
600
+ const curRowspan = cellRowspan - removedRowsLength;
601
+ cell.domNode.removeAttribute("style");
602
+ cell.format("rowspan", curRowspan);
603
+ cell.children.forEach((cellLine) => {
604
+ cellLine.format("rowspan", curRowspan);
605
+ });
606
+ });
607
+ removedCells.forEach((cell) => {
608
+ cell.remove();
609
+ });
610
+ tableRows.forEach((row) => {
611
+ if (row.children.length === 0) {
612
+ row.remove();
613
+ }
614
+ });
615
+ }
616
+ tableDestroy() {
617
+ const quill = Quill.find(this.scroll.domNode.parentNode);
618
+ const tableModule = quill.getModule("better-table");
619
+ this.remove();
620
+ tableModule.hideTableTools();
621
+ quill.update(Quill.sources.USER);
622
+ }
623
+ insertCell(tableRow, ref, bg = "") {
624
+ const id = cellId();
625
+ const rId = tableRow.formats().row;
626
+ const tableCell = this.scroll.create(
627
+ TableCell.blotName,
628
+ { ...CELL_DEFAULT, row: rId }
629
+ );
630
+ tableCell.domNode.style.backgroundColor = bg;
631
+ const cellLine = this.scroll.create(TableCellLine.blotName, {
632
+ row: rId,
633
+ cell: id
634
+ });
635
+ tableCell.appendChild(cellLine);
636
+ if (ref) {
637
+ tableRow.insertBefore(tableCell, ref);
638
+ } else {
639
+ tableRow.appendChild(tableCell);
640
+ }
641
+ }
642
+ insertColumn(compareRect, colIndex, isRight = true, editorWrapper) {
643
+ const [body] = this.descendants(TableBody);
644
+ const [tableColGroup] = this.descendants(TableColGroup);
645
+ const tableCols = this.descendants(TableCol);
646
+ const addAsideCells = [];
647
+ const modifiedCells = [];
648
+ const affectedCells = [];
649
+ if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {
650
+ return;
651
+ }
652
+ const tableCells = this.descendants(TableCell);
653
+ tableCells.forEach((cell) => {
654
+ const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper);
655
+ if (isRight) {
656
+ if (Math.abs(cellRect.x1 - compareRect.x1) < ERROR_LIMIT) {
657
+ addAsideCells.push(cell);
658
+ } else if (compareRect.x1 - cellRect.x > ERROR_LIMIT && compareRect.x1 - cellRect.x1 < -ERROR_LIMIT) {
659
+ modifiedCells.push(cell);
660
+ }
661
+ } else {
662
+ if (Math.abs(cellRect.x - compareRect.x) < ERROR_LIMIT) {
663
+ addAsideCells.push(cell);
664
+ } else if (compareRect.x - cellRect.x > ERROR_LIMIT && compareRect.x - cellRect.x1 < -ERROR_LIMIT) {
665
+ modifiedCells.push(cell);
666
+ }
667
+ }
668
+ });
669
+ addAsideCells.forEach((cell) => {
670
+ const ref = isRight ? cell.next : cell;
671
+ const id = cellId();
672
+ const tableRow = cell.parent;
673
+ const rId = tableRow.formats().row;
674
+ const cellFormats = cell.formats();
675
+ const tableCell = this.scroll.create(
676
+ TableCell.blotName,
677
+ {
678
+ ...CELL_DEFAULT,
679
+ row: rId,
680
+ rowspan: cellFormats.rowspan
681
+ }
682
+ );
683
+ const cellLine = this.scroll.create(TableCellLine.blotName, {
684
+ row: rId,
685
+ cell: id,
686
+ rowspan: cellFormats.rowspan
687
+ });
688
+ tableCell.appendChild(cellLine);
689
+ if (ref) {
690
+ tableRow.insertBefore(tableCell, ref);
691
+ } else {
692
+ tableRow.appendChild(tableCell);
693
+ }
694
+ affectedCells.push(tableCell);
695
+ });
696
+ const tableCol = this.scroll.create(TableCol.blotName, true);
697
+ let colRef;
698
+ if (isRight) {
699
+ colRef = tableCols[colIndex] && tableCols[colIndex].next;
700
+ } else {
701
+ colRef = tableCols[colIndex];
702
+ }
703
+ if (colRef) {
704
+ tableColGroup.insertBefore(tableCol, colRef);
705
+ } else {
706
+ tableColGroup.appendChild(tableCol);
707
+ }
708
+ modifiedCells.forEach((cell) => {
709
+ const cellColspan = cell.formats().colspan;
710
+ cell.format("colspan", parseInt(cellColspan, 10) + 1);
711
+ affectedCells.push(cell);
712
+ });
713
+ affectedCells.sort((cellA, cellB) => {
714
+ const y1 = cellA.domNode.getBoundingClientRect().y;
715
+ const y2 = cellB.domNode.getBoundingClientRect().y;
716
+ return y1 - y2;
717
+ });
718
+ this.updateTableWidth();
719
+ return affectedCells;
720
+ }
721
+ insertRow(compareRect, isDown, editorWrapper) {
722
+ const [body] = this.descendants(TableBody);
723
+ if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {
724
+ return;
725
+ }
726
+ const tableCells = this.descendants(TableCell);
727
+ const rId = rowId();
728
+ const newRow = this.scroll.create(TableRow.blotName, {
729
+ row: rId
730
+ });
731
+ const addBelowCells = [];
732
+ const modifiedCells = [];
733
+ const affectedCells = [];
734
+ tableCells.forEach((cell) => {
735
+ const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper);
736
+ if (isDown) {
737
+ if (Math.abs(cellRect.y1 - compareRect.y1) < ERROR_LIMIT) {
738
+ addBelowCells.push(cell);
739
+ } else if (compareRect.y1 - cellRect.y > ERROR_LIMIT && compareRect.y1 - cellRect.y1 < -ERROR_LIMIT) {
740
+ modifiedCells.push(cell);
741
+ }
742
+ } else {
743
+ if (Math.abs(cellRect.y - compareRect.y) < ERROR_LIMIT) {
744
+ addBelowCells.push(cell);
745
+ } else if (compareRect.y - cellRect.y > ERROR_LIMIT && compareRect.y - cellRect.y1 < -ERROR_LIMIT) {
746
+ modifiedCells.push(cell);
747
+ }
748
+ }
749
+ });
750
+ const sortFunc = (cellA, cellB) => {
751
+ const x1 = cellA.domNode.getBoundingClientRect().x;
752
+ const x2 = cellB.domNode.getBoundingClientRect().x;
753
+ return x1 - x2;
754
+ };
755
+ addBelowCells.sort(sortFunc);
756
+ addBelowCells.forEach((cell) => {
757
+ const cId = cellId();
758
+ const cellFormats = cell.formats();
759
+ const tableCell = this.scroll.create(
760
+ TableCell.blotName,
761
+ { ...CELL_DEFAULT, row: rId, cell: cId, colspan: cellFormats.colspan }
762
+ );
763
+ const cellLine = this.scroll.create(TableCellLine.blotName, {
764
+ row: rId,
765
+ cell: cId,
766
+ colspan: cellFormats.colspan
767
+ });
768
+ const empty = this.scroll.create(Break.blotName);
769
+ cellLine.appendChild(empty);
770
+ tableCell.appendChild(cellLine);
771
+ newRow.appendChild(tableCell);
772
+ affectedCells.push(tableCell);
773
+ });
774
+ modifiedCells.forEach((cell) => {
775
+ const cellRowspan = parseInt(cell.formats().rowspan, 10);
776
+ cell.format("rowspan", cellRowspan + 1);
777
+ affectedCells.push(cell);
778
+ });
779
+ const refRow = this.rows().find((row) => {
780
+ const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), editorWrapper);
781
+ if (isDown) {
782
+ return Math.abs(rowRect.y - compareRect.y - compareRect.height) < ERROR_LIMIT;
783
+ } else {
784
+ return Math.abs(rowRect.y - compareRect.y) < ERROR_LIMIT;
785
+ }
786
+ });
787
+ body.insertBefore(newRow, refRow);
788
+ affectedCells.sort(sortFunc);
789
+ return affectedCells;
790
+ }
791
+ mergeCells(_compareRect, mergingCells, rowspan, colspan, _editorWrapper) {
792
+ const mergedCell = mergingCells.reduce((result, tableCell, index) => {
793
+ if (index !== 0) {
794
+ if (result) {
795
+ tableCell.moveChildren(result);
796
+ }
797
+ tableCell.remove();
798
+ } else {
799
+ tableCell.format("colspan", colspan);
800
+ tableCell.format("rowspan", rowspan);
801
+ result = tableCell;
802
+ if (rowspan > 1) {
803
+ const minHeight = CELL_MIN_HEIGHT * rowspan + rowspan - 1;
804
+ const cellHeight = parseInt(tableCell.domNode.style.height, 10) || 0;
805
+ if (cellHeight < minHeight) {
806
+ tableCell.domNode.style.height = `${minHeight}px`;
807
+ }
808
+ }
809
+ }
810
+ return result;
811
+ }, null);
812
+ const rId = mergedCell.domNode.getAttribute("data-row");
813
+ const cId = mergedCell.children.head.domNode.getAttribute("data-cell");
814
+ mergedCell.children.forEach((cellLine) => {
815
+ cellLine.domNode.setAttribute("data-parent-bg", mergedCell.domNode.style.backgroundColor);
816
+ if (cellLine.children["head"].domNode.style) {
817
+ cellLine.children["head"].domNode.style.backgroundColor = mergedCell.domNode.style.backgroundColor;
818
+ }
819
+ if (!cellLine.prev || cellLine.domNode.innerText.trim()) {
820
+ cellLine.format("cell", cId);
821
+ cellLine.format("row", rId);
822
+ cellLine.format("colspan", colspan);
823
+ cellLine.format("rowspan", rowspan);
824
+ } else {
825
+ cellLine.remove();
826
+ }
827
+ });
828
+ return mergedCell;
829
+ }
830
+ unmergeCells(unmergingCells, editorWrapper) {
831
+ let cellFormats = {};
832
+ let cellRowspan = 1;
833
+ let cellColspan = 1;
834
+ unmergingCells.forEach((tableCell) => {
835
+ const tableCellBgColor = tableCell.domNode.style.backgroundColor;
836
+ cellFormats = tableCell.formats();
837
+ cellRowspan = cellFormats.rowspan;
838
+ cellColspan = cellFormats.colspan;
839
+ if (cellColspan > 1) {
840
+ const ref = tableCell.next;
841
+ const row = tableCell.row();
842
+ tableCell.format("colspan", 1);
843
+ if (tableCell.domNode.children && tableCell.domNode.children[0].tagName === "DIV" && tableCell.domNode.children[0].getAttribute("data-colspan")) {
844
+ tableCell.domNode.children[0].setAttribute("data-colspan", 1);
845
+ }
846
+ for (let colspanIndex = cellColspan; colspanIndex > 1; colspanIndex--) {
847
+ this.insertCell(row, ref, tableCellBgColor);
848
+ }
849
+ }
850
+ if (cellRowspan > 1) {
851
+ let rowspanIndex = cellRowspan;
852
+ let nextRow = tableCell.row().next;
853
+ while (rowspanIndex > 1) {
854
+ const refInNextRow = nextRow.children.reduce((result, cell) => {
855
+ const compareRect = getRelativeRect(tableCell.domNode.getBoundingClientRect(), editorWrapper);
856
+ const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper);
857
+ if (Math.abs(compareRect.x1 - cellRect.x) < ERROR_LIMIT) {
858
+ result = cell;
859
+ }
860
+ return result;
861
+ }, null);
862
+ for (let colspanIndex = cellColspan; colspanIndex > 0; colspanIndex--) {
863
+ this.insertCell(nextRow, refInNextRow, tableCellBgColor);
864
+ }
865
+ rowspanIndex -= 1;
866
+ nextRow = nextRow.next;
867
+ }
868
+ tableCell.domNode.removeAttribute("style");
869
+ if (tableCell.domNode.children && tableCell.domNode.children[0].tagName === "DIV" && tableCell.domNode.children[0].getAttribute("data-rowspan")) {
870
+ tableCell.domNode.children[0].setAttribute("data-rowspan", 1);
871
+ }
872
+ tableCell.format("rowspan", 1);
873
+ }
874
+ });
875
+ }
876
+ emptyCells(selectedTds) {
877
+ selectedTds.forEach((selectedTd) => {
878
+ const cellFormats = selectedTd.formats();
879
+ const cellLine = this.scroll.create(TableCellLine.blotName, {
880
+ row: cellFormats.row || rowId(),
881
+ cell: cellFormats.cell || cellId(),
882
+ rowspan: cellFormats.rowspan,
883
+ colspan: cellFormats.colspan
884
+ });
885
+ const empty = this.scroll.create(Break.blotName);
886
+ cellLine.appendChild(empty);
887
+ selectedTd.domNode.innerHTML = "";
888
+ selectedTd.appendChild(cellLine);
889
+ });
890
+ }
891
+ rows() {
892
+ const body = this.children.tail;
893
+ if (isNullOrUndefined(body)) {
894
+ return [];
895
+ }
896
+ return body.children.map((row) => row);
897
+ }
898
+ }
899
+ TableContainer.blotName = "ql-table-container";
900
+ TableContainer.className = "quill-better-table";
901
+ TableContainer.tagName = "TABLE";
902
+ class TableViewWrapper extends Container {
903
+ constructor(scroll, domNode) {
904
+ super(scroll, domNode);
905
+ const quill = Quill.find(scroll.domNode.parentNode);
906
+ if (quill.options.readOnly) {
907
+ domNode.style.overflow = "auto";
908
+ }
909
+ domNode.addEventListener(
910
+ "scroll",
911
+ (e) => {
912
+ const tableModule = quill.getModule("better-table");
913
+ if (tableModule.columnTool) {
914
+ tableModule.columnTool.domNode.scrollLeft = e.target.scrollLeft;
915
+ }
916
+ if (tableModule.tableSelection && tableModule.tableSelection.selectedTds.length > 0) {
917
+ tableModule.tableSelection.repositionHelpLines();
918
+ }
919
+ },
920
+ false
921
+ );
922
+ }
923
+ }
924
+ TableViewWrapper.blotName = "table-view";
925
+ TableViewWrapper.className = "quill-better-table-wrapper";
926
+ TableViewWrapper.tagName = "DIV";
927
+ TableViewWrapper.allowedChildren = [TableContainer];
928
+ TableContainer.requiredContainer = TableViewWrapper;
929
+ TableContainer.allowedChildren = [TableBody, TableColGroup];
930
+ TableBody.requiredContainer = TableContainer;
931
+ TableBody.allowedChildren = [TableRow];
932
+ TableRow.requiredContainer = TableBody;
933
+ TableRow.allowedChildren = [TableCell];
934
+ TableCell.requiredContainer = TableRow;
935
+ TableCell.allowedChildren = [TableCellLine, Header, ListItem, ListContainer];
936
+ TableCellLine.requiredContainer = TableCell;
937
+ TableColGroup.allowedChildren = [TableCol];
938
+ TableColGroup.requiredContainer = TableContainer;
939
+ TableCol.requiredContainer = TableColGroup;
940
+ function rowId() {
941
+ const id = Math.random().toString(36).slice(2, 6);
942
+ return `row-${id}`;
943
+ }
944
+ function cellId() {
945
+ const id = Math.random().toString(36).slice(2, 6);
946
+ return `cell-${id}`;
947
+ }
948
+ function reduceFormats(domNode, formats) {
949
+ return [...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS].reduce((tableFormats, attribute) => {
950
+ if (domNode.hasAttribute(`data-${attribute}`)) {
951
+ tableFormats[attribute] = domNode.getAttribute(`data-${attribute}`) || void 0;
952
+ }
953
+ return tableFormats;
954
+ }, formats);
955
+ }
956
+ export {
957
+ CELL_ATTRIBUTES,
958
+ CELL_IDENTITY_KEYS,
959
+ TableBody,
960
+ TableCell,
961
+ TableCellLine,
962
+ TableCol,
963
+ TableColGroup,
964
+ TableContainer,
965
+ TableRow,
966
+ TableViewWrapper,
967
+ cellId,
968
+ rowId
969
+ };
970
+ //# sourceMappingURL=table.es.js.map