@opentiny/fluent-editor 3.20.2-alpha.0 → 3.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (530) hide show
  1. package/dist/package.json +52 -0
  2. package/package.json +3 -3
  3. package/scripts/pre-release.js +34 -0
  4. package/src/assets/better-table.scss +367 -0
  5. package/src/assets/common.scss +279 -0
  6. package/src/assets/counter.scss +19 -0
  7. package/src/assets/custom-image.scss +20 -0
  8. package/src/assets/editor.scss +365 -0
  9. package/src/assets/emoji/emoji.scss +461 -0
  10. package/src/assets/emoji/style.scss +252 -0
  11. package/src/assets/fileBar.scss +116 -0
  12. package/src/assets/font.scss +36 -0
  13. package/src/assets/fullscreen.scss +21 -0
  14. package/src/assets/iconfont/iconfont.ttf +0 -0
  15. package/src/assets/iconfont/iconfont.woff +0 -0
  16. package/src/assets/iconfont/iconfont.woff2 +0 -0
  17. package/src/assets/image1.png +0 -0
  18. package/src/assets/lineHeight.scss +16 -0
  19. package/src/assets/link.scss +130 -0
  20. package/src/assets/mention.scss +48 -0
  21. package/src/assets/screenshot.scss +78 -0
  22. package/src/assets/size.scss +13 -0
  23. package/src/assets/style.scss +39 -0
  24. package/src/assets/tasklist.scss +76 -0
  25. package/src/assets/toolbar.scss +416 -0
  26. package/src/attributors/font-size.ts +6 -0
  27. package/src/attributors/font-style.ts +6 -0
  28. package/src/attributors/index.ts +4 -0
  29. package/src/attributors/line-height.ts +6 -0
  30. package/src/attributors/text-indent.ts +6 -0
  31. package/src/config/base64-image.ts +8 -0
  32. package/src/config/editor.config.ts +88 -0
  33. package/src/config/editor.utils.ts +199 -0
  34. package/src/config/i18n/en-us.ts +106 -0
  35. package/src/config/i18n/zh-cn.ts +104 -0
  36. package/src/config/icons.config.ts +297 -0
  37. package/src/config/index.ts +171 -0
  38. package/src/config/types/additional-toolbar-item.interface.ts +8 -0
  39. package/src/config/types/content-change.interface.ts +13 -0
  40. package/src/config/types/content-save.interface.ts +6 -0
  41. package/src/config/types/counter-option.interface.ts +9 -0
  42. package/src/config/types/editor-config.interface.ts +22 -0
  43. package/src/config/types/editor-modules.interface.ts +41 -0
  44. package/src/config/types/file-operation.interface.ts +12 -0
  45. package/src/config/types/focus-change.interface.ts +4 -0
  46. package/src/config/types/fullscreen-module.interface.ts +4 -0
  47. package/src/config/types/help-panel-item.interface.ts +5 -0
  48. package/src/config/types/help-panel-option.interface.ts +7 -0
  49. package/src/config/types/image-module.interface.ts +3 -0
  50. package/src/config/types/image-upload.interface.ts +7 -0
  51. package/src/config/types/index.ts +22 -0
  52. package/src/config/types/load-on-demand-module.interface.ts +5 -0
  53. package/src/config/types/mention-module.interface.ts +8 -0
  54. package/src/config/types/paste-change.interface.ts +6 -0
  55. package/src/config/types/quick-menu-module.interface.ts +3 -0
  56. package/src/config/types/range.interface.ts +4 -0
  57. package/src/config/types/registry-options.interface.ts +5 -0
  58. package/src/config/types/selection-change.interface.ts +8 -0
  59. package/src/config/types/toolbar-item.interface.ts +13 -0
  60. package/src/config/types/type.ts +5 -0
  61. package/src/config/types/validate-error.interface.ts +11 -0
  62. package/src/counter/index.ts +69 -0
  63. package/src/custom-clipboard.ts +633 -0
  64. package/src/custom-image/BlotFormatter.ts +167 -0
  65. package/src/custom-image/Options.ts +150 -0
  66. package/src/custom-image/actions/Action.ts +13 -0
  67. package/src/custom-image/actions/CustomResizeAction.ts +207 -0
  68. package/src/custom-image/actions/DeleteAction.ts +29 -0
  69. package/src/custom-image/image.ts +118 -0
  70. package/src/custom-image/specs/BlotSpec.ts +30 -0
  71. package/src/custom-image/specs/CustomImageSpec.ts +139 -0
  72. package/src/custom-image/specs/ImageSpec.ts +33 -0
  73. package/src/custom-uploader.ts +199 -0
  74. package/src/emoji/emoji-list/index.ts +1 -0
  75. package/src/emoji/emoji-list/people.ts +111 -0
  76. package/src/emoji/emoji-list.ts +9 -0
  77. package/src/emoji/emoji-map.ts +9 -0
  78. package/src/emoji/formats/emoji-blot.ts +54 -0
  79. package/src/emoji/index.ts +5 -0
  80. package/src/emoji/modules/emoji.ts +318 -0
  81. package/src/emoji/modules/toolbar-emoji.ts +182 -0
  82. package/src/emoji/utils.ts +15 -0
  83. package/src/file/formats/file.ts +67 -0
  84. package/src/file/index.ts +38 -0
  85. package/src/file/modules/file-bar.ts +146 -0
  86. package/src/fluent-editor.ts +164 -0
  87. package/src/format-painter/index.ts +79 -0
  88. package/src/global-link/constants.ts +3 -0
  89. package/src/global-link/formats/customer-widget-link.ts +36 -0
  90. package/src/global-link/formats/doc-link.ts +55 -0
  91. package/src/global-link/formats/wiki-link.ts +45 -0
  92. package/src/global-link/formats/work-item-link.ts +47 -0
  93. package/src/global-link/global-link-panel.ts +20 -0
  94. package/src/global-link/index.ts +165 -0
  95. package/src/global-link/utils/createTable.ts +54 -0
  96. package/src/index.ts +5 -0
  97. package/src/link/formats/link.ts +44 -0
  98. package/src/link/index.ts +35 -0
  99. package/src/link/modules/tooltip.ts +318 -0
  100. package/src/mention/Mention.ts +406 -0
  101. package/src/mention/MentionLink.ts +51 -0
  102. package/src/mention/constants.ts +3 -0
  103. package/src/quick-menu/index.ts +100 -0
  104. package/src/screenshot/index.ts +231 -0
  105. package/src/soft-break/index.ts +34 -0
  106. package/src/strike/index.ts +16 -0
  107. package/src/syntax/index.ts +35 -0
  108. package/src/table/better-table.ts +553 -0
  109. package/src/table/formats/header.ts +129 -0
  110. package/src/table/formats/list.ts +229 -0
  111. package/src/table/formats/table.ts +1272 -0
  112. package/src/table/modules/table-column-tool.ts +492 -0
  113. package/src/table/modules/table-operation-menu.ts +584 -0
  114. package/src/table/modules/table-scroll-bar.ts +248 -0
  115. package/src/table/modules/table-selection.ts +387 -0
  116. package/src/table/table-config.ts +42 -0
  117. package/src/table/utils/index.ts +62 -0
  118. package/src/table/utils/node-matchers.ts +359 -0
  119. package/src/toolbar/better-picker.ts +370 -0
  120. package/src/toolbar/index.ts +180 -0
  121. package/src/utils/debounce.ts +149 -0
  122. package/src/utils/image.ts +22 -0
  123. package/src/utils/method.ts +82 -0
  124. package/src/utils/scroll-lock.ts +52 -0
  125. package/src/video/index.ts +62 -0
  126. package/tsconfig.json +26 -0
  127. package/vite.config.theme.ts +20 -0
  128. package/vite.config.ts +56 -0
  129. /package/{README.md → dist/README.md} +0 -0
  130. /package/{es → dist/es}/attributors/font-size.es.js +0 -0
  131. /package/{es → dist/es}/attributors/font-size.es.js.map +0 -0
  132. /package/{es → dist/es}/attributors/font-style.es.js +0 -0
  133. /package/{es → dist/es}/attributors/font-style.es.js.map +0 -0
  134. /package/{es → dist/es}/attributors/index.es.js +0 -0
  135. /package/{es → dist/es}/attributors/index.es.js.map +0 -0
  136. /package/{es → dist/es}/attributors/line-height.es.js +0 -0
  137. /package/{es → dist/es}/attributors/line-height.es.js.map +0 -0
  138. /package/{es → dist/es}/attributors/text-indent.es.js +0 -0
  139. /package/{es → dist/es}/attributors/text-indent.es.js.map +0 -0
  140. /package/{es → dist/es}/config/base64-image.es.js +0 -0
  141. /package/{es → dist/es}/config/base64-image.es.js.map +0 -0
  142. /package/{es → dist/es}/config/editor.config.es.js +0 -0
  143. /package/{es → dist/es}/config/editor.config.es.js.map +0 -0
  144. /package/{es → dist/es}/config/editor.utils.es.js +0 -0
  145. /package/{es → dist/es}/config/editor.utils.es.js.map +0 -0
  146. /package/{es → dist/es}/config/i18n/en-us.es.js +0 -0
  147. /package/{es → dist/es}/config/i18n/en-us.es.js.map +0 -0
  148. /package/{es → dist/es}/config/i18n/zh-cn.es.js +0 -0
  149. /package/{es → dist/es}/config/i18n/zh-cn.es.js.map +0 -0
  150. /package/{es → dist/es}/config/icons.config.es.js +0 -0
  151. /package/{es → dist/es}/config/icons.config.es.js.map +0 -0
  152. /package/{es → dist/es}/config/index.es.js +0 -0
  153. /package/{es → dist/es}/config/index.es.js.map +0 -0
  154. /package/{es → dist/es}/config/types/additional-toolbar-item.interface.es.js +0 -0
  155. /package/{es → dist/es}/config/types/additional-toolbar-item.interface.es.js.map +0 -0
  156. /package/{es → dist/es}/config/types/content-change.interface.es.js +0 -0
  157. /package/{es → dist/es}/config/types/content-change.interface.es.js.map +0 -0
  158. /package/{es → dist/es}/config/types/content-save.interface.es.js +0 -0
  159. /package/{es → dist/es}/config/types/content-save.interface.es.js.map +0 -0
  160. /package/{es → dist/es}/config/types/counter-option.interface.es.js +0 -0
  161. /package/{es → dist/es}/config/types/counter-option.interface.es.js.map +0 -0
  162. /package/{es → dist/es}/config/types/editor-config.interface.es.js +0 -0
  163. /package/{es → dist/es}/config/types/editor-config.interface.es.js.map +0 -0
  164. /package/{es → dist/es}/config/types/editor-modules.interface.es.js +0 -0
  165. /package/{es → dist/es}/config/types/editor-modules.interface.es.js.map +0 -0
  166. /package/{es → dist/es}/config/types/file-operation.interface.es.js +0 -0
  167. /package/{es → dist/es}/config/types/file-operation.interface.es.js.map +0 -0
  168. /package/{es → dist/es}/config/types/focus-change.interface.es.js +0 -0
  169. /package/{es → dist/es}/config/types/focus-change.interface.es.js.map +0 -0
  170. /package/{es → dist/es}/config/types/fullscreen-module.interface.es.js +0 -0
  171. /package/{es → dist/es}/config/types/fullscreen-module.interface.es.js.map +0 -0
  172. /package/{es → dist/es}/config/types/help-panel-item.interface.es.js +0 -0
  173. /package/{es → dist/es}/config/types/help-panel-item.interface.es.js.map +0 -0
  174. /package/{es → dist/es}/config/types/help-panel-option.interface.es.js +0 -0
  175. /package/{es → dist/es}/config/types/help-panel-option.interface.es.js.map +0 -0
  176. /package/{es → dist/es}/config/types/image-module.interface.es.js +0 -0
  177. /package/{es → dist/es}/config/types/image-module.interface.es.js.map +0 -0
  178. /package/{es → dist/es}/config/types/image-upload.interface.es.js +0 -0
  179. /package/{es → dist/es}/config/types/image-upload.interface.es.js.map +0 -0
  180. /package/{es → dist/es}/config/types/index.es.js +0 -0
  181. /package/{es → dist/es}/config/types/index.es.js.map +0 -0
  182. /package/{es → dist/es}/config/types/load-on-demand-module.interface.es.js +0 -0
  183. /package/{es → dist/es}/config/types/load-on-demand-module.interface.es.js.map +0 -0
  184. /package/{es → dist/es}/config/types/mention-module.interface.es.js +0 -0
  185. /package/{es → dist/es}/config/types/mention-module.interface.es.js.map +0 -0
  186. /package/{es → dist/es}/config/types/paste-change.interface.es.js +0 -0
  187. /package/{es → dist/es}/config/types/paste-change.interface.es.js.map +0 -0
  188. /package/{es → dist/es}/config/types/quick-menu-module.interface.es.js +0 -0
  189. /package/{es → dist/es}/config/types/quick-menu-module.interface.es.js.map +0 -0
  190. /package/{es → dist/es}/config/types/range.interface.es.js +0 -0
  191. /package/{es → dist/es}/config/types/range.interface.es.js.map +0 -0
  192. /package/{es → dist/es}/config/types/registry-options.interface.es.js +0 -0
  193. /package/{es → dist/es}/config/types/registry-options.interface.es.js.map +0 -0
  194. /package/{es → dist/es}/config/types/selection-change.interface.es.js +0 -0
  195. /package/{es → dist/es}/config/types/selection-change.interface.es.js.map +0 -0
  196. /package/{es → dist/es}/config/types/toolbar-item.interface.es.js +0 -0
  197. /package/{es → dist/es}/config/types/toolbar-item.interface.es.js.map +0 -0
  198. /package/{es → dist/es}/config/types/type.es.js +0 -0
  199. /package/{es → dist/es}/config/types/type.es.js.map +0 -0
  200. /package/{es → dist/es}/config/types/validate-error.interface.es.js +0 -0
  201. /package/{es → dist/es}/config/types/validate-error.interface.es.js.map +0 -0
  202. /package/{es → dist/es}/counter/index.es.js +0 -0
  203. /package/{es → dist/es}/counter/index.es.js.map +0 -0
  204. /package/{es → dist/es}/custom-clipboard.es.js +0 -0
  205. /package/{es → dist/es}/custom-clipboard.es.js.map +0 -0
  206. /package/{es → dist/es}/custom-image/BlotFormatter.es.js +0 -0
  207. /package/{es → dist/es}/custom-image/BlotFormatter.es.js.map +0 -0
  208. /package/{es → dist/es}/custom-image/Options.es.js +0 -0
  209. /package/{es → dist/es}/custom-image/Options.es.js.map +0 -0
  210. /package/{es → dist/es}/custom-image/actions/Action.es.js +0 -0
  211. /package/{es → dist/es}/custom-image/actions/Action.es.js.map +0 -0
  212. /package/{es → dist/es}/custom-image/actions/CustomResizeAction.es.js +0 -0
  213. /package/{es → dist/es}/custom-image/actions/CustomResizeAction.es.js.map +0 -0
  214. /package/{es → dist/es}/custom-image/actions/DeleteAction.es.js +0 -0
  215. /package/{es → dist/es}/custom-image/actions/DeleteAction.es.js.map +0 -0
  216. /package/{es → dist/es}/custom-image/image.es.js +0 -0
  217. /package/{es → dist/es}/custom-image/image.es.js.map +0 -0
  218. /package/{es → dist/es}/custom-image/specs/BlotSpec.es.js +0 -0
  219. /package/{es → dist/es}/custom-image/specs/BlotSpec.es.js.map +0 -0
  220. /package/{es → dist/es}/custom-image/specs/CustomImageSpec.es.js +0 -0
  221. /package/{es → dist/es}/custom-image/specs/CustomImageSpec.es.js.map +0 -0
  222. /package/{es → dist/es}/custom-image/specs/ImageSpec.es.js +0 -0
  223. /package/{es → dist/es}/custom-image/specs/ImageSpec.es.js.map +0 -0
  224. /package/{es → dist/es}/custom-uploader.es.js +0 -0
  225. /package/{es → dist/es}/custom-uploader.es.js.map +0 -0
  226. /package/{es → dist/es}/emoji/emoji-list/index.es.js +0 -0
  227. /package/{es → dist/es}/emoji/emoji-list/index.es.js.map +0 -0
  228. /package/{es → dist/es}/emoji/emoji-list/people.es.js +0 -0
  229. /package/{es → dist/es}/emoji/emoji-list/people.es.js.map +0 -0
  230. /package/{es → dist/es}/emoji/emoji-list.es.js +0 -0
  231. /package/{es → dist/es}/emoji/emoji-list.es.js.map +0 -0
  232. /package/{es → dist/es}/emoji/emoji-map.es.js +0 -0
  233. /package/{es → dist/es}/emoji/emoji-map.es.js.map +0 -0
  234. /package/{es → dist/es}/emoji/formats/emoji-blot.es.js +0 -0
  235. /package/{es → dist/es}/emoji/formats/emoji-blot.es.js.map +0 -0
  236. /package/{es → dist/es}/emoji/index.es.js +0 -0
  237. /package/{es → dist/es}/emoji/index.es.js.map +0 -0
  238. /package/{es → dist/es}/emoji/modules/emoji.es.js +0 -0
  239. /package/{es → dist/es}/emoji/modules/emoji.es.js.map +0 -0
  240. /package/{es → dist/es}/emoji/modules/toolbar-emoji.es.js +0 -0
  241. /package/{es → dist/es}/emoji/modules/toolbar-emoji.es.js.map +0 -0
  242. /package/{es → dist/es}/emoji/utils.es.js +0 -0
  243. /package/{es → dist/es}/emoji/utils.es.js.map +0 -0
  244. /package/{es → dist/es}/file/formats/file.es.js +0 -0
  245. /package/{es → dist/es}/file/formats/file.es.js.map +0 -0
  246. /package/{es → dist/es}/file/index.es.js +0 -0
  247. /package/{es → dist/es}/file/index.es.js.map +0 -0
  248. /package/{es → dist/es}/file/modules/file-bar.es.js +0 -0
  249. /package/{es → dist/es}/file/modules/file-bar.es.js.map +0 -0
  250. /package/{es → dist/es}/fluent-editor.es.js +0 -0
  251. /package/{es → dist/es}/fluent-editor.es.js.map +0 -0
  252. /package/{es → dist/es}/format-painter/index.es.js +0 -0
  253. /package/{es → dist/es}/format-painter/index.es.js.map +0 -0
  254. /package/{es → dist/es}/global-link/constants.es.js +0 -0
  255. /package/{es → dist/es}/global-link/constants.es.js.map +0 -0
  256. /package/{es → dist/es}/global-link/formats/customer-widget-link.es.js +0 -0
  257. /package/{es → dist/es}/global-link/formats/customer-widget-link.es.js.map +0 -0
  258. /package/{es → dist/es}/global-link/formats/doc-link.es.js +0 -0
  259. /package/{es → dist/es}/global-link/formats/doc-link.es.js.map +0 -0
  260. /package/{es → dist/es}/global-link/formats/wiki-link.es.js +0 -0
  261. /package/{es → dist/es}/global-link/formats/wiki-link.es.js.map +0 -0
  262. /package/{es → dist/es}/global-link/formats/work-item-link.es.js +0 -0
  263. /package/{es → dist/es}/global-link/formats/work-item-link.es.js.map +0 -0
  264. /package/{es → dist/es}/global-link/global-link-panel.es.js +0 -0
  265. /package/{es → dist/es}/global-link/global-link-panel.es.js.map +0 -0
  266. /package/{es → dist/es}/global-link/index.es.js +0 -0
  267. /package/{es → dist/es}/global-link/index.es.js.map +0 -0
  268. /package/{es → dist/es}/global-link/utils/createTable.es.js +0 -0
  269. /package/{es → dist/es}/global-link/utils/createTable.es.js.map +0 -0
  270. /package/{es → dist/es}/index.es.js +0 -0
  271. /package/{es → dist/es}/index.es.js.map +0 -0
  272. /package/{es → dist/es}/link/formats/link.es.js +0 -0
  273. /package/{es → dist/es}/link/formats/link.es.js.map +0 -0
  274. /package/{es → dist/es}/link/index.es.js +0 -0
  275. /package/{es → dist/es}/link/index.es.js.map +0 -0
  276. /package/{es → dist/es}/link/modules/tooltip.es.js +0 -0
  277. /package/{es → dist/es}/link/modules/tooltip.es.js.map +0 -0
  278. /package/{es → dist/es}/mention/Mention.es.js +0 -0
  279. /package/{es → dist/es}/mention/Mention.es.js.map +0 -0
  280. /package/{es → dist/es}/mention/MentionLink.es.js +0 -0
  281. /package/{es → dist/es}/mention/MentionLink.es.js.map +0 -0
  282. /package/{es → dist/es}/mention/constants.es.js +0 -0
  283. /package/{es → dist/es}/mention/constants.es.js.map +0 -0
  284. /package/{es → dist/es}/quick-menu/index.es.js +0 -0
  285. /package/{es → dist/es}/quick-menu/index.es.js.map +0 -0
  286. /package/{es → dist/es}/screenshot/index.es.js +0 -0
  287. /package/{es → dist/es}/screenshot/index.es.js.map +0 -0
  288. /package/{es → dist/es}/soft-break/index.es.js +0 -0
  289. /package/{es → dist/es}/soft-break/index.es.js.map +0 -0
  290. /package/{es → dist/es}/strike/index.es.js +0 -0
  291. /package/{es → dist/es}/strike/index.es.js.map +0 -0
  292. /package/{es → dist/es}/syntax/index.es.js +0 -0
  293. /package/{es → dist/es}/syntax/index.es.js.map +0 -0
  294. /package/{es → dist/es}/table/better-table.es.js +0 -0
  295. /package/{es → dist/es}/table/better-table.es.js.map +0 -0
  296. /package/{es → dist/es}/table/formats/header.es.js +0 -0
  297. /package/{es → dist/es}/table/formats/header.es.js.map +0 -0
  298. /package/{es → dist/es}/table/formats/list.es.js +0 -0
  299. /package/{es → dist/es}/table/formats/list.es.js.map +0 -0
  300. /package/{es → dist/es}/table/formats/table.es.js +0 -0
  301. /package/{es → dist/es}/table/formats/table.es.js.map +0 -0
  302. /package/{es → dist/es}/table/modules/table-column-tool.es.js +0 -0
  303. /package/{es → dist/es}/table/modules/table-column-tool.es.js.map +0 -0
  304. /package/{es → dist/es}/table/modules/table-operation-menu.es.js +0 -0
  305. /package/{es → dist/es}/table/modules/table-operation-menu.es.js.map +0 -0
  306. /package/{es → dist/es}/table/modules/table-scroll-bar.es.js +0 -0
  307. /package/{es → dist/es}/table/modules/table-scroll-bar.es.js.map +0 -0
  308. /package/{es → dist/es}/table/modules/table-selection.es.js +0 -0
  309. /package/{es → dist/es}/table/modules/table-selection.es.js.map +0 -0
  310. /package/{es → dist/es}/table/table-config.es.js +0 -0
  311. /package/{es → dist/es}/table/table-config.es.js.map +0 -0
  312. /package/{es → dist/es}/table/utils/index.es.js +0 -0
  313. /package/{es → dist/es}/table/utils/index.es.js.map +0 -0
  314. /package/{es → dist/es}/table/utils/node-matchers.es.js +0 -0
  315. /package/{es → dist/es}/table/utils/node-matchers.es.js.map +0 -0
  316. /package/{es → dist/es}/toolbar/better-picker.es.js +0 -0
  317. /package/{es → dist/es}/toolbar/better-picker.es.js.map +0 -0
  318. /package/{es → dist/es}/toolbar/index.es.js +0 -0
  319. /package/{es → dist/es}/toolbar/index.es.js.map +0 -0
  320. /package/{es → dist/es}/utils/debounce.es.js +0 -0
  321. /package/{es → dist/es}/utils/debounce.es.js.map +0 -0
  322. /package/{es → dist/es}/utils/image.es.js +0 -0
  323. /package/{es → dist/es}/utils/image.es.js.map +0 -0
  324. /package/{es → dist/es}/utils/method.es.js +0 -0
  325. /package/{es → dist/es}/utils/method.es.js.map +0 -0
  326. /package/{es → dist/es}/utils/scroll-lock.es.js +0 -0
  327. /package/{es → dist/es}/utils/scroll-lock.es.js.map +0 -0
  328. /package/{es → dist/es}/video/index.es.js +0 -0
  329. /package/{es → dist/es}/video/index.es.js.map +0 -0
  330. /package/{lib → dist/lib}/attributors/font-size.cjs.js +0 -0
  331. /package/{lib → dist/lib}/attributors/font-size.cjs.js.map +0 -0
  332. /package/{lib → dist/lib}/attributors/font-style.cjs.js +0 -0
  333. /package/{lib → dist/lib}/attributors/font-style.cjs.js.map +0 -0
  334. /package/{lib → dist/lib}/attributors/index.cjs.js +0 -0
  335. /package/{lib → dist/lib}/attributors/index.cjs.js.map +0 -0
  336. /package/{lib → dist/lib}/attributors/line-height.cjs.js +0 -0
  337. /package/{lib → dist/lib}/attributors/line-height.cjs.js.map +0 -0
  338. /package/{lib → dist/lib}/attributors/text-indent.cjs.js +0 -0
  339. /package/{lib → dist/lib}/attributors/text-indent.cjs.js.map +0 -0
  340. /package/{lib → dist/lib}/config/base64-image.cjs.js +0 -0
  341. /package/{lib → dist/lib}/config/base64-image.cjs.js.map +0 -0
  342. /package/{lib → dist/lib}/config/editor.config.cjs.js +0 -0
  343. /package/{lib → dist/lib}/config/editor.config.cjs.js.map +0 -0
  344. /package/{lib → dist/lib}/config/editor.utils.cjs.js +0 -0
  345. /package/{lib → dist/lib}/config/editor.utils.cjs.js.map +0 -0
  346. /package/{lib → dist/lib}/config/i18n/en-us.cjs.js +0 -0
  347. /package/{lib → dist/lib}/config/i18n/en-us.cjs.js.map +0 -0
  348. /package/{lib → dist/lib}/config/i18n/zh-cn.cjs.js +0 -0
  349. /package/{lib → dist/lib}/config/i18n/zh-cn.cjs.js.map +0 -0
  350. /package/{lib → dist/lib}/config/icons.config.cjs.js +0 -0
  351. /package/{lib → dist/lib}/config/icons.config.cjs.js.map +0 -0
  352. /package/{lib → dist/lib}/config/index.cjs.js +0 -0
  353. /package/{lib → dist/lib}/config/index.cjs.js.map +0 -0
  354. /package/{lib → dist/lib}/config/types/additional-toolbar-item.interface.cjs.js +0 -0
  355. /package/{lib → dist/lib}/config/types/additional-toolbar-item.interface.cjs.js.map +0 -0
  356. /package/{lib → dist/lib}/config/types/content-change.interface.cjs.js +0 -0
  357. /package/{lib → dist/lib}/config/types/content-change.interface.cjs.js.map +0 -0
  358. /package/{lib → dist/lib}/config/types/content-save.interface.cjs.js +0 -0
  359. /package/{lib → dist/lib}/config/types/content-save.interface.cjs.js.map +0 -0
  360. /package/{lib → dist/lib}/config/types/counter-option.interface.cjs.js +0 -0
  361. /package/{lib → dist/lib}/config/types/counter-option.interface.cjs.js.map +0 -0
  362. /package/{lib → dist/lib}/config/types/editor-config.interface.cjs.js +0 -0
  363. /package/{lib → dist/lib}/config/types/editor-config.interface.cjs.js.map +0 -0
  364. /package/{lib → dist/lib}/config/types/editor-modules.interface.cjs.js +0 -0
  365. /package/{lib → dist/lib}/config/types/editor-modules.interface.cjs.js.map +0 -0
  366. /package/{lib → dist/lib}/config/types/file-operation.interface.cjs.js +0 -0
  367. /package/{lib → dist/lib}/config/types/file-operation.interface.cjs.js.map +0 -0
  368. /package/{lib → dist/lib}/config/types/focus-change.interface.cjs.js +0 -0
  369. /package/{lib → dist/lib}/config/types/focus-change.interface.cjs.js.map +0 -0
  370. /package/{lib → dist/lib}/config/types/fullscreen-module.interface.cjs.js +0 -0
  371. /package/{lib → dist/lib}/config/types/fullscreen-module.interface.cjs.js.map +0 -0
  372. /package/{lib → dist/lib}/config/types/help-panel-item.interface.cjs.js +0 -0
  373. /package/{lib → dist/lib}/config/types/help-panel-item.interface.cjs.js.map +0 -0
  374. /package/{lib → dist/lib}/config/types/help-panel-option.interface.cjs.js +0 -0
  375. /package/{lib → dist/lib}/config/types/help-panel-option.interface.cjs.js.map +0 -0
  376. /package/{lib → dist/lib}/config/types/image-module.interface.cjs.js +0 -0
  377. /package/{lib → dist/lib}/config/types/image-module.interface.cjs.js.map +0 -0
  378. /package/{lib → dist/lib}/config/types/image-upload.interface.cjs.js +0 -0
  379. /package/{lib → dist/lib}/config/types/image-upload.interface.cjs.js.map +0 -0
  380. /package/{lib → dist/lib}/config/types/index.cjs.js +0 -0
  381. /package/{lib → dist/lib}/config/types/index.cjs.js.map +0 -0
  382. /package/{lib → dist/lib}/config/types/load-on-demand-module.interface.cjs.js +0 -0
  383. /package/{lib → dist/lib}/config/types/load-on-demand-module.interface.cjs.js.map +0 -0
  384. /package/{lib → dist/lib}/config/types/mention-module.interface.cjs.js +0 -0
  385. /package/{lib → dist/lib}/config/types/mention-module.interface.cjs.js.map +0 -0
  386. /package/{lib → dist/lib}/config/types/paste-change.interface.cjs.js +0 -0
  387. /package/{lib → dist/lib}/config/types/paste-change.interface.cjs.js.map +0 -0
  388. /package/{lib → dist/lib}/config/types/quick-menu-module.interface.cjs.js +0 -0
  389. /package/{lib → dist/lib}/config/types/quick-menu-module.interface.cjs.js.map +0 -0
  390. /package/{lib → dist/lib}/config/types/range.interface.cjs.js +0 -0
  391. /package/{lib → dist/lib}/config/types/range.interface.cjs.js.map +0 -0
  392. /package/{lib → dist/lib}/config/types/registry-options.interface.cjs.js +0 -0
  393. /package/{lib → dist/lib}/config/types/registry-options.interface.cjs.js.map +0 -0
  394. /package/{lib → dist/lib}/config/types/selection-change.interface.cjs.js +0 -0
  395. /package/{lib → dist/lib}/config/types/selection-change.interface.cjs.js.map +0 -0
  396. /package/{lib → dist/lib}/config/types/toolbar-item.interface.cjs.js +0 -0
  397. /package/{lib → dist/lib}/config/types/toolbar-item.interface.cjs.js.map +0 -0
  398. /package/{lib → dist/lib}/config/types/type.cjs.js +0 -0
  399. /package/{lib → dist/lib}/config/types/type.cjs.js.map +0 -0
  400. /package/{lib → dist/lib}/config/types/validate-error.interface.cjs.js +0 -0
  401. /package/{lib → dist/lib}/config/types/validate-error.interface.cjs.js.map +0 -0
  402. /package/{lib → dist/lib}/counter/index.cjs.js +0 -0
  403. /package/{lib → dist/lib}/counter/index.cjs.js.map +0 -0
  404. /package/{lib → dist/lib}/custom-clipboard.cjs.js +0 -0
  405. /package/{lib → dist/lib}/custom-clipboard.cjs.js.map +0 -0
  406. /package/{lib → dist/lib}/custom-image/BlotFormatter.cjs.js +0 -0
  407. /package/{lib → dist/lib}/custom-image/BlotFormatter.cjs.js.map +0 -0
  408. /package/{lib → dist/lib}/custom-image/Options.cjs.js +0 -0
  409. /package/{lib → dist/lib}/custom-image/Options.cjs.js.map +0 -0
  410. /package/{lib → dist/lib}/custom-image/actions/Action.cjs.js +0 -0
  411. /package/{lib → dist/lib}/custom-image/actions/Action.cjs.js.map +0 -0
  412. /package/{lib → dist/lib}/custom-image/actions/CustomResizeAction.cjs.js +0 -0
  413. /package/{lib → dist/lib}/custom-image/actions/CustomResizeAction.cjs.js.map +0 -0
  414. /package/{lib → dist/lib}/custom-image/actions/DeleteAction.cjs.js +0 -0
  415. /package/{lib → dist/lib}/custom-image/actions/DeleteAction.cjs.js.map +0 -0
  416. /package/{lib → dist/lib}/custom-image/image.cjs.js +0 -0
  417. /package/{lib → dist/lib}/custom-image/image.cjs.js.map +0 -0
  418. /package/{lib → dist/lib}/custom-image/specs/BlotSpec.cjs.js +0 -0
  419. /package/{lib → dist/lib}/custom-image/specs/BlotSpec.cjs.js.map +0 -0
  420. /package/{lib → dist/lib}/custom-image/specs/CustomImageSpec.cjs.js +0 -0
  421. /package/{lib → dist/lib}/custom-image/specs/CustomImageSpec.cjs.js.map +0 -0
  422. /package/{lib → dist/lib}/custom-image/specs/ImageSpec.cjs.js +0 -0
  423. /package/{lib → dist/lib}/custom-image/specs/ImageSpec.cjs.js.map +0 -0
  424. /package/{lib → dist/lib}/custom-uploader.cjs.js +0 -0
  425. /package/{lib → dist/lib}/custom-uploader.cjs.js.map +0 -0
  426. /package/{lib → dist/lib}/emoji/emoji-list/index.cjs.js +0 -0
  427. /package/{lib → dist/lib}/emoji/emoji-list/index.cjs.js.map +0 -0
  428. /package/{lib → dist/lib}/emoji/emoji-list/people.cjs.js +0 -0
  429. /package/{lib → dist/lib}/emoji/emoji-list/people.cjs.js.map +0 -0
  430. /package/{lib → dist/lib}/emoji/emoji-list.cjs.js +0 -0
  431. /package/{lib → dist/lib}/emoji/emoji-list.cjs.js.map +0 -0
  432. /package/{lib → dist/lib}/emoji/emoji-map.cjs.js +0 -0
  433. /package/{lib → dist/lib}/emoji/emoji-map.cjs.js.map +0 -0
  434. /package/{lib → dist/lib}/emoji/formats/emoji-blot.cjs.js +0 -0
  435. /package/{lib → dist/lib}/emoji/formats/emoji-blot.cjs.js.map +0 -0
  436. /package/{lib → dist/lib}/emoji/index.cjs.js +0 -0
  437. /package/{lib → dist/lib}/emoji/index.cjs.js.map +0 -0
  438. /package/{lib → dist/lib}/emoji/modules/emoji.cjs.js +0 -0
  439. /package/{lib → dist/lib}/emoji/modules/emoji.cjs.js.map +0 -0
  440. /package/{lib → dist/lib}/emoji/modules/toolbar-emoji.cjs.js +0 -0
  441. /package/{lib → dist/lib}/emoji/modules/toolbar-emoji.cjs.js.map +0 -0
  442. /package/{lib → dist/lib}/emoji/utils.cjs.js +0 -0
  443. /package/{lib → dist/lib}/emoji/utils.cjs.js.map +0 -0
  444. /package/{lib → dist/lib}/file/formats/file.cjs.js +0 -0
  445. /package/{lib → dist/lib}/file/formats/file.cjs.js.map +0 -0
  446. /package/{lib → dist/lib}/file/index.cjs.js +0 -0
  447. /package/{lib → dist/lib}/file/index.cjs.js.map +0 -0
  448. /package/{lib → dist/lib}/file/modules/file-bar.cjs.js +0 -0
  449. /package/{lib → dist/lib}/file/modules/file-bar.cjs.js.map +0 -0
  450. /package/{lib → dist/lib}/fluent-editor.cjs.js +0 -0
  451. /package/{lib → dist/lib}/fluent-editor.cjs.js.map +0 -0
  452. /package/{lib → dist/lib}/format-painter/index.cjs.js +0 -0
  453. /package/{lib → dist/lib}/format-painter/index.cjs.js.map +0 -0
  454. /package/{lib → dist/lib}/global-link/constants.cjs.js +0 -0
  455. /package/{lib → dist/lib}/global-link/constants.cjs.js.map +0 -0
  456. /package/{lib → dist/lib}/global-link/formats/customer-widget-link.cjs.js +0 -0
  457. /package/{lib → dist/lib}/global-link/formats/customer-widget-link.cjs.js.map +0 -0
  458. /package/{lib → dist/lib}/global-link/formats/doc-link.cjs.js +0 -0
  459. /package/{lib → dist/lib}/global-link/formats/doc-link.cjs.js.map +0 -0
  460. /package/{lib → dist/lib}/global-link/formats/wiki-link.cjs.js +0 -0
  461. /package/{lib → dist/lib}/global-link/formats/wiki-link.cjs.js.map +0 -0
  462. /package/{lib → dist/lib}/global-link/formats/work-item-link.cjs.js +0 -0
  463. /package/{lib → dist/lib}/global-link/formats/work-item-link.cjs.js.map +0 -0
  464. /package/{lib → dist/lib}/global-link/global-link-panel.cjs.js +0 -0
  465. /package/{lib → dist/lib}/global-link/global-link-panel.cjs.js.map +0 -0
  466. /package/{lib → dist/lib}/global-link/index.cjs.js +0 -0
  467. /package/{lib → dist/lib}/global-link/index.cjs.js.map +0 -0
  468. /package/{lib → dist/lib}/global-link/utils/createTable.cjs.js +0 -0
  469. /package/{lib → dist/lib}/global-link/utils/createTable.cjs.js.map +0 -0
  470. /package/{lib → dist/lib}/index.cjs.js +0 -0
  471. /package/{lib → dist/lib}/index.cjs.js.map +0 -0
  472. /package/{lib → dist/lib}/link/formats/link.cjs.js +0 -0
  473. /package/{lib → dist/lib}/link/formats/link.cjs.js.map +0 -0
  474. /package/{lib → dist/lib}/link/index.cjs.js +0 -0
  475. /package/{lib → dist/lib}/link/index.cjs.js.map +0 -0
  476. /package/{lib → dist/lib}/link/modules/tooltip.cjs.js +0 -0
  477. /package/{lib → dist/lib}/link/modules/tooltip.cjs.js.map +0 -0
  478. /package/{lib → dist/lib}/mention/Mention.cjs.js +0 -0
  479. /package/{lib → dist/lib}/mention/Mention.cjs.js.map +0 -0
  480. /package/{lib → dist/lib}/mention/MentionLink.cjs.js +0 -0
  481. /package/{lib → dist/lib}/mention/MentionLink.cjs.js.map +0 -0
  482. /package/{lib → dist/lib}/mention/constants.cjs.js +0 -0
  483. /package/{lib → dist/lib}/mention/constants.cjs.js.map +0 -0
  484. /package/{lib → dist/lib}/quick-menu/index.cjs.js +0 -0
  485. /package/{lib → dist/lib}/quick-menu/index.cjs.js.map +0 -0
  486. /package/{lib → dist/lib}/screenshot/index.cjs.js +0 -0
  487. /package/{lib → dist/lib}/screenshot/index.cjs.js.map +0 -0
  488. /package/{lib → dist/lib}/soft-break/index.cjs.js +0 -0
  489. /package/{lib → dist/lib}/soft-break/index.cjs.js.map +0 -0
  490. /package/{lib → dist/lib}/strike/index.cjs.js +0 -0
  491. /package/{lib → dist/lib}/strike/index.cjs.js.map +0 -0
  492. /package/{lib → dist/lib}/syntax/index.cjs.js +0 -0
  493. /package/{lib → dist/lib}/syntax/index.cjs.js.map +0 -0
  494. /package/{lib → dist/lib}/table/better-table.cjs.js +0 -0
  495. /package/{lib → dist/lib}/table/better-table.cjs.js.map +0 -0
  496. /package/{lib → dist/lib}/table/formats/header.cjs.js +0 -0
  497. /package/{lib → dist/lib}/table/formats/header.cjs.js.map +0 -0
  498. /package/{lib → dist/lib}/table/formats/list.cjs.js +0 -0
  499. /package/{lib → dist/lib}/table/formats/list.cjs.js.map +0 -0
  500. /package/{lib → dist/lib}/table/formats/table.cjs.js +0 -0
  501. /package/{lib → dist/lib}/table/formats/table.cjs.js.map +0 -0
  502. /package/{lib → dist/lib}/table/modules/table-column-tool.cjs.js +0 -0
  503. /package/{lib → dist/lib}/table/modules/table-column-tool.cjs.js.map +0 -0
  504. /package/{lib → dist/lib}/table/modules/table-operation-menu.cjs.js +0 -0
  505. /package/{lib → dist/lib}/table/modules/table-operation-menu.cjs.js.map +0 -0
  506. /package/{lib → dist/lib}/table/modules/table-scroll-bar.cjs.js +0 -0
  507. /package/{lib → dist/lib}/table/modules/table-scroll-bar.cjs.js.map +0 -0
  508. /package/{lib → dist/lib}/table/modules/table-selection.cjs.js +0 -0
  509. /package/{lib → dist/lib}/table/modules/table-selection.cjs.js.map +0 -0
  510. /package/{lib → dist/lib}/table/table-config.cjs.js +0 -0
  511. /package/{lib → dist/lib}/table/table-config.cjs.js.map +0 -0
  512. /package/{lib → dist/lib}/table/utils/index.cjs.js +0 -0
  513. /package/{lib → dist/lib}/table/utils/index.cjs.js.map +0 -0
  514. /package/{lib → dist/lib}/table/utils/node-matchers.cjs.js +0 -0
  515. /package/{lib → dist/lib}/table/utils/node-matchers.cjs.js.map +0 -0
  516. /package/{lib → dist/lib}/toolbar/better-picker.cjs.js +0 -0
  517. /package/{lib → dist/lib}/toolbar/better-picker.cjs.js.map +0 -0
  518. /package/{lib → dist/lib}/toolbar/index.cjs.js +0 -0
  519. /package/{lib → dist/lib}/toolbar/index.cjs.js.map +0 -0
  520. /package/{lib → dist/lib}/utils/debounce.cjs.js +0 -0
  521. /package/{lib → dist/lib}/utils/debounce.cjs.js.map +0 -0
  522. /package/{lib → dist/lib}/utils/image.cjs.js +0 -0
  523. /package/{lib → dist/lib}/utils/image.cjs.js.map +0 -0
  524. /package/{lib → dist/lib}/utils/method.cjs.js +0 -0
  525. /package/{lib → dist/lib}/utils/method.cjs.js.map +0 -0
  526. /package/{lib → dist/lib}/utils/scroll-lock.cjs.js +0 -0
  527. /package/{lib → dist/lib}/utils/scroll-lock.cjs.js.map +0 -0
  528. /package/{lib → dist/lib}/video/index.cjs.js +0 -0
  529. /package/{lib → dist/lib}/video/index.cjs.js.map +0 -0
  530. /package/{style.css → dist/style.css} +0 -0
@@ -0,0 +1,370 @@
1
+ import Quill from 'quill'
2
+ import { isNullOrUndefined } from '../config/editor.utils'
3
+
4
+ const SnowTheme = Quill.imports['themes/snow']
5
+
6
+ let optionsCounter = 0
7
+
8
+ function toggleAriaAttribute(element, attribute) {
9
+ element.setAttribute(
10
+ attribute,
11
+ element.getAttribute(attribute) !== 'true',
12
+ )
13
+ }
14
+
15
+ class Picker {
16
+ container: any
17
+ label: any
18
+ options: any
19
+ select: any
20
+ constructor(select) {
21
+ this.select = select
22
+ this.container = document.createElement('span')
23
+ this.buildPicker()
24
+ this.select.style.display = 'none'
25
+ this.select.parentNode.insertBefore(this.container, this.select)
26
+
27
+ this.label.addEventListener('mousedown', (e) => {
28
+ this.togglePicker()
29
+ e.preventDefault()
30
+ })
31
+ this.label.addEventListener('keydown', (event) => {
32
+ switch (event.key) {
33
+ case 'Enter':
34
+ this.togglePicker()
35
+ break
36
+ case 'Escape':
37
+ this.escape()
38
+ event.preventDefault()
39
+ break
40
+ default:
41
+ }
42
+ })
43
+ this.select.addEventListener('change', this.update.bind(this))
44
+ }
45
+
46
+ togglePicker() {
47
+ this.container.classList.toggle('ql-expanded')
48
+ // Toggle aria-expanded and aria-hidden to make the picker accessible
49
+ toggleAriaAttribute(this.label, 'aria-expanded')
50
+ toggleAriaAttribute(this.options, 'aria-hidden')
51
+ }
52
+
53
+ buildItem(option) {
54
+ const item = document.createElement('span')
55
+ item.tabIndex = 0
56
+ item.setAttribute('role', 'button')
57
+ item.classList.add('ql-picker-item')
58
+ if (option.hasAttribute('value')) {
59
+ item.setAttribute('data-value', option.getAttribute('value'))
60
+ }
61
+ if (option.textContent) {
62
+ item.setAttribute('data-label', option.textContent)
63
+ }
64
+ item.addEventListener('click', () => {
65
+ this.selectItem(item, true)
66
+ })
67
+ item.addEventListener('keydown', (event) => {
68
+ switch (event.key) {
69
+ case 'Enter':
70
+ this.selectItem(item, true)
71
+ event.preventDefault()
72
+ break
73
+ case 'Escape':
74
+ this.escape()
75
+ event.preventDefault()
76
+ break
77
+ default:
78
+ }
79
+ })
80
+
81
+ return item
82
+ }
83
+
84
+ buildLabel() {
85
+ const label = document.createElement('span')
86
+ label.classList.add('ql-picker-label')
87
+ label.innerHTML = `
88
+ <svg viewbox="0 0 18 18">
89
+ <polygon class="ql-stroke" points="7 11 9 13 11 11 7 11"></polygon>
90
+ <polygon class="ql-stroke" points="7 7 9 5 11 7 7 7"></polygon>
91
+ </svg>
92
+ `
93
+ label.tabIndex = 0
94
+ label.setAttribute('role', 'button')
95
+ label.setAttribute('aria-expanded', 'false')
96
+ this.container.appendChild(label)
97
+ return label
98
+ }
99
+
100
+ buildOptions() {
101
+ const options = document.createElement('span')
102
+ options.classList.add('ql-picker-options')
103
+
104
+ // Don't want screen readers to read this until options are visible
105
+ options.setAttribute('aria-hidden', 'true')
106
+ options.tabIndex = -1
107
+
108
+ // Need a unique id for aria-controls
109
+ options.id = `ql-picker-options-${optionsCounter}`
110
+ optionsCounter += 1
111
+ this.label.setAttribute('aria-controls', options.id)
112
+
113
+ this.options = options
114
+
115
+ Array.from(this.select.options).forEach((option: any) => {
116
+ const item = this.buildItem(option)
117
+ options.appendChild(item)
118
+ if (option.selected === true) {
119
+ this.selectItem(item)
120
+ }
121
+ })
122
+ this.container.appendChild(options)
123
+ }
124
+
125
+ buildPicker() {
126
+ Array.from(this.select.attributes).forEach((item: any) => {
127
+ this.container.setAttribute(item.name, item.value)
128
+ })
129
+ this.container.classList.add('ql-picker')
130
+ this.label = this.buildLabel()
131
+ this.buildOptions()
132
+ }
133
+
134
+ escape() {
135
+ // Close menu and return focus to trigger label
136
+ this.close()
137
+ // Need setTimeout for accessibility to ensure that the browser executes
138
+ // focus on the next process thread and after any DOM content changes
139
+ setTimeout(() => this.label.focus(), 1)
140
+ }
141
+
142
+ close() {
143
+ this.container.classList.remove('ql-expanded')
144
+ this.label.setAttribute('aria-expanded', 'false')
145
+ this.options.setAttribute('aria-hidden', 'true')
146
+ }
147
+
148
+ selectItem(item, trigger = false) {
149
+ const selected = this.container.querySelector('.ql-selected')
150
+ if (item === selected) return
151
+ if (!isNullOrUndefined(selected)) {
152
+ selected.classList.remove('ql-selected')
153
+ }
154
+ if (isNullOrUndefined(item)) return
155
+ item.classList.add('ql-selected')
156
+ this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(
157
+ item,
158
+ )
159
+ if (item.hasAttribute('data-value')) {
160
+ this.label.setAttribute('data-value', item.getAttribute('data-value'))
161
+ }
162
+ else {
163
+ this.label.removeAttribute('data-value')
164
+ }
165
+ if (item.hasAttribute('data-label')) {
166
+ this.label.setAttribute('data-label', item.getAttribute('data-label'))
167
+ }
168
+ else {
169
+ this.label.removeAttribute('data-label')
170
+ }
171
+ if (trigger) {
172
+ let ev
173
+ if (typeof Event === 'function') {
174
+ ev = new Event('change')
175
+ }
176
+ else {
177
+ ev = document.createEvent('Event')
178
+ ev.initEvent('change', true, true)
179
+ }
180
+ this.select.dispatchEvent(ev)
181
+ this.close()
182
+ }
183
+ }
184
+
185
+ update() {
186
+ let option
187
+ if (this.select.selectedIndex > -1) {
188
+ const item = this.container.querySelector('.ql-picker-options').children[
189
+ this.select.selectedIndex
190
+ ]
191
+ option = this.select.options[this.select.selectedIndex]
192
+ this.selectItem(item)
193
+ }
194
+ else {
195
+ this.selectItem(null)
196
+ }
197
+ const isActive
198
+ = !isNullOrUndefined(option)
199
+ && option !== this.select.querySelector('option[selected]')
200
+
201
+ if (isActive) {
202
+ this.label.classList.add('ql-active')
203
+ }
204
+ else {
205
+ this.label.classList.remove('ql-active')
206
+ }
207
+ }
208
+ }
209
+
210
+ class IconPicker extends Picker {
211
+ defaultItem: any
212
+ constructor(select, icons) {
213
+ super(select)
214
+ this.container.classList.add('ql-icon-picker')
215
+ Array.from(this.container.querySelectorAll('.ql-picker-item')).forEach(
216
+ (item: any) => {
217
+ item.innerHTML = icons[item.getAttribute('data-value') || '']
218
+ },
219
+ )
220
+ this.defaultItem = this.container.querySelector('.ql-selected')
221
+ this.selectItem(this.defaultItem, null)
222
+ }
223
+
224
+ selectItem(target, trigger) {
225
+ super.selectItem(target, trigger)
226
+ const item = target || this.defaultItem
227
+ if (this.label.innerHTML === item.innerHTML) return
228
+ this.label.innerHTML = item.innerHTML
229
+ }
230
+ }
231
+
232
+ class ColorPicker extends Picker {
233
+ constructor(select, label) {
234
+ super(select)
235
+ this.label.innerHTML = label
236
+ this.container.classList.add('ql-color-picker')
237
+ Array.from(this.container.querySelectorAll('.ql-picker-item'))
238
+ .slice(0, 7)
239
+ .forEach((item: any) => {
240
+ item.classList.add('ql-primary')
241
+ })
242
+ }
243
+
244
+ buildItem(option) {
245
+ const item = super.buildItem(option)
246
+ item.style.backgroundColor = option.getAttribute('value') || ''
247
+ return item
248
+ }
249
+
250
+ selectItem(item, trigger) {
251
+ super.selectItem(item, trigger)
252
+ const colorLabel = this.label.querySelector('.ql-color-label')
253
+ const value = item ? item.getAttribute('data-value') || '' : ''
254
+ if (colorLabel) {
255
+ if (colorLabel.tagName === 'line') {
256
+ colorLabel.style.stroke = value
257
+ }
258
+ else {
259
+ colorLabel.style.fill = value
260
+ }
261
+ }
262
+ }
263
+ }
264
+
265
+ Quill.register('ui/picker', Picker, true)
266
+ Quill.register('ui/icon-picker', IconPicker, true)
267
+ Quill.register('ui/color-picker', ColorPicker, true)
268
+
269
+ const ALIGNS = [false, 'center', 'right']
270
+
271
+ const COLORS = [
272
+ '#000000',
273
+ '#e60000',
274
+ '#ff9900',
275
+ '#ffff00',
276
+ '#008a00',
277
+ '#0066cc',
278
+ '#9933ff',
279
+ '#ffffff',
280
+ '#facccc',
281
+ '#ffebcc',
282
+ '#ffffcc',
283
+ '#cce8cc',
284
+ '#cce0f5',
285
+ '#ebd6ff',
286
+ '#bbbbbb',
287
+ '#f06666',
288
+ '#ffc266',
289
+ '#ffff66',
290
+ '#66b966',
291
+ '#66a3e0',
292
+ '#c285ff',
293
+ '#888888',
294
+ '#a10000',
295
+ '#b26b00',
296
+ '#b2b200',
297
+ '#006100',
298
+ '#0047b2',
299
+ '#6b24b2',
300
+ '#444444',
301
+ '#5c0000',
302
+ '#663d00',
303
+ '#666600',
304
+ '#003700',
305
+ '#002966',
306
+ '#3d1466',
307
+ ]
308
+
309
+ const FONTS = [false, 'serif', 'monospace']
310
+
311
+ const HEADERS = ['1', '2', '3', false]
312
+
313
+ const SIZES = ['small', false, 'large', 'huge']
314
+
315
+ SnowTheme.prototype.buildPickers = function (selects, icons) {
316
+ this.pickers = Array.from(selects).map((select: any) => {
317
+ if (select.classList.contains('ql-align')) {
318
+ if (isNullOrUndefined(select.querySelector('option'))) {
319
+ fillSelect(select, ALIGNS)
320
+ }
321
+ return new IconPicker(select, icons.align)
322
+ }
323
+ if (
324
+ select.classList.contains('ql-background')
325
+ || select.classList.contains('ql-color')
326
+ ) {
327
+ const format = select.classList.contains('ql-background')
328
+ ? 'background'
329
+ : 'color'
330
+ if (isNullOrUndefined(select.querySelector('option'))) {
331
+ fillSelect(
332
+ select,
333
+ COLORS,
334
+ )
335
+ }
336
+ return new ColorPicker(select, icons[format])
337
+ }
338
+ if (isNullOrUndefined(select.querySelector('option'))) {
339
+ if (select.classList.contains('ql-font')) {
340
+ fillSelect(select, FONTS)
341
+ }
342
+ else if (select.classList.contains('ql-header')) {
343
+ fillSelect(select, HEADERS)
344
+ }
345
+ else if (select.classList.contains('ql-size')) {
346
+ fillSelect(select, SIZES)
347
+ }
348
+ }
349
+ return new Picker(select)
350
+ })
351
+ const update = () => {
352
+ this.pickers.forEach((picker) => {
353
+ picker.update()
354
+ })
355
+ }
356
+ this.quill.on(Quill.events.EDITOR_CHANGE, update)
357
+ }
358
+
359
+ function fillSelect(select, values, defaultValue = false) {
360
+ values.forEach((value) => {
361
+ const option = document.createElement('option')
362
+ if (value === defaultValue) {
363
+ option.setAttribute('selected', 'selected')
364
+ }
365
+ else {
366
+ option.setAttribute('value', value)
367
+ }
368
+ select.appendChild(option)
369
+ })
370
+ }
@@ -0,0 +1,180 @@
1
+ import type TypeToolbar from 'quill/modules/toolbar'
2
+ import Quill from 'quill'
3
+ import { isNullOrUndefined } from '../config/editor.utils'
4
+ import './better-picker'
5
+
6
+ const Delta = Quill.import('delta')
7
+ const Parchment = Quill.import('parchment')
8
+ const levels = ['error', 'warn', 'log', 'info'] as const
9
+ let level = 'warn' as const
10
+
11
+ function debuglogger(method: typeof levels[number], ...args) {
12
+ if (levels.indexOf(method) <= levels.indexOf(level)) {
13
+ console[method](...args) // eslint-disable-line no-console
14
+ }
15
+ }
16
+
17
+ function namespace(ns) {
18
+ return levels.reduce((logger, method) => {
19
+ logger[method] = debuglogger.bind(console, method, ns)
20
+ return logger
21
+ }, {} as Record<typeof levels[number], (...args: any) => void>)
22
+ }
23
+
24
+ namespace.level = (newLevel) => {
25
+ level = newLevel
26
+ }
27
+ debuglogger.level = namespace.level
28
+ const debug = namespace('quill:toolbar')
29
+
30
+ const Toolbar = Quill.import('modules/toolbar') as typeof TypeToolbar
31
+ // let oldClean = Toolbar.DEFAULTS.handlers.clean
32
+
33
+ class BetterToolbar extends Toolbar {
34
+ update(range) {
35
+ const formats = isNullOrUndefined(range) ? {} : this.quill.getFormat(range) as Record<string, any>
36
+ this.controls.forEach((pair) => {
37
+ const [format, input] = pair
38
+ if (input.tagName === 'SELECT') {
39
+ const select = input as HTMLSelectElement
40
+ let option
41
+ if (isNullOrUndefined(range)) {
42
+ option = null
43
+ }
44
+ else if (isNullOrUndefined(formats[format])) {
45
+ option = select.querySelector('option[selected]')
46
+ }
47
+ else if (!Array.isArray(formats[format])) {
48
+ let value = format === 'header' ? formats[format].value : formats[format]
49
+ if (typeof value === 'string') {
50
+ value = value.replace(/"/g, '\\"')
51
+ }
52
+ option = select.querySelector(`option[value="${value}"]`)
53
+ }
54
+ if (isNullOrUndefined(option)) {
55
+ select.value = '' // TODO make configurable?
56
+ select.selectedIndex = -1
57
+ }
58
+ else {
59
+ option.selected = true
60
+ }
61
+ }
62
+ else if (isNullOrUndefined(range)) {
63
+ input.classList.remove('ql-active')
64
+ }
65
+ else if (input.hasAttribute('value')) {
66
+ // both being null should match (default values)
67
+ // '1' should match with 1 (headers)
68
+ let isActive
69
+ = formats[format] === input.getAttribute('value')
70
+ || (!isNullOrUndefined(formats[format])
71
+ && (formats[format].value === input.getAttribute('value')
72
+ || formats[format].toString() === input.getAttribute('value')))
73
+ || (isNullOrUndefined(formats[format]) && !input.getAttribute('value'))
74
+
75
+ if (!isActive) {
76
+ const checkFormat = formats[format]
77
+ if (checkFormat === 'checked' || checkFormat === 'unchecked') {
78
+ isActive = input.getAttribute('value') === 'check'
79
+ }
80
+ }
81
+
82
+ if (isActive) {
83
+ input.classList.add('ql-active')
84
+ }
85
+ else {
86
+ input.classList.remove('ql-active')
87
+ }
88
+ }
89
+ else {
90
+ if (!isNullOrUndefined(formats[format])) {
91
+ input.classList.add('ql-active')
92
+ }
93
+ else {
94
+ input.classList.remove('ql-active')
95
+ }
96
+ }
97
+ })
98
+ }
99
+
100
+ attach(input: HTMLElement) {
101
+ let format = Array.from(input.classList).find((className) => {
102
+ return className.indexOf('ql-') === 0
103
+ })
104
+ if (!format) return
105
+ format = format.slice('ql-'.length)
106
+
107
+ if (input.tagName === 'BUTTON') {
108
+ input.setAttribute('type', 'button')
109
+ }
110
+
111
+ if (this.handlers[format] == null && this.quill.scroll.query(format) == null) {
112
+ debug.warn('ignoring attaching to nonexistent format', format, input)
113
+ return
114
+ }
115
+
116
+ const eventName = input.tagName === 'SELECT' ? 'change' : 'click'
117
+ input.addEventListener(eventName, (e) => {
118
+ let value: boolean | string
119
+
120
+ if (input.tagName === 'SELECT') {
121
+ const select = input as HTMLSelectElement
122
+ if (select.selectedIndex < 0) return
123
+ const selected = select.options[select.selectedIndex]
124
+
125
+ if (selected.hasAttribute('selected')) {
126
+ value = false
127
+ }
128
+ else {
129
+ value = selected.value || false
130
+ }
131
+ }
132
+ else {
133
+ const button = input as HTMLButtonElement
134
+ if (button.classList.contains('ql-active')) {
135
+ value = false
136
+ }
137
+ else {
138
+ value = button.value || !button.hasAttribute('value')
139
+ }
140
+ e.preventDefault()
141
+ }
142
+
143
+ this.quill.focus({ preventScroll: format === 'screenshot' })
144
+ const [range] = this.quill.selection.getRange()
145
+ if (this.handlers[format] != null) {
146
+ // @ts-ignore
147
+ if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {
148
+ return
149
+ }
150
+ this.handlers[format].call(this, value)
151
+ }
152
+ else if (
153
+ // @ts-ignore
154
+ this.quill.scroll.query(format).prototype instanceof Parchment.EmbedBlot
155
+ ) {
156
+ value = prompt(`Enter ${format}`)
157
+ if (!value) return
158
+ this.quill.updateContents(
159
+ new Delta()
160
+ .retain(range.index)
161
+ .delete(range.length)
162
+ .insert({ [format]: value }),
163
+ Quill.sources.USER,
164
+ )
165
+ }
166
+ else {
167
+ // @ts-ignore
168
+ if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {
169
+ return
170
+ }
171
+ this.quill.format(format, value, Quill.sources.USER)
172
+ }
173
+
174
+ this.update(range)
175
+ })
176
+ this.controls.push([format, input])
177
+ }
178
+ }
179
+
180
+ export default BetterToolbar
@@ -0,0 +1,149 @@
1
+ import { isObject, root } from './method'
2
+
3
+ export function debounce(func, wait, options = undefined) {
4
+ let lastArgs,
5
+ lastThis,
6
+ maxWait,
7
+ result,
8
+ timerId,
9
+ lastCallTime
10
+
11
+ let lastInvokeTime = 0
12
+ let leading = false
13
+ let maxing = false
14
+ let trailing = true
15
+
16
+ // Bypass `requestAnimationFrame` by explicitly setting `wait=0`.
17
+ const useRAF = (!wait && wait !== 0 && typeof root.requestAnimationFrame === 'function')
18
+
19
+ if (typeof func !== 'function') {
20
+ throw new TypeError('Expected a function')
21
+ }
22
+ wait = +wait || 0
23
+ if (isObject(options)) {
24
+ leading = !!options.leading
25
+ maxing = 'maxWait' in options
26
+ maxWait = maxing ? Math.max(+options.maxWait || 0, wait) : maxWait
27
+ trailing = 'trailing' in options ? !!options.trailing : trailing
28
+ }
29
+
30
+ function invokeFunc(time) {
31
+ const args = lastArgs
32
+ const thisArg = lastThis
33
+
34
+ lastArgs = lastThis = undefined
35
+ lastInvokeTime = time
36
+ result = func.apply(thisArg, args)
37
+ return result
38
+ }
39
+
40
+ function startTimer(pendingFunc, wait) {
41
+ if (useRAF) {
42
+ root.cancelAnimationFrame(timerId)
43
+ return root.requestAnimationFrame(pendingFunc)
44
+ }
45
+ return setTimeout(pendingFunc, wait)
46
+ }
47
+
48
+ function cancelTimer(id) {
49
+ if (useRAF) {
50
+ return root.cancelAnimationFrame(id)
51
+ }
52
+ clearTimeout(id)
53
+ }
54
+
55
+ function leadingEdge(time) {
56
+ // Reset any `maxWait` timer.
57
+ lastInvokeTime = time
58
+ // Start the timer for the trailing edge.
59
+ timerId = startTimer(timerExpired, wait)
60
+ // Invoke the leading edge.
61
+ return leading ? invokeFunc(time) : result
62
+ }
63
+
64
+ function remainingWait(time) {
65
+ const timeSinceLastCall = time - lastCallTime
66
+ const timeSinceLastInvoke = time - lastInvokeTime
67
+ const timeWaiting = wait - timeSinceLastCall
68
+
69
+ return maxing
70
+ ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke)
71
+ : timeWaiting
72
+ }
73
+
74
+ function shouldInvoke(time) {
75
+ const timeSinceLastCall = time - lastCallTime
76
+ const timeSinceLastInvoke = time - lastInvokeTime
77
+
78
+ // Either this is the first call, activity has stopped and we're at the
79
+ // trailing edge, the system time has gone backwards and we're treating
80
+ // it as the trailing edge, or we've hit the `maxWait` limit.
81
+ return (lastCallTime === undefined || (timeSinceLastCall >= wait)
82
+ || (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait))
83
+ }
84
+
85
+ function timerExpired() {
86
+ const time = Date.now()
87
+ if (shouldInvoke(time)) {
88
+ return trailingEdge(time)
89
+ }
90
+ // Restart the timer.
91
+ timerId = startTimer(timerExpired, remainingWait(time))
92
+ }
93
+
94
+ function trailingEdge(time) {
95
+ timerId = undefined
96
+
97
+ // Only invoke if we have `lastArgs` which means `func` has been
98
+ // debounced at least once.
99
+ if (trailing && lastArgs) {
100
+ return invokeFunc(time)
101
+ }
102
+ lastArgs = lastThis = undefined
103
+ return result
104
+ }
105
+
106
+ function cancel() {
107
+ if (timerId !== undefined) {
108
+ cancelTimer(timerId)
109
+ }
110
+ lastInvokeTime = 0
111
+ lastArgs = lastCallTime = lastThis = timerId = undefined
112
+ }
113
+
114
+ function flush() {
115
+ return timerId === undefined ? result : trailingEdge(Date.now())
116
+ }
117
+
118
+ function pending() {
119
+ return timerId !== undefined
120
+ }
121
+
122
+ function debounced(...args) {
123
+ const time = Date.now()
124
+ const isInvoking = shouldInvoke(time)
125
+
126
+ lastArgs = args
127
+ lastThis = this
128
+ lastCallTime = time
129
+
130
+ if (isInvoking) {
131
+ if (timerId === undefined) {
132
+ return leadingEdge(lastCallTime)
133
+ }
134
+ if (maxing) {
135
+ // Handle invocations in a tight loop.
136
+ timerId = startTimer(timerExpired, wait)
137
+ return invokeFunc(lastCallTime)
138
+ }
139
+ }
140
+ if (timerId === undefined) {
141
+ timerId = startTimer(timerExpired, wait)
142
+ }
143
+ return result
144
+ }
145
+ debounced.cancel = cancel
146
+ debounced.flush = flush
147
+ debounced.pending = pending
148
+ return debounced
149
+ }