@opentiny/fluent-editor 4.0.0-alpha.9 → 4.0.0-beta.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 (385) hide show
  1. package/README.md +88 -88
  2. package/es/attributors/line-height.es.js.map +1 -1
  3. package/es/config/base64-image.es.js.map +1 -1
  4. package/es/config/editor.config.es.js +27 -0
  5. package/es/config/editor.config.es.js.map +1 -1
  6. package/es/config/editor.utils.es.js.map +1 -1
  7. package/es/config/i18n/en-us.es.js +2 -0
  8. package/es/config/i18n/en-us.es.js.map +1 -1
  9. package/es/config/i18n/zh-cn.es.js +2 -0
  10. package/es/config/i18n/zh-cn.es.js.map +1 -1
  11. package/es/config/index.es.js +3 -1
  12. package/es/config/index.es.js.map +1 -1
  13. package/es/core/fluent-editor.es.js.map +1 -1
  14. package/es/fluent-editor.es.js +17 -13
  15. package/es/fluent-editor.es.js.map +1 -1
  16. package/es/formats/emoji.es.js.map +1 -1
  17. package/es/formats/soft-break.es.js.map +1 -1
  18. package/es/formats/strike.es.js.map +1 -1
  19. package/es/formats/video.es.js.map +1 -1
  20. package/es/index.es.js +35 -2
  21. package/es/index.es.js.map +1 -1
  22. package/es/modules/ai/constants.es.js.map +1 -1
  23. package/es/modules/ai/icons.es.js.map +1 -1
  24. package/es/modules/ai/index.es.js +1 -1
  25. package/es/modules/ai/index.es.js.map +1 -1
  26. package/es/modules/collaborative-editing/awareness/awareness.es.js +6 -7
  27. package/es/modules/collaborative-editing/awareness/awareness.es.js.map +1 -1
  28. package/es/modules/collaborative-editing/awareness/y-indexeddb.es.js +7 -3
  29. package/es/modules/collaborative-editing/awareness/y-indexeddb.es.js.map +1 -1
  30. package/es/modules/collaborative-editing/collaborative-editing.es.js +13 -8
  31. package/es/modules/collaborative-editing/collaborative-editing.es.js.map +1 -1
  32. package/es/modules/collaborative-editing/module.es.js.map +1 -1
  33. package/es/modules/collaborative-editing/provider/providerRegistry.es.js.map +1 -1
  34. package/es/modules/collaborative-editing/provider/webrtc.es.js +8 -4
  35. package/es/modules/collaborative-editing/provider/webrtc.es.js.map +1 -1
  36. package/es/modules/collaborative-editing/provider/websocket.es.js +6 -4
  37. package/es/modules/collaborative-editing/provider/websocket.es.js.map +1 -1
  38. package/es/modules/counter.es.js.map +1 -1
  39. package/es/modules/custom-clipboard.es.js.map +1 -1
  40. package/es/modules/custom-image/actions/action.es.js.map +1 -1
  41. package/es/modules/custom-image/actions/custom-resize-action.es.js.map +1 -1
  42. package/es/modules/custom-image/actions/delete-action.es.js.map +1 -1
  43. package/es/modules/custom-image/actions/image-toolbar-buttons.es.js +1 -1
  44. package/es/modules/custom-image/actions/image-toolbar-buttons.es.js.map +1 -1
  45. package/es/modules/custom-image/actions/toolbar-action.es.js.map +1 -1
  46. package/es/modules/custom-image/actions/toolbar.es.js.map +1 -1
  47. package/es/modules/custom-image/blot-formatter.es.js +1 -1
  48. package/es/modules/custom-image/blot-formatter.es.js.map +1 -1
  49. package/es/modules/custom-image/image.es.js.map +1 -1
  50. package/es/modules/custom-image/options.es.js.map +1 -1
  51. package/es/modules/custom-image/specs/blot-spec.es.js.map +1 -1
  52. package/es/modules/custom-image/specs/custom-image-spec.es.js.map +1 -1
  53. package/es/modules/custom-image/specs/image-spec.es.js.map +1 -1
  54. package/es/modules/custom-uploader.es.js.map +1 -1
  55. package/es/modules/divider.es.js.map +1 -1
  56. package/es/modules/emoji.es.js +1 -1
  57. package/es/modules/emoji.es.js.map +1 -1
  58. package/es/modules/file/formats/file.es.js.map +1 -1
  59. package/es/modules/file/modules/file-bar.es.js.map +1 -1
  60. package/es/modules/file/modules/file-module.es.js.map +1 -1
  61. package/es/modules/flow-chart/config-utils.es.js +102 -0
  62. package/es/modules/flow-chart/config-utils.es.js.map +1 -0
  63. package/es/modules/flow-chart/formats/flow-chart-blot.es.js +369 -0
  64. package/es/modules/flow-chart/formats/flow-chart-blot.es.js.map +1 -0
  65. package/es/modules/flow-chart/i18n/en-us.es.js +30 -0
  66. package/es/modules/flow-chart/i18n/en-us.es.js.map +1 -0
  67. package/es/modules/flow-chart/i18n/index.es.js +12 -0
  68. package/es/modules/flow-chart/i18n/index.es.js.map +1 -0
  69. package/es/modules/flow-chart/i18n/zh-cn.es.js +30 -0
  70. package/es/modules/flow-chart/i18n/zh-cn.es.js.map +1 -0
  71. package/es/modules/flow-chart/icons.es.js +27 -0
  72. package/es/modules/flow-chart/icons.es.js.map +1 -0
  73. package/es/modules/flow-chart/index.es.js +45 -0
  74. package/es/modules/flow-chart/index.es.js.map +1 -0
  75. package/es/modules/flow-chart/modules/context-menu.es.js +184 -0
  76. package/es/modules/flow-chart/modules/context-menu.es.js.map +1 -0
  77. package/es/modules/flow-chart/modules/control-panel.es.js +286 -0
  78. package/es/modules/flow-chart/modules/control-panel.es.js.map +1 -0
  79. package/es/modules/flow-chart/modules/custom-resize-action.es.js +150 -0
  80. package/es/modules/flow-chart/modules/custom-resize-action.es.js.map +1 -0
  81. package/es/modules/i18n.es.js.map +1 -1
  82. package/es/modules/index.es.js +4 -0
  83. package/es/modules/index.es.js.map +1 -1
  84. package/es/modules/link/formats/link.es.js.map +1 -1
  85. package/es/modules/link/modules/tooltip.es.js.map +1 -1
  86. package/es/modules/mathlive/formats.es.js.map +1 -1
  87. package/es/modules/mathlive/module.es.js.map +1 -1
  88. package/es/modules/mathlive/tooltip.es.js.map +1 -1
  89. package/es/modules/mention/constants.es.js.map +1 -1
  90. package/es/modules/mention/mention-link.es.js.map +1 -1
  91. package/es/modules/mention/mention.es.js.map +1 -1
  92. package/es/modules/mind-map/config-utils.es.js +108 -0
  93. package/es/modules/mind-map/config-utils.es.js.map +1 -0
  94. package/es/modules/mind-map/formats/mind-map-blot.es.js +356 -0
  95. package/es/modules/mind-map/formats/mind-map-blot.es.js.map +1 -0
  96. package/es/modules/mind-map/i18n/en-us.es.js +29 -0
  97. package/es/modules/mind-map/i18n/en-us.es.js.map +1 -0
  98. package/es/modules/mind-map/i18n/index.es.js +12 -0
  99. package/es/modules/mind-map/i18n/index.es.js.map +1 -0
  100. package/es/modules/mind-map/i18n/zh-cn.es.js +29 -0
  101. package/es/modules/mind-map/i18n/zh-cn.es.js.map +1 -0
  102. package/es/modules/mind-map/icons.es.js +45 -0
  103. package/es/modules/mind-map/icons.es.js.map +1 -0
  104. package/es/modules/mind-map/index.es.js +56 -0
  105. package/es/modules/mind-map/index.es.js.map +1 -0
  106. package/es/modules/mind-map/modules/context-menu.es.js +128 -0
  107. package/es/modules/mind-map/modules/context-menu.es.js.map +1 -0
  108. package/es/modules/mind-map/modules/control-panel.es.js +425 -0
  109. package/es/modules/mind-map/modules/control-panel.es.js.map +1 -0
  110. package/es/modules/mind-map/modules/custom-resize-action.es.js +161 -0
  111. package/es/modules/mind-map/modules/custom-resize-action.es.js.map +1 -0
  112. package/es/modules/shortcut-key/index.es.js +16 -0
  113. package/es/modules/shortcut-key/index.es.js.map +1 -1
  114. package/es/modules/syntax.es.js.map +1 -1
  115. package/es/modules/table-up/index.es.js.map +1 -1
  116. package/es/modules/toolbar/better-picker.es.js.map +1 -1
  117. package/es/modules/toolbar/better-toolbar.es.js.map +1 -1
  118. package/es/modules/toolbar/toolbar-tip.es.js.map +1 -1
  119. package/es/themes/snow.es.js.map +1 -1
  120. package/es/tools/format-painter.es.js.map +1 -1
  121. package/es/tools/fullscreen.es.js.map +1 -1
  122. package/es/tools/screenshot.es.js.map +1 -1
  123. package/es/ui/icons.config.es.js +4 -0
  124. package/es/ui/icons.config.es.js.map +1 -1
  125. package/es/ui/icons.es.js +4 -2
  126. package/es/ui/icons.es.js.map +1 -1
  127. package/es/utils/debounce.es.js.map +1 -1
  128. package/es/utils/image.es.js.map +1 -1
  129. package/es/utils/is.es.js.map +1 -1
  130. package/es/utils/merge.es.js +27 -0
  131. package/es/utils/merge.es.js.map +1 -0
  132. package/es/utils/method.es.js.map +1 -1
  133. package/es/utils/scroll-lock.es.js.map +1 -1
  134. package/flow-chart.css +185 -0
  135. package/lib/attributors/line-height.cjs.js.map +1 -1
  136. package/lib/config/base64-image.cjs.js.map +1 -1
  137. package/lib/config/editor.config.cjs.js +27 -0
  138. package/lib/config/editor.config.cjs.js.map +1 -1
  139. package/lib/config/editor.utils.cjs.js.map +1 -1
  140. package/lib/config/i18n/en-us.cjs.js +2 -0
  141. package/lib/config/i18n/en-us.cjs.js.map +1 -1
  142. package/lib/config/i18n/zh-cn.cjs.js +2 -0
  143. package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
  144. package/lib/config/index.cjs.js +2 -0
  145. package/lib/config/index.cjs.js.map +1 -1
  146. package/lib/core/fluent-editor.cjs.js.map +1 -1
  147. package/lib/fluent-editor.cjs.js +23 -19
  148. package/lib/fluent-editor.cjs.js.map +1 -1
  149. package/lib/formats/emoji.cjs.js.map +1 -1
  150. package/lib/formats/soft-break.cjs.js.map +1 -1
  151. package/lib/formats/strike.cjs.js.map +1 -1
  152. package/lib/formats/video.cjs.js.map +1 -1
  153. package/lib/index.cjs.js +39 -6
  154. package/lib/index.cjs.js.map +1 -1
  155. package/lib/modules/ai/constants.cjs.js.map +1 -1
  156. package/lib/modules/ai/icons.cjs.js.map +1 -1
  157. package/lib/modules/ai/index.cjs.js.map +1 -1
  158. package/lib/modules/collaborative-editing/awareness/awareness.cjs.js +6 -24
  159. package/lib/modules/collaborative-editing/awareness/awareness.cjs.js.map +1 -1
  160. package/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js +7 -3
  161. package/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js.map +1 -1
  162. package/lib/modules/collaborative-editing/collaborative-editing.cjs.js +19 -31
  163. package/lib/modules/collaborative-editing/collaborative-editing.cjs.js.map +1 -1
  164. package/lib/modules/collaborative-editing/module.cjs.js.map +1 -1
  165. package/lib/modules/collaborative-editing/provider/providerRegistry.cjs.js.map +1 -1
  166. package/lib/modules/collaborative-editing/provider/webrtc.cjs.js +10 -23
  167. package/lib/modules/collaborative-editing/provider/webrtc.cjs.js.map +1 -1
  168. package/lib/modules/collaborative-editing/provider/websocket.cjs.js +10 -25
  169. package/lib/modules/collaborative-editing/provider/websocket.cjs.js.map +1 -1
  170. package/lib/modules/counter.cjs.js.map +1 -1
  171. package/lib/modules/custom-clipboard.cjs.js.map +1 -1
  172. package/lib/modules/custom-image/actions/action.cjs.js.map +1 -1
  173. package/lib/modules/custom-image/actions/custom-resize-action.cjs.js.map +1 -1
  174. package/lib/modules/custom-image/actions/delete-action.cjs.js.map +1 -1
  175. package/lib/modules/custom-image/actions/image-toolbar-buttons.cjs.js.map +1 -1
  176. package/lib/modules/custom-image/actions/toolbar-action.cjs.js.map +1 -1
  177. package/lib/modules/custom-image/actions/toolbar.cjs.js.map +1 -1
  178. package/lib/modules/custom-image/blot-formatter.cjs.js +2 -2
  179. package/lib/modules/custom-image/blot-formatter.cjs.js.map +1 -1
  180. package/lib/modules/custom-image/image.cjs.js.map +1 -1
  181. package/lib/modules/custom-image/options.cjs.js.map +1 -1
  182. package/lib/modules/custom-image/specs/blot-spec.cjs.js.map +1 -1
  183. package/lib/modules/custom-image/specs/custom-image-spec.cjs.js.map +1 -1
  184. package/lib/modules/custom-image/specs/image-spec.cjs.js.map +1 -1
  185. package/lib/modules/custom-uploader.cjs.js.map +1 -1
  186. package/lib/modules/divider.cjs.js.map +1 -1
  187. package/lib/modules/emoji.cjs.js +2 -2
  188. package/lib/modules/emoji.cjs.js.map +1 -1
  189. package/lib/modules/file/formats/file.cjs.js.map +1 -1
  190. package/lib/modules/file/modules/file-bar.cjs.js.map +1 -1
  191. package/lib/modules/file/modules/file-module.cjs.js.map +1 -1
  192. package/lib/modules/flow-chart/config-utils.cjs.js +102 -0
  193. package/lib/modules/flow-chart/config-utils.cjs.js.map +1 -0
  194. package/lib/modules/flow-chart/formats/flow-chart-blot.cjs.js +369 -0
  195. package/lib/modules/flow-chart/formats/flow-chart-blot.cjs.js.map +1 -0
  196. package/lib/modules/flow-chart/i18n/en-us.cjs.js +30 -0
  197. package/lib/modules/flow-chart/i18n/en-us.cjs.js.map +1 -0
  198. package/lib/modules/flow-chart/i18n/index.cjs.js +12 -0
  199. package/lib/modules/flow-chart/i18n/index.cjs.js.map +1 -0
  200. package/lib/modules/flow-chart/i18n/zh-cn.cjs.js +30 -0
  201. package/lib/modules/flow-chart/i18n/zh-cn.cjs.js.map +1 -0
  202. package/lib/modules/flow-chart/icons.cjs.js +27 -0
  203. package/lib/modules/flow-chart/icons.cjs.js.map +1 -0
  204. package/lib/modules/flow-chart/index.cjs.js +45 -0
  205. package/lib/modules/flow-chart/index.cjs.js.map +1 -0
  206. package/lib/modules/flow-chart/modules/context-menu.cjs.js +184 -0
  207. package/lib/modules/flow-chart/modules/context-menu.cjs.js.map +1 -0
  208. package/lib/modules/flow-chart/modules/control-panel.cjs.js +286 -0
  209. package/lib/modules/flow-chart/modules/control-panel.cjs.js.map +1 -0
  210. package/lib/modules/flow-chart/modules/custom-resize-action.cjs.js +150 -0
  211. package/lib/modules/flow-chart/modules/custom-resize-action.cjs.js.map +1 -0
  212. package/lib/modules/i18n.cjs.js.map +1 -1
  213. package/lib/modules/index.cjs.js +9 -5
  214. package/lib/modules/index.cjs.js.map +1 -1
  215. package/lib/modules/link/formats/link.cjs.js.map +1 -1
  216. package/lib/modules/link/modules/tooltip.cjs.js.map +1 -1
  217. package/lib/modules/mathlive/formats.cjs.js.map +1 -1
  218. package/lib/modules/mathlive/module.cjs.js.map +1 -1
  219. package/lib/modules/mathlive/tooltip.cjs.js.map +1 -1
  220. package/lib/modules/mention/constants.cjs.js.map +1 -1
  221. package/lib/modules/mention/mention-link.cjs.js.map +1 -1
  222. package/lib/modules/mention/mention.cjs.js.map +1 -1
  223. package/lib/modules/mind-map/config-utils.cjs.js +108 -0
  224. package/lib/modules/mind-map/config-utils.cjs.js.map +1 -0
  225. package/lib/modules/mind-map/formats/mind-map-blot.cjs.js +356 -0
  226. package/lib/modules/mind-map/formats/mind-map-blot.cjs.js.map +1 -0
  227. package/lib/modules/mind-map/i18n/en-us.cjs.js +29 -0
  228. package/lib/modules/mind-map/i18n/en-us.cjs.js.map +1 -0
  229. package/lib/modules/mind-map/i18n/index.cjs.js +12 -0
  230. package/lib/modules/mind-map/i18n/index.cjs.js.map +1 -0
  231. package/lib/modules/mind-map/i18n/zh-cn.cjs.js +29 -0
  232. package/lib/modules/mind-map/i18n/zh-cn.cjs.js.map +1 -0
  233. package/lib/modules/mind-map/icons.cjs.js +45 -0
  234. package/lib/modules/mind-map/icons.cjs.js.map +1 -0
  235. package/lib/modules/mind-map/index.cjs.js +56 -0
  236. package/lib/modules/mind-map/index.cjs.js.map +1 -0
  237. package/lib/modules/mind-map/modules/context-menu.cjs.js +128 -0
  238. package/lib/modules/mind-map/modules/context-menu.cjs.js.map +1 -0
  239. package/lib/modules/mind-map/modules/control-panel.cjs.js +425 -0
  240. package/lib/modules/mind-map/modules/control-panel.cjs.js.map +1 -0
  241. package/lib/modules/mind-map/modules/custom-resize-action.cjs.js +161 -0
  242. package/lib/modules/mind-map/modules/custom-resize-action.cjs.js.map +1 -0
  243. package/lib/modules/shortcut-key/index.cjs.js +16 -0
  244. package/lib/modules/shortcut-key/index.cjs.js.map +1 -1
  245. package/lib/modules/syntax.cjs.js.map +1 -1
  246. package/lib/modules/table-up/index.cjs.js.map +1 -1
  247. package/lib/modules/toolbar/better-picker.cjs.js.map +1 -1
  248. package/lib/modules/toolbar/better-toolbar.cjs.js.map +1 -1
  249. package/lib/modules/toolbar/toolbar-tip.cjs.js.map +1 -1
  250. package/lib/themes/snow.cjs.js.map +1 -1
  251. package/lib/tools/format-painter.cjs.js.map +1 -1
  252. package/lib/tools/fullscreen.cjs.js.map +1 -1
  253. package/lib/tools/screenshot.cjs.js.map +1 -1
  254. package/lib/ui/icons.cjs.js +3 -1
  255. package/lib/ui/icons.cjs.js.map +1 -1
  256. package/lib/ui/icons.config.cjs.js +4 -0
  257. package/lib/ui/icons.config.cjs.js.map +1 -1
  258. package/lib/utils/debounce.cjs.js.map +1 -1
  259. package/lib/utils/image.cjs.js.map +1 -1
  260. package/lib/utils/is.cjs.js.map +1 -1
  261. package/lib/utils/merge.cjs.js +27 -0
  262. package/lib/utils/merge.cjs.js.map +1 -0
  263. package/lib/utils/method.cjs.js.map +1 -1
  264. package/lib/utils/scroll-lock.cjs.js.map +1 -1
  265. package/mind-map.css +224 -0
  266. package/package.json +45 -67
  267. package/patches/quill@2.0.3.patch +33 -0
  268. package/scripts/apply-patches.cjs +248 -0
  269. package/style.css +4 -2
  270. package/types/attributors/font-size.d.ts +1 -1
  271. package/types/attributors/font-style.d.ts +1 -1
  272. package/types/attributors/index.d.ts +4 -4
  273. package/types/attributors/line-height.d.ts +1 -1
  274. package/types/attributors/text-indent.d.ts +1 -1
  275. package/types/config/base64-image.d.ts +2 -2
  276. package/types/config/editor.config.d.ts +55 -11
  277. package/types/config/editor.utils.d.ts +40 -40
  278. package/types/config/i18n/en-us.d.ts +125 -123
  279. package/types/config/i18n/zh-cn.d.ts +125 -123
  280. package/types/config/index.d.ts +7 -7
  281. package/types/config/types/editor-config.interface.d.ts +11 -12
  282. package/types/config/types/editor-modules.interface.d.ts +40 -37
  283. package/types/config/types/index.d.ts +3 -3
  284. package/types/config/types/type.d.ts +2 -2
  285. package/types/core/fluent-editor.d.ts +10 -11
  286. package/types/fluent-editor.d.ts +1 -2
  287. package/types/formats/emoji.d.ts +7 -8
  288. package/types/formats/index.d.ts +4 -4
  289. package/types/formats/soft-break.d.ts +11 -12
  290. package/types/formats/strike.d.ts +7 -8
  291. package/types/formats/video.d.ts +12 -13
  292. package/types/index.d.ts +7 -8
  293. package/types/modules/ai/constants.d.ts +30 -30
  294. package/types/modules/ai/icons.d.ts +21 -21
  295. package/types/modules/ai/index.d.ts +93 -94
  296. package/types/modules/ai/types.d.ts +16 -16
  297. package/types/modules/collaborative-editing/awareness/awareness.d.ts +25 -26
  298. package/types/modules/collaborative-editing/awareness/index.d.ts +2 -2
  299. package/types/modules/collaborative-editing/awareness/y-indexeddb.d.ts +3 -3
  300. package/types/modules/collaborative-editing/collaborative-editing.d.ts +22 -22
  301. package/types/modules/collaborative-editing/index.d.ts +2 -2
  302. package/types/modules/collaborative-editing/module.d.ts +10 -11
  303. package/types/modules/collaborative-editing/provider/index.d.ts +3 -3
  304. package/types/modules/collaborative-editing/provider/providerRegistry.d.ts +25 -25
  305. package/types/modules/collaborative-editing/provider/webrtc.d.ts +35 -35
  306. package/types/modules/collaborative-editing/provider/websocket.d.ts +39 -39
  307. package/types/modules/collaborative-editing/types.d.ts +51 -35
  308. package/types/modules/counter.d.ts +21 -22
  309. package/types/modules/custom-clipboard.d.ts +23 -24
  310. package/types/modules/custom-image/actions/action.d.ts +7 -8
  311. package/types/modules/custom-image/actions/custom-resize-action.d.ts +22 -23
  312. package/types/modules/custom-image/actions/delete-action.d.ts +5 -6
  313. package/types/modules/custom-image/actions/image-toolbar-buttons.d.ts +15 -16
  314. package/types/modules/custom-image/actions/index.d.ts +6 -6
  315. package/types/modules/custom-image/actions/toolbar-action.d.ts +7 -8
  316. package/types/modules/custom-image/actions/toolbar.d.ts +16 -17
  317. package/types/modules/custom-image/blot-formatter.d.ts +19 -20
  318. package/types/modules/custom-image/image.d.ts +26 -27
  319. package/types/modules/custom-image/index.d.ts +4 -4
  320. package/types/modules/custom-image/options.d.ts +45 -46
  321. package/types/modules/custom-image/specs/blot-spec.d.ts +10 -11
  322. package/types/modules/custom-image/specs/custom-image-spec.d.ts +15 -16
  323. package/types/modules/custom-image/specs/image-spec.d.ts +7 -8
  324. package/types/modules/custom-image/specs/index.d.ts +3 -3
  325. package/types/modules/custom-uploader.d.ts +37 -38
  326. package/types/modules/divider.d.ts +7 -8
  327. package/types/modules/emoji.d.ts +35 -36
  328. package/types/modules/file/formats/file.d.ts +17 -18
  329. package/types/modules/file/index.d.ts +3 -3
  330. package/types/modules/file/modules/file-bar.d.ts +14 -14
  331. package/types/modules/file/modules/file-module.d.ts +7 -8
  332. package/types/modules/flow-chart/config-utils.d.ts +10 -0
  333. package/types/modules/flow-chart/formats/flow-chart-blot.d.ts +43 -0
  334. package/types/modules/flow-chart/i18n/en-us.d.ts +26 -0
  335. package/types/modules/flow-chart/i18n/index.d.ts +1 -0
  336. package/types/modules/flow-chart/i18n/zh-cn.d.ts +26 -0
  337. package/types/modules/flow-chart/icons.d.ts +12 -0
  338. package/types/modules/flow-chart/index.d.ts +10 -0
  339. package/types/modules/flow-chart/modules/context-menu.d.ts +3 -0
  340. package/types/modules/flow-chart/modules/control-panel.d.ts +3 -0
  341. package/types/modules/flow-chart/modules/custom-resize-action.d.ts +22 -0
  342. package/types/modules/flow-chart/options.d.ts +29 -0
  343. package/types/modules/i18n.d.ts +13 -14
  344. package/types/modules/index.d.ts +18 -16
  345. package/types/modules/link/formats/link.d.ts +14 -15
  346. package/types/modules/link/index.d.ts +2 -2
  347. package/types/modules/link/modules/tooltip.d.ts +25 -26
  348. package/types/modules/mathlive/formats.d.ts +20 -21
  349. package/types/modules/mathlive/index.d.ts +3 -3
  350. package/types/modules/mathlive/module.d.ts +7 -8
  351. package/types/modules/mathlive/tooltip.d.ts +14 -15
  352. package/types/modules/mention/constants.d.ts +3 -3
  353. package/types/modules/mention/index.d.ts +2 -2
  354. package/types/modules/mention/mention-link.d.ts +14 -15
  355. package/types/modules/mention/mention.d.ts +52 -53
  356. package/types/modules/mind-map/config-utils.d.ts +12 -0
  357. package/types/modules/mind-map/formats/mind-map-blot.d.ts +44 -0
  358. package/types/modules/mind-map/i18n/en-us.d.ts +25 -0
  359. package/types/modules/mind-map/i18n/index.d.ts +1 -0
  360. package/types/modules/mind-map/i18n/zh-cn.d.ts +25 -0
  361. package/types/modules/mind-map/icons.d.ts +21 -0
  362. package/types/modules/mind-map/index.d.ts +10 -0
  363. package/types/modules/mind-map/modules/context-menu.d.ts +3 -0
  364. package/types/modules/mind-map/modules/control-panel.d.ts +3 -0
  365. package/types/modules/mind-map/modules/custom-resize-action.d.ts +23 -0
  366. package/types/modules/mind-map/options.d.ts +27 -0
  367. package/types/modules/shortcut-key/index.d.ts +67 -68
  368. package/types/modules/syntax.d.ts +12 -13
  369. package/types/modules/table-up/index.d.ts +32 -33
  370. package/types/modules/toolbar/better-picker.d.ts +13 -14
  371. package/types/modules/toolbar/better-toolbar.d.ts +6 -7
  372. package/types/modules/toolbar/index.d.ts +3 -3
  373. package/types/modules/toolbar/toolbar-tip.d.ts +7 -8
  374. package/types/themes/snow.d.ts +9 -10
  375. package/types/tools/format-painter.d.ts +12 -13
  376. package/types/tools/fullscreen.d.ts +4 -5
  377. package/types/tools/screenshot.d.ts +17 -18
  378. package/types/ui/icons.config.d.ts +40 -38
  379. package/types/ui/icons.d.ts +6 -6
  380. package/types/utils/debounce.d.ts +6 -6
  381. package/types/utils/image.d.ts +1 -1
  382. package/types/utils/is.d.ts +6 -6
  383. package/types/utils/merge.d.ts +7 -0
  384. package/types/utils/method.d.ts +6 -6
  385. package/types/utils/scroll-lock.d.ts +6 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-panel.es.js","sources":["../../../../../src/modules/mind-map/modules/control-panel.ts"],"sourcesContent":["import type FluentEditor from '../../../core/fluent-editor'\nimport type MindMapPlaceholderBlot from '../formats/mind-map-blot'\nimport { CHANGE_LANGUAGE_EVENT } from '../../../config'\nimport { I18N } from '../../../modules/i18n'\nimport { getAllConfigs } from '../config-utils'\nimport { registerMindMapI18N } from '../i18n'\nimport { backIcon, catalogOrganizationIcon, contractIcon, fishboneIcon, fitIcon, forwardIcon, insertChildNodeIcon, insertIconIcon, insertNodeIcon, insertParentNodeIcon, logicalStructureIcon, mindMapIcon, organizationStructureIcon, removeNodeIcon, screenReduceIcon, screenTypeIcon, setLayoutIcon, timelineIcon, zoomInIcon, zoomOutIcon } from '../icons'\n\nclass MindMapControlPanelHandler {\n private texts: Record<string, string>\n private lang: string\n getText(key: keyof Record<string, string>): string {\n return this.texts[key]\n }\n\n constructor(private quill: FluentEditor, private blot: MindMapPlaceholderBlot) {\n const i18nModule = this.quill.getModule('i18n') as I18N\n registerMindMapI18N(I18N)\n this.lang = i18nModule.options.lang\n this.texts = this.resolveTexts()\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, (lang: string) => {\n this.lang = lang\n this.texts = this.resolveTexts()\n this.updateControlPanelTexts()\n })\n }\n\n resolveTexts() {\n const textKeys = [\n 'zoomOutTitle',\n 'zoomInTitle',\n 'fitTitle',\n 'backTitle',\n 'forwardTitle',\n 'inserChildNodeTitle',\n 'inserNodeTitle',\n 'insertIconTitle',\n 'inserParentNodeTitle',\n 'removeNodeTitle',\n 'setLayoutTitle',\n 'logicalStructureLayout',\n 'catalogOrganizationLayout',\n 'mindMapLayout',\n 'organizationStructureLayout',\n 'timelineLayout',\n 'fishboneLayout',\n 'panelStatusTitle',\n 'screenTypeTitle',\n ]\n\n return textKeys.reduce((acc, key) => {\n if (!key.includes('Title')) {\n acc[key] = I18N.parserText(`mindMap.layout.${key.replace('Layout', '')}`, this.lang)\n }\n else {\n acc[key] = I18N.parserText(`mindMap.controlPanel.${key}`, this.lang)\n }\n return acc\n }, {} as Record<string, string>)\n }\n\n updateControlPanelTexts() {\n const controlItems = this.blot.domNode.querySelectorAll('.ql-mind-map-control-item')\n\n const controlItemMap: Record<string, string> = {\n 'zoom-out': 'zoomOutTitle',\n 'zoom-in': 'zoomInTitle',\n 'fit': 'fitTitle',\n 'back': 'backTitle',\n 'forward': 'forwardTitle',\n 'insert-child-node': 'inserChildNodeTitle',\n 'insert-node': 'inserNodeTitle',\n 'insert-icon': 'insertIconTitle',\n 'insert-parent-node': 'inserParentNodeTitle',\n 'remove-node': 'removeNodeTitle',\n 'set-layout-icon': 'setLayoutTitle',\n 'panel-status': 'panelStatusTitle',\n 'screen-type': 'screenTypeTitle',\n }\n\n controlItems.forEach((item) => {\n const controlType = (item as HTMLElement).dataset.controlType\n if (controlType && controlItemMap[controlType] && this.texts[controlItemMap[controlType]]) {\n (item as HTMLElement).title = this.texts[controlItemMap[controlType]]\n }\n })\n }\n}\n\nconst controlPanelHandlers = new WeakMap<MindMapPlaceholderBlot, MindMapControlPanelHandler>()\n\nconst DISABLED_OPACITY = '0.5'\nconst ENABLED_OPACITY = '1'\nexport function createControlPanel(blot: MindMapPlaceholderBlot, quill: FluentEditor): void {\n let isStart = true\n let isEnd = true\n let selectedNodes: any[] = []\n blot.mindMap.on('node_active', (...args: unknown[]) => {\n selectedNodes = Array.isArray(args[1]) ? args[1] : []\n })\n // 中间的控制面板\n const controlPanel = document.createElement('div')\n controlPanel.className = 'ql-mind-map-control'\n // 右上的控制面板\n const controlRightUpPanel = document.createElement('div')\n controlRightUpPanel.className = 'ql-mind-map-right-up-control'\n // 左上的控制面板\n const controlLeftUpPanel = document.createElement('div')\n controlLeftUpPanel.className = 'ql-mind-map-left-up-control'\n\n const handler = new MindMapControlPanelHandler(quill, blot)\n controlPanelHandlers.set(blot, handler)\n\n const zoomOutBtn = createControlItem('zoom-out', handler.getText('zoomOutTitle'), () => handleZoomOut(blot))\n const zoomInBtn = createControlItem('zoom-in', handler.getText('zoomInTitle'), () => handleZoomIn(blot))\n const resetBtn = createControlItem('fit', handler.getText('fitTitle'), () => handleResetZoom(blot))\n const backBtn = createControlItem('back', handler.getText('backTitle'), () => {\n if (!isStart) {\n blot.mindMap.execCommand('BACK')\n }\n })\n const forwardBtn = createControlItem('forward', handler.getText('forwardTitle'), () => {\n if (!isEnd) {\n blot.mindMap.execCommand('FORWARD')\n }\n })\n const insertChildNode = createControlItem('insert-child-node', handler.getText('inserChildNodeTitle'), () => handleInsertChildNode(blot))\n const insertNode = createControlItem('insert-node', handler.getText('inserNodeTitle'), () => handleInsertNode(blot))\n const insertParentNode = createControlItem('insert-parent-node', handler.getText('inserParentNodeTitle'), () => handleInsertParentNode(blot))\n const removeNode = createControlItem('remove-node', handler.getText('removeNodeTitle'), () => handleRemoveNode(blot))\n const insertIconBtn = createControlItem('insert-icon', handler.getText('insertIconTitle'), () => handleInsertIcon(blot, selectedNodes))\n const setLayoutBtn = createControlItem('set-layout-icon', handler.getText('setLayoutTitle'), () => handleSetLayoutBtn(blot))\n const panelStatusBtn = createControlItem('panel-status', handler.getText('panelStatusTitle'))\n const screenTypeBtn = createControlItem('screen-type', handler.getText('screenTypeTitle'), () => handleScreenTypeBtn(blot))\n const updateButtonState = (index: number, len: number) => {\n isStart = index <= 0\n isEnd = index >= len - 1\n backBtn.style.cursor = isStart ? 'not-allowed' : 'pointer'\n backBtn.style.opacity = isStart ? DISABLED_OPACITY : ENABLED_OPACITY\n forwardBtn.style.cursor = isEnd ? 'not-allowed' : 'pointer'\n forwardBtn.style.opacity = isEnd ? DISABLED_OPACITY : ENABLED_OPACITY\n }\n\n blot.mindMap.on('back_forward', (index: number, len: number) => {\n updateButtonState(index, len)\n })\n controlPanel.append(zoomOutBtn, zoomInBtn, resetBtn, screenTypeBtn, backBtn, forwardBtn)\n blot.domNode.appendChild(controlPanel)\n controlRightUpPanel.append(panelStatusBtn)\n blot.domNode.appendChild(controlRightUpPanel)\n controlLeftUpPanel.append(insertChildNode, insertNode, insertParentNode, removeNode, insertIconBtn, setLayoutBtn)\n blot.domNode.appendChild(controlLeftUpPanel)\n}\n\nfunction createControlItem(iconClass: string, title: string, onClick?: () => void, disabled = false) {\n const controlItem = document.createElement('div')\n controlItem.className = 'ql-mind-map-control-item'\n controlItem.title = title\n controlItem.dataset.controlType = iconClass\n controlItem.style.cursor = disabled ? 'not-allowed' : 'pointer'\n controlItem.style.opacity = disabled ? DISABLED_OPACITY : ENABLED_OPACITY\n\n const iconMap: Record<string, string> = {\n 'back': backIcon,\n 'forward': forwardIcon,\n 'zoom-out': zoomOutIcon,\n 'zoom-in': zoomInIcon,\n 'fit': fitIcon,\n 'insert-child-node': insertChildNodeIcon,\n 'insert-node': insertNodeIcon,\n 'insert-parent-node': insertParentNodeIcon,\n 'remove-node': removeNodeIcon,\n 'insert-icon': insertIconIcon,\n 'set-layout-icon': setLayoutIcon,\n 'screen-type': screenTypeIcon,\n 'panel-status': contractIcon,\n }\n\n const icon = document.createElement('i')\n icon.innerHTML = iconMap[iconClass] || ''\n controlItem.appendChild(icon)\n\n if (!disabled) {\n controlItem.addEventListener('click', onClick)\n }\n\n return controlItem\n}\n\nfunction handleInsertChildNode(blot: MindMapPlaceholderBlot): void {\n blot.mindMap.execCommand('INSERT_CHILD_NODE')\n}\n\nfunction handleInsertNode(blot: MindMapPlaceholderBlot): void {\n blot.mindMap.execCommand('INSERT_NODE')\n}\n\nfunction handleInsertParentNode(blot: MindMapPlaceholderBlot): void {\n blot.mindMap.execCommand('INSERT_PARENT_NODE')\n}\n\nfunction handleRemoveNode(blot: MindMapPlaceholderBlot): void {\n blot.mindMap.execCommand('REMOVE_CURRENT_NODE')\n}\n\nfunction handleZoomIn(blot: MindMapPlaceholderBlot): void {\n if (blot.mindMap && blot.mindMap.view) {\n const containerRect = blot.mindMap.el.getBoundingClientRect()\n const cx = containerRect.width / 2\n const cy = containerRect.height / 2\n blot.mindMap.view.enlarge(cx, cy, false)\n blot.zoomCount++\n }\n}\n\nfunction handleZoomOut(blot: MindMapPlaceholderBlot): void {\n if (blot.mindMap && blot.mindMap.view) {\n const containerRect = blot.mindMap.el.getBoundingClientRect()\n const cx = containerRect.width / 2\n const cy = containerRect.height / 2\n blot.mindMap.view.narrow(cx, cy, false)\n blot.zoomCount--\n }\n}\n\nfunction handleResetZoom(blot: MindMapPlaceholderBlot): void {\n blot.mindMap.renderer.setRootNodeCenter()\n if (!blot.mindMap || !blot.mindMap.view || blot.zoomCount === 0) return\n const containerRect = blot.mindMap.el.getBoundingClientRect()\n const centerX = containerRect.width / 2\n const centerY = containerRect.height / 2\n const operationCount = Math.abs(blot.zoomCount)\n const isEnlarge = blot.zoomCount < 0\n for (let i = 0; i < operationCount; i++) {\n if (isEnlarge) {\n blot.mindMap.view.enlarge(centerX, centerY, false)\n }\n else {\n blot.mindMap.view.narrow(centerX, centerY, false)\n }\n }\n blot.zoomCount = 0\n}\n\nfunction handleInsertIcon(blot: MindMapPlaceholderBlot, selectedNodes: any[]): void {\n (blot as any).selectedNodes = selectedNodes\n const heightStr = blot.domNode.getAttribute('height') || '500px'\n const height = Number.parseInt(heightStr.replace(/[^\\d.]/g, ''), 10) || 500\n let iconList = []\n const { deps } = getAllConfigs(blot.quill)\n iconList = deps.nodeIconList.nodeIconList ? deps.nodeIconList.nodeIconList : deps.nodeIconList\n const leftUpControl = blot.domNode.querySelector('.ql-mind-map-left-up-control') as HTMLElement\n let iconPanel = leftUpControl.querySelector('.ql-mind-map-icon-panel') as HTMLElement\n if (!iconPanel) {\n iconPanel = document.createElement('div')\n iconPanel.className = 'ql-mind-map-icon-panel'\n iconList?.forEach((group) => {\n const groupContainer = document.createElement('div')\n groupContainer.className = 'ql-mind-map-icon-group-container'\n\n group.list.forEach((icon: { icon: string, name: string }) => {\n const iconItem = document.createElement('div')\n iconItem.className = 'ql-mind-map-icon-item'\n iconItem.innerHTML = icon.icon\n\n iconItem.addEventListener('click', () => {\n const currentSelectedNodes = (blot as any).selectedNodes || []\n if (currentSelectedNodes.length > 0) {\n const node = currentSelectedNodes[0]\n\n if (node.getData('icon') && node.getData('icon')[0] === `${group.type}_${icon.name}`) {\n node.setIcon([])\n }\n else {\n node.setIcon([`${group.type}_${icon.name}`])\n }\n blot.data = blot.mindMap.getData({})\n blot.domNode.setAttribute('data-mind-map', JSON.stringify(blot.data))\n }\n iconPanel.style.display = 'none'\n })\n groupContainer.appendChild(iconItem)\n })\n iconPanel.appendChild(groupContainer)\n })\n if (height < 395) {\n iconPanel.style.height = `${height - 130}px`\n }\n else {\n iconPanel.style.height = '270px'\n }\n leftUpControl.appendChild(iconPanel)\n }\n else {\n if (height < 395) {\n iconPanel.style.height = `${height - 130}px`\n }\n else {\n iconPanel.style.height = '270px'\n }\n iconPanel.style.display = 'block'\n }\n\n const handleOutsideClick = (e: MouseEvent) => {\n let insertIconBtn: HTMLElement | null = null\n const controlItems = leftUpControl.querySelectorAll('.ql-mind-map-control-item')\n\n controlItems.forEach((item) => {\n if ((item as HTMLElement).dataset.controlType === 'insert-icon') {\n insertIconBtn = item as HTMLElement\n }\n })\n\n if (!iconPanel.contains(e.target as Node) && (!insertIconBtn || !insertIconBtn.contains(e.target as Node))) {\n iconPanel.style.display = 'none'\n document.removeEventListener('click', handleOutsideClick)\n }\n }\n document.removeEventListener('click', handleOutsideClick)\n document.addEventListener('click', handleOutsideClick)\n}\n\nfunction handleSetLayoutBtn(blot: MindMapPlaceholderBlot): void {\n const handler = controlPanelHandlers.get(blot)\n const leftUpControl = blot.domNode.querySelector('.ql-mind-map-left-up-control') as HTMLElement\n let layoutPanel = leftUpControl.querySelector('.ql-mind-map-layout-panel') as HTMLElement\n const heightStr = blot.domNode.getAttribute('height') || '500'\n const height = Number.parseInt(heightStr.replace(/[^\\d.]/g, ''), 10) || 500\n\n if (!layoutPanel) {\n layoutPanel = document.createElement('div')\n layoutPanel.className = 'ql-mind-map-layout-panel'\n\n const layouts = [\n {\n name: 'logicalStructure',\n displayName: handler?.getText('logicalStructureLayout'),\n icon: logicalStructureIcon,\n },\n {\n name: 'catalogOrganization',\n displayName: handler?.getText('catalogOrganizationLayout'),\n icon: catalogOrganizationIcon,\n },\n {\n name: 'mindMap',\n displayName: handler?.getText('mindMapLayout'),\n icon: mindMapIcon,\n },\n {\n name: 'organizationStructure',\n displayName: handler?.getText('organizationStructureLayout'),\n icon: organizationStructureIcon,\n },\n {\n name: 'timeline',\n displayName: handler?.getText('timelineLayout'),\n icon: timelineIcon,\n },\n {\n name: 'fishbone',\n displayName: handler?.getText('fishboneLayout'),\n icon: fishboneIcon,\n },\n ]\n\n layouts.forEach((layout) => {\n const layoutItem = document.createElement('div')\n layoutItem.className = 'ql-mind-map-layout-item'\n\n const iconContainer = document.createElement('div')\n iconContainer.className = 'ql-mind-map-layout-icon-container'\n\n const img = document.createElement('div')\n img.className = 'ql-mind-map-layout-icon'\n img.innerHTML = layout.icon\n img.style.display = 'flex'\n img.style.alignItems = 'center'\n img.style.justifyContent = 'center'\n const svgElement = img.querySelector('svg')\n\n svgElement.style.maxWidth = '100%'\n svgElement.style.maxHeight = '100%'\n svgElement.style.width = 'auto'\n svgElement.style.height = 'auto'\n svgElement.removeAttribute('width')\n svgElement.removeAttribute('height')\n\n iconContainer.appendChild(img)\n\n const nameText = document.createElement('div')\n nameText.className = 'ql-mind-map-layout-name'\n nameText.textContent = layout.displayName\n\n layoutItem.appendChild(iconContainer)\n layoutItem.appendChild(nameText)\n layoutItem.addEventListener('click', () => {\n blot.mindMap.setLayout(layout.name)\n blot.data = blot.mindMap.getData({})\n blot.domNode.setAttribute('data-mind-map', JSON.stringify(blot.data))\n layoutPanel.style.display = 'none'\n })\n layoutPanel.appendChild(layoutItem)\n })\n leftUpControl.appendChild(layoutPanel)\n if (height < 395) {\n layoutPanel.style.height = `${height - 130}px`\n }\n else {\n layoutPanel.style.height = '270px'\n }\n }\n else {\n if (height < 395) {\n layoutPanel.style.height = `${height - 130}px`\n }\n else {\n layoutPanel.style.height = '270px'\n }\n layoutPanel.style.display = 'flex'\n }\n\n const handleOutsideClick = (e: MouseEvent) => {\n let setLayoutBtn: HTMLElement | null = null\n const controlItems = leftUpControl.querySelectorAll('.ql-mind-map-control-item')\n\n setLayoutBtn = Array.from(controlItems).find(item => item.getAttribute('data-control-type') === 'set-layout-icon') as HTMLElement | null\n\n if (!layoutPanel.contains(e.target as Node) && (!setLayoutBtn || !setLayoutBtn.contains(e.target as Node))) {\n layoutPanel.style.display = 'none'\n document.removeEventListener('click', handleOutsideClick)\n }\n }\n document.removeEventListener('click', handleOutsideClick)\n document.addEventListener('click', handleOutsideClick)\n}\n\nfunction handleScreenTypeBtn(blot: MindMapPlaceholderBlot): void {\n const screenTypeBtn = blot.domNode.querySelector('[data-control-type=\"screen-type\"]') as HTMLElement | null\n if (!screenTypeBtn || !blot.domNode) return\n\n const mindMapContainer = blot.domNode\n const isFullscreen = mindMapContainer.style.position === 'fixed'\n\n if (isFullscreen) {\n const originalPosition = mindMapContainer.getAttribute('data-original-position')\n const originalWidth = mindMapContainer.getAttribute('data-original-width')\n const originalHeight = mindMapContainer.getAttribute('data-original-height')\n if (originalWidth && originalHeight) {\n mindMapContainer.style.position = originalPosition\n mindMapContainer.style.width = originalWidth\n mindMapContainer.style.height = originalHeight\n mindMapContainer.style.zIndex = '0'\n }\n const iconElement = screenTypeBtn.querySelector('i')\n if (iconElement) {\n iconElement.innerHTML = screenTypeIcon\n }\n }\n else {\n mindMapContainer.setAttribute('data-original-position', mindMapContainer.style.position || '')\n mindMapContainer.setAttribute('data-original-width', mindMapContainer.style.width || '')\n mindMapContainer.setAttribute('data-original-height', mindMapContainer.style.height || '')\n mindMapContainer.style.position = 'fixed'\n mindMapContainer.style.top = '0'\n mindMapContainer.style.left = '0'\n mindMapContainer.style.width = '100vw'\n mindMapContainer.style.height = '100vh'\n mindMapContainer.style.zIndex = '100'\n const iconElement = screenTypeBtn.querySelector('i')\n if (iconElement) {\n iconElement.innerHTML = screenReduceIcon\n }\n }\n blot.mindMap.renderer.setRootNodeCenter()\n blot.mindMap.resize()\n}\n"],"names":[],"mappings":";;;;;;;;;AAQA,MAAM,2BAA2B;AAAA,EAO/B,YAAoB,OAA6B,MAA8B;AANvE;AACA;AAKY,SAAA,QAAA;AAA6B,SAAA,OAAA;AAC/C,UAAM,aAAa,KAAK,MAAM,UAAU,MAAM;AAC9C,wBAAoB,IAAI;AACxB,SAAK,OAAO,WAAW,QAAQ;AAC/B,SAAK,QAAQ,KAAK,aAAA;AAClB,SAAK,MAAM,QAAQ,GAAG,uBAAuB,CAAC,SAAiB;AAC7D,WAAK,OAAO;AACZ,WAAK,QAAQ,KAAK,aAAA;AAClB,WAAK,wBAAA;AAAA,IACP,CAAC;AAAA,EACH;AAAA,EAdA,QAAQ,KAA2C;AACjD,WAAO,KAAK,MAAM,GAAG;AAAA,EACvB;AAAA,EAcA,eAAe;AACb,UAAM,WAAW;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAGF,WAAO,SAAS,OAAO,CAAC,KAAK,QAAQ;AACnC,UAAI,CAAC,IAAI,SAAS,OAAO,GAAG;AAC1B,YAAI,GAAG,IAAI,KAAK,WAAW,kBAAkB,IAAI,QAAQ,UAAU,EAAE,CAAC,IAAI,KAAK,IAAI;AAAA,MACrF,OACK;AACH,YAAI,GAAG,IAAI,KAAK,WAAW,wBAAwB,GAAG,IAAI,KAAK,IAAI;AAAA,MACrE;AACA,aAAO;AAAA,IACT,GAAG,CAAA,CAA4B;AAAA,EACjC;AAAA,EAEA,0BAA0B;AACxB,UAAM,eAAe,KAAK,KAAK,QAAQ,iBAAiB,2BAA2B;AAEnF,UAAM,iBAAyC;AAAA,MAC7C,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,qBAAqB;AAAA,MACrB,eAAe;AAAA,MACf,eAAe;AAAA,MACf,sBAAsB;AAAA,MACtB,eAAe;AAAA,MACf,mBAAmB;AAAA,MACnB,gBAAgB;AAAA,MAChB,eAAe;AAAA,IAAA;AAGjB,iBAAa,QAAQ,CAAC,SAAS;AAC7B,YAAM,cAAe,KAAqB,QAAQ;AAClD,UAAI,eAAe,eAAe,WAAW,KAAK,KAAK,MAAM,eAAe,WAAW,CAAC,GAAG;AACxF,aAAqB,QAAQ,KAAK,MAAM,eAAe,WAAW,CAAC;AAAA,MACtE;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,MAAM,2CAA2B,QAAA;AAEjC,MAAM,mBAAmB;AACzB,MAAM,kBAAkB;AACjB,SAAS,mBAAmB,MAA8B,OAA2B;AAC1F,MAAI,UAAU;AACd,MAAI,QAAQ;AACZ,MAAI,gBAAuB,CAAA;AAC3B,OAAK,QAAQ,GAAG,eAAe,IAAI,SAAoB;AACrD,oBAAgB,MAAM,QAAQ,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAA;AAAA,EACrD,CAAC;AAED,QAAM,eAAe,SAAS,cAAc,KAAK;AACjD,eAAa,YAAY;AAEzB,QAAM,sBAAsB,SAAS,cAAc,KAAK;AACxD,sBAAoB,YAAY;AAEhC,QAAM,qBAAqB,SAAS,cAAc,KAAK;AACvD,qBAAmB,YAAY;AAE/B,QAAM,UAAU,IAAI,2BAA2B,OAAO,IAAI;AAC1D,uBAAqB,IAAI,MAAM,OAAO;AAEtC,QAAM,aAAa,kBAAkB,YAAY,QAAQ,QAAQ,cAAc,GAAG,MAAM,cAAc,IAAI,CAAC;AAC3G,QAAM,YAAY,kBAAkB,WAAW,QAAQ,QAAQ,aAAa,GAAG,MAAM,aAAa,IAAI,CAAC;AACvG,QAAM,WAAW,kBAAkB,OAAO,QAAQ,QAAQ,UAAU,GAAG,MAAM,gBAAgB,IAAI,CAAC;AAClG,QAAM,UAAU,kBAAkB,QAAQ,QAAQ,QAAQ,WAAW,GAAG,MAAM;AAC5E,QAAI,CAAC,SAAS;AACZ,WAAK,QAAQ,YAAY,MAAM;AAAA,IACjC;AAAA,EACF,CAAC;AACD,QAAM,aAAa,kBAAkB,WAAW,QAAQ,QAAQ,cAAc,GAAG,MAAM;AACrF,QAAI,CAAC,OAAO;AACV,WAAK,QAAQ,YAAY,SAAS;AAAA,IACpC;AAAA,EACF,CAAC;AACD,QAAM,kBAAkB,kBAAkB,qBAAqB,QAAQ,QAAQ,qBAAqB,GAAG,MAAM,sBAAsB,IAAI,CAAC;AACxI,QAAM,aAAa,kBAAkB,eAAe,QAAQ,QAAQ,gBAAgB,GAAG,MAAM,iBAAiB,IAAI,CAAC;AACnH,QAAM,mBAAmB,kBAAkB,sBAAsB,QAAQ,QAAQ,sBAAsB,GAAG,MAAM,uBAAuB,IAAI,CAAC;AAC5I,QAAM,aAAa,kBAAkB,eAAe,QAAQ,QAAQ,iBAAiB,GAAG,MAAM,iBAAiB,IAAI,CAAC;AACpH,QAAM,gBAAgB,kBAAkB,eAAe,QAAQ,QAAQ,iBAAiB,GAAG,MAAM,iBAAiB,MAAM,aAAa,CAAC;AACtI,QAAM,eAAe,kBAAkB,mBAAmB,QAAQ,QAAQ,gBAAgB,GAAG,MAAM,mBAAmB,IAAI,CAAC;AAC3H,QAAM,iBAAiB,kBAAkB,gBAAgB,QAAQ,QAAQ,kBAAkB,CAAC;AAC5F,QAAM,gBAAgB,kBAAkB,eAAe,QAAQ,QAAQ,iBAAiB,GAAG,MAAM,oBAAoB,IAAI,CAAC;AAC1H,QAAM,oBAAoB,CAAC,OAAe,QAAgB;AACxD,cAAU,SAAS;AACnB,YAAQ,SAAS,MAAM;AACvB,YAAQ,MAAM,SAAS,UAAU,gBAAgB;AACjD,YAAQ,MAAM,UAAU,UAAU,mBAAmB;AACrD,eAAW,MAAM,SAAS,QAAQ,gBAAgB;AAClD,eAAW,MAAM,UAAU,QAAQ,mBAAmB;AAAA,EACxD;AAEA,OAAK,QAAQ,GAAG,gBAAgB,CAAC,OAAe,QAAgB;AAC9D,sBAAkB,OAAO,GAAG;AAAA,EAC9B,CAAC;AACD,eAAa,OAAO,YAAY,WAAW,UAAU,eAAe,SAAS,UAAU;AACvF,OAAK,QAAQ,YAAY,YAAY;AACrC,sBAAoB,OAAO,cAAc;AACzC,OAAK,QAAQ,YAAY,mBAAmB;AAC5C,qBAAmB,OAAO,iBAAiB,YAAY,kBAAkB,YAAY,eAAe,YAAY;AAChH,OAAK,QAAQ,YAAY,kBAAkB;AAC7C;AAEA,SAAS,kBAAkB,WAAmB,OAAe,SAAsB,WAAW,OAAO;AACnG,QAAM,cAAc,SAAS,cAAc,KAAK;AAChD,cAAY,YAAY;AACxB,cAAY,QAAQ;AACpB,cAAY,QAAQ,cAAc;AAClC,cAAY,MAAM,SAAS,WAAW,gBAAgB;AACtD,cAAY,MAAM,UAAU,WAAW,mBAAmB;AAE1D,QAAM,UAAkC;AAAA,IACtC,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,OAAO;AAAA,IACP,qBAAqB;AAAA,IACrB,eAAe;AAAA,IACf,sBAAsB;AAAA,IACtB,eAAe;AAAA,IACf,eAAe;AAAA,IACf,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf,gBAAgB;AAAA,EAAA;AAGlB,QAAM,OAAO,SAAS,cAAc,GAAG;AACvC,OAAK,YAAY,QAAQ,SAAS,KAAK;AACvC,cAAY,YAAY,IAAI;AAE5B,MAAI,CAAC,UAAU;AACb,gBAAY,iBAAiB,SAAS,OAAO;AAAA,EAC/C;AAEA,SAAO;AACT;AAEA,SAAS,sBAAsB,MAAoC;AACjE,OAAK,QAAQ,YAAY,mBAAmB;AAC9C;AAEA,SAAS,iBAAiB,MAAoC;AAC5D,OAAK,QAAQ,YAAY,aAAa;AACxC;AAEA,SAAS,uBAAuB,MAAoC;AAClE,OAAK,QAAQ,YAAY,oBAAoB;AAC/C;AAEA,SAAS,iBAAiB,MAAoC;AAC5D,OAAK,QAAQ,YAAY,qBAAqB;AAChD;AAEA,SAAS,aAAa,MAAoC;AACxD,MAAI,KAAK,WAAW,KAAK,QAAQ,MAAM;AACrC,UAAM,gBAAgB,KAAK,QAAQ,GAAG,sBAAA;AACtC,UAAM,KAAK,cAAc,QAAQ;AACjC,UAAM,KAAK,cAAc,SAAS;AAClC,SAAK,QAAQ,KAAK,QAAQ,IAAI,IAAI,KAAK;AACvC,SAAK;AAAA,EACP;AACF;AAEA,SAAS,cAAc,MAAoC;AACzD,MAAI,KAAK,WAAW,KAAK,QAAQ,MAAM;AACrC,UAAM,gBAAgB,KAAK,QAAQ,GAAG,sBAAA;AACtC,UAAM,KAAK,cAAc,QAAQ;AACjC,UAAM,KAAK,cAAc,SAAS;AAClC,SAAK,QAAQ,KAAK,OAAO,IAAI,IAAI,KAAK;AACtC,SAAK;AAAA,EACP;AACF;AAEA,SAAS,gBAAgB,MAAoC;AAC3D,OAAK,QAAQ,SAAS,kBAAA;AACtB,MAAI,CAAC,KAAK,WAAW,CAAC,KAAK,QAAQ,QAAQ,KAAK,cAAc,EAAG;AACjE,QAAM,gBAAgB,KAAK,QAAQ,GAAG,sBAAA;AACtC,QAAM,UAAU,cAAc,QAAQ;AACtC,QAAM,UAAU,cAAc,SAAS;AACvC,QAAM,iBAAiB,KAAK,IAAI,KAAK,SAAS;AAC9C,QAAM,YAAY,KAAK,YAAY;AACnC,WAAS,IAAI,GAAG,IAAI,gBAAgB,KAAK;AACvC,QAAI,WAAW;AACb,WAAK,QAAQ,KAAK,QAAQ,SAAS,SAAS,KAAK;AAAA,IACnD,OACK;AACH,WAAK,QAAQ,KAAK,OAAO,SAAS,SAAS,KAAK;AAAA,IAClD;AAAA,EACF;AACA,OAAK,YAAY;AACnB;AAEA,SAAS,iBAAiB,MAA8B,eAA4B;AACjF,OAAa,gBAAgB;AAC9B,QAAM,YAAY,KAAK,QAAQ,aAAa,QAAQ,KAAK;AACzD,QAAM,SAAS,OAAO,SAAS,UAAU,QAAQ,WAAW,EAAE,GAAG,EAAE,KAAK;AACxE,MAAI,WAAW,CAAA;AACf,QAAM,EAAE,KAAA,IAAS,cAAc,KAAK,KAAK;AACzC,aAAW,KAAK,aAAa,eAAe,KAAK,aAAa,eAAe,KAAK;AAClF,QAAM,gBAAgB,KAAK,QAAQ,cAAc,8BAA8B;AAC/E,MAAI,YAAY,cAAc,cAAc,yBAAyB;AACrE,MAAI,CAAC,WAAW;AACd,gBAAY,SAAS,cAAc,KAAK;AACxC,cAAU,YAAY;AACtB,yCAAU,QAAQ,CAAC,UAAU;AAC3B,YAAM,iBAAiB,SAAS,cAAc,KAAK;AACnD,qBAAe,YAAY;AAE3B,YAAM,KAAK,QAAQ,CAAC,SAAyC;AAC3D,cAAM,WAAW,SAAS,cAAc,KAAK;AAC7C,iBAAS,YAAY;AACrB,iBAAS,YAAY,KAAK;AAE1B,iBAAS,iBAAiB,SAAS,MAAM;AACvC,gBAAM,uBAAwB,KAAa,iBAAiB,CAAA;AAC5D,cAAI,qBAAqB,SAAS,GAAG;AACnC,kBAAM,OAAO,qBAAqB,CAAC;AAEnC,gBAAI,KAAK,QAAQ,MAAM,KAAK,KAAK,QAAQ,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI;AACpF,mBAAK,QAAQ,EAAE;AAAA,YACjB,OACK;AACH,mBAAK,QAAQ,CAAC,GAAG,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;AAAA,YAC7C;AACA,iBAAK,OAAO,KAAK,QAAQ,QAAQ,CAAA,CAAE;AACnC,iBAAK,QAAQ,aAAa,iBAAiB,KAAK,UAAU,KAAK,IAAI,CAAC;AAAA,UACtE;AACA,oBAAU,MAAM,UAAU;AAAA,QAC5B,CAAC;AACD,uBAAe,YAAY,QAAQ;AAAA,MACrC,CAAC;AACD,gBAAU,YAAY,cAAc;AAAA,IACtC;AACA,QAAI,SAAS,KAAK;AAChB,gBAAU,MAAM,SAAS,GAAG,SAAS,GAAG;AAAA,IAC1C,OACK;AACH,gBAAU,MAAM,SAAS;AAAA,IAC3B;AACA,kBAAc,YAAY,SAAS;AAAA,EACrC,OACK;AACH,QAAI,SAAS,KAAK;AAChB,gBAAU,MAAM,SAAS,GAAG,SAAS,GAAG;AAAA,IAC1C,OACK;AACH,gBAAU,MAAM,SAAS;AAAA,IAC3B;AACA,cAAU,MAAM,UAAU;AAAA,EAC5B;AAEA,QAAM,qBAAqB,CAAC,MAAkB;AAC5C,QAAI,gBAAoC;AACxC,UAAM,eAAe,cAAc,iBAAiB,2BAA2B;AAE/E,iBAAa,QAAQ,CAAC,SAAS;AAC7B,UAAK,KAAqB,QAAQ,gBAAgB,eAAe;AAC/D,wBAAgB;AAAA,MAClB;AAAA,IACF,CAAC;AAED,QAAI,CAAC,UAAU,SAAS,EAAE,MAAc,MAAM,CAAC,iBAAiB,CAAC,cAAc,SAAS,EAAE,MAAc,IAAI;AAC1G,gBAAU,MAAM,UAAU;AAC1B,eAAS,oBAAoB,SAAS,kBAAkB;AAAA,IAC1D;AAAA,EACF;AACA,WAAS,oBAAoB,SAAS,kBAAkB;AACxD,WAAS,iBAAiB,SAAS,kBAAkB;AACvD;AAEA,SAAS,mBAAmB,MAAoC;AAC9D,QAAM,UAAU,qBAAqB,IAAI,IAAI;AAC7C,QAAM,gBAAgB,KAAK,QAAQ,cAAc,8BAA8B;AAC/E,MAAI,cAAc,cAAc,cAAc,2BAA2B;AACzE,QAAM,YAAY,KAAK,QAAQ,aAAa,QAAQ,KAAK;AACzD,QAAM,SAAS,OAAO,SAAS,UAAU,QAAQ,WAAW,EAAE,GAAG,EAAE,KAAK;AAExE,MAAI,CAAC,aAAa;AAChB,kBAAc,SAAS,cAAc,KAAK;AAC1C,gBAAY,YAAY;AAExB,UAAM,UAAU;AAAA,MACd;AAAA,QACE,MAAM;AAAA,QACN,aAAa,mCAAS,QAAQ;AAAA,QAC9B,MAAM;AAAA,MAAA;AAAA,MAER;AAAA,QACE,MAAM;AAAA,QACN,aAAa,mCAAS,QAAQ;AAAA,QAC9B,MAAM;AAAA,MAAA;AAAA,MAER;AAAA,QACE,MAAM;AAAA,QACN,aAAa,mCAAS,QAAQ;AAAA,QAC9B,MAAM;AAAA,MAAA;AAAA,MAER;AAAA,QACE,MAAM;AAAA,QACN,aAAa,mCAAS,QAAQ;AAAA,QAC9B,MAAM;AAAA,MAAA;AAAA,MAER;AAAA,QACE,MAAM;AAAA,QACN,aAAa,mCAAS,QAAQ;AAAA,QAC9B,MAAM;AAAA,MAAA;AAAA,MAER;AAAA,QACE,MAAM;AAAA,QACN,aAAa,mCAAS,QAAQ;AAAA,QAC9B,MAAM;AAAA,MAAA;AAAA,IACR;AAGF,YAAQ,QAAQ,CAAC,WAAW;AAC1B,YAAM,aAAa,SAAS,cAAc,KAAK;AAC/C,iBAAW,YAAY;AAEvB,YAAM,gBAAgB,SAAS,cAAc,KAAK;AAClD,oBAAc,YAAY;AAE1B,YAAM,MAAM,SAAS,cAAc,KAAK;AACxC,UAAI,YAAY;AAChB,UAAI,YAAY,OAAO;AACvB,UAAI,MAAM,UAAU;AACpB,UAAI,MAAM,aAAa;AACvB,UAAI,MAAM,iBAAiB;AAC3B,YAAM,aAAa,IAAI,cAAc,KAAK;AAE1C,iBAAW,MAAM,WAAW;AAC5B,iBAAW,MAAM,YAAY;AAC7B,iBAAW,MAAM,QAAQ;AACzB,iBAAW,MAAM,SAAS;AAC1B,iBAAW,gBAAgB,OAAO;AAClC,iBAAW,gBAAgB,QAAQ;AAEnC,oBAAc,YAAY,GAAG;AAE7B,YAAM,WAAW,SAAS,cAAc,KAAK;AAC7C,eAAS,YAAY;AACrB,eAAS,cAAc,OAAO;AAE9B,iBAAW,YAAY,aAAa;AACpC,iBAAW,YAAY,QAAQ;AAC/B,iBAAW,iBAAiB,SAAS,MAAM;AACzC,aAAK,QAAQ,UAAU,OAAO,IAAI;AAClC,aAAK,OAAO,KAAK,QAAQ,QAAQ,CAAA,CAAE;AACnC,aAAK,QAAQ,aAAa,iBAAiB,KAAK,UAAU,KAAK,IAAI,CAAC;AACpE,oBAAY,MAAM,UAAU;AAAA,MAC9B,CAAC;AACD,kBAAY,YAAY,UAAU;AAAA,IACpC,CAAC;AACD,kBAAc,YAAY,WAAW;AACrC,QAAI,SAAS,KAAK;AAChB,kBAAY,MAAM,SAAS,GAAG,SAAS,GAAG;AAAA,IAC5C,OACK;AACH,kBAAY,MAAM,SAAS;AAAA,IAC7B;AAAA,EACF,OACK;AACH,QAAI,SAAS,KAAK;AAChB,kBAAY,MAAM,SAAS,GAAG,SAAS,GAAG;AAAA,IAC5C,OACK;AACH,kBAAY,MAAM,SAAS;AAAA,IAC7B;AACA,gBAAY,MAAM,UAAU;AAAA,EAC9B;AAEA,QAAM,qBAAqB,CAAC,MAAkB;AAC5C,QAAI,eAAmC;AACvC,UAAM,eAAe,cAAc,iBAAiB,2BAA2B;AAE/E,mBAAe,MAAM,KAAK,YAAY,EAAE,KAAK,UAAQ,KAAK,aAAa,mBAAmB,MAAM,iBAAiB;AAEjH,QAAI,CAAC,YAAY,SAAS,EAAE,MAAc,MAAM,CAAC,gBAAgB,CAAC,aAAa,SAAS,EAAE,MAAc,IAAI;AAC1G,kBAAY,MAAM,UAAU;AAC5B,eAAS,oBAAoB,SAAS,kBAAkB;AAAA,IAC1D;AAAA,EACF;AACA,WAAS,oBAAoB,SAAS,kBAAkB;AACxD,WAAS,iBAAiB,SAAS,kBAAkB;AACvD;AAEA,SAAS,oBAAoB,MAAoC;AAC/D,QAAM,gBAAgB,KAAK,QAAQ,cAAc,mCAAmC;AACpF,MAAI,CAAC,iBAAiB,CAAC,KAAK,QAAS;AAErC,QAAM,mBAAmB,KAAK;AAC9B,QAAM,eAAe,iBAAiB,MAAM,aAAa;AAEzD,MAAI,cAAc;AAChB,UAAM,mBAAmB,iBAAiB,aAAa,wBAAwB;AAC/E,UAAM,gBAAgB,iBAAiB,aAAa,qBAAqB;AACzE,UAAM,iBAAiB,iBAAiB,aAAa,sBAAsB;AAC3E,QAAI,iBAAiB,gBAAgB;AACnC,uBAAiB,MAAM,WAAW;AAClC,uBAAiB,MAAM,QAAQ;AAC/B,uBAAiB,MAAM,SAAS;AAChC,uBAAiB,MAAM,SAAS;AAAA,IAClC;AACA,UAAM,cAAc,cAAc,cAAc,GAAG;AACnD,QAAI,aAAa;AACf,kBAAY,YAAY;AAAA,IAC1B;AAAA,EACF,OACK;AACH,qBAAiB,aAAa,0BAA0B,iBAAiB,MAAM,YAAY,EAAE;AAC7F,qBAAiB,aAAa,uBAAuB,iBAAiB,MAAM,SAAS,EAAE;AACvF,qBAAiB,aAAa,wBAAwB,iBAAiB,MAAM,UAAU,EAAE;AACzF,qBAAiB,MAAM,WAAW;AAClC,qBAAiB,MAAM,MAAM;AAC7B,qBAAiB,MAAM,OAAO;AAC9B,qBAAiB,MAAM,QAAQ;AAC/B,qBAAiB,MAAM,SAAS;AAChC,qBAAiB,MAAM,SAAS;AAChC,UAAM,cAAc,cAAc,cAAc,GAAG;AACnD,QAAI,aAAa;AACf,kBAAY,YAAY;AAAA,IAC1B;AAAA,EACF;AACA,OAAK,QAAQ,SAAS,kBAAA;AACtB,OAAK,QAAQ,OAAA;AACf;"}
@@ -0,0 +1,161 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
+ const MIN_WIDTH = 350;
5
+ const MIN_HEIGHT = 290;
6
+ const HEIGHT_THRESHOLD = 395;
7
+ const PANEL_HEIGHT_OFFSET = 130;
8
+ class MindMapResizeAction {
9
+ constructor(blot) {
10
+ __publicField(this, "topLeftHandle");
11
+ __publicField(this, "topRightHandle");
12
+ __publicField(this, "bottomRightHandle");
13
+ __publicField(this, "bottomLeftHandle");
14
+ __publicField(this, "dragHandle", null);
15
+ __publicField(this, "dragStartX", 0);
16
+ __publicField(this, "dragStartY", 0);
17
+ __publicField(this, "preDragWidth", 0);
18
+ __publicField(this, "preDragHeight", 0);
19
+ __publicField(this, "targetRatio", 0);
20
+ __publicField(this, "blot");
21
+ this.blot = blot;
22
+ this.topLeftHandle = this.createHandle("top-left", "nwse-resize");
23
+ this.topRightHandle = this.createHandle("top-right", "nesw-resize");
24
+ this.bottomRightHandle = this.createHandle("bottom-right", "nwse-resize");
25
+ this.bottomLeftHandle = this.createHandle("bottom-left", "nesw-resize");
26
+ this.init();
27
+ }
28
+ isFullscreen() {
29
+ const container = this.blot.domNode;
30
+ return container.style.position === "fixed" && container.style.width === "100vw" && container.style.height === "100vh";
31
+ }
32
+ init() {
33
+ const container = this.blot.domNode;
34
+ container.style.position = "relative";
35
+ container.appendChild(this.topLeftHandle);
36
+ container.appendChild(this.topRightHandle);
37
+ container.appendChild(this.bottomRightHandle);
38
+ container.appendChild(this.bottomLeftHandle);
39
+ this.repositionHandles();
40
+ }
41
+ createHandle(position, cursor) {
42
+ const box = document.createElement("div");
43
+ box.classList.add("ql-mind-map-resize-handle");
44
+ box.setAttribute("data-position", position);
45
+ Object.assign(box.style, {
46
+ cursor,
47
+ position: "absolute",
48
+ width: "10px",
49
+ height: "10px",
50
+ background: "#4285f4",
51
+ border: "1px solid white",
52
+ borderRadius: "50%",
53
+ zIndex: "99",
54
+ userSelect: "none"
55
+ });
56
+ box.addEventListener("mousedown", this.onMouseDown.bind(this));
57
+ return box;
58
+ }
59
+ repositionHandles() {
60
+ const container = this.blot.domNode;
61
+ const rect = container.getBoundingClientRect();
62
+ Object.assign(this.topLeftHandle.style, {
63
+ left: "-5px",
64
+ top: "-5px"
65
+ });
66
+ Object.assign(this.topRightHandle.style, {
67
+ right: "-5px",
68
+ top: "-5px"
69
+ });
70
+ Object.assign(this.bottomRightHandle.style, {
71
+ right: "-5px",
72
+ bottom: "-5px"
73
+ });
74
+ Object.assign(this.bottomLeftHandle.style, {
75
+ left: "-5px",
76
+ bottom: "-5px"
77
+ });
78
+ }
79
+ onMouseDown(event) {
80
+ if (this.isFullscreen()) {
81
+ return;
82
+ }
83
+ if (!(event.target instanceof HTMLElement)) {
84
+ return;
85
+ }
86
+ this.dragHandle = event.target;
87
+ document.body.style.cursor = this.dragHandle.style.cursor;
88
+ const container = this.blot.domNode;
89
+ const rect = container.getBoundingClientRect();
90
+ this.dragStartX = event.clientX;
91
+ this.dragStartY = event.clientY;
92
+ this.preDragWidth = rect.width;
93
+ this.preDragHeight = rect.height;
94
+ this.targetRatio = rect.height / rect.width;
95
+ event.preventDefault();
96
+ document.addEventListener("mousemove", this.onDrag.bind(this));
97
+ document.addEventListener("mouseup", this.onMouseUp.bind(this));
98
+ }
99
+ updateDependentElementsHeight(newHeight) {
100
+ const iconPanel = this.blot.domNode.querySelector(".ql-mind-map-icon-panel");
101
+ const layoutPanel = this.blot.domNode.querySelector(".ql-mind-map-layout-panel");
102
+ if (iconPanel && newHeight < HEIGHT_THRESHOLD) {
103
+ iconPanel.style.height = `${newHeight - PANEL_HEIGHT_OFFSET}px`;
104
+ }
105
+ if (layoutPanel && newHeight < HEIGHT_THRESHOLD) {
106
+ layoutPanel.style.height = `${newHeight - PANEL_HEIGHT_OFFSET}px`;
107
+ }
108
+ }
109
+ onDrag(event) {
110
+ if (!this.dragHandle) return;
111
+ const container = this.blot.domNode;
112
+ let newWidth = this.preDragWidth;
113
+ let newHeight = this.preDragHeight;
114
+ const deltaX = event.clientX - this.dragStartX;
115
+ const deltaY = event.clientY - this.dragStartY;
116
+ switch (this.dragHandle.dataset.position) {
117
+ case "top-left":
118
+ newWidth = Math.max(MIN_WIDTH, this.preDragWidth - deltaX);
119
+ newHeight = Math.max(MIN_HEIGHT, this.preDragHeight - deltaY);
120
+ break;
121
+ case "top-right":
122
+ newWidth = Math.max(MIN_WIDTH, this.preDragWidth + deltaX);
123
+ newHeight = Math.max(MIN_HEIGHT, this.preDragHeight - deltaY);
124
+ break;
125
+ case "bottom-right":
126
+ newWidth = Math.max(MIN_WIDTH, this.preDragWidth + deltaX);
127
+ newHeight = Math.max(MIN_HEIGHT, this.preDragHeight + deltaY);
128
+ break;
129
+ case "bottom-left":
130
+ newWidth = Math.max(MIN_WIDTH, this.preDragWidth - deltaX);
131
+ newHeight = Math.max(MIN_HEIGHT, this.preDragHeight + deltaY);
132
+ break;
133
+ }
134
+ container.style.width = `${newWidth}px`;
135
+ container.style.height = `${newHeight}px`;
136
+ container.setAttribute("width", String(newWidth));
137
+ container.setAttribute("height", String(newHeight));
138
+ this.updateDependentElementsHeight(newHeight);
139
+ if (this.blot.mindMap) {
140
+ this.blot.mindMap.resize(newWidth, newHeight);
141
+ }
142
+ container.setAttribute("data-mind-map", JSON.stringify(this.blot.data));
143
+ }
144
+ onMouseUp() {
145
+ document.body.style.cursor = "";
146
+ document.removeEventListener("mousemove", this.onDrag.bind(this));
147
+ document.removeEventListener("mouseup", this.onMouseUp.bind(this));
148
+ this.dragHandle = null;
149
+ }
150
+ destroy() {
151
+ const container = this.blot.domNode;
152
+ container.removeChild(this.topLeftHandle);
153
+ container.removeChild(this.topRightHandle);
154
+ container.removeChild(this.bottomRightHandle);
155
+ container.removeChild(this.bottomLeftHandle);
156
+ }
157
+ }
158
+ export {
159
+ MindMapResizeAction
160
+ };
161
+ //# sourceMappingURL=custom-resize-action.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-resize-action.es.js","sources":["../../../../../src/modules/mind-map/modules/custom-resize-action.ts"],"sourcesContent":["const MIN_WIDTH = 350\nconst MIN_HEIGHT = 290\nconst HEIGHT_THRESHOLD = 395\nconst PANEL_HEIGHT_OFFSET = 130\n\nexport class MindMapResizeAction {\n topLeftHandle: HTMLElement\n topRightHandle: HTMLElement\n bottomRightHandle: HTMLElement\n bottomLeftHandle: HTMLElement\n dragHandle: HTMLElement | null = null\n dragStartX: number = 0\n dragStartY: number = 0\n preDragWidth: number = 0\n preDragHeight: number = 0\n targetRatio: number = 0\n blot: any\n\n constructor(blot: any) {\n this.blot = blot\n this.topLeftHandle = this.createHandle('top-left', 'nwse-resize')\n this.topRightHandle = this.createHandle('top-right', 'nesw-resize')\n this.bottomRightHandle = this.createHandle('bottom-right', 'nwse-resize')\n this.bottomLeftHandle = this.createHandle('bottom-left', 'nesw-resize')\n this.init()\n }\n\n isFullscreen(): boolean {\n const container = this.blot.domNode\n return container.style.position === 'fixed' && container.style.width === '100vw' && container.style.height === '100vh'\n }\n\n init() {\n const container = this.blot.domNode\n container.style.position = 'relative'\n container.appendChild(this.topLeftHandle)\n container.appendChild(this.topRightHandle)\n container.appendChild(this.bottomRightHandle)\n container.appendChild(this.bottomLeftHandle)\n this.repositionHandles()\n }\n\n createHandle(position: string, cursor: string): HTMLElement {\n const box = document.createElement('div')\n box.classList.add('ql-mind-map-resize-handle')\n box.setAttribute('data-position', position)\n Object.assign(box.style, {\n cursor,\n position: 'absolute',\n width: '10px',\n height: '10px',\n background: '#4285f4',\n border: '1px solid white',\n borderRadius: '50%',\n zIndex: '99',\n userSelect: 'none',\n })\n box.addEventListener('mousedown', this.onMouseDown.bind(this))\n return box\n }\n\n repositionHandles() {\n const container = this.blot.domNode\n const rect = container.getBoundingClientRect()\n\n Object.assign(this.topLeftHandle.style, {\n left: '-5px',\n top: '-5px',\n })\n Object.assign(this.topRightHandle.style, {\n right: '-5px',\n top: '-5px',\n })\n Object.assign(this.bottomRightHandle.style, {\n right: '-5px',\n bottom: '-5px',\n })\n Object.assign(this.bottomLeftHandle.style, {\n left: '-5px',\n bottom: '-5px',\n })\n }\n\n onMouseDown(event: MouseEvent) {\n if (this.isFullscreen()) {\n return\n }\n if (!(event.target instanceof HTMLElement)) {\n return\n }\n\n this.dragHandle = event.target\n document.body.style.cursor = this.dragHandle.style.cursor\n\n const container = this.blot.domNode\n const rect = container.getBoundingClientRect()\n\n this.dragStartX = event.clientX\n this.dragStartY = event.clientY\n this.preDragWidth = rect.width\n this.preDragHeight = rect.height\n this.targetRatio = rect.height / rect.width\n\n event.preventDefault()\n document.addEventListener('mousemove', this.onDrag.bind(this))\n document.addEventListener('mouseup', this.onMouseUp.bind(this))\n }\n\n updateDependentElementsHeight(newHeight: number) {\n const iconPanel = this.blot.domNode.querySelector('.ql-mind-map-icon-panel') as HTMLElement\n const layoutPanel = this.blot.domNode.querySelector('.ql-mind-map-layout-panel') as HTMLElement\n if (iconPanel && newHeight < HEIGHT_THRESHOLD) {\n iconPanel.style.height = `${newHeight - PANEL_HEIGHT_OFFSET}px`\n }\n if (layoutPanel && newHeight < HEIGHT_THRESHOLD) {\n layoutPanel.style.height = `${newHeight - PANEL_HEIGHT_OFFSET}px`\n }\n }\n\n onDrag(event: MouseEvent) {\n if (!this.dragHandle) return\n\n const container = this.blot.domNode\n let newWidth = this.preDragWidth\n let newHeight = this.preDragHeight\n\n const deltaX = event.clientX - this.dragStartX\n const deltaY = event.clientY - this.dragStartY\n\n switch (this.dragHandle.dataset.position) {\n case 'top-left':\n newWidth = Math.max(MIN_WIDTH, this.preDragWidth - deltaX)\n newHeight = Math.max(MIN_HEIGHT, this.preDragHeight - deltaY)\n break\n case 'top-right':\n newWidth = Math.max(MIN_WIDTH, this.preDragWidth + deltaX)\n newHeight = Math.max(MIN_HEIGHT, this.preDragHeight - deltaY)\n break\n case 'bottom-right':\n newWidth = Math.max(MIN_WIDTH, this.preDragWidth + deltaX)\n newHeight = Math.max(MIN_HEIGHT, this.preDragHeight + deltaY)\n break\n case 'bottom-left':\n newWidth = Math.max(MIN_WIDTH, this.preDragWidth - deltaX)\n newHeight = Math.max(MIN_HEIGHT, this.preDragHeight + deltaY)\n break\n }\n\n container.style.width = `${newWidth}px`\n container.style.height = `${newHeight}px`\n container.setAttribute('width', String(newWidth))\n container.setAttribute('height', String(newHeight))\n this.updateDependentElementsHeight(newHeight)\n if (this.blot.mindMap) {\n this.blot.mindMap.resize(newWidth, newHeight)\n }\n\n container.setAttribute('data-mind-map', JSON.stringify(this.blot.data))\n }\n\n onMouseUp() {\n document.body.style.cursor = ''\n document.removeEventListener('mousemove', this.onDrag.bind(this))\n document.removeEventListener('mouseup', this.onMouseUp.bind(this))\n this.dragHandle = null\n }\n\n destroy() {\n const container = this.blot.domNode\n container.removeChild(this.topLeftHandle)\n container.removeChild(this.topRightHandle)\n container.removeChild(this.bottomRightHandle)\n container.removeChild(this.bottomLeftHandle)\n }\n}\n"],"names":[],"mappings":"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"}
@@ -186,6 +186,22 @@ class ShortCutKey extends QuillShortcutKey {
186
186
  icon: icons.file,
187
187
  title: this.quill.getLangText("file"),
188
188
  onClick: toolbarHandler("file")
189
+ },
190
+ {
191
+ type: "item",
192
+ name: "swdt",
193
+ alias: ["mind-map"],
194
+ icon: icons["mind-map"],
195
+ title: this.quill.getLangText("mind-map"),
196
+ onClick: toolbarHandler("mind-map")
197
+ },
198
+ {
199
+ type: "item",
200
+ name: "lct",
201
+ alias: ["flow-chart"],
202
+ icon: icons["flow-chart"],
203
+ title: this.quill.getLangText("flow-chart"),
204
+ onClick: toolbarHandler("flow-chart")
189
205
  }
190
206
  ];
191
207
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../../../../src/modules/shortcut-key/index.ts"],"sourcesContent":["import type { Range } from 'quill'\r\nimport type { Menu, MenuItemsGroup, QuillShortcutKeyInputOptions, QuillShortcutKeyOptions } from 'quill-shortcut-key'\r\nimport type { Context } from 'quill/modules/keyboard'\r\nimport type TypeToolbar from 'quill/modules/toolbar'\r\nimport type FluentEditor from '../../fluent-editor'\r\nimport Quill from 'quill'\r\nimport QuillShortcutKey, { defaultShortKey, searchAndSort } from 'quill-shortcut-key'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\r\n\r\nexport interface ShortCutKeyCustomOptions { isMenuItemsAdd: boolean }\r\nexport type ShortCutKeyInputOptions = QuillShortcutKeyInputOptions & ShortCutKeyCustomOptions\r\nexport type ShortCutKeyOptions = QuillShortcutKeyOptions & ShortCutKeyCustomOptions\r\n\r\nexport class ShortCutKey extends QuillShortcutKey {\r\n constructor(public quill: FluentEditor, options: Partial<ShortCutKeyInputOptions>) {\r\n super(quill, options)\r\n\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.destroyMenuList()\r\n this.options = this.resolveOptions(options)\r\n this.menuSorter = searchAndSort.bind(this, this.getAllMenuItems()) as (searchText: string) => Menu\r\n this.placeholderTip.remove()\r\n this.placeholderTip = this.initPlaceholder()\r\n this.placeholderUpdate()\r\n })\r\n }\r\n\r\n resolveOptions(options: Partial<ShortCutKeyInputOptions>) {\r\n const defaultMenuItems = this.defaultMenuList()\r\n const value: ShortCutKeyOptions = Object.assign({\r\n placeholder: this.quill.getLangText('input-recall-menu-placeholder'),\r\n menuItems: defaultMenuItems,\r\n isMenuItemsAdd: false,\r\n menuKeyboardControls: () => false,\r\n }, options)\r\n if (value.isMenuItemsAdd) {\r\n value.menuItems = [...defaultMenuItems, ...value.menuItems]\r\n }\r\n\r\n const deepCopyMenuItems = (items: Menu): Menu => {\r\n return items.map((item) => {\r\n const value = {\r\n ...item,\r\n }\r\n if (item.title) {\r\n value.title = this.quill.getLangText(item.title)\r\n }\r\n if (item.type === 'group') {\r\n (value as MenuItemsGroup).children = deepCopyMenuItems(item.children)\r\n }\r\n return value\r\n })\r\n }\r\n value.menuItems = deepCopyMenuItems(value.menuItems)\r\n return value\r\n }\r\n\r\n defaultMenuList() {\r\n const icons = Quill.import('ui/icons') as Record<string, any>\r\n const toolbarHandler = (format: string) => {\r\n return function (this: Quill, range: Range | null) {\r\n if (!range) return\r\n const toolbarModule = this.getModule('toolbar') as TypeToolbar\r\n if (!toolbarModule) return\r\n toolbarModule.handlers[format].call(toolbarModule, true)\r\n }\r\n }\r\n const formatHandler = (format: string, value: any) => {\r\n return function (this: Quill, range: Range | null) {\r\n if (!range) return\r\n this.formatLine(range.index, 0, format, value, Quill.sources.USER)\r\n }\r\n }\r\n\r\n return [\r\n ...new Array(6).fill(0).map((_, i) => ({\r\n type: 'item' as const,\r\n name: `h${i + 1}`,\r\n alias: ['header', `head${i + 1}`],\r\n icon: icons.header[i + 1],\r\n title: this.quill.getLangText(`header-${i + 1}`),\r\n onClick: formatHandler('header', i + 1),\r\n })),\r\n {\r\n type: 'item' as const,\r\n name: 'yy',\r\n alias: ['blockquote'],\r\n icon: icons.blockquote,\r\n title: this.quill.getLangText('blockquote'),\r\n onClick: formatHandler('blockquote', true),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'dm',\r\n alias: ['code', 'codeblock'],\r\n icon: icons['code-block'],\r\n title: this.quill.getLangText('code-block'),\r\n onClick: formatHandler('code-block', true),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'lj',\r\n alias: ['link'],\r\n icon: icons.link,\r\n title: this.quill.getLangText('link'),\r\n onClick(this: Quill, range: Range | null, _: any) {\r\n if (!range) return\r\n const title = 'link'\r\n const link = prompt('Enter link URL')\r\n if (!link) return\r\n this.insertText(range.index, title, Quill.sources.USER)\r\n this.formatText(range.index, range.length + title.length, 'link', link, Quill.sources.USER)\r\n this.setSelection({ index: range.index, length: range.index + title.length })\r\n },\r\n },\r\n {\r\n type: 'group' as const,\r\n name: 'lb',\r\n alias: [],\r\n hideSearch: true,\r\n icon: icons.list.bullet,\r\n title: this.quill.getLangText('list'),\r\n children: [\r\n {\r\n type: 'item' as const,\r\n name: 'wxlb',\r\n alias: ['list', 'bullet'],\r\n icon: icons.list.bullet,\r\n title: this.quill.getLangText('list-bullet'),\r\n onClick: formatHandler('list', 'bullet'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'yxlb',\r\n alias: ['list', 'ordered'],\r\n icon: icons.list.ordered,\r\n title: this.quill.getLangText('list-ordered'),\r\n onClick: formatHandler('list', 'ordered'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'rwlb',\r\n alias: ['list', 'check'],\r\n icon: icons.list.check,\r\n title: this.quill.getLangText('list-check'),\r\n onClick: formatHandler('list', 'unchecked'),\r\n },\r\n ],\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'bq',\r\n alias: ['emoji'],\r\n icon: icons.emoji,\r\n title: this.quill.getLangText('emoji'),\r\n onClick(this: Quill, range: Range | null, _: any) {\r\n if (!range) return\r\n const toolbarModule = this.getModule('toolbar') as TypeToolbar\r\n if (!toolbarModule) return\r\n // TODO: keyboard handler emoji select(in emoji module)\r\n toolbarModule.handlers.emoji.call(toolbarModule, true)\r\n },\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'jp',\r\n alias: ['screenshot'],\r\n icon: icons.screenshot,\r\n title: this.quill.getLangText('screenshot'),\r\n onClick: toolbarHandler('screenshot'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'gs',\r\n alias: ['formula'],\r\n icon: icons.formula,\r\n title: this.quill.getLangText('formula'),\r\n onClick: toolbarHandler('formula'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'tp',\r\n alias: ['image', 'pic', 'picture'],\r\n icon: icons.image,\r\n title: this.quill.getLangText('image'),\r\n onClick: toolbarHandler('image'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'sp',\r\n alias: ['video'],\r\n icon: icons.video,\r\n title: this.quill.getLangText('video'),\r\n onClick: toolbarHandler('video'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'wj',\r\n alias: ['file'],\r\n icon: icons.file,\r\n title: this.quill.getLangText('file'),\r\n onClick: toolbarHandler('file'),\r\n },\r\n ]\r\n }\r\n}\r\n\r\nexport const shortKey = {\r\n ...defaultShortKey,\r\n link: {\r\n key: 'k',\r\n shortKey: true,\r\n handler(this: { quill: Quill }, _: any, context: Context) {\r\n const toolbar = this.quill.getModule('toolbar') as TypeToolbar\r\n if (!toolbar) return\r\n toolbar.handlers.link.call(toolbar, !context.format.link)\r\n },\r\n },\r\n color: {\r\n key: 'c',\r\n altKey: true,\r\n shortKey: true,\r\n handler(this: { quill: Quill }) {\r\n const selected = (this.quill.getModule('toolbar') as TypeToolbar).container!.querySelector('.ql-color.ql-color-picker .ql-picker-options .ql-selected') as HTMLElement\r\n this.quill.format('color', selected?.dataset?.value || false, Quill.sources.USER)\r\n },\r\n },\r\n background: {\r\n key: 'b',\r\n altKey: true,\r\n shortKey: true,\r\n handler(this: { quill: Quill }) {\r\n const selected = (this.quill.getModule('toolbar') as TypeToolbar).container!.querySelector('.ql-background.ql-color-picker .ql-picker-options .ql-selected') as HTMLElement\r\n this.quill.format('background', selected?.dataset?.value || false, Quill.sources.USER)\r\n },\r\n },\r\n}\r\n"],"names":["value"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../../../../src/modules/shortcut-key/index.ts"],"sourcesContent":["import type { Range } from 'quill'\r\nimport type { Menu, MenuItemsGroup, QuillShortcutKeyInputOptions, QuillShortcutKeyOptions } from 'quill-shortcut-key'\r\nimport type { Context } from 'quill/modules/keyboard'\r\nimport type TypeToolbar from 'quill/modules/toolbar'\r\nimport type FluentEditor from '../../fluent-editor'\r\nimport Quill from 'quill'\r\nimport QuillShortcutKey, { defaultShortKey, searchAndSort } from 'quill-shortcut-key'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\r\n\r\nexport interface ShortCutKeyCustomOptions { isMenuItemsAdd: boolean }\r\nexport type ShortCutKeyInputOptions = QuillShortcutKeyInputOptions & ShortCutKeyCustomOptions\r\nexport type ShortCutKeyOptions = QuillShortcutKeyOptions & ShortCutKeyCustomOptions\r\n\r\nexport class ShortCutKey extends QuillShortcutKey {\r\n constructor(public quill: FluentEditor, options: Partial<ShortCutKeyInputOptions>) {\r\n super(quill, options)\r\n\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.destroyMenuList()\r\n this.options = this.resolveOptions(options)\r\n this.menuSorter = searchAndSort.bind(this, this.getAllMenuItems()) as (searchText: string) => Menu\r\n this.placeholderTip.remove()\r\n this.placeholderTip = this.initPlaceholder()\r\n this.placeholderUpdate()\r\n })\r\n }\r\n\r\n resolveOptions(options: Partial<ShortCutKeyInputOptions>) {\r\n const defaultMenuItems = this.defaultMenuList()\r\n const value: ShortCutKeyOptions = Object.assign({\r\n placeholder: this.quill.getLangText('input-recall-menu-placeholder'),\r\n menuItems: defaultMenuItems,\r\n isMenuItemsAdd: false,\r\n menuKeyboardControls: () => false,\r\n }, options)\r\n if (value.isMenuItemsAdd) {\r\n value.menuItems = [...defaultMenuItems, ...value.menuItems]\r\n }\r\n\r\n const deepCopyMenuItems = (items: Menu): Menu => {\r\n return items.map((item) => {\r\n const value = {\r\n ...item,\r\n }\r\n if (item.title) {\r\n value.title = this.quill.getLangText(item.title)\r\n }\r\n if (item.type === 'group') {\r\n (value as MenuItemsGroup).children = deepCopyMenuItems(item.children)\r\n }\r\n return value\r\n })\r\n }\r\n value.menuItems = deepCopyMenuItems(value.menuItems)\r\n return value\r\n }\r\n\r\n defaultMenuList() {\r\n const icons = Quill.import('ui/icons') as Record<string, any>\r\n const toolbarHandler = (format: string) => {\r\n return function (this: Quill, range: Range | null) {\r\n if (!range) return\r\n const toolbarModule = this.getModule('toolbar') as TypeToolbar\r\n if (!toolbarModule) return\r\n toolbarModule.handlers[format].call(toolbarModule, true)\r\n }\r\n }\r\n const formatHandler = (format: string, value: any) => {\r\n return function (this: Quill, range: Range | null) {\r\n if (!range) return\r\n this.formatLine(range.index, 0, format, value, Quill.sources.USER)\r\n }\r\n }\r\n\r\n return [\r\n ...new Array(6).fill(0).map((_, i) => ({\r\n type: 'item' as const,\r\n name: `h${i + 1}`,\r\n alias: ['header', `head${i + 1}`],\r\n icon: icons.header[i + 1],\r\n title: this.quill.getLangText(`header-${i + 1}`),\r\n onClick: formatHandler('header', i + 1),\r\n })),\r\n {\r\n type: 'item' as const,\r\n name: 'yy',\r\n alias: ['blockquote'],\r\n icon: icons.blockquote,\r\n title: this.quill.getLangText('blockquote'),\r\n onClick: formatHandler('blockquote', true),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'dm',\r\n alias: ['code', 'codeblock'],\r\n icon: icons['code-block'],\r\n title: this.quill.getLangText('code-block'),\r\n onClick: formatHandler('code-block', true),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'lj',\r\n alias: ['link'],\r\n icon: icons.link,\r\n title: this.quill.getLangText('link'),\r\n onClick(this: Quill, range: Range | null, _: any) {\r\n if (!range) return\r\n const title = 'link'\r\n const link = prompt('Enter link URL')\r\n if (!link) return\r\n this.insertText(range.index, title, Quill.sources.USER)\r\n this.formatText(range.index, range.length + title.length, 'link', link, Quill.sources.USER)\r\n this.setSelection({ index: range.index, length: range.index + title.length })\r\n },\r\n },\r\n {\r\n type: 'group' as const,\r\n name: 'lb',\r\n alias: [],\r\n hideSearch: true,\r\n icon: icons.list.bullet,\r\n title: this.quill.getLangText('list'),\r\n children: [\r\n {\r\n type: 'item' as const,\r\n name: 'wxlb',\r\n alias: ['list', 'bullet'],\r\n icon: icons.list.bullet,\r\n title: this.quill.getLangText('list-bullet'),\r\n onClick: formatHandler('list', 'bullet'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'yxlb',\r\n alias: ['list', 'ordered'],\r\n icon: icons.list.ordered,\r\n title: this.quill.getLangText('list-ordered'),\r\n onClick: formatHandler('list', 'ordered'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'rwlb',\r\n alias: ['list', 'check'],\r\n icon: icons.list.check,\r\n title: this.quill.getLangText('list-check'),\r\n onClick: formatHandler('list', 'unchecked'),\r\n },\r\n ],\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'bq',\r\n alias: ['emoji'],\r\n icon: icons.emoji,\r\n title: this.quill.getLangText('emoji'),\r\n onClick(this: Quill, range: Range | null, _: any) {\r\n if (!range) return\r\n const toolbarModule = this.getModule('toolbar') as TypeToolbar\r\n if (!toolbarModule) return\r\n // TODO: keyboard handler emoji select(in emoji module)\r\n toolbarModule.handlers.emoji.call(toolbarModule, true)\r\n },\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'jp',\r\n alias: ['screenshot'],\r\n icon: icons.screenshot,\r\n title: this.quill.getLangText('screenshot'),\r\n onClick: toolbarHandler('screenshot'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'gs',\r\n alias: ['formula'],\r\n icon: icons.formula,\r\n title: this.quill.getLangText('formula'),\r\n onClick: toolbarHandler('formula'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'tp',\r\n alias: ['image', 'pic', 'picture'],\r\n icon: icons.image,\r\n title: this.quill.getLangText('image'),\r\n onClick: toolbarHandler('image'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'sp',\r\n alias: ['video'],\r\n icon: icons.video,\r\n title: this.quill.getLangText('video'),\r\n onClick: toolbarHandler('video'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'wj',\r\n alias: ['file'],\r\n icon: icons.file,\r\n title: this.quill.getLangText('file'),\r\n onClick: toolbarHandler('file'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'swdt',\r\n alias: ['mind-map'],\r\n icon: icons['mind-map'],\r\n title: this.quill.getLangText('mind-map'),\r\n onClick: toolbarHandler('mind-map'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'lct',\r\n alias: ['flow-chart'],\r\n icon: icons['flow-chart'],\r\n title: this.quill.getLangText('flow-chart'),\r\n onClick: toolbarHandler('flow-chart'),\r\n },\r\n ]\r\n }\r\n}\r\n\r\nexport const shortKey = {\r\n ...defaultShortKey,\r\n link: {\r\n key: 'k',\r\n shortKey: true,\r\n handler(this: { quill: Quill }, _: any, context: Context) {\r\n const toolbar = this.quill.getModule('toolbar') as TypeToolbar\r\n if (!toolbar) return\r\n toolbar.handlers.link.call(toolbar, !context.format.link)\r\n },\r\n },\r\n color: {\r\n key: 'c',\r\n altKey: true,\r\n shortKey: true,\r\n handler(this: { quill: Quill }) {\r\n const selected = (this.quill.getModule('toolbar') as TypeToolbar).container!.querySelector('.ql-color.ql-color-picker .ql-picker-options .ql-selected') as HTMLElement\r\n this.quill.format('color', selected?.dataset?.value || false, Quill.sources.USER)\r\n },\r\n },\r\n background: {\r\n key: 'b',\r\n altKey: true,\r\n shortKey: true,\r\n handler(this: { quill: Quill }) {\r\n const selected = (this.quill.getModule('toolbar') as TypeToolbar).container!.querySelector('.ql-background.ql-color-picker .ql-picker-options .ql-selected') as HTMLElement\r\n this.quill.format('background', selected?.dataset?.value || false, Quill.sources.USER)\r\n },\r\n },\r\n}\r\n"],"names":["value"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"syntax.es.js","sources":["../../../src/modules/syntax.ts"],"sourcesContent":["import type TypeSyntax from 'quill/modules/syntax'\r\nimport Quill from 'quill'\r\n\r\nconst Syntax = Quill.import('modules/syntax') as typeof TypeSyntax\r\n\r\n// @dynamic\r\nclass CustomSyntax extends Syntax {\r\n static DEFAULTS: { hljs: any, interval: number, languages: { key: string, label: string }[] }\r\n}\r\n\r\nCustomSyntax.DEFAULTS = {\r\n hljs: (() => {\r\n // @ts-ignore\r\n return window.hljs\r\n })(),\r\n interval: 1000,\r\n languages: [\r\n { key: 'plain', label: 'Plain' },\r\n { key: 'bash', label: 'Bash' },\r\n { key: 'cpp', label: 'C++' },\r\n { key: 'cs', label: 'C#' },\r\n { key: 'css', label: 'CSS' },\r\n { key: 'diff', label: 'Diff' },\r\n { key: 'xml', label: 'HTML/XML' },\r\n { key: 'java', label: 'Java' },\r\n { key: 'javascript', label: 'Javascript' },\r\n { key: 'markdown', label: 'Markdown' },\r\n { key: 'php', label: 'PHP' },\r\n { key: 'python', label: 'Python' },\r\n { key: 'ruby', label: 'Ruby' },\r\n { key: 'sql', label: 'SQL' },\r\n ],\r\n}\r\n\r\nexport default CustomSyntax\r\n"],"names":[],"mappings":";;;;AAGA,MAAM,SAAS,MAAM,OAAO,gBAAgB;AAG5C,MAAM,qBAAqB,OAAO;AAElC;AADE,cADI,cACG;AAGT,aAAa,WAAW;AAAA,EACtB,OAAO,MAAM;AAEX,WAAO,OAAO;AAAA,EAAA,GACb;AAAA,EACH,UAAU;AAAA,EACV,WAAW;AAAA,IACT,EAAE,KAAK,SAAS,OAAO,QAAQ;AAAA,IAC/B,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,IAC3B,EAAE,KAAK,MAAM,OAAO,KAAK;AAAA,IACzB,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,IAC3B,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,OAAO,OAAO,WAAW;AAAA,IAChC,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,cAAc,OAAO,aAAa;AAAA,IACzC,EAAE,KAAK,YAAY,OAAO,WAAW;AAAA,IACrC,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,IAC3B,EAAE,KAAK,UAAU,OAAO,SAAS;AAAA,IACjC,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,EAAA;AAE/B;"}
1
+ {"version":3,"file":"syntax.es.js","sources":["../../../src/modules/syntax.ts"],"sourcesContent":["import type TypeSyntax from 'quill/modules/syntax'\nimport Quill from 'quill'\n\nconst Syntax = Quill.import('modules/syntax') as typeof TypeSyntax\n\n// @dynamic\nclass CustomSyntax extends Syntax {\n static DEFAULTS: { hljs: any, interval: number, languages: { key: string, label: string }[] }\n}\n\nCustomSyntax.DEFAULTS = {\n hljs: (() => {\n // @ts-ignore\n return window.hljs\n })(),\n interval: 1000,\n languages: [\n { key: 'plain', label: 'Plain' },\n { key: 'bash', label: 'Bash' },\n { key: 'cpp', label: 'C++' },\n { key: 'cs', label: 'C#' },\n { key: 'css', label: 'CSS' },\n { key: 'diff', label: 'Diff' },\n { key: 'xml', label: 'HTML/XML' },\n { key: 'java', label: 'Java' },\n { key: 'javascript', label: 'Javascript' },\n { key: 'markdown', label: 'Markdown' },\n { key: 'php', label: 'PHP' },\n { key: 'python', label: 'Python' },\n { key: 'ruby', label: 'Ruby' },\n { key: 'sql', label: 'SQL' },\n ],\n}\n\nexport default CustomSyntax\n"],"names":[],"mappings":";;;;AAGA,MAAM,SAAS,MAAM,OAAO,gBAAgB;AAG5C,MAAM,qBAAqB,OAAO;AAElC;AADE,cADI,cACG;AAGT,aAAa,WAAW;AAAA,EACtB,OAAO,MAAM;AAEX,WAAO,OAAO;AAAA,EAChB,GAAA;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,IACT,EAAE,KAAK,SAAS,OAAO,QAAA;AAAA,IACvB,EAAE,KAAK,QAAQ,OAAO,OAAA;AAAA,IACtB,EAAE,KAAK,OAAO,OAAO,MAAA;AAAA,IACrB,EAAE,KAAK,MAAM,OAAO,KAAA;AAAA,IACpB,EAAE,KAAK,OAAO,OAAO,MAAA;AAAA,IACrB,EAAE,KAAK,QAAQ,OAAO,OAAA;AAAA,IACtB,EAAE,KAAK,OAAO,OAAO,WAAA;AAAA,IACrB,EAAE,KAAK,QAAQ,OAAO,OAAA;AAAA,IACtB,EAAE,KAAK,cAAc,OAAO,aAAA;AAAA,IAC5B,EAAE,KAAK,YAAY,OAAO,WAAA;AAAA,IAC1B,EAAE,KAAK,OAAO,OAAO,MAAA;AAAA,IACrB,EAAE,KAAK,UAAU,OAAO,SAAA;AAAA,IACxB,EAAE,KAAK,QAAQ,OAAO,OAAA;AAAA,IACtB,EAAE,KAAK,OAAO,OAAO,MAAA;AAAA,EAAM;AAE/B;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../../../../src/modules/table-up/index.ts"],"sourcesContent":["import type Toolbar from 'quill/modules/toolbar'\r\nimport type BaseTheme from 'quill/themes/base'\r\nimport type Picker from 'quill/ui/picker'\r\nimport type { Constructor } from '../../config/types'\r\nimport type FluentEditor from '../../core/fluent-editor'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\r\nimport { isFunction } from '../../utils/is'\r\n\r\ninterface QuillTheme extends BaseTheme {\r\n pickers: QuillThemePicker[]\r\n}\r\ntype QuillThemePicker = (Picker & { options: HTMLElement })\r\n\r\nexport function generateTableUp(QuillTableUp: Constructor) {\r\n return class extends QuillTableUp {\r\n constructor(public quill: FluentEditor, options: Partial<any>) {\r\n super(quill, options)\r\n\r\n if (!this.quill.options['format-painter']) this.quill.options['format-painter'] = {}\r\n const currentIgnoreFormat = this.quill.options['format-painter'].ignoreFormat || []\r\n this.quill.options['format-painter'].ignoreFormat = Array.from(\r\n new Set([\r\n ...currentIgnoreFormat,\r\n 'table-up-cell-inner',\r\n ]),\r\n )\r\n\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.options.texts = this.resolveTexts(options.texts)\r\n const toolbar = this.quill.getModule('toolbar') as Toolbar\r\n if (toolbar && (this.quill.theme as QuillTheme).pickers) {\r\n const [, select] = (toolbar.controls as [string, HTMLElement][] || []).find(([name]) => name === this.statics.toolName) || []\r\n if (select && select.tagName.toLocaleLowerCase() === 'select') {\r\n const picker = (this.quill.theme as QuillTheme).pickers.find(picker => picker.select === select)\r\n if (picker) {\r\n this.buildCustomSelect(this.options.customSelect, picker)\r\n }\r\n }\r\n }\r\n\r\n Object.keys(this.modules).forEach((key) => {\r\n if (isFunction(this.modules[key].destroy)) {\r\n this.modules[key].destroy()\r\n }\r\n })\r\n this.modules = {}\r\n this.initModules()\r\n })\r\n }\r\n\r\n resolveTexts(options: Record<string, string> = {}) {\r\n return Object.assign({\r\n fullCheckboxText: this.quill.getLangText('fullCheckboxText'),\r\n customBtnText: this.quill.getLangText('customBtnText'),\r\n confirmText: this.quill.getLangText('confirmText'),\r\n cancelText: this.quill.getLangText('cancelText'),\r\n rowText: this.quill.getLangText('rowText'),\r\n colText: this.quill.getLangText('colText'),\r\n notPositiveNumberError: this.quill.getLangText('notPositiveNumberError'),\r\n custom: this.quill.getLangText('custom'),\r\n clear: this.quill.getLangText('clear'),\r\n transparent: this.quill.getLangText('transparent'),\r\n perWidthInsufficient: this.quill.getLangText('perWidthInsufficient'),\r\n CopyCell: this.quill.getLangText('CopyCell'),\r\n CutCell: this.quill.getLangText('CutCell'),\r\n InsertTop: this.quill.getLangText('InsertTop'),\r\n InsertRight: this.quill.getLangText('InsertRight'),\r\n InsertBottom: this.quill.getLangText('InsertBottom'),\r\n InsertLeft: this.quill.getLangText('InsertLeft'),\r\n MergeCell: this.quill.getLangText('MergeCell'),\r\n SplitCell: this.quill.getLangText('SplitCell'),\r\n DeleteRow: this.quill.getLangText('DeleteRow'),\r\n DeleteColumn: this.quill.getLangText('DeleteColumn'),\r\n DeleteTable: this.quill.getLangText('DeleteTable'),\r\n BackgroundColor: this.quill.getLangText('BackgroundColor'),\r\n BorderColor: this.quill.getLangText('BorderColor'),\r\n }, Object.entries(options).reduce((pre, [key, value]) => {\r\n pre[key] = this.quill.getLangText(value)\r\n return pre\r\n }, {} as Record<string, string>))\r\n }\r\n }\r\n}\r\n"],"names":["picker"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../../../../src/modules/table-up/index.ts"],"sourcesContent":["import type Toolbar from 'quill/modules/toolbar'\r\nimport type BaseTheme from 'quill/themes/base'\r\nimport type Picker from 'quill/ui/picker'\r\nimport type { Constructor } from '../../config/types'\r\nimport type FluentEditor from '../../core/fluent-editor'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\r\nimport { isFunction } from '../../utils/is'\r\n\r\ninterface QuillTheme extends BaseTheme {\r\n pickers: QuillThemePicker[]\r\n}\r\ntype QuillThemePicker = (Picker & { options: HTMLElement })\r\n\r\nexport function generateTableUp(QuillTableUp: Constructor) {\r\n return class extends QuillTableUp {\r\n constructor(public quill: FluentEditor, options: Partial<any>) {\r\n super(quill, options)\r\n\r\n if (!this.quill.options['format-painter']) this.quill.options['format-painter'] = {}\r\n const currentIgnoreFormat = this.quill.options['format-painter'].ignoreFormat || []\r\n this.quill.options['format-painter'].ignoreFormat = Array.from(\r\n new Set([\r\n ...currentIgnoreFormat,\r\n 'table-up-cell-inner',\r\n ]),\r\n )\r\n\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.options.texts = this.resolveTexts(options.texts)\r\n const toolbar = this.quill.getModule('toolbar') as Toolbar\r\n if (toolbar && (this.quill.theme as QuillTheme).pickers) {\r\n const [, select] = (toolbar.controls as [string, HTMLElement][] || []).find(([name]) => name === this.statics.toolName) || []\r\n if (select && select.tagName.toLocaleLowerCase() === 'select') {\r\n const picker = (this.quill.theme as QuillTheme).pickers.find(picker => picker.select === select)\r\n if (picker) {\r\n this.buildCustomSelect(this.options.customSelect, picker)\r\n }\r\n }\r\n }\r\n\r\n Object.keys(this.modules).forEach((key) => {\r\n if (isFunction(this.modules[key].destroy)) {\r\n this.modules[key].destroy()\r\n }\r\n })\r\n this.modules = {}\r\n this.initModules()\r\n })\r\n }\r\n\r\n resolveTexts(options: Record<string, string> = {}) {\r\n return Object.assign({\r\n fullCheckboxText: this.quill.getLangText('fullCheckboxText'),\r\n customBtnText: this.quill.getLangText('customBtnText'),\r\n confirmText: this.quill.getLangText('confirmText'),\r\n cancelText: this.quill.getLangText('cancelText'),\r\n rowText: this.quill.getLangText('rowText'),\r\n colText: this.quill.getLangText('colText'),\r\n notPositiveNumberError: this.quill.getLangText('notPositiveNumberError'),\r\n custom: this.quill.getLangText('custom'),\r\n clear: this.quill.getLangText('clear'),\r\n transparent: this.quill.getLangText('transparent'),\r\n perWidthInsufficient: this.quill.getLangText('perWidthInsufficient'),\r\n CopyCell: this.quill.getLangText('CopyCell'),\r\n CutCell: this.quill.getLangText('CutCell'),\r\n InsertTop: this.quill.getLangText('InsertTop'),\r\n InsertRight: this.quill.getLangText('InsertRight'),\r\n InsertBottom: this.quill.getLangText('InsertBottom'),\r\n InsertLeft: this.quill.getLangText('InsertLeft'),\r\n MergeCell: this.quill.getLangText('MergeCell'),\r\n SplitCell: this.quill.getLangText('SplitCell'),\r\n DeleteRow: this.quill.getLangText('DeleteRow'),\r\n DeleteColumn: this.quill.getLangText('DeleteColumn'),\r\n DeleteTable: this.quill.getLangText('DeleteTable'),\r\n BackgroundColor: this.quill.getLangText('BackgroundColor'),\r\n BorderColor: this.quill.getLangText('BorderColor'),\r\n }, Object.entries(options).reduce((pre, [key, value]) => {\r\n pre[key] = this.quill.getLangText(value)\r\n return pre\r\n }, {} as Record<string, string>))\r\n }\r\n }\r\n}\r\n"],"names":["picker"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"better-picker.es.js","sources":["../../../../src/modules/toolbar/better-picker.ts"],"sourcesContent":["import type TypePicker from 'quill/ui/picker'\r\nimport { EasyColorPicker } from 'quill-easy-color'\r\nimport FluentEditor from '../../core/fluent-editor'\r\n\r\nconst OriginPicker = FluentEditor.import('ui/picker') as typeof TypePicker\r\nexport class Picker extends OriginPicker {\r\n buildLabel() {\r\n const label = document.createElement('span')\r\n label.classList.add('ql-picker-label')\r\n label.innerHTML = `<i class=\"icon\" />`\r\n label.tabIndex = 0\r\n label.setAttribute('role', 'button')\r\n label.setAttribute('aria-expanded', 'false')\r\n this.container.appendChild(label)\r\n return label\r\n }\r\n\r\n buildItem(option: HTMLOptionElement) {\r\n const item = super.buildItem(option)\r\n const value = option.getAttribute('value')\r\n item.style.setProperty('--value', value)\r\n return item\r\n }\r\n\r\n selectItem(item: HTMLElement | null, trigger = false) {\r\n const selected = this.container.querySelector('.ql-selected')\r\n if (item === selected || item == null) return\r\n // move ql-selected clear after judge.\r\n // ql-selected is the class for check mark in picker\r\n if (selected != null) {\r\n selected.classList.remove('ql-selected')\r\n }\r\n item.classList.add('ql-selected')\r\n this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(item)\r\n if (item.hasAttribute('data-value')) {\r\n this.label.setAttribute('data-value', item.getAttribute('data-value'))\r\n }\r\n else {\r\n this.label.removeAttribute('data-value')\r\n }\r\n if (item.hasAttribute('data-label')) {\r\n this.label.setAttribute('data-label', item.getAttribute('data-label'))\r\n }\r\n else {\r\n this.label.removeAttribute('data-label')\r\n }\r\n if (trigger) {\r\n this.select.dispatchEvent(new Event('change'))\r\n this.close()\r\n }\r\n }\r\n}\r\n\r\nexport class ColorPicker extends EasyColorPicker {\r\n static clearText: string\r\n static customText: string\r\n\r\n constructor(select: HTMLSelectElement, label: string, options: any) {\r\n super(select, label, options)\r\n }\r\n\r\n buildItem(option: HTMLOptionElement) {\r\n const item = super.buildItem(option)\r\n item.setAttribute('title', option.getAttribute('value'))\r\n return item\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;;AAIA,MAAM,eAAe,aAAa,OAAO,WAAW;AAC7C,MAAM,eAAe,aAAa;AAAA,EACvC,aAAa;AACL,UAAA,QAAQ,SAAS,cAAc,MAAM;AACrC,UAAA,UAAU,IAAI,iBAAiB;AACrC,UAAM,YAAY;AAClB,UAAM,WAAW;AACX,UAAA,aAAa,QAAQ,QAAQ;AAC7B,UAAA,aAAa,iBAAiB,OAAO;AACtC,SAAA,UAAU,YAAY,KAAK;AACzB,WAAA;AAAA,EAAA;AAAA,EAGT,UAAU,QAA2B;AAC7B,UAAA,OAAO,MAAM,UAAU,MAAM;AAC7B,UAAA,QAAQ,OAAO,aAAa,OAAO;AACpC,SAAA,MAAM,YAAY,WAAW,KAAK;AAChC,WAAA;AAAA,EAAA;AAAA,EAGT,WAAW,MAA0B,UAAU,OAAO;AACpD,UAAM,WAAW,KAAK,UAAU,cAAc,cAAc;AACxD,QAAA,SAAS,YAAY,QAAQ,KAAM;AAGvC,QAAI,YAAY,MAAM;AACX,eAAA,UAAU,OAAO,aAAa;AAAA,IAAA;AAEpC,SAAA,UAAU,IAAI,aAAa;AAC3B,SAAA,OAAO,gBAAgB,MAAM,KAAK,KAAK,WAAW,QAAQ,EAAE,QAAQ,IAAI;AACzE,QAAA,KAAK,aAAa,YAAY,GAAG;AACnC,WAAK,MAAM,aAAa,cAAc,KAAK,aAAa,YAAY,CAAC;AAAA,IAAA,OAElE;AACE,WAAA,MAAM,gBAAgB,YAAY;AAAA,IAAA;AAErC,QAAA,KAAK,aAAa,YAAY,GAAG;AACnC,WAAK,MAAM,aAAa,cAAc,KAAK,aAAa,YAAY,CAAC;AAAA,IAAA,OAElE;AACE,WAAA,MAAM,gBAAgB,YAAY;AAAA,IAAA;AAEzC,QAAI,SAAS;AACX,WAAK,OAAO,cAAc,IAAI,MAAM,QAAQ,CAAC;AAC7C,WAAK,MAAM;AAAA,IAAA;AAAA,EACb;AAEJ;AAEO,MAAM,oBAAoB,gBAAgB;AAAA,EAI/C,YAAY,QAA2B,OAAe,SAAc;AAC5D,UAAA,QAAQ,OAAO,OAAO;AAAA,EAAA;AAAA,EAG9B,UAAU,QAA2B;AAC7B,UAAA,OAAO,MAAM,UAAU,MAAM;AACnC,SAAK,aAAa,SAAS,OAAO,aAAa,OAAO,CAAC;AAChD,WAAA;AAAA,EAAA;AAEX;AAZE,cADW,aACJ;AACP,cAFW,aAEJ;"}
1
+ {"version":3,"file":"better-picker.es.js","sources":["../../../../src/modules/toolbar/better-picker.ts"],"sourcesContent":["import type TypePicker from 'quill/ui/picker'\nimport { EasyColorPicker } from 'quill-easy-color'\nimport FluentEditor from '../../core/fluent-editor'\n\nconst OriginPicker = FluentEditor.import('ui/picker') as typeof TypePicker\nexport class Picker extends OriginPicker {\n buildLabel() {\n const label = document.createElement('span')\n label.classList.add('ql-picker-label')\n label.innerHTML = `<i class=\"icon\" />`\n label.tabIndex = 0\n label.setAttribute('role', 'button')\n label.setAttribute('aria-expanded', 'false')\n this.container.appendChild(label)\n return label\n }\n\n buildItem(option: HTMLOptionElement) {\n const item = super.buildItem(option)\n const value = option.getAttribute('value')\n item.style.setProperty('--value', value)\n return item\n }\n\n selectItem(item: HTMLElement | null, trigger = false) {\n const selected = this.container.querySelector('.ql-selected')\n if (item === selected || item == null) return\n // move ql-selected clear after judge.\n // ql-selected is the class for check mark in picker\n if (selected != null) {\n selected.classList.remove('ql-selected')\n }\n item.classList.add('ql-selected')\n this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(item)\n if (item.hasAttribute('data-value')) {\n this.label.setAttribute('data-value', item.getAttribute('data-value'))\n }\n else {\n this.label.removeAttribute('data-value')\n }\n if (item.hasAttribute('data-label')) {\n this.label.setAttribute('data-label', item.getAttribute('data-label'))\n }\n else {\n this.label.removeAttribute('data-label')\n }\n if (trigger) {\n this.select.dispatchEvent(new Event('change'))\n this.close()\n }\n }\n}\n\nexport class ColorPicker extends EasyColorPicker {\n static clearText: string\n static customText: string\n\n constructor(select: HTMLSelectElement, label: string, options: any) {\n super(select, label, options)\n }\n\n buildItem(option: HTMLOptionElement) {\n const item = super.buildItem(option)\n item.setAttribute('title', option.getAttribute('value'))\n return item\n }\n}\n"],"names":[],"mappings":";;;;;AAIA,MAAM,eAAe,aAAa,OAAO,WAAW;AAC7C,MAAM,eAAe,aAAa;AAAA,EACvC,aAAa;AACX,UAAM,QAAQ,SAAS,cAAc,MAAM;AAC3C,UAAM,UAAU,IAAI,iBAAiB;AACrC,UAAM,YAAY;AAClB,UAAM,WAAW;AACjB,UAAM,aAAa,QAAQ,QAAQ;AACnC,UAAM,aAAa,iBAAiB,OAAO;AAC3C,SAAK,UAAU,YAAY,KAAK;AAChC,WAAO;AAAA,EACT;AAAA,EAEA,UAAU,QAA2B;AACnC,UAAM,OAAO,MAAM,UAAU,MAAM;AACnC,UAAM,QAAQ,OAAO,aAAa,OAAO;AACzC,SAAK,MAAM,YAAY,WAAW,KAAK;AACvC,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,MAA0B,UAAU,OAAO;AACpD,UAAM,WAAW,KAAK,UAAU,cAAc,cAAc;AAC5D,QAAI,SAAS,YAAY,QAAQ,KAAM;AAGvC,QAAI,YAAY,MAAM;AACpB,eAAS,UAAU,OAAO,aAAa;AAAA,IACzC;AACA,SAAK,UAAU,IAAI,aAAa;AAChC,SAAK,OAAO,gBAAgB,MAAM,KAAK,KAAK,WAAW,QAAQ,EAAE,QAAQ,IAAI;AAC7E,QAAI,KAAK,aAAa,YAAY,GAAG;AACnC,WAAK,MAAM,aAAa,cAAc,KAAK,aAAa,YAAY,CAAC;AAAA,IACvE,OACK;AACH,WAAK,MAAM,gBAAgB,YAAY;AAAA,IACzC;AACA,QAAI,KAAK,aAAa,YAAY,GAAG;AACnC,WAAK,MAAM,aAAa,cAAc,KAAK,aAAa,YAAY,CAAC;AAAA,IACvE,OACK;AACH,WAAK,MAAM,gBAAgB,YAAY;AAAA,IACzC;AACA,QAAI,SAAS;AACX,WAAK,OAAO,cAAc,IAAI,MAAM,QAAQ,CAAC;AAC7C,WAAK,MAAA;AAAA,IACP;AAAA,EACF;AACF;AAEO,MAAM,oBAAoB,gBAAgB;AAAA,EAI/C,YAAY,QAA2B,OAAe,SAAc;AAClE,UAAM,QAAQ,OAAO,OAAO;AAAA,EAC9B;AAAA,EAEA,UAAU,QAA2B;AACnC,UAAM,OAAO,MAAM,UAAU,MAAM;AACnC,SAAK,aAAa,SAAS,OAAO,aAAa,OAAO,CAAC;AACvD,WAAO;AAAA,EACT;AACF;AAZE,cADW,aACJ;AACP,cAFW,aAEJ;"}
@@ -1 +1 @@
1
- {"version":3,"file":"better-toolbar.es.js","sources":["../../../../src/modules/toolbar/better-toolbar.ts"],"sourcesContent":["import type TypeToolbar from 'quill/modules/toolbar'\r\nimport Quill from 'quill'\r\nimport { isNullOrUndefined } from '../../config/editor.utils'\r\n\r\nconst Delta = Quill.import('delta')\r\nconst Parchment = Quill.import('parchment')\r\nconst levels = ['error', 'warn', 'log', 'info'] as const\r\nlet level = 'warn' as const\r\n\r\nfunction debuglogger(method: typeof levels[number], ...args) {\r\n if (levels.indexOf(method) <= levels.indexOf(level)) {\r\n console[method](...args) // eslint-disable-line no-console\r\n }\r\n}\r\n\r\nfunction namespace(ns) {\r\n return levels.reduce((logger, method) => {\r\n logger[method] = debuglogger.bind(console, method, ns)\r\n return logger\r\n }, {} as Record<typeof levels[number], (...args: any) => void>)\r\n}\r\n\r\nnamespace.level = (newLevel) => {\r\n level = newLevel\r\n}\r\ndebuglogger.level = namespace.level\r\nconst debug = namespace('quill:toolbar')\r\n\r\nconst Toolbar = Quill.import('modules/toolbar') as typeof TypeToolbar\r\n\r\nexport class BetterToolbar extends Toolbar {\r\n update(range) {\r\n const formats = isNullOrUndefined(range) ? {} : this.quill.getFormat(range) as Record<string, any>\r\n this.controls.forEach((pair) => {\r\n const [format, input] = pair\r\n if (input.tagName === 'SELECT') {\r\n const select = input as HTMLSelectElement\r\n let option\r\n if (isNullOrUndefined(range)) {\r\n option = null\r\n }\r\n else if (isNullOrUndefined(formats[format])) {\r\n option = select.querySelector('option[selected]')\r\n }\r\n else if (!Array.isArray(formats[format])) {\r\n let value = formats[format]\r\n if (typeof value === 'string') {\r\n value = value.replace(/\"/g, '\\\\\"')\r\n }\r\n option = select.querySelector(`option[value=\"${value}\"]`)\r\n }\r\n if (isNullOrUndefined(option)) {\r\n select.value = '' // TODO make configurable?\r\n select.selectedIndex = -1\r\n }\r\n else {\r\n option.selected = true\r\n }\r\n }\r\n else if (isNullOrUndefined(range)) {\r\n input.classList.remove('ql-active')\r\n }\r\n else if (input.hasAttribute('value')) {\r\n // both being null should match (default values)\r\n // '1' should match with 1 (headers)\r\n let isActive\r\n = formats[format] === input.getAttribute('value')\r\n || (!isNullOrUndefined(formats[format])\r\n && (formats[format].value === input.getAttribute('value')\r\n || formats[format].toString() === input.getAttribute('value')))\r\n || (isNullOrUndefined(formats[format]) && !input.getAttribute('value'))\r\n\r\n if (!isActive) {\r\n const checkFormat = formats[format]\r\n if (checkFormat === 'checked' || checkFormat === 'unchecked') {\r\n isActive = input.getAttribute('value') === 'check'\r\n }\r\n }\r\n\r\n if (isActive) {\r\n input.classList.add('ql-active')\r\n }\r\n else {\r\n input.classList.remove('ql-active')\r\n }\r\n }\r\n else {\r\n if (!isNullOrUndefined(formats[format])) {\r\n input.classList.add('ql-active')\r\n }\r\n else {\r\n input.classList.remove('ql-active')\r\n }\r\n }\r\n })\r\n }\r\n\r\n attach(input: HTMLElement) {\r\n let format = Array.from(input.classList).find((className) => {\r\n return className.indexOf('ql-') === 0\r\n })\r\n if (!format) return\r\n format = format.slice('ql-'.length)\r\n\r\n if (input.tagName === 'BUTTON') {\r\n input.setAttribute('type', 'button')\r\n }\r\n\r\n if (this.handlers[format] == null && this.quill.scroll.query(format) == null) {\r\n debug.warn('ignoring attaching to nonexistent format', format, input)\r\n return\r\n }\r\n\r\n const eventName = input.tagName === 'SELECT' ? 'change' : 'click'\r\n input.addEventListener(eventName, (e) => {\r\n let value: boolean | string\r\n\r\n if (input.tagName === 'SELECT') {\r\n const select = input as HTMLSelectElement\r\n if (select.selectedIndex < 0) return\r\n const selected = select.options[select.selectedIndex]\r\n\r\n if (selected.hasAttribute('selected')) {\r\n value = false\r\n }\r\n else {\r\n value = selected.value || false\r\n }\r\n }\r\n else {\r\n const button = input as HTMLButtonElement\r\n if (button.classList.contains('ql-active')) {\r\n value = false\r\n }\r\n else {\r\n value = button.value || !button.hasAttribute('value')\r\n }\r\n e.preventDefault()\r\n }\r\n\r\n this.quill.focus({ preventScroll: format === 'screenshot' })\r\n const [range] = this.quill.selection.getRange()\r\n if (this.handlers[format] != null) {\r\n // @ts-ignore\r\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\r\n return\r\n }\r\n this.handlers[format].call(this, value)\r\n }\r\n else if (\r\n // @ts-ignore\r\n this.quill.scroll.query(format).prototype instanceof Parchment.EmbedBlot\r\n ) {\r\n value = prompt(`Enter ${format}`)\r\n if (!value) return\r\n this.quill.updateContents(\r\n new Delta()\r\n .retain(range.index)\r\n .delete(range.length)\r\n .insert({ [format]: value }),\r\n Quill.sources.USER,\r\n )\r\n }\r\n else {\r\n // @ts-ignore\r\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\r\n return\r\n }\r\n this.quill.format(format, value, Quill.sources.USER)\r\n }\r\n\r\n this.update(range)\r\n })\r\n this.controls.push([format, input])\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"better-toolbar.es.js","sources":["../../../../src/modules/toolbar/better-toolbar.ts"],"sourcesContent":["import type TypeToolbar from 'quill/modules/toolbar'\r\nimport Quill from 'quill'\r\nimport { isNullOrUndefined } from '../../config/editor.utils'\r\n\r\nconst Delta = Quill.import('delta')\r\nconst Parchment = Quill.import('parchment')\r\nconst levels = ['error', 'warn', 'log', 'info'] as const\r\nlet level = 'warn' as const\r\n\r\nfunction debuglogger(method: typeof levels[number], ...args) {\r\n if (levels.indexOf(method) <= levels.indexOf(level)) {\r\n console[method](...args) // eslint-disable-line no-console\r\n }\r\n}\r\n\r\nfunction namespace(ns) {\r\n return levels.reduce((logger, method) => {\r\n logger[method] = debuglogger.bind(console, method, ns)\r\n return logger\r\n }, {} as Record<typeof levels[number], (...args: any) => void>)\r\n}\r\n\r\nnamespace.level = (newLevel) => {\r\n level = newLevel\r\n}\r\ndebuglogger.level = namespace.level\r\nconst debug = namespace('quill:toolbar')\r\n\r\nconst Toolbar = Quill.import('modules/toolbar') as typeof TypeToolbar\r\n\r\nexport class BetterToolbar extends Toolbar {\r\n update(range) {\r\n const formats = isNullOrUndefined(range) ? {} : this.quill.getFormat(range) as Record<string, any>\r\n this.controls.forEach((pair) => {\r\n const [format, input] = pair\r\n if (input.tagName === 'SELECT') {\r\n const select = input as HTMLSelectElement\r\n let option\r\n if (isNullOrUndefined(range)) {\r\n option = null\r\n }\r\n else if (isNullOrUndefined(formats[format])) {\r\n option = select.querySelector('option[selected]')\r\n }\r\n else if (!Array.isArray(formats[format])) {\r\n let value = formats[format]\r\n if (typeof value === 'string') {\r\n value = value.replace(/\"/g, '\\\\\"')\r\n }\r\n option = select.querySelector(`option[value=\"${value}\"]`)\r\n }\r\n if (isNullOrUndefined(option)) {\r\n select.value = '' // TODO make configurable?\r\n select.selectedIndex = -1\r\n }\r\n else {\r\n option.selected = true\r\n }\r\n }\r\n else if (isNullOrUndefined(range)) {\r\n input.classList.remove('ql-active')\r\n }\r\n else if (input.hasAttribute('value')) {\r\n // both being null should match (default values)\r\n // '1' should match with 1 (headers)\r\n let isActive\r\n = formats[format] === input.getAttribute('value')\r\n || (!isNullOrUndefined(formats[format])\r\n && (formats[format].value === input.getAttribute('value')\r\n || formats[format].toString() === input.getAttribute('value')))\r\n || (isNullOrUndefined(formats[format]) && !input.getAttribute('value'))\r\n\r\n if (!isActive) {\r\n const checkFormat = formats[format]\r\n if (checkFormat === 'checked' || checkFormat === 'unchecked') {\r\n isActive = input.getAttribute('value') === 'check'\r\n }\r\n }\r\n\r\n if (isActive) {\r\n input.classList.add('ql-active')\r\n }\r\n else {\r\n input.classList.remove('ql-active')\r\n }\r\n }\r\n else {\r\n if (!isNullOrUndefined(formats[format])) {\r\n input.classList.add('ql-active')\r\n }\r\n else {\r\n input.classList.remove('ql-active')\r\n }\r\n }\r\n })\r\n }\r\n\r\n attach(input: HTMLElement) {\r\n let format = Array.from(input.classList).find((className) => {\r\n return className.indexOf('ql-') === 0\r\n })\r\n if (!format) return\r\n format = format.slice('ql-'.length)\r\n\r\n if (input.tagName === 'BUTTON') {\r\n input.setAttribute('type', 'button')\r\n }\r\n\r\n if (this.handlers[format] == null && this.quill.scroll.query(format) == null) {\r\n debug.warn('ignoring attaching to nonexistent format', format, input)\r\n return\r\n }\r\n\r\n const eventName = input.tagName === 'SELECT' ? 'change' : 'click'\r\n input.addEventListener(eventName, (e) => {\r\n let value: boolean | string\r\n\r\n if (input.tagName === 'SELECT') {\r\n const select = input as HTMLSelectElement\r\n if (select.selectedIndex < 0) return\r\n const selected = select.options[select.selectedIndex]\r\n\r\n if (selected.hasAttribute('selected')) {\r\n value = false\r\n }\r\n else {\r\n value = selected.value || false\r\n }\r\n }\r\n else {\r\n const button = input as HTMLButtonElement\r\n if (button.classList.contains('ql-active')) {\r\n value = false\r\n }\r\n else {\r\n value = button.value || !button.hasAttribute('value')\r\n }\r\n e.preventDefault()\r\n }\r\n\r\n this.quill.focus({ preventScroll: format === 'screenshot' })\r\n const [range] = this.quill.selection.getRange()\r\n if (this.handlers[format] != null) {\r\n // @ts-ignore\r\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\r\n return\r\n }\r\n this.handlers[format].call(this, value)\r\n }\r\n else if (\r\n // @ts-ignore\r\n this.quill.scroll.query(format).prototype instanceof Parchment.EmbedBlot\r\n ) {\r\n value = prompt(`Enter ${format}`)\r\n if (!value) return\r\n this.quill.updateContents(\r\n new Delta()\r\n .retain(range.index)\r\n .delete(range.length)\r\n .insert({ [format]: value }),\r\n Quill.sources.USER,\r\n )\r\n }\r\n else {\r\n // @ts-ignore\r\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\r\n return\r\n }\r\n this.quill.format(format, value, Quill.sources.USER)\r\n }\r\n\r\n this.update(range)\r\n })\r\n this.controls.push([format, input])\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"toolbar-tip.es.js","sources":["../../../../src/modules/toolbar/toolbar-tip.ts"],"sourcesContent":["import type { Constructor } from '../../config/types'\r\nimport type FluentEditor from '../../fluent-editor'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\r\nimport { isString } from '../../utils/is'\r\n\r\nexport function generateToolbarTip(QuillToolbarTip: Constructor) {\r\n return class extends QuillToolbarTip {\r\n constructor(public quill: FluentEditor, options: Partial<Record<string, any>>) {\r\n if (!options?.tipTextMap) {\r\n options.tipTextMap = {}\r\n }\r\n super(quill, options)\r\n\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.destroyAllTips()\r\n this.options = this.resolveOptions(options)\r\n this.createToolbarTip()\r\n })\r\n }\r\n\r\n resolveOptions(options: Partial<Record<string, any>>): Record<string, any> {\r\n const result = super.resolveOptions(options)\r\n if (!this.quill.lang) return result\r\n const shortKeyMap = {\r\n 'bold': 'Ctrl + B',\r\n 'italic': 'Ctrl + I',\r\n 'underline': 'Ctrl + U',\r\n 'strike': 'Ctrl + D',\r\n 'clean': 'Ctrl + /',\r\n 'align-left': 'Alt + L',\r\n 'align-center': 'Alt + C',\r\n 'align-right': 'Alt + R',\r\n 'align-justify': 'Alt + J',\r\n 'indent-+1': 'Ctrl + ]',\r\n 'indent--1': 'Ctrl + [',\r\n 'script-sub': 'Ctrl + ;',\r\n 'script-super': 'Ctrl + \\'',\r\n 'code': 'Ctrl + E',\r\n 'direction-rtl': 'Ctrl + R',\r\n 'direction-ltr': 'Ctrl + L',\r\n 'undo': 'Ctrl + Z',\r\n 'redo': 'Ctrl + shift + Z',\r\n 'color': 'Ctrl + Alt + C',\r\n 'background': 'Ctrl + Alt + B',\r\n 'link': 'Ctrl + K',\r\n }\r\n const shortcutModule = this.quill.getModule('shortcut-key')\r\n const getShortKey = (name: string) => {\r\n if (!shortcutModule) return ''\r\n const shortKey = shortKeyMap[name]\r\n return shortKey ? `\\n${shortKey}` : ''\r\n }\r\n const btnTips = [\r\n 'color',\r\n 'background',\r\n 'bold',\r\n 'italic',\r\n 'strike',\r\n 'underline',\r\n 'undo',\r\n 'redo',\r\n 'clean',\r\n 'link',\r\n 'divider',\r\n 'blockquote',\r\n 'code',\r\n 'image',\r\n 'file',\r\n 'emoji',\r\n 'video',\r\n 'screenshot',\r\n 'code-block',\r\n 'formula',\r\n 'format-painter',\r\n 'header-list',\r\n 'table-up',\r\n ].reduce((map, name) => {\r\n map[name] = this.quill.getLangText(name) + getShortKey(name)\r\n return map\r\n }, {} as Record<string, string>)\r\n const selectTips = [\r\n 'font',\r\n 'size',\r\n 'line-height',\r\n ].reduce((map, name) => {\r\n map[name] = {\r\n onShow: () => {\r\n return this.quill.getLangText(name) + getShortKey(name)\r\n },\r\n }\r\n return map\r\n }, {})\r\n const valueControlTips = [\r\n 'list',\r\n 'align',\r\n 'script',\r\n 'indent',\r\n 'header',\r\n 'direction',\r\n ].reduce((map, name) => {\r\n map[name] = {\r\n onShow: (target: HTMLElement, value: string) => {\r\n if (name === 'direction') {\r\n value = target.classList.contains('ql-active') ? 'rtl' : 'ltr'\r\n }\r\n if (!value) {\r\n if (name === 'align') {\r\n value = 'left'\r\n }\r\n else if (name === 'header') {\r\n value = 'normal'\r\n }\r\n }\r\n return this.quill.getLangText(`${name}-${value}`) + getShortKey(`${name}-${value}`)\r\n },\r\n }\r\n return map\r\n }, {})\r\n const textMap = {\r\n ...btnTips,\r\n ...valueControlTips,\r\n ...selectTips,\r\n fullscreen: {\r\n onShow: () => {\r\n return this.quill.getLangText(this.quill.isFullscreen ? 'exit-fullscreen' : 'fullscreen')\r\n },\r\n },\r\n }\r\n const inputTipTextMap = Object.entries(options.tipTextMap).reduce((pre, [key, value]) => {\r\n pre[key] = isString(value) ? this.quill.getLangText(value) : value\r\n return pre\r\n }, {})\r\n return {\r\n ...result,\r\n tipTextMap: {\r\n ...textMap,\r\n ...inputTipTextMap,\r\n },\r\n }\r\n }\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"toolbar-tip.es.js","sources":["../../../../src/modules/toolbar/toolbar-tip.ts"],"sourcesContent":["import type { Constructor } from '../../config/types'\r\nimport type FluentEditor from '../../fluent-editor'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\r\nimport { isString } from '../../utils/is'\r\n\r\nexport function generateToolbarTip(QuillToolbarTip: Constructor) {\r\n return class extends QuillToolbarTip {\r\n constructor(public quill: FluentEditor, options: Partial<Record<string, any>>) {\r\n if (!options?.tipTextMap) {\r\n options.tipTextMap = {}\r\n }\r\n super(quill, options)\r\n\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.destroyAllTips()\r\n this.options = this.resolveOptions(options)\r\n this.createToolbarTip()\r\n })\r\n }\r\n\r\n resolveOptions(options: Partial<Record<string, any>>): Record<string, any> {\r\n const result = super.resolveOptions(options)\r\n if (!this.quill.lang) return result\r\n const shortKeyMap = {\r\n 'bold': 'Ctrl + B',\r\n 'italic': 'Ctrl + I',\r\n 'underline': 'Ctrl + U',\r\n 'strike': 'Ctrl + D',\r\n 'clean': 'Ctrl + /',\r\n 'align-left': 'Alt + L',\r\n 'align-center': 'Alt + C',\r\n 'align-right': 'Alt + R',\r\n 'align-justify': 'Alt + J',\r\n 'indent-+1': 'Ctrl + ]',\r\n 'indent--1': 'Ctrl + [',\r\n 'script-sub': 'Ctrl + ;',\r\n 'script-super': 'Ctrl + \\'',\r\n 'code': 'Ctrl + E',\r\n 'direction-rtl': 'Ctrl + R',\r\n 'direction-ltr': 'Ctrl + L',\r\n 'undo': 'Ctrl + Z',\r\n 'redo': 'Ctrl + shift + Z',\r\n 'color': 'Ctrl + Alt + C',\r\n 'background': 'Ctrl + Alt + B',\r\n 'link': 'Ctrl + K',\r\n }\r\n const shortcutModule = this.quill.getModule('shortcut-key')\r\n const getShortKey = (name: string) => {\r\n if (!shortcutModule) return ''\r\n const shortKey = shortKeyMap[name]\r\n return shortKey ? `\\n${shortKey}` : ''\r\n }\r\n const btnTips = [\r\n 'color',\r\n 'background',\r\n 'bold',\r\n 'italic',\r\n 'strike',\r\n 'underline',\r\n 'undo',\r\n 'redo',\r\n 'clean',\r\n 'link',\r\n 'divider',\r\n 'blockquote',\r\n 'code',\r\n 'image',\r\n 'file',\r\n 'emoji',\r\n 'video',\r\n 'screenshot',\r\n 'code-block',\r\n 'formula',\r\n 'format-painter',\r\n 'header-list',\r\n 'table-up',\r\n ].reduce((map, name) => {\r\n map[name] = this.quill.getLangText(name) + getShortKey(name)\r\n return map\r\n }, {} as Record<string, string>)\r\n const selectTips = [\r\n 'font',\r\n 'size',\r\n 'line-height',\r\n ].reduce((map, name) => {\r\n map[name] = {\r\n onShow: () => {\r\n return this.quill.getLangText(name) + getShortKey(name)\r\n },\r\n }\r\n return map\r\n }, {})\r\n const valueControlTips = [\r\n 'list',\r\n 'align',\r\n 'script',\r\n 'indent',\r\n 'header',\r\n 'direction',\r\n ].reduce((map, name) => {\r\n map[name] = {\r\n onShow: (target: HTMLElement, value: string) => {\r\n if (name === 'direction') {\r\n value = target.classList.contains('ql-active') ? 'rtl' : 'ltr'\r\n }\r\n if (!value) {\r\n if (name === 'align') {\r\n value = 'left'\r\n }\r\n else if (name === 'header') {\r\n value = 'normal'\r\n }\r\n }\r\n return this.quill.getLangText(`${name}-${value}`) + getShortKey(`${name}-${value}`)\r\n },\r\n }\r\n return map\r\n }, {})\r\n const textMap = {\r\n ...btnTips,\r\n ...valueControlTips,\r\n ...selectTips,\r\n fullscreen: {\r\n onShow: () => {\r\n return this.quill.getLangText(this.quill.isFullscreen ? 'exit-fullscreen' : 'fullscreen')\r\n },\r\n },\r\n }\r\n const inputTipTextMap = Object.entries(options.tipTextMap).reduce((pre, [key, value]) => {\r\n pre[key] = isString(value) ? this.quill.getLangText(value) : value\r\n return pre\r\n }, {})\r\n return {\r\n ...result,\r\n tipTextMap: {\r\n ...textMap,\r\n ...inputTipTextMap,\r\n },\r\n }\r\n }\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}