@opentiny/fluent-editor 4.0.0-alpha.6 → 4.0.0-alpha.8

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 (825) hide show
  1. package/LICENSE +21 -0
  2. package/dist/README.md +88 -0
  3. package/dist/es/attributors/line-height.es.js.map +1 -0
  4. package/dist/es/config/base64-image.es.js.map +1 -0
  5. package/dist/es/config/editor.config.es.js.map +1 -0
  6. package/dist/es/config/editor.utils.es.js.map +1 -0
  7. package/dist/es/config/i18n/en-us.es.js.map +1 -0
  8. package/dist/es/config/i18n/zh-cn.es.js.map +1 -0
  9. package/dist/es/config/index.es.js.map +1 -0
  10. package/dist/es/core/fluent-editor.es.js.map +1 -0
  11. package/dist/es/fluent-editor.es.js.map +1 -0
  12. package/dist/es/formats/emoji.es.js.map +1 -0
  13. package/dist/es/formats/soft-break.es.js.map +1 -0
  14. package/dist/es/formats/strike.es.js.map +1 -0
  15. package/dist/es/formats/video.es.js.map +1 -0
  16. package/dist/es/index.es.js +104 -0
  17. package/dist/es/index.es.js.map +1 -0
  18. package/dist/es/modules/ai/constants.es.js.map +1 -0
  19. package/dist/es/modules/ai/icons.es.js.map +1 -0
  20. package/dist/es/modules/ai/index.es.js.map +1 -0
  21. package/dist/es/modules/collaborative-editing/awareness/awareness.es.js +93 -0
  22. package/dist/es/modules/collaborative-editing/awareness/awareness.es.js.map +1 -0
  23. package/dist/es/modules/collaborative-editing/awareness/index.es.js +8 -0
  24. package/dist/es/modules/collaborative-editing/awareness/y-indexeddb.es.js +12 -0
  25. package/dist/es/modules/collaborative-editing/awareness/y-indexeddb.es.js.map +1 -0
  26. package/dist/es/modules/collaborative-editing/collaborative-editing.es.js +105 -0
  27. package/dist/es/modules/collaborative-editing/collaborative-editing.es.js.map +1 -0
  28. package/dist/es/modules/collaborative-editing/index.es.js +6 -0
  29. package/dist/es/modules/collaborative-editing/module.es.js +35 -0
  30. package/dist/es/modules/collaborative-editing/module.es.js.map +1 -0
  31. package/dist/es/modules/collaborative-editing/provider/providerRegistry.es.js +28 -0
  32. package/dist/es/modules/collaborative-editing/provider/providerRegistry.es.js.map +1 -0
  33. package/dist/es/modules/collaborative-editing/provider/webrtc.es.js +99 -0
  34. package/dist/es/modules/collaborative-editing/provider/webrtc.es.js.map +1 -0
  35. package/dist/es/modules/collaborative-editing/provider/websocket.es.js +111 -0
  36. package/dist/es/modules/collaborative-editing/provider/websocket.es.js.map +1 -0
  37. package/dist/es/modules/collaborative-editing/types.es.js +2 -0
  38. package/dist/es/modules/collaborative-editing/types.es.js.map +1 -0
  39. package/dist/es/modules/counter.es.js.map +1 -0
  40. package/dist/es/modules/custom-clipboard.es.js.map +1 -0
  41. package/dist/es/modules/custom-image/actions/action.es.js.map +1 -0
  42. package/dist/es/modules/custom-image/actions/custom-resize-action.es.js.map +1 -0
  43. package/dist/es/modules/custom-image/actions/delete-action.es.js.map +1 -0
  44. package/dist/es/modules/custom-image/blot-formatter.es.js.map +1 -0
  45. package/dist/es/modules/custom-image/image.es.js.map +1 -0
  46. package/dist/es/modules/custom-image/options.es.js +88 -0
  47. package/dist/es/modules/custom-image/options.es.js.map +1 -0
  48. package/dist/es/modules/custom-image/specs/blot-spec.es.js.map +1 -0
  49. package/dist/es/modules/custom-image/specs/custom-image-spec.es.js.map +1 -0
  50. package/dist/es/modules/custom-image/specs/image-spec.es.js.map +1 -0
  51. package/dist/es/modules/divider.es.js.map +1 -0
  52. package/dist/es/modules/emoji.es.js +167 -0
  53. package/dist/es/modules/emoji.es.js.map +1 -0
  54. package/dist/es/modules/file/formats/file.es.js.map +1 -0
  55. package/dist/es/modules/file/modules/file-bar.es.js.map +1 -0
  56. package/dist/es/modules/file/modules/file-module.es.js.map +1 -0
  57. package/dist/es/modules/index.es.js +27 -0
  58. package/dist/es/modules/index.es.js.map +1 -0
  59. package/dist/es/modules/link/formats/link.es.js.map +1 -0
  60. package/dist/es/modules/link/index.es.js.map +1 -0
  61. package/dist/es/modules/link/modules/tooltip.es.js.map +1 -0
  62. package/dist/es/modules/mathlive/formats.es.js.map +1 -0
  63. package/dist/es/modules/mathlive/tooltip.es.js.map +1 -0
  64. package/dist/es/modules/mention/constants.es.js.map +1 -0
  65. package/dist/es/modules/mention/index.es.js.map +1 -0
  66. package/dist/es/modules/mention/mention-link.es.js.map +1 -0
  67. package/dist/es/modules/mention/mention.es.js.map +1 -0
  68. package/dist/es/modules/syntax.es.js.map +1 -0
  69. package/dist/es/modules/toolbar/better-picker.es.js.map +1 -0
  70. package/dist/es/themes/snow.es.js.map +1 -0
  71. package/dist/es/tools/screenshot.es.js.map +1 -0
  72. package/dist/es/ui/icons.config.es.js.map +1 -0
  73. package/dist/es/ui/icons.es.js.map +1 -0
  74. package/dist/es/utils/debounce.es.js.map +1 -0
  75. package/dist/es/utils/method.es.js.map +1 -0
  76. package/dist/lib/attributors/line-height.cjs.js.map +1 -0
  77. package/dist/lib/config/base64-image.cjs.js.map +1 -0
  78. package/dist/lib/config/editor.config.cjs.js.map +1 -0
  79. package/dist/lib/config/editor.utils.cjs.js.map +1 -0
  80. package/dist/lib/config/i18n/en-us.cjs.js.map +1 -0
  81. package/dist/lib/config/i18n/zh-cn.cjs.js.map +1 -0
  82. package/dist/lib/config/index.cjs.js.map +1 -0
  83. package/dist/lib/core/fluent-editor.cjs.js.map +1 -0
  84. package/dist/lib/fluent-editor.cjs.js.map +1 -0
  85. package/dist/lib/formats/emoji.cjs.js.map +1 -0
  86. package/dist/lib/formats/soft-break.cjs.js.map +1 -0
  87. package/dist/lib/formats/strike.cjs.js.map +1 -0
  88. package/dist/lib/formats/video.cjs.js.map +1 -0
  89. package/dist/lib/index.cjs.js +125 -0
  90. package/dist/lib/index.cjs.js.map +1 -0
  91. package/dist/lib/modules/ai/constants.cjs.js.map +1 -0
  92. package/dist/lib/modules/ai/icons.cjs.js.map +1 -0
  93. package/dist/lib/modules/ai/index.cjs.js.map +1 -0
  94. package/dist/lib/modules/collaborative-editing/awareness/awareness.cjs.js +110 -0
  95. package/dist/lib/modules/collaborative-editing/awareness/awareness.cjs.js.map +1 -0
  96. package/dist/lib/modules/collaborative-editing/awareness/index.cjs.js +8 -0
  97. package/dist/lib/modules/collaborative-editing/awareness/index.cjs.js.map +1 -0
  98. package/dist/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js +12 -0
  99. package/dist/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js.map +1 -0
  100. package/dist/lib/modules/collaborative-editing/collaborative-editing.cjs.js +122 -0
  101. package/dist/lib/modules/collaborative-editing/collaborative-editing.cjs.js.map +1 -0
  102. package/dist/lib/modules/collaborative-editing/index.cjs.js +6 -0
  103. package/dist/lib/modules/collaborative-editing/index.cjs.js.map +1 -0
  104. package/dist/lib/modules/collaborative-editing/module.cjs.js +35 -0
  105. package/dist/lib/modules/collaborative-editing/module.cjs.js.map +1 -0
  106. package/dist/lib/modules/collaborative-editing/provider/providerRegistry.cjs.js +28 -0
  107. package/dist/lib/modules/collaborative-editing/provider/providerRegistry.cjs.js.map +1 -0
  108. package/dist/lib/modules/collaborative-editing/provider/webrtc.cjs.js +116 -0
  109. package/dist/lib/modules/collaborative-editing/provider/webrtc.cjs.js.map +1 -0
  110. package/dist/lib/modules/collaborative-editing/provider/websocket.cjs.js +128 -0
  111. package/dist/lib/modules/collaborative-editing/provider/websocket.cjs.js.map +1 -0
  112. package/dist/lib/modules/collaborative-editing/types.cjs.js +2 -0
  113. package/dist/lib/modules/collaborative-editing/types.cjs.js.map +1 -0
  114. package/dist/lib/modules/counter.cjs.js.map +1 -0
  115. package/dist/lib/modules/custom-clipboard.cjs.js.map +1 -0
  116. package/dist/lib/modules/custom-image/actions/action.cjs.js.map +1 -0
  117. package/dist/lib/modules/custom-image/actions/custom-resize-action.cjs.js.map +1 -0
  118. package/dist/lib/modules/custom-image/actions/delete-action.cjs.js.map +1 -0
  119. package/dist/lib/modules/custom-image/blot-formatter.cjs.js.map +1 -0
  120. package/dist/lib/modules/custom-image/image.cjs.js.map +1 -0
  121. package/dist/lib/modules/custom-image/options.cjs.js +88 -0
  122. package/dist/lib/modules/custom-image/options.cjs.js.map +1 -0
  123. package/dist/lib/modules/custom-image/specs/blot-spec.cjs.js.map +1 -0
  124. package/dist/lib/modules/custom-image/specs/custom-image-spec.cjs.js.map +1 -0
  125. package/dist/lib/modules/custom-image/specs/image-spec.cjs.js.map +1 -0
  126. package/dist/lib/modules/divider.cjs.js.map +1 -0
  127. package/dist/lib/modules/emoji.cjs.js +167 -0
  128. package/dist/lib/modules/emoji.cjs.js.map +1 -0
  129. package/dist/lib/modules/file/formats/file.cjs.js.map +1 -0
  130. package/dist/lib/modules/file/modules/file-bar.cjs.js.map +1 -0
  131. package/dist/lib/modules/file/modules/file-module.cjs.js.map +1 -0
  132. package/dist/lib/modules/index.cjs.js +27 -0
  133. package/dist/lib/modules/index.cjs.js.map +1 -0
  134. package/dist/lib/modules/link/formats/link.cjs.js.map +1 -0
  135. package/dist/lib/modules/link/modules/tooltip.cjs.js.map +1 -0
  136. package/dist/lib/modules/mathlive/formats.cjs.js.map +1 -0
  137. package/dist/lib/modules/mathlive/tooltip.cjs.js.map +1 -0
  138. package/dist/lib/modules/mention/constants.cjs.js.map +1 -0
  139. package/dist/lib/modules/mention/mention-link.cjs.js.map +1 -0
  140. package/dist/lib/modules/mention/mention.cjs.js.map +1 -0
  141. package/dist/lib/modules/syntax.cjs.js.map +1 -0
  142. package/dist/lib/modules/toolbar/better-picker.cjs.js.map +1 -0
  143. package/dist/lib/themes/snow.cjs.js.map +1 -0
  144. package/dist/lib/tools/screenshot.cjs.js.map +1 -0
  145. package/dist/lib/ui/icons.cjs.js.map +1 -0
  146. package/dist/lib/ui/icons.config.cjs.js.map +1 -0
  147. package/dist/lib/utils/debounce.cjs.js.map +1 -0
  148. package/dist/lib/utils/method.cjs.js.map +1 -0
  149. package/dist/package.json +67 -0
  150. package/dist/types/attributors/font-size.d.ts +1 -0
  151. package/dist/types/attributors/font-style.d.ts +1 -0
  152. package/dist/types/attributors/index.d.ts +4 -0
  153. package/dist/types/attributors/line-height.d.ts +1 -0
  154. package/dist/types/attributors/text-indent.d.ts +1 -0
  155. package/dist/types/config/base64-image.d.ts +2 -0
  156. package/dist/types/config/editor.config.d.ts +11 -0
  157. package/dist/types/config/editor.utils.d.ts +40 -0
  158. package/dist/types/config/i18n/en-us.d.ts +123 -0
  159. package/dist/types/config/i18n/zh-cn.d.ts +123 -0
  160. package/dist/types/config/index.d.ts +7 -0
  161. package/dist/types/config/types/editor-config.interface.d.ts +14 -0
  162. package/dist/types/config/types/editor-modules.interface.d.ts +41 -0
  163. package/dist/types/config/types/index.d.ts +3 -0
  164. package/dist/types/config/types/type.d.ts +2 -0
  165. package/dist/types/core/fluent-editor.d.ts +13 -0
  166. package/dist/types/fluent-editor.d.ts +2 -0
  167. package/dist/types/formats/emoji.d.ts +8 -0
  168. package/dist/types/formats/index.d.ts +4 -0
  169. package/dist/types/formats/soft-break.d.ts +12 -0
  170. package/dist/types/formats/strike.d.ts +8 -0
  171. package/dist/types/formats/video.d.ts +13 -0
  172. package/dist/types/index.d.ts +8 -0
  173. package/dist/types/modules/ai/constants.d.ts +30 -0
  174. package/dist/types/modules/ai/icons.d.ts +21 -0
  175. package/dist/types/modules/ai/index.d.ts +96 -0
  176. package/dist/types/modules/ai/types.d.ts +16 -0
  177. package/dist/types/modules/collaborative-editing/awareness/awareness.d.ts +28 -0
  178. package/dist/types/modules/collaborative-editing/awareness/index.d.ts +2 -0
  179. package/dist/types/modules/collaborative-editing/awareness/y-indexeddb.d.ts +2 -0
  180. package/dist/types/modules/collaborative-editing/collaborative-editing.d.ts +24 -0
  181. package/dist/types/modules/collaborative-editing/index.d.ts +2 -0
  182. package/dist/types/modules/collaborative-editing/module.d.ts +11 -0
  183. package/dist/types/modules/collaborative-editing/provider/index.d.ts +3 -0
  184. package/dist/types/modules/collaborative-editing/provider/providerRegistry.d.ts +25 -0
  185. package/dist/types/modules/collaborative-editing/provider/webrtc.d.ts +36 -0
  186. package/dist/types/modules/collaborative-editing/provider/websocket.d.ts +40 -0
  187. package/dist/types/modules/collaborative-editing/types.d.ts +37 -0
  188. package/dist/types/modules/counter.d.ts +23 -0
  189. package/dist/types/modules/custom-clipboard.d.ts +25 -0
  190. package/dist/types/modules/custom-image/actions/action.d.ts +8 -0
  191. package/dist/types/modules/custom-image/actions/custom-resize-action.d.ts +23 -0
  192. package/dist/types/modules/custom-image/actions/delete-action.d.ts +6 -0
  193. package/dist/types/modules/custom-image/actions/image-toolbar-buttons.d.ts +16 -0
  194. package/dist/types/modules/custom-image/actions/index.d.ts +6 -0
  195. package/dist/types/modules/custom-image/actions/toolbar-action.d.ts +11 -0
  196. package/dist/types/modules/custom-image/actions/toolbar.d.ts +19 -0
  197. package/dist/types/modules/custom-image/blot-formatter.d.ts +23 -0
  198. package/dist/types/modules/custom-image/image.d.ts +28 -0
  199. package/dist/types/modules/custom-image/index.d.ts +4 -0
  200. package/dist/types/modules/custom-image/options.d.ts +47 -0
  201. package/dist/types/modules/custom-image/specs/blot-spec.d.ts +12 -0
  202. package/dist/types/modules/custom-image/specs/custom-image-spec.d.ts +17 -0
  203. package/dist/types/modules/custom-image/specs/image-spec.d.ts +8 -0
  204. package/dist/types/modules/custom-image/specs/index.d.ts +3 -0
  205. package/dist/types/modules/custom-uploader.d.ts +40 -0
  206. package/dist/types/modules/divider.d.ts +8 -0
  207. package/dist/types/modules/emoji.d.ts +39 -0
  208. package/dist/types/modules/file/formats/file.d.ts +18 -0
  209. package/dist/types/modules/file/index.d.ts +3 -0
  210. package/dist/types/modules/file/modules/file-bar.d.ts +14 -0
  211. package/dist/types/modules/file/modules/file-module.d.ts +9 -0
  212. package/dist/types/modules/i18n.d.ts +14 -0
  213. package/dist/types/modules/index.d.ts +16 -0
  214. package/dist/types/modules/link/formats/link.d.ts +15 -0
  215. package/dist/types/modules/link/index.d.ts +2 -0
  216. package/dist/types/modules/link/modules/tooltip.d.ts +27 -0
  217. package/dist/types/modules/mathlive/formats.d.ts +22 -0
  218. package/dist/types/modules/mathlive/index.d.ts +3 -0
  219. package/dist/types/modules/mathlive/module.d.ts +9 -0
  220. package/dist/types/modules/mathlive/tooltip.d.ts +18 -0
  221. package/dist/types/modules/mention/constants.d.ts +3 -0
  222. package/dist/types/modules/mention/index.d.ts +2 -0
  223. package/dist/types/modules/mention/mention-link.d.ts +16 -0
  224. package/dist/types/modules/mention/mention.d.ts +53 -0
  225. package/dist/types/modules/shortcut-key/index.d.ts +71 -0
  226. package/dist/types/modules/syntax.d.ts +13 -0
  227. package/dist/types/modules/table-up/index.d.ts +34 -0
  228. package/dist/types/modules/toolbar/better-picker.d.ts +15 -0
  229. package/dist/types/modules/toolbar/better-toolbar.d.ts +7 -0
  230. package/dist/types/modules/toolbar/index.d.ts +3 -0
  231. package/dist/types/modules/toolbar/toolbar-tip.d.ts +9 -0
  232. package/dist/types/themes/snow.d.ts +11 -0
  233. package/dist/types/tools/format-painter.d.ts +13 -0
  234. package/dist/types/tools/fullscreen.d.ts +6 -0
  235. package/dist/types/tools/screenshot.d.ts +19 -0
  236. package/dist/types/ui/icons.config.d.ts +38 -0
  237. package/dist/types/ui/icons.d.ts +6 -0
  238. package/dist/types/utils/debounce.d.ts +6 -0
  239. package/dist/types/utils/image.d.ts +1 -0
  240. package/dist/types/utils/is.d.ts +6 -0
  241. package/dist/types/utils/method.d.ts +6 -0
  242. package/dist/types/utils/scroll-lock.d.ts +6 -0
  243. package/package.json +67 -60
  244. package/scripts/pre-release.cjs +35 -0
  245. package/src/assets/ai.scss +451 -0
  246. package/src/assets/common/config.scss +4 -0
  247. package/src/assets/common.scss +132 -0
  248. package/src/assets/counter.scss +16 -0
  249. package/src/assets/custom-image.scss +19 -0
  250. package/src/assets/editor.scss +351 -0
  251. package/src/assets/fileBar.scss +107 -0
  252. package/src/assets/font.scss +18 -0
  253. package/src/assets/fullscreen.scss +50 -0
  254. package/src/assets/iconfont/iconfont.ttf +0 -0
  255. package/src/assets/iconfont/iconfont.woff +0 -0
  256. package/src/assets/iconfont/iconfont.woff2 +0 -0
  257. package/src/assets/imageBar.scss +98 -0
  258. package/src/assets/lineHeight.scss +15 -0
  259. package/src/assets/link.scss +120 -0
  260. package/src/assets/mathlive.scss +40 -0
  261. package/src/assets/mention.scss +48 -0
  262. package/src/assets/screenshot.scss +78 -0
  263. package/src/assets/size.scss +11 -0
  264. package/src/assets/style.scss +46 -0
  265. package/src/assets/svgs/align-center.svg +41 -0
  266. package/src/assets/svgs/align-justify.svg +8 -0
  267. package/src/assets/svgs/arrow-down.svg +6 -0
  268. package/src/assets/svgs/background-color.svg +7 -0
  269. package/src/assets/svgs/clean.svg +8 -0
  270. package/src/assets/svgs/code-block.svg +5 -0
  271. package/src/assets/svgs/code.svg +25 -0
  272. package/src/assets/svgs/color.svg +7 -0
  273. package/src/assets/svgs/direction-ltr.svg +8 -0
  274. package/src/assets/svgs/direction-rtl.svg +8 -0
  275. package/src/assets/svgs/divider.svg +4 -0
  276. package/src/assets/svgs/emoji.svg +53 -0
  277. package/src/assets/svgs/file.svg +12 -0
  278. package/src/assets/svgs/format-painter.svg +10 -0
  279. package/src/assets/svgs/formula.svg +6 -0
  280. package/src/assets/svgs/fullscreen.svg +43 -0
  281. package/src/assets/svgs/image.svg +17 -0
  282. package/src/assets/svgs/italic.svg +6 -0
  283. package/src/assets/svgs/link.svg +9 -0
  284. package/src/assets/svgs/list-bullet.svg +16 -0
  285. package/src/assets/svgs/list-ordered.svg +18 -0
  286. package/src/assets/svgs/list-task.svg +5 -0
  287. package/src/assets/svgs/redo.svg +8 -0
  288. package/src/assets/svgs/screenshot.svg +17 -0
  289. package/src/assets/svgs/script-sub.svg +15 -0
  290. package/src/assets/svgs/script-super.svg +15 -0
  291. package/src/assets/svgs/strike.svg +6 -0
  292. package/src/assets/svgs/underline.svg +13 -0
  293. package/src/assets/svgs/undo.svg +8 -0
  294. package/src/assets/svgs/video.svg +10 -0
  295. package/src/assets/tasklist.scss +76 -0
  296. package/src/assets/toolbar.scss +385 -0
  297. package/src/assets/variable.scss +9 -0
  298. package/src/assets/video.scss +5 -0
  299. package/src/attributors/font-size.ts +6 -0
  300. package/src/attributors/font-style.ts +6 -0
  301. package/src/attributors/index.ts +4 -0
  302. package/src/attributors/line-height.ts +6 -0
  303. package/src/attributors/text-indent.ts +6 -0
  304. package/src/config/base64-image.ts +5 -0
  305. package/src/config/editor.config.ts +86 -0
  306. package/src/config/editor.utils.ts +193 -0
  307. package/src/config/i18n/en-us.ts +138 -0
  308. package/src/config/i18n/zh-cn.ts +137 -0
  309. package/src/config/index.ts +44 -0
  310. package/src/config/types/editor-config.interface.ts +16 -0
  311. package/src/config/types/editor-modules.interface.ts +47 -0
  312. package/src/config/types/index.ts +3 -0
  313. package/src/config/types/type.ts +2 -0
  314. package/src/core/fluent-editor.ts +31 -0
  315. package/src/fluent-editor.ts +72 -0
  316. package/src/formats/emoji.ts +10 -0
  317. package/src/formats/index.ts +4 -0
  318. package/src/formats/soft-break.ts +27 -0
  319. package/src/formats/strike.ts +11 -0
  320. package/src/formats/video.ts +53 -0
  321. package/src/index.ts +9 -0
  322. package/src/modules/ai/constants.ts +43 -0
  323. package/src/modules/ai/icons.ts +333 -0
  324. package/src/modules/ai/index.ts +850 -0
  325. package/src/modules/ai/types.ts +18 -0
  326. package/src/modules/collaborative-editing/awareness/awareness.ts +141 -0
  327. package/src/modules/collaborative-editing/awareness/index.ts +2 -0
  328. package/src/modules/collaborative-editing/awareness/y-indexeddb.ts +12 -0
  329. package/src/modules/collaborative-editing/collaborative-editing.ts +115 -0
  330. package/src/modules/collaborative-editing/index.ts +2 -0
  331. package/src/modules/collaborative-editing/module.ts +32 -0
  332. package/src/modules/collaborative-editing/provider/index.ts +3 -0
  333. package/src/modules/collaborative-editing/provider/providerRegistry.ts +57 -0
  334. package/src/modules/collaborative-editing/provider/webrtc.ts +125 -0
  335. package/src/modules/collaborative-editing/provider/websocket.ts +142 -0
  336. package/src/modules/collaborative-editing/types.ts +44 -0
  337. package/src/modules/counter.ts +84 -0
  338. package/src/modules/custom-clipboard.ts +537 -0
  339. package/src/modules/custom-image/actions/action.ts +15 -0
  340. package/src/modules/custom-image/actions/custom-resize-action.ts +207 -0
  341. package/src/modules/custom-image/actions/delete-action.ts +32 -0
  342. package/src/modules/custom-image/actions/image-toolbar-buttons.ts +135 -0
  343. package/src/modules/custom-image/actions/index.ts +6 -0
  344. package/src/modules/custom-image/actions/toolbar-action.ts +32 -0
  345. package/src/modules/custom-image/actions/toolbar.ts +145 -0
  346. package/src/modules/custom-image/blot-formatter.ts +158 -0
  347. package/src/modules/custom-image/image.ts +132 -0
  348. package/src/modules/custom-image/index.ts +4 -0
  349. package/src/modules/custom-image/options.ts +139 -0
  350. package/src/modules/custom-image/specs/blot-spec.ts +30 -0
  351. package/src/modules/custom-image/specs/custom-image-spec.ts +131 -0
  352. package/src/modules/custom-image/specs/image-spec.ts +28 -0
  353. package/src/modules/custom-image/specs/index.ts +3 -0
  354. package/src/modules/custom-uploader.ts +101 -0
  355. package/src/modules/divider.ts +15 -0
  356. package/src/modules/emoji.ts +230 -0
  357. package/src/modules/file/formats/file.ts +61 -0
  358. package/src/modules/file/index.ts +3 -0
  359. package/src/modules/file/modules/file-bar.ts +146 -0
  360. package/src/modules/file/modules/file-module.ts +33 -0
  361. package/src/modules/i18n.ts +66 -0
  362. package/src/modules/index.ts +16 -0
  363. package/src/modules/link/formats/link.ts +43 -0
  364. package/src/modules/link/index.ts +2 -0
  365. package/src/modules/link/modules/tooltip.ts +341 -0
  366. package/src/modules/mathlive/formats.ts +39 -0
  367. package/src/modules/mathlive/index.ts +3 -0
  368. package/src/modules/mathlive/module.ts +37 -0
  369. package/src/modules/mathlive/tooltip.ts +87 -0
  370. package/src/modules/mention/constants.ts +3 -0
  371. package/src/modules/mention/index.ts +2 -0
  372. package/src/modules/mention/mention-link.ts +64 -0
  373. package/src/modules/mention/mention.ts +404 -0
  374. package/src/modules/shortcut-key/index.ts +237 -0
  375. package/src/modules/syntax.ts +35 -0
  376. package/src/modules/table-up/index.ts +83 -0
  377. package/src/modules/toolbar/better-picker.ts +67 -0
  378. package/src/modules/toolbar/better-toolbar.ts +176 -0
  379. package/src/modules/toolbar/index.ts +3 -0
  380. package/src/modules/toolbar/toolbar-tip.ts +142 -0
  381. package/src/themes/snow.ts +309 -0
  382. package/src/tools/format-painter.ts +85 -0
  383. package/src/tools/fullscreen.ts +66 -0
  384. package/src/tools/screenshot.ts +231 -0
  385. package/src/ui/icons.config.ts +361 -0
  386. package/src/ui/icons.ts +89 -0
  387. package/src/utils/debounce.ts +150 -0
  388. package/src/utils/image.ts +22 -0
  389. package/src/utils/is.ts +9 -0
  390. package/src/utils/method.ts +77 -0
  391. package/src/utils/scroll-lock.ts +52 -0
  392. package/tsconfig.json +25 -0
  393. package/vite.config.ts +83 -0
  394. package/README.md +0 -88
  395. package/es/attributors/line-height.es.js.map +0 -1
  396. package/es/config/base64-image.es.js.map +0 -1
  397. package/es/config/editor.config.es.js.map +0 -1
  398. package/es/config/editor.utils.es.js.map +0 -1
  399. package/es/config/i18n/en-us.es.js.map +0 -1
  400. package/es/config/i18n/zh-cn.es.js.map +0 -1
  401. package/es/config/index.es.js.map +0 -1
  402. package/es/core/fluent-editor.es.js.map +0 -1
  403. package/es/fluent-editor.es.js.map +0 -1
  404. package/es/formats/emoji.es.js.map +0 -1
  405. package/es/formats/soft-break.es.js.map +0 -1
  406. package/es/formats/strike.es.js.map +0 -1
  407. package/es/formats/video.es.js.map +0 -1
  408. package/es/index.es.js +0 -102
  409. package/es/index.es.js.map +0 -1
  410. package/es/modules/ai/constants.es.js.map +0 -1
  411. package/es/modules/ai/icons.es.js.map +0 -1
  412. package/es/modules/ai/index.es.js.map +0 -1
  413. package/es/modules/counter.es.js.map +0 -1
  414. package/es/modules/custom-clipboard.es.js.map +0 -1
  415. package/es/modules/custom-image/actions/action.es.js.map +0 -1
  416. package/es/modules/custom-image/actions/custom-resize-action.es.js.map +0 -1
  417. package/es/modules/custom-image/actions/delete-action.es.js.map +0 -1
  418. package/es/modules/custom-image/blot-formatter.es.js.map +0 -1
  419. package/es/modules/custom-image/image.es.js.map +0 -1
  420. package/es/modules/custom-image/options.es.js +0 -88
  421. package/es/modules/custom-image/options.es.js.map +0 -1
  422. package/es/modules/custom-image/specs/blot-spec.es.js.map +0 -1
  423. package/es/modules/custom-image/specs/custom-image-spec.es.js.map +0 -1
  424. package/es/modules/custom-image/specs/image-spec.es.js.map +0 -1
  425. package/es/modules/divider.es.js.map +0 -1
  426. package/es/modules/emoji.es.js +0 -163
  427. package/es/modules/emoji.es.js.map +0 -1
  428. package/es/modules/file/formats/file.es.js.map +0 -1
  429. package/es/modules/file/modules/file-bar.es.js.map +0 -1
  430. package/es/modules/file/modules/file-module.es.js.map +0 -1
  431. package/es/modules/index.es.js +0 -26
  432. package/es/modules/index.es.js.map +0 -1
  433. package/es/modules/link/formats/link.es.js.map +0 -1
  434. package/es/modules/link/modules/tooltip.es.js.map +0 -1
  435. package/es/modules/mathlive/formats.es.js.map +0 -1
  436. package/es/modules/mathlive/tooltip.es.js.map +0 -1
  437. package/es/modules/mention/constants.es.js.map +0 -1
  438. package/es/modules/mention/mention-link.es.js.map +0 -1
  439. package/es/modules/mention/mention.es.js.map +0 -1
  440. package/es/modules/syntax.es.js.map +0 -1
  441. package/es/modules/toolbar/better-picker.es.js.map +0 -1
  442. package/es/node_modules/.pnpm/@emoji-mart_data@1.2.1/node_modules/@emoji-mart/data/sets/15/native.json.es.js +0 -40145
  443. package/es/node_modules/.pnpm/@emoji-mart_data@1.2.1/node_modules/@emoji-mart/data/sets/15/native.json.es.js.map +0 -1
  444. package/es/node_modules/.pnpm/@floating-ui_core@1.7.2/node_modules/@floating-ui/core/dist/floating-ui.core.es.js +0 -938
  445. package/es/node_modules/.pnpm/@floating-ui_core@1.7.2/node_modules/@floating-ui/core/dist/floating-ui.core.es.js.map +0 -1
  446. package/es/node_modules/.pnpm/@floating-ui_dom@1.7.2/node_modules/@floating-ui/dom/dist/floating-ui.dom.es.js +0 -624
  447. package/es/node_modules/.pnpm/@floating-ui_dom@1.7.2/node_modules/@floating-ui/dom/dist/floating-ui.dom.es.js.map +0 -1
  448. package/es/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.es.js +0 -174
  449. package/es/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.es.js.map +0 -1
  450. package/es/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.es.js +0 -159
  451. package/es/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.es.js.map +0 -1
  452. package/es/node_modules/.pnpm/emoji-mart@5.6.0/node_modules/emoji-mart/dist/module.es.js +0 -2849
  453. package/es/node_modules/.pnpm/emoji-mart@5.6.0/node_modules/emoji-mart/dist/module.es.js.map +0 -1
  454. package/es/themes/snow.es.js.map +0 -1
  455. package/es/tools/screenshot.es.js.map +0 -1
  456. package/es/ui/icons.config.es.js.map +0 -1
  457. package/es/ui/icons.es.js.map +0 -1
  458. package/es/utils/debounce.es.js.map +0 -1
  459. package/es/utils/method.es.js.map +0 -1
  460. package/lib/attributors/line-height.cjs.js.map +0 -1
  461. package/lib/config/base64-image.cjs.js.map +0 -1
  462. package/lib/config/editor.config.cjs.js.map +0 -1
  463. package/lib/config/editor.utils.cjs.js.map +0 -1
  464. package/lib/config/i18n/en-us.cjs.js.map +0 -1
  465. package/lib/config/i18n/zh-cn.cjs.js.map +0 -1
  466. package/lib/config/index.cjs.js.map +0 -1
  467. package/lib/core/fluent-editor.cjs.js.map +0 -1
  468. package/lib/fluent-editor.cjs.js.map +0 -1
  469. package/lib/formats/emoji.cjs.js.map +0 -1
  470. package/lib/formats/soft-break.cjs.js.map +0 -1
  471. package/lib/formats/strike.cjs.js.map +0 -1
  472. package/lib/formats/video.cjs.js.map +0 -1
  473. package/lib/index.cjs.js +0 -123
  474. package/lib/index.cjs.js.map +0 -1
  475. package/lib/modules/ai/constants.cjs.js.map +0 -1
  476. package/lib/modules/ai/icons.cjs.js.map +0 -1
  477. package/lib/modules/ai/index.cjs.js.map +0 -1
  478. package/lib/modules/counter.cjs.js.map +0 -1
  479. package/lib/modules/custom-clipboard.cjs.js.map +0 -1
  480. package/lib/modules/custom-image/actions/action.cjs.js.map +0 -1
  481. package/lib/modules/custom-image/actions/custom-resize-action.cjs.js.map +0 -1
  482. package/lib/modules/custom-image/actions/delete-action.cjs.js.map +0 -1
  483. package/lib/modules/custom-image/blot-formatter.cjs.js.map +0 -1
  484. package/lib/modules/custom-image/image.cjs.js.map +0 -1
  485. package/lib/modules/custom-image/options.cjs.js +0 -88
  486. package/lib/modules/custom-image/options.cjs.js.map +0 -1
  487. package/lib/modules/custom-image/specs/blot-spec.cjs.js.map +0 -1
  488. package/lib/modules/custom-image/specs/custom-image-spec.cjs.js.map +0 -1
  489. package/lib/modules/custom-image/specs/image-spec.cjs.js.map +0 -1
  490. package/lib/modules/divider.cjs.js.map +0 -1
  491. package/lib/modules/emoji.cjs.js +0 -163
  492. package/lib/modules/emoji.cjs.js.map +0 -1
  493. package/lib/modules/file/formats/file.cjs.js.map +0 -1
  494. package/lib/modules/file/modules/file-bar.cjs.js.map +0 -1
  495. package/lib/modules/file/modules/file-module.cjs.js.map +0 -1
  496. package/lib/modules/index.cjs.js +0 -26
  497. package/lib/modules/index.cjs.js.map +0 -1
  498. package/lib/modules/link/formats/link.cjs.js.map +0 -1
  499. package/lib/modules/link/modules/tooltip.cjs.js.map +0 -1
  500. package/lib/modules/mathlive/formats.cjs.js.map +0 -1
  501. package/lib/modules/mathlive/tooltip.cjs.js.map +0 -1
  502. package/lib/modules/mention/constants.cjs.js.map +0 -1
  503. package/lib/modules/mention/mention-link.cjs.js.map +0 -1
  504. package/lib/modules/mention/mention.cjs.js.map +0 -1
  505. package/lib/modules/syntax.cjs.js.map +0 -1
  506. package/lib/modules/toolbar/better-picker.cjs.js.map +0 -1
  507. package/lib/node_modules/.pnpm/@emoji-mart_data@1.2.1/node_modules/@emoji-mart/data/sets/15/native.json.cjs.js +0 -40145
  508. package/lib/node_modules/.pnpm/@emoji-mart_data@1.2.1/node_modules/@emoji-mart/data/sets/15/native.json.cjs.js.map +0 -1
  509. package/lib/node_modules/.pnpm/@floating-ui_core@1.7.2/node_modules/@floating-ui/core/dist/floating-ui.core.cjs.js +0 -938
  510. package/lib/node_modules/.pnpm/@floating-ui_core@1.7.2/node_modules/@floating-ui/core/dist/floating-ui.core.cjs.js.map +0 -1
  511. package/lib/node_modules/.pnpm/@floating-ui_dom@1.7.2/node_modules/@floating-ui/dom/dist/floating-ui.dom.cjs.js +0 -624
  512. package/lib/node_modules/.pnpm/@floating-ui_dom@1.7.2/node_modules/@floating-ui/dom/dist/floating-ui.dom.cjs.js.map +0 -1
  513. package/lib/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.cjs.js +0 -159
  514. package/lib/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.cjs.js.map +0 -1
  515. package/lib/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.cjs.js +0 -174
  516. package/lib/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.cjs.js.map +0 -1
  517. package/lib/node_modules/.pnpm/emoji-mart@5.6.0/node_modules/emoji-mart/dist/module.cjs.js +0 -2847
  518. package/lib/node_modules/.pnpm/emoji-mart@5.6.0/node_modules/emoji-mart/dist/module.cjs.js.map +0 -1
  519. package/lib/themes/snow.cjs.js.map +0 -1
  520. package/lib/tools/screenshot.cjs.js.map +0 -1
  521. package/lib/ui/icons.cjs.js.map +0 -1
  522. package/lib/ui/icons.config.cjs.js.map +0 -1
  523. package/lib/utils/debounce.cjs.js.map +0 -1
  524. package/lib/utils/method.cjs.js.map +0 -1
  525. package/types/attributors/font-size.d.ts +0 -1
  526. package/types/attributors/font-style.d.ts +0 -1
  527. package/types/attributors/index.d.ts +0 -4
  528. package/types/attributors/line-height.d.ts +0 -1
  529. package/types/attributors/text-indent.d.ts +0 -1
  530. package/types/config/base64-image.d.ts +0 -2
  531. package/types/config/editor.config.d.ts +0 -11
  532. package/types/config/editor.utils.d.ts +0 -40
  533. package/types/config/i18n/en-us.d.ts +0 -123
  534. package/types/config/i18n/zh-cn.d.ts +0 -123
  535. package/types/config/index.d.ts +0 -7
  536. package/types/config/types/editor-config.interface.d.ts +0 -15
  537. package/types/config/types/editor-modules.interface.d.ts +0 -42
  538. package/types/config/types/index.d.ts +0 -3
  539. package/types/config/types/type.d.ts +0 -2
  540. package/types/core/fluent-editor.d.ts +0 -14
  541. package/types/fluent-editor.d.ts +0 -3
  542. package/types/formats/emoji.d.ts +0 -9
  543. package/types/formats/index.d.ts +0 -4
  544. package/types/formats/soft-break.d.ts +0 -13
  545. package/types/formats/strike.d.ts +0 -9
  546. package/types/formats/video.d.ts +0 -14
  547. package/types/index.d.ts +0 -9
  548. package/types/modules/ai/constants.d.ts +0 -30
  549. package/types/modules/ai/icons.d.ts +0 -21
  550. package/types/modules/ai/index.d.ts +0 -97
  551. package/types/modules/ai/types.d.ts +0 -16
  552. package/types/modules/counter.d.ts +0 -24
  553. package/types/modules/custom-clipboard.d.ts +0 -26
  554. package/types/modules/custom-image/actions/action.d.ts +0 -9
  555. package/types/modules/custom-image/actions/custom-resize-action.d.ts +0 -24
  556. package/types/modules/custom-image/actions/delete-action.d.ts +0 -7
  557. package/types/modules/custom-image/actions/image-toolbar-buttons.d.ts +0 -17
  558. package/types/modules/custom-image/actions/index.d.ts +0 -6
  559. package/types/modules/custom-image/actions/toolbar-action.d.ts +0 -12
  560. package/types/modules/custom-image/actions/toolbar.d.ts +0 -20
  561. package/types/modules/custom-image/blot-formatter.d.ts +0 -24
  562. package/types/modules/custom-image/image.d.ts +0 -29
  563. package/types/modules/custom-image/index.d.ts +0 -4
  564. package/types/modules/custom-image/options.d.ts +0 -48
  565. package/types/modules/custom-image/specs/blot-spec.d.ts +0 -13
  566. package/types/modules/custom-image/specs/custom-image-spec.d.ts +0 -18
  567. package/types/modules/custom-image/specs/image-spec.d.ts +0 -9
  568. package/types/modules/custom-image/specs/index.d.ts +0 -3
  569. package/types/modules/custom-uploader.d.ts +0 -41
  570. package/types/modules/divider.d.ts +0 -9
  571. package/types/modules/emoji.d.ts +0 -34
  572. package/types/modules/file/formats/file.d.ts +0 -19
  573. package/types/modules/file/index.d.ts +0 -3
  574. package/types/modules/file/modules/file-bar.d.ts +0 -14
  575. package/types/modules/file/modules/file-module.d.ts +0 -10
  576. package/types/modules/i18n.d.ts +0 -15
  577. package/types/modules/index.d.ts +0 -15
  578. package/types/modules/link/formats/link.d.ts +0 -16
  579. package/types/modules/link/index.d.ts +0 -2
  580. package/types/modules/link/modules/tooltip.d.ts +0 -28
  581. package/types/modules/mathlive/formats.d.ts +0 -23
  582. package/types/modules/mathlive/index.d.ts +0 -3
  583. package/types/modules/mathlive/module.d.ts +0 -10
  584. package/types/modules/mathlive/tooltip.d.ts +0 -19
  585. package/types/modules/mention/constants.d.ts +0 -3
  586. package/types/modules/mention/index.d.ts +0 -2
  587. package/types/modules/mention/mention-link.d.ts +0 -17
  588. package/types/modules/mention/mention.d.ts +0 -54
  589. package/types/modules/shortcut-key/index.d.ts +0 -72
  590. package/types/modules/syntax.d.ts +0 -14
  591. package/types/modules/table-up/index.d.ts +0 -35
  592. package/types/modules/toolbar/better-picker.d.ts +0 -16
  593. package/types/modules/toolbar/better-toolbar.d.ts +0 -8
  594. package/types/modules/toolbar/index.d.ts +0 -3
  595. package/types/modules/toolbar/toolbar-tip.d.ts +0 -10
  596. package/types/themes/snow.d.ts +0 -12
  597. package/types/tools/format-painter.d.ts +0 -14
  598. package/types/tools/fullscreen.d.ts +0 -7
  599. package/types/tools/screenshot.d.ts +0 -20
  600. package/types/ui/icons.config.d.ts +0 -38
  601. package/types/ui/icons.d.ts +0 -6
  602. package/types/utils/debounce.d.ts +0 -6
  603. package/types/utils/image.d.ts +0 -1
  604. package/types/utils/is.d.ts +0 -6
  605. package/types/utils/method.d.ts +0 -6
  606. package/types/utils/scroll-lock.d.ts +0 -6
  607. /package/{es → dist/es}/attributors/font-size.es.js +0 -0
  608. /package/{es → dist/es}/attributors/font-size.es.js.map +0 -0
  609. /package/{es → dist/es}/attributors/font-style.es.js +0 -0
  610. /package/{es → dist/es}/attributors/font-style.es.js.map +0 -0
  611. /package/{es → dist/es}/attributors/index.es.js +0 -0
  612. /package/{es → dist/es}/attributors/index.es.js.map +0 -0
  613. /package/{es → dist/es}/attributors/line-height.es.js +0 -0
  614. /package/{es → dist/es}/attributors/text-indent.es.js +0 -0
  615. /package/{es → dist/es}/attributors/text-indent.es.js.map +0 -0
  616. /package/{es → dist/es}/config/base64-image.es.js +0 -0
  617. /package/{es → dist/es}/config/editor.config.es.js +0 -0
  618. /package/{es → dist/es}/config/editor.utils.es.js +0 -0
  619. /package/{es → dist/es}/config/i18n/en-us.es.js +0 -0
  620. /package/{es → dist/es}/config/i18n/zh-cn.es.js +0 -0
  621. /package/{es → dist/es}/config/index.es.js +0 -0
  622. /package/{es → dist/es}/config/types/editor-config.interface.es.js +0 -0
  623. /package/{es → dist/es}/config/types/editor-config.interface.es.js.map +0 -0
  624. /package/{es → dist/es}/config/types/editor-modules.interface.es.js +0 -0
  625. /package/{es → dist/es}/config/types/editor-modules.interface.es.js.map +0 -0
  626. /package/{es → dist/es}/config/types/index.es.js +0 -0
  627. /package/{es → dist/es}/config/types/index.es.js.map +0 -0
  628. /package/{es → dist/es}/config/types/type.es.js +0 -0
  629. /package/{es → dist/es}/config/types/type.es.js.map +0 -0
  630. /package/{es → dist/es}/core/fluent-editor.es.js +0 -0
  631. /package/{es → dist/es}/fluent-editor.es.js +0 -0
  632. /package/{es → dist/es}/formats/emoji.es.js +0 -0
  633. /package/{es → dist/es}/formats/index.es.js +0 -0
  634. /package/{es → dist/es}/formats/index.es.js.map +0 -0
  635. /package/{es → dist/es}/formats/soft-break.es.js +0 -0
  636. /package/{es → dist/es}/formats/strike.es.js +0 -0
  637. /package/{es → dist/es}/formats/video.es.js +0 -0
  638. /package/{es → dist/es}/modules/ai/constants.es.js +0 -0
  639. /package/{es → dist/es}/modules/ai/icons.es.js +0 -0
  640. /package/{es → dist/es}/modules/ai/index.es.js +0 -0
  641. /package/{es/modules/link → dist/es/modules/collaborative-editing/awareness}/index.es.js.map +0 -0
  642. /package/{es/modules/mention → dist/es/modules/collaborative-editing}/index.es.js.map +0 -0
  643. /package/{es → dist/es}/modules/counter.es.js +0 -0
  644. /package/{es → dist/es}/modules/custom-clipboard.es.js +0 -0
  645. /package/{es → dist/es}/modules/custom-image/actions/action.es.js +0 -0
  646. /package/{es → dist/es}/modules/custom-image/actions/custom-resize-action.es.js +0 -0
  647. /package/{es → dist/es}/modules/custom-image/actions/delete-action.es.js +0 -0
  648. /package/{es → dist/es}/modules/custom-image/actions/image-toolbar-buttons.es.js +0 -0
  649. /package/{es → dist/es}/modules/custom-image/actions/image-toolbar-buttons.es.js.map +0 -0
  650. /package/{es → dist/es}/modules/custom-image/actions/index.es.js +0 -0
  651. /package/{es → dist/es}/modules/custom-image/actions/index.es.js.map +0 -0
  652. /package/{es → dist/es}/modules/custom-image/actions/toolbar-action.es.js +0 -0
  653. /package/{es → dist/es}/modules/custom-image/actions/toolbar-action.es.js.map +0 -0
  654. /package/{es → dist/es}/modules/custom-image/actions/toolbar.es.js +0 -0
  655. /package/{es → dist/es}/modules/custom-image/actions/toolbar.es.js.map +0 -0
  656. /package/{es → dist/es}/modules/custom-image/blot-formatter.es.js +0 -0
  657. /package/{es → dist/es}/modules/custom-image/image.es.js +0 -0
  658. /package/{es → dist/es}/modules/custom-image/index.es.js +0 -0
  659. /package/{es → dist/es}/modules/custom-image/index.es.js.map +0 -0
  660. /package/{es → dist/es}/modules/custom-image/specs/blot-spec.es.js +0 -0
  661. /package/{es → dist/es}/modules/custom-image/specs/custom-image-spec.es.js +0 -0
  662. /package/{es → dist/es}/modules/custom-image/specs/image-spec.es.js +0 -0
  663. /package/{es → dist/es}/modules/custom-image/specs/index.es.js +0 -0
  664. /package/{es → dist/es}/modules/custom-image/specs/index.es.js.map +0 -0
  665. /package/{es → dist/es}/modules/custom-uploader.es.js +0 -0
  666. /package/{es → dist/es}/modules/custom-uploader.es.js.map +0 -0
  667. /package/{es → dist/es}/modules/divider.es.js +0 -0
  668. /package/{es → dist/es}/modules/file/formats/file.es.js +0 -0
  669. /package/{es → dist/es}/modules/file/index.es.js +0 -0
  670. /package/{es → dist/es}/modules/file/index.es.js.map +0 -0
  671. /package/{es → dist/es}/modules/file/modules/file-bar.es.js +0 -0
  672. /package/{es → dist/es}/modules/file/modules/file-module.es.js +0 -0
  673. /package/{es → dist/es}/modules/i18n.es.js +0 -0
  674. /package/{es → dist/es}/modules/i18n.es.js.map +0 -0
  675. /package/{es → dist/es}/modules/link/formats/link.es.js +0 -0
  676. /package/{es → dist/es}/modules/link/index.es.js +0 -0
  677. /package/{es → dist/es}/modules/link/modules/tooltip.es.js +0 -0
  678. /package/{es → dist/es}/modules/mathlive/formats.es.js +0 -0
  679. /package/{es → dist/es}/modules/mathlive/index.es.js +0 -0
  680. /package/{es → dist/es}/modules/mathlive/index.es.js.map +0 -0
  681. /package/{es → dist/es}/modules/mathlive/module.es.js +0 -0
  682. /package/{es → dist/es}/modules/mathlive/module.es.js.map +0 -0
  683. /package/{es → dist/es}/modules/mathlive/tooltip.es.js +0 -0
  684. /package/{es → dist/es}/modules/mention/constants.es.js +0 -0
  685. /package/{es → dist/es}/modules/mention/index.es.js +0 -0
  686. /package/{es → dist/es}/modules/mention/mention-link.es.js +0 -0
  687. /package/{es → dist/es}/modules/mention/mention.es.js +0 -0
  688. /package/{es → dist/es}/modules/shortcut-key/index.es.js +0 -0
  689. /package/{es → dist/es}/modules/shortcut-key/index.es.js.map +0 -0
  690. /package/{es → dist/es}/modules/syntax.es.js +0 -0
  691. /package/{es → dist/es}/modules/table-up/index.es.js +0 -0
  692. /package/{es → dist/es}/modules/table-up/index.es.js.map +0 -0
  693. /package/{es → dist/es}/modules/toolbar/better-picker.es.js +0 -0
  694. /package/{es → dist/es}/modules/toolbar/better-toolbar.es.js +0 -0
  695. /package/{es → dist/es}/modules/toolbar/better-toolbar.es.js.map +0 -0
  696. /package/{es → dist/es}/modules/toolbar/index.es.js +0 -0
  697. /package/{es → dist/es}/modules/toolbar/index.es.js.map +0 -0
  698. /package/{es → dist/es}/modules/toolbar/toolbar-tip.es.js +0 -0
  699. /package/{es → dist/es}/modules/toolbar/toolbar-tip.es.js.map +0 -0
  700. /package/{es → dist/es}/themes/snow.es.js +0 -0
  701. /package/{es → dist/es}/tools/format-painter.es.js +0 -0
  702. /package/{es → dist/es}/tools/format-painter.es.js.map +0 -0
  703. /package/{es → dist/es}/tools/fullscreen.es.js +0 -0
  704. /package/{es → dist/es}/tools/fullscreen.es.js.map +0 -0
  705. /package/{es → dist/es}/tools/screenshot.es.js +0 -0
  706. /package/{es → dist/es}/ui/icons.config.es.js +0 -0
  707. /package/{es → dist/es}/ui/icons.es.js +0 -0
  708. /package/{es → dist/es}/utils/debounce.es.js +0 -0
  709. /package/{es → dist/es}/utils/image.es.js +0 -0
  710. /package/{es → dist/es}/utils/image.es.js.map +0 -0
  711. /package/{es → dist/es}/utils/is.es.js +0 -0
  712. /package/{es → dist/es}/utils/is.es.js.map +0 -0
  713. /package/{es → dist/es}/utils/method.es.js +0 -0
  714. /package/{es → dist/es}/utils/scroll-lock.es.js +0 -0
  715. /package/{es → dist/es}/utils/scroll-lock.es.js.map +0 -0
  716. /package/{lib → dist/lib}/attributors/font-size.cjs.js +0 -0
  717. /package/{lib → dist/lib}/attributors/font-size.cjs.js.map +0 -0
  718. /package/{lib → dist/lib}/attributors/font-style.cjs.js +0 -0
  719. /package/{lib → dist/lib}/attributors/font-style.cjs.js.map +0 -0
  720. /package/{lib → dist/lib}/attributors/index.cjs.js +0 -0
  721. /package/{lib → dist/lib}/attributors/index.cjs.js.map +0 -0
  722. /package/{lib → dist/lib}/attributors/line-height.cjs.js +0 -0
  723. /package/{lib → dist/lib}/attributors/text-indent.cjs.js +0 -0
  724. /package/{lib → dist/lib}/attributors/text-indent.cjs.js.map +0 -0
  725. /package/{lib → dist/lib}/config/base64-image.cjs.js +0 -0
  726. /package/{lib → dist/lib}/config/editor.config.cjs.js +0 -0
  727. /package/{lib → dist/lib}/config/editor.utils.cjs.js +0 -0
  728. /package/{lib → dist/lib}/config/i18n/en-us.cjs.js +0 -0
  729. /package/{lib → dist/lib}/config/i18n/zh-cn.cjs.js +0 -0
  730. /package/{lib → dist/lib}/config/index.cjs.js +0 -0
  731. /package/{lib → dist/lib}/config/types/editor-config.interface.cjs.js +0 -0
  732. /package/{lib → dist/lib}/config/types/editor-config.interface.cjs.js.map +0 -0
  733. /package/{lib → dist/lib}/config/types/editor-modules.interface.cjs.js +0 -0
  734. /package/{lib → dist/lib}/config/types/editor-modules.interface.cjs.js.map +0 -0
  735. /package/{lib → dist/lib}/config/types/index.cjs.js +0 -0
  736. /package/{lib → dist/lib}/config/types/index.cjs.js.map +0 -0
  737. /package/{lib → dist/lib}/config/types/type.cjs.js +0 -0
  738. /package/{lib → dist/lib}/config/types/type.cjs.js.map +0 -0
  739. /package/{lib → dist/lib}/core/fluent-editor.cjs.js +0 -0
  740. /package/{lib → dist/lib}/fluent-editor.cjs.js +0 -0
  741. /package/{lib → dist/lib}/formats/emoji.cjs.js +0 -0
  742. /package/{lib → dist/lib}/formats/index.cjs.js +0 -0
  743. /package/{lib → dist/lib}/formats/index.cjs.js.map +0 -0
  744. /package/{lib → dist/lib}/formats/soft-break.cjs.js +0 -0
  745. /package/{lib → dist/lib}/formats/strike.cjs.js +0 -0
  746. /package/{lib → dist/lib}/formats/video.cjs.js +0 -0
  747. /package/{lib → dist/lib}/modules/ai/constants.cjs.js +0 -0
  748. /package/{lib → dist/lib}/modules/ai/icons.cjs.js +0 -0
  749. /package/{lib → dist/lib}/modules/ai/index.cjs.js +0 -0
  750. /package/{lib → dist/lib}/modules/counter.cjs.js +0 -0
  751. /package/{lib → dist/lib}/modules/custom-clipboard.cjs.js +0 -0
  752. /package/{lib → dist/lib}/modules/custom-image/actions/action.cjs.js +0 -0
  753. /package/{lib → dist/lib}/modules/custom-image/actions/custom-resize-action.cjs.js +0 -0
  754. /package/{lib → dist/lib}/modules/custom-image/actions/delete-action.cjs.js +0 -0
  755. /package/{lib → dist/lib}/modules/custom-image/actions/image-toolbar-buttons.cjs.js +0 -0
  756. /package/{lib → dist/lib}/modules/custom-image/actions/image-toolbar-buttons.cjs.js.map +0 -0
  757. /package/{lib → dist/lib}/modules/custom-image/actions/index.cjs.js +0 -0
  758. /package/{lib → dist/lib}/modules/custom-image/actions/index.cjs.js.map +0 -0
  759. /package/{lib → dist/lib}/modules/custom-image/actions/toolbar-action.cjs.js +0 -0
  760. /package/{lib → dist/lib}/modules/custom-image/actions/toolbar-action.cjs.js.map +0 -0
  761. /package/{lib → dist/lib}/modules/custom-image/actions/toolbar.cjs.js +0 -0
  762. /package/{lib → dist/lib}/modules/custom-image/actions/toolbar.cjs.js.map +0 -0
  763. /package/{lib → dist/lib}/modules/custom-image/blot-formatter.cjs.js +0 -0
  764. /package/{lib → dist/lib}/modules/custom-image/image.cjs.js +0 -0
  765. /package/{lib → dist/lib}/modules/custom-image/index.cjs.js +0 -0
  766. /package/{lib → dist/lib}/modules/custom-image/index.cjs.js.map +0 -0
  767. /package/{lib → dist/lib}/modules/custom-image/specs/blot-spec.cjs.js +0 -0
  768. /package/{lib → dist/lib}/modules/custom-image/specs/custom-image-spec.cjs.js +0 -0
  769. /package/{lib → dist/lib}/modules/custom-image/specs/image-spec.cjs.js +0 -0
  770. /package/{lib → dist/lib}/modules/custom-image/specs/index.cjs.js +0 -0
  771. /package/{lib → dist/lib}/modules/custom-image/specs/index.cjs.js.map +0 -0
  772. /package/{lib → dist/lib}/modules/custom-uploader.cjs.js +0 -0
  773. /package/{lib → dist/lib}/modules/custom-uploader.cjs.js.map +0 -0
  774. /package/{lib → dist/lib}/modules/divider.cjs.js +0 -0
  775. /package/{lib → dist/lib}/modules/file/formats/file.cjs.js +0 -0
  776. /package/{lib → dist/lib}/modules/file/index.cjs.js +0 -0
  777. /package/{lib → dist/lib}/modules/file/index.cjs.js.map +0 -0
  778. /package/{lib → dist/lib}/modules/file/modules/file-bar.cjs.js +0 -0
  779. /package/{lib → dist/lib}/modules/file/modules/file-module.cjs.js +0 -0
  780. /package/{lib → dist/lib}/modules/i18n.cjs.js +0 -0
  781. /package/{lib → dist/lib}/modules/i18n.cjs.js.map +0 -0
  782. /package/{lib → dist/lib}/modules/link/formats/link.cjs.js +0 -0
  783. /package/{lib → dist/lib}/modules/link/index.cjs.js +0 -0
  784. /package/{lib → dist/lib}/modules/link/index.cjs.js.map +0 -0
  785. /package/{lib → dist/lib}/modules/link/modules/tooltip.cjs.js +0 -0
  786. /package/{lib → dist/lib}/modules/mathlive/formats.cjs.js +0 -0
  787. /package/{lib → dist/lib}/modules/mathlive/index.cjs.js +0 -0
  788. /package/{lib → dist/lib}/modules/mathlive/index.cjs.js.map +0 -0
  789. /package/{lib → dist/lib}/modules/mathlive/module.cjs.js +0 -0
  790. /package/{lib → dist/lib}/modules/mathlive/module.cjs.js.map +0 -0
  791. /package/{lib → dist/lib}/modules/mathlive/tooltip.cjs.js +0 -0
  792. /package/{lib → dist/lib}/modules/mention/constants.cjs.js +0 -0
  793. /package/{lib → dist/lib}/modules/mention/index.cjs.js +0 -0
  794. /package/{lib → dist/lib}/modules/mention/index.cjs.js.map +0 -0
  795. /package/{lib → dist/lib}/modules/mention/mention-link.cjs.js +0 -0
  796. /package/{lib → dist/lib}/modules/mention/mention.cjs.js +0 -0
  797. /package/{lib → dist/lib}/modules/shortcut-key/index.cjs.js +0 -0
  798. /package/{lib → dist/lib}/modules/shortcut-key/index.cjs.js.map +0 -0
  799. /package/{lib → dist/lib}/modules/syntax.cjs.js +0 -0
  800. /package/{lib → dist/lib}/modules/table-up/index.cjs.js +0 -0
  801. /package/{lib → dist/lib}/modules/table-up/index.cjs.js.map +0 -0
  802. /package/{lib → dist/lib}/modules/toolbar/better-picker.cjs.js +0 -0
  803. /package/{lib → dist/lib}/modules/toolbar/better-toolbar.cjs.js +0 -0
  804. /package/{lib → dist/lib}/modules/toolbar/better-toolbar.cjs.js.map +0 -0
  805. /package/{lib → dist/lib}/modules/toolbar/index.cjs.js +0 -0
  806. /package/{lib → dist/lib}/modules/toolbar/index.cjs.js.map +0 -0
  807. /package/{lib → dist/lib}/modules/toolbar/toolbar-tip.cjs.js +0 -0
  808. /package/{lib → dist/lib}/modules/toolbar/toolbar-tip.cjs.js.map +0 -0
  809. /package/{lib → dist/lib}/themes/snow.cjs.js +0 -0
  810. /package/{lib → dist/lib}/tools/format-painter.cjs.js +0 -0
  811. /package/{lib → dist/lib}/tools/format-painter.cjs.js.map +0 -0
  812. /package/{lib → dist/lib}/tools/fullscreen.cjs.js +0 -0
  813. /package/{lib → dist/lib}/tools/fullscreen.cjs.js.map +0 -0
  814. /package/{lib → dist/lib}/tools/screenshot.cjs.js +0 -0
  815. /package/{lib → dist/lib}/ui/icons.cjs.js +0 -0
  816. /package/{lib → dist/lib}/ui/icons.config.cjs.js +0 -0
  817. /package/{lib → dist/lib}/utils/debounce.cjs.js +0 -0
  818. /package/{lib → dist/lib}/utils/image.cjs.js +0 -0
  819. /package/{lib → dist/lib}/utils/image.cjs.js.map +0 -0
  820. /package/{lib → dist/lib}/utils/is.cjs.js +0 -0
  821. /package/{lib → dist/lib}/utils/is.cjs.js.map +0 -0
  822. /package/{lib → dist/lib}/utils/method.cjs.js +0 -0
  823. /package/{lib → dist/lib}/utils/scroll-lock.cjs.js +0 -0
  824. /package/{lib → dist/lib}/utils/scroll-lock.cjs.js.map +0 -0
  825. /package/{style.css → dist/style.css} +0 -0
@@ -0,0 +1,850 @@
1
+ import type TypeToolbar from 'quill/modules/toolbar'
2
+ import type FluentEditor from '../../core/fluent-editor'
3
+ import type { AIOptions, OperationMenuItem, ResultMenuItem } from './types'
4
+ import {
5
+ CLOSE,
6
+ INPUT_PLACEHOLDER,
7
+ INSERT_SUB_CONTENT_TEXT,
8
+ INSERT_TEXT,
9
+ MENU_ID_MAP,
10
+ MENU_TITLE_DATA,
11
+ REGENERATE,
12
+ REPLACE_SELECT,
13
+ RESULT_HEADER_TEXT,
14
+ SELECT_PLACEHOLDER,
15
+ STOP_ANSWER,
16
+ THINK_TEXT,
17
+ } from './constants'
18
+ import {
19
+ ADJUST_ICON,
20
+ AI_ICON,
21
+ CALL_ICON,
22
+ CLOSE_ICON,
23
+ COPY_ICON,
24
+ EDITOR_ICON,
25
+ INSERT_ICON,
26
+ MENU_CLOSE_ICON,
27
+ REBUILD_ICON,
28
+ REFRESH_ICON,
29
+ REPLACE_SELECT_ICON,
30
+ RIGHT_ARROW_ICON,
31
+ SEND_BTN_ICON,
32
+ STOP_ICON,
33
+ THINK_ICON,
34
+ } from './icons'
35
+
36
+ export class AI {
37
+ toolbar: TypeToolbar
38
+ host: string
39
+ apiKey: string
40
+ model: string
41
+ message: string
42
+ isBreak: boolean = false // 打断标记
43
+ textNumber: number // 文本字数限制
44
+ private _isSelectRangeMode: boolean = false // 选择/点击模式
45
+ private _charCount: number = 0 // 文本字数
46
+ private _debounceTimer = null
47
+ private _inputPlaceholder: string = ''
48
+ private _showOperationMenu: boolean = false
49
+ private _isThinking: boolean = false // 思考中
50
+ private _showResultPopupEl: boolean = false // 结果弹窗
51
+ selectedText: string = '' // 选择的文本
52
+ inputValue: string = '' // 存储输入框的值
53
+ resultMenuList: ResultMenuItem[] = []
54
+ operationMenuList: OperationMenuItem[] = []
55
+ private _operationMenuItemList: OperationMenuItem[] = []
56
+
57
+ private alertEl: HTMLDivElement | null = null
58
+ private alertTimer: number | null = null
59
+ private selectionBubbleEl: HTMLDivElement | null = null
60
+ private selectionRange: any = null
61
+ private dialogContainerEl: HTMLDivElement | null = null
62
+ private wrapContainerEl: HTMLDivElement | null = null
63
+ private aiIconEl: HTMLSpanElement | null = null
64
+ private inputContainerEl: HTMLDivElement | null = null
65
+ private inputEl: HTMLInputElement | null = null
66
+ private menuContainerEl: HTMLDivElement | null = null
67
+ private subMenuEl: HTMLDivElement | null = null
68
+ private subMenuEditorEl: HTMLDivElement | null = null
69
+ private subMenuToneEl: HTMLDivElement | null = null
70
+ private subMenuAdjustEl: HTMLDivElement | null = null
71
+ private inputRightEl: HTMLDivElement | null = null
72
+ private inputSendBtnEl: HTMLSpanElement | null = null
73
+ private inputCloseBtnEl: HTMLSpanElement | null = null
74
+ private thinkContainerEl: HTMLDivElement | null = null // 思考元素
75
+ private thinkBtnEl: HTMLDivElement | null = null
76
+ private resultPopupEl: HTMLDivElement | null = null
77
+ private resultPopupHeaderEl: HTMLDivElement | null = null
78
+ private resultPopupContentEl: HTMLDivElement | null = null
79
+ private resultPopupFooterEl: HTMLDivElement | null = null
80
+ private resultPopupFooterTextEl: HTMLSpanElement | null = null
81
+ private resultRefreshBtnEl: HTMLSpanElement | null = null
82
+ private resultCopyBtnEl: HTMLSpanElement | null = null
83
+ // 分享和朗读功能待放开
84
+ // private resultShareBtnEl: HTMLSpanElement | null = null
85
+ // private resultVoiceBtnEl: HTMLSpanElement | null = null
86
+ private actionMenuEl: HTMLDivElement | null = null
87
+
88
+ constructor(
89
+ public quill: FluentEditor,
90
+ public options: AIOptions,
91
+ ) {
92
+ this.quill = quill
93
+ this.toolbar = quill.getModule('toolbar') as TypeToolbar
94
+ // 添加AI按钮到工具栏
95
+ if (typeof this.toolbar !== 'undefined') {
96
+ this.toolbar.addHandler('ai', this.showAIInput.bind(this))
97
+ }
98
+
99
+ this.quill.on('selection-change', this.handleSelectionChange.bind(this))
100
+
101
+ this.host = options.host || 'https://api.deepseek.com/v1'
102
+ this.apiKey = options.apiKey
103
+ this.model = options.model || 'deepseek-chat'
104
+ this.textNumber = options.contentMaxLength || 5000
105
+
106
+ this.resultMenuList = [
107
+ { text: REPLACE_SELECT, icon: REPLACE_SELECT_ICON },
108
+ { text: INSERT_TEXT, icon: INSERT_ICON, selectText: INSERT_SUB_CONTENT_TEXT },
109
+ { text: REGENERATE, icon: REBUILD_ICON },
110
+ { text: CLOSE, icon: MENU_CLOSE_ICON },
111
+ ]
112
+
113
+ this.operationMenuList = [
114
+ { id: 'editor', text: '编辑调整内容', icon: EDITOR_ICON },
115
+ { id: 'tone', text: '改写口吻', icon: CALL_ICON },
116
+ { id: 'adjust', text: '整理选区内容', icon: ADJUST_ICON },
117
+ ]
118
+ }
119
+
120
+ // 工具栏启动
121
+ showAIInput() {
122
+ // 创建输入框和结果弹窗
123
+ this.create()
124
+
125
+ this.selectionRange = this.quill.getSelection()
126
+ if (this.selectionRange.length) {
127
+ this.isSelectRangeMode = true
128
+ }
129
+ else {
130
+ this.isSelectRangeMode = false
131
+ }
132
+ // 定位到编辑器焦点位置
133
+ this.positionElements()
134
+
135
+ // 添加ESC键监听
136
+ const handleKeyDown = (e: KeyboardEvent) => {
137
+ if (e.key === 'Escape') {
138
+ this.closeAIPanel()
139
+ this.quill.container.removeEventListener('keydown', handleKeyDown)
140
+ }
141
+ }
142
+ this.quill.container.addEventListener('keydown', handleKeyDown)
143
+ }
144
+
145
+ // 气泡启动
146
+ private selectTextEvent() {
147
+ if (!this.selectionRange) return
148
+ this.create()
149
+ // 定位到编辑器焦点位置
150
+ this.positionElements()
151
+
152
+ this.isSelectRangeMode = true
153
+ }
154
+
155
+ private create() {
156
+ this.createResultElement()
157
+ this.createOperationMenuElements()
158
+ this.createInputBoxElements()
159
+
160
+ // 创建事件监听
161
+ this.addInputEvent()
162
+ this.addResultEvent()
163
+ this.handleActionMenuDisplay()
164
+ // 添加到编辑器
165
+ this.quill.container.appendChild(this.dialogContainerEl)
166
+ }
167
+
168
+ // 创建结果弹窗
169
+ private createResultElement() {
170
+ if (!this.resultPopupEl) {
171
+ this.resultPopupEl = document.createElement('div')
172
+ this.resultPopupEl.className = 'ql-ai-result'
173
+ this.resultPopupHeaderEl = document.createElement('div')
174
+ this.resultPopupHeaderEl.className = 'ql-ai-result-header'
175
+ this.resultPopupHeaderEl.textContent = RESULT_HEADER_TEXT
176
+ this.resultPopupContentEl = document.createElement('div')
177
+ this.resultPopupContentEl.className = 'ql-ai-result-content'
178
+ this.resultPopupFooterEl = document.createElement('div')
179
+ this.resultPopupFooterEl.className = 'ql-ai-result-footer'
180
+ this.resultPopupFooterTextEl = document.createElement('span')
181
+ this.resultPopupFooterTextEl.className = 'ql-ai-result-footer-text'
182
+ this.resultPopupFooterTextEl.textContent = `0`
183
+ this.resultRefreshBtnEl = document.createElement('span')
184
+ this.resultRefreshBtnEl.className = 'ql-ai-result-footer-refresh'
185
+ this.resultRefreshBtnEl.innerHTML = REFRESH_ICON
186
+ this.resultCopyBtnEl = document.createElement('span')
187
+ this.resultCopyBtnEl.className = 'ql-ai-result-footer-copy'
188
+ this.resultCopyBtnEl.innerHTML = COPY_ICON
189
+
190
+ // 分享和朗读功能待放开
191
+ // this.resultShareBtnEl = document.createElement('span')
192
+ // this.resultShareBtnEl.className = 'ql-ai-result-footer-share'
193
+ // this.resultShareBtnEl.innerHTML = SHARE_ICON
194
+ // this.resultVoiceBtnEl = document.createElement('span')
195
+ // this.resultVoiceBtnEl.className = 'ql-ai-result-footer-voice'
196
+ // this.resultVoiceBtnEl.innerHTML = VOICE_ICON
197
+ const resultFooterRightEl: HTMLDivElement = document.createElement('div')
198
+ resultFooterRightEl.className = 'ql-ai-result-footer-right'
199
+ resultFooterRightEl.appendChild(this.resultRefreshBtnEl)
200
+ resultFooterRightEl.appendChild(this.resultCopyBtnEl)
201
+ // 分享和朗读功能待放开
202
+ // resultFooterRightEl.appendChild(this.resultShareBtnEl)
203
+ // resultFooterRightEl.appendChild(this.resultVoiceBtnEl)
204
+ this.resultPopupFooterEl.appendChild(this.resultPopupFooterTextEl)
205
+ this.resultPopupFooterEl.appendChild(resultFooterRightEl)
206
+ this.resultPopupEl.appendChild(this.resultPopupHeaderEl)
207
+ this.resultPopupEl.appendChild(this.resultPopupContentEl)
208
+ this.resultPopupEl.appendChild(this.resultPopupFooterEl)
209
+ }
210
+ this.showResultPopupEl = false
211
+ }
212
+
213
+ private createOperationMenuElements() {
214
+ if (!this.menuContainerEl) {
215
+ // 创建操作菜单容器
216
+ this.menuContainerEl = document.createElement('div')
217
+ this.menuContainerEl.className = 'ql-ai-menu-container'
218
+
219
+ // 创建主菜单
220
+ const mainMenu = document.createElement('div')
221
+ mainMenu.className = 'ql-ai-main-menu'
222
+ this.operationMenuList.forEach(({ text, icon, id }) => {
223
+ const menuItem = document.createElement('div')
224
+ menuItem.className = 'ql-ai-menu-item'
225
+ menuItem.innerHTML = `${icon}<span>${text}</span>${RIGHT_ARROW_ICON}`
226
+ menuItem.addEventListener('mouseenter', (e) => {
227
+ e.stopPropagation()
228
+ this.subMenuEl.style.display = 'block'
229
+ this.subMenuEl.className = `ql-ai-sub-menu ${id}`
230
+ this.createOperationMenuItem(id)
231
+ })
232
+ mainMenu.appendChild(menuItem)
233
+ })
234
+ if (!this.subMenuEl) {
235
+ // 创建子菜单
236
+ this.subMenuEl = document.createElement('div')
237
+ this.subMenuEl.className = 'ql-ai-sub-menu'
238
+ this.subMenuEl.style.display = 'none'
239
+ }
240
+
241
+ this.menuContainerEl.appendChild(mainMenu)
242
+ this.menuContainerEl.appendChild(this.subMenuEl)
243
+ }
244
+ this.showOperationMenu = false
245
+ }
246
+
247
+ private createOperationMenuItem(id: string) {
248
+ let menuItemBox = this[MENU_ID_MAP[id]]
249
+ if (!menuItemBox) {
250
+ menuItemBox = document.createElement('div')
251
+ }
252
+ // 清除子菜单容器中的所有子元素
253
+ while (this.subMenuEl.firstChild) {
254
+ this.subMenuEl.removeChild(this.subMenuEl.firstChild)
255
+ }
256
+
257
+ MENU_TITLE_DATA[id].forEach(({ text, icon, id }) => {
258
+ const menuItem = document.createElement('div')
259
+ menuItem.className = 'ql-ai-menu-item'
260
+ menuItem.innerHTML = `${icon || ''}<span>${text}</span>`
261
+ menuItem.addEventListener('click', (e) => {
262
+ e.stopPropagation()
263
+ this.handleOperationMenuItemClick(text, id)
264
+ })
265
+ menuItemBox.appendChild(menuItem)
266
+ })
267
+ this.subMenuEl.appendChild(menuItemBox)
268
+ }
269
+
270
+ private createInputBoxElements() {
271
+ if (!this.dialogContainerEl) {
272
+ this.dialogContainerEl = document.createElement('div')
273
+ this.dialogContainerEl.className = 'ql-ai-dialog'
274
+ this.wrapContainerEl = document.createElement('div')
275
+ this.wrapContainerEl.className = 'ql-ai-wrapper'
276
+ this.wrapContainerEl.style.width = `${this.quill.container.clientWidth - 30}px`
277
+
278
+ // 添加AI图标
279
+ this.createAIInputIcon()
280
+
281
+ // 增加输入框
282
+ this.inputEl = document.createElement('input')
283
+ this.inputEl.type = 'text'
284
+ this.inputPlaceholder = this._isSelectRangeMode ? SELECT_PLACEHOLDER : INPUT_PLACEHOLDER
285
+ // 添加发送按钮
286
+ this.inputSendBtnEl = document.createElement('span')
287
+ this.inputSendBtnEl.className = 'ql-ai-input-right-send'
288
+ this.inputSendBtnEl.innerHTML = SEND_BTN_ICON
289
+ this.inputCloseBtnEl = document.createElement('span')
290
+ this.inputCloseBtnEl.className = 'ql-ai-input-right-close'
291
+ this.inputCloseBtnEl.innerHTML = CLOSE_ICON
292
+ this.inputRightEl = document.createElement('div')
293
+ this.inputRightEl.className = 'ql-ai-input-right'
294
+
295
+ // 创建输入框
296
+ this.inputContainerEl = document.createElement('div')
297
+ this.inputContainerEl.className = 'ql-ai-input'
298
+ this.inputContainerEl.appendChild(this.aiIconEl)
299
+ this.inputContainerEl.appendChild(this.inputEl)
300
+ this.inputRightEl.appendChild(this.inputSendBtnEl)
301
+ this.inputRightEl.appendChild(this.inputCloseBtnEl)
302
+ this.inputContainerEl.appendChild(this.inputRightEl) // 添加发送按钮
303
+ this.wrapContainerEl.appendChild(this.resultPopupEl)
304
+ this.wrapContainerEl.appendChild(this.inputContainerEl)
305
+ this.wrapContainerEl.appendChild(this.menuContainerEl) // 添加菜单容器
306
+ this.dialogContainerEl.appendChild(this.wrapContainerEl)
307
+ }
308
+ else {
309
+ this.dialogContainerEl.style.display = 'block'
310
+ }
311
+ this.hiddenInputSendBtnEl()
312
+ }
313
+
314
+ private hiddenInputSendBtnEl(display = 'none') {
315
+ if (this.inputEl && this.inputSendBtnEl) {
316
+ this.inputSendBtnEl.style.display = display
317
+ }
318
+ }
319
+
320
+ private copyResult() {
321
+ if (!this.resultPopupContentEl) return
322
+
323
+ try {
324
+ const textToCopy = this.resultPopupContentEl.textContent || ''
325
+ navigator.clipboard
326
+ .writeText(textToCopy)
327
+ .then(() => {
328
+ this.showAlert('内容已复制到剪贴板')
329
+ // 可以在这里添加复制成功的提示
330
+ })
331
+ .catch((err) => {
332
+ this.showAlert(`复制失败:${err}`)
333
+ })
334
+ }
335
+ catch (err) {
336
+ this.showAlert(`复制失败:${err}`)
337
+ // 兼容不支持clipboard API的浏览器
338
+ const textarea = document.createElement('textarea')
339
+ textarea.value = this.resultPopupContentEl.textContent || ''
340
+ document.body.appendChild(textarea)
341
+ textarea.select()
342
+ document.execCommand('copy')
343
+ document.body.removeChild(textarea)
344
+ }
345
+ }
346
+
347
+ // 分享和朗读功能待放开
348
+ // private shareResult() {
349
+ // if (!this.resultPopupContentEl) return
350
+
351
+ // const textToShare = this.resultPopupContentEl.textContent || ''
352
+ // const title = 'AI生成内容分享'
353
+
354
+ // if (navigator.share) {
355
+ // navigator.share({
356
+ // title,
357
+ // text: textToShare,
358
+ // })
359
+ // .catch((err) => {
360
+ // this.showAlert(`分享失败:${err}`)
361
+ // })
362
+ // }
363
+ // else {
364
+ // // 兼容不支持Web Share API的浏览器
365
+ // const shareUrl = `mailto:?subject=${encodeURIComponent(title)}&body=${encodeURIComponent(textToShare)}`
366
+ // window.open(shareUrl, '_blank')
367
+ // }
368
+ // }
369
+ // private voiceResult() {
370
+ // if (!this.resultPopupContentEl) return
371
+
372
+ // const textToSpeak = this.resultPopupContentEl.textContent || ''
373
+
374
+ // if ('speechSynthesis' in window) {
375
+ // const utterance = new SpeechSynthesisUtterance(textToSpeak)
376
+ // utterance.lang = 'zh-CN' // 设置中文语音
377
+ // speechSynthesis.speak(utterance)
378
+ // }
379
+ // else {
380
+ // this.showAlert('当前浏览器不支持语音合成API')
381
+ // // 可以在这里添加不支持语音的提示
382
+ // }
383
+ // }
384
+
385
+ private addResultEvent() {
386
+ if (this.resultRefreshBtnEl) {
387
+ this.resultRefreshBtnEl.addEventListener('click', () => {
388
+ this.regenerateResponse()
389
+ })
390
+ }
391
+
392
+ if (this.resultCopyBtnEl) {
393
+ this.resultCopyBtnEl.addEventListener('click', () => {
394
+ this.copyResult()
395
+ })
396
+ }
397
+
398
+ // 分享和朗读功能待放开
399
+ // if (this.resultShareBtnEl) {
400
+ // this.resultShareBtnEl.addEventListener('click', () => {
401
+ // this.shareResult()
402
+ // })
403
+ // }
404
+ // if (this.resultVoiceBtnEl) {
405
+ // this.resultVoiceBtnEl.addEventListener('click', () => {
406
+ // this.voiceResult()
407
+ // })
408
+ // }
409
+ }
410
+
411
+ // 显示选中文本的气泡
412
+ private showSelectionBubble() {
413
+ if (!this.selectionBubbleEl) {
414
+ this.selectionBubbleEl = document.createElement('div')
415
+ this.selectionBubbleEl.className = 'ql-ai-selection-bubble'
416
+ const icon = AI_ICON.replaceAll('paint_linear_2', 'paint_linear_bubble')
417
+ this.selectionBubbleEl.innerHTML = `${icon}<span>AI 智能</span>`
418
+ this.selectionBubbleEl.addEventListener('click', () => this.selectTextEvent())
419
+ document.body.appendChild(this.selectionBubbleEl)
420
+ }
421
+
422
+ const { left, top } = this.quill.getBounds(this.selectionRange.index)
423
+ const { left: endLeft } = this.quill.getBounds(this.selectionRange.index + this.selectionRange.length)
424
+ const width = (endLeft - left) / 2
425
+ const editorRect = this.quill.container.getBoundingClientRect()
426
+
427
+ this.selectionBubbleEl.style.display = 'flex'
428
+ this.selectionBubbleEl.style.left = `${left + editorRect.left + width - 45}px`
429
+ this.selectionBubbleEl.style.top = `${top + editorRect.top - 40}px`
430
+ }
431
+
432
+ // 隐藏选中文本的气泡
433
+ private hideSelectionBubble() {
434
+ if (this.selectionBubbleEl) {
435
+ this.selectionBubbleEl.style.display = 'none'
436
+ }
437
+ }
438
+
439
+ // 处理文本选中变化
440
+ private handleSelectionChange(range: any) {
441
+ if (range && range.length > 0) {
442
+ this.selectionRange = range
443
+ this.showSelectionBubble()
444
+ this.selectedText = this.quill.getText(range.index, range.length)
445
+ }
446
+ else {
447
+ if (range && range.index !== null) {
448
+ this.selectedText = ''
449
+ this.closeAIPanel()
450
+ }
451
+ else {
452
+ this.hideSelectionBubble()
453
+ }
454
+ }
455
+ }
456
+
457
+ private addInputEvent() {
458
+ if (this.inputContainerEl) {
459
+ this.inputContainerEl.addEventListener('click', () => {})
460
+ }
461
+
462
+ // 监听输入事件
463
+ if (this.inputEl) {
464
+ this.inputEl.addEventListener('input', () => {
465
+ this.hiddenInputSendBtnEl(this.inputEl.value.trim() ? 'flex' : 'none')
466
+ if (this.menuContainerEl && this._isSelectRangeMode) {
467
+ this.showOperationMenu = !this.inputEl.value.trim() && !this._showResultPopupEl
468
+ }
469
+ })
470
+ }
471
+
472
+ // 给发送按钮添加点击事件
473
+ if (this.inputSendBtnEl) {
474
+ this.inputSendBtnEl.addEventListener('click', async () => {
475
+ await this.queryAI()
476
+ })
477
+ }
478
+ // 监听发送事件
479
+ this.inputEl.addEventListener('keydown', async (e) => {
480
+ if (e.key === 'Enter') {
481
+ await this.queryAI()
482
+ }
483
+ })
484
+
485
+ // 给关闭按钮添加点击事件
486
+ if (this.inputCloseBtnEl) {
487
+ this.inputCloseBtnEl.addEventListener('click', () => {
488
+ this.closeAIPanel()
489
+ })
490
+ }
491
+ }
492
+
493
+ private positionElements() {
494
+ if (!this.dialogContainerEl) return
495
+ const range = this.selectionRange
496
+ if (range) {
497
+ const bounds = this.quill.getBounds(range.index)
498
+ this.dialogContainerEl.style.position = 'absolute'
499
+ this.dialogContainerEl.style.top = `${bounds.top + bounds.height + 20}px`
500
+ }
501
+ }
502
+
503
+ // 添加创建alert元素的方法
504
+ private createAlertElement() {
505
+ if (!this.alertEl) {
506
+ this.alertEl = document.createElement('div')
507
+ this.alertEl.className = 'ql-ai-alert'
508
+ this.alertEl.style.display = 'none'
509
+ document.body.appendChild(this.alertEl)
510
+ }
511
+ }
512
+
513
+ // 添加显示alert的方法
514
+ private showAlert(message: string, duration: number = 3000) {
515
+ this.createAlertElement()
516
+ if (!this.alertEl) return
517
+
518
+ // 清除之前的定时器
519
+ if (this.alertTimer) {
520
+ clearTimeout(this.alertTimer)
521
+ this.alertTimer = null
522
+ }
523
+
524
+ this.alertEl.textContent = message
525
+ this.alertEl.style.display = 'block'
526
+
527
+ // 自动隐藏
528
+ this.alertTimer = setTimeout(() => {
529
+ if (this.alertEl) {
530
+ this.alertEl.style.display = 'none'
531
+ }
532
+ this.alertTimer = null
533
+ }, duration) as unknown as number
534
+ }
535
+
536
+ private createAIInputIcon() {
537
+ if (!this.aiIconEl) {
538
+ this.aiIconEl = document.createElement('span')
539
+ this.aiIconEl.className = 'ql-ai-input-pre-icon'
540
+ const icon = AI_ICON.replaceAll('paint_linear_2', 'paint_linear_ai_input')
541
+ this.aiIconEl.innerHTML = icon
542
+ }
543
+ }
544
+
545
+ // 添加处理子菜单点击的方法
546
+ private handleOperationMenuItemClick(text: string, id: string = '') {
547
+ let quetion = ''
548
+ if (id.startsWith('1-') || id.startsWith('3-')) {
549
+ quetion = `将目标文字${text},目标文字为:${this.selectedText}`
550
+ }
551
+ else if (id.startsWith('2-')) {
552
+ quetion = `改写目标文字的口吻,让其变得${text},目标文字为:${this.selectedText}`
553
+ }
554
+ this.showOperationMenu = false
555
+ this.queryAI(quetion)
556
+ }
557
+
558
+ private createActionMenu() {
559
+ if (!this.actionMenuEl) {
560
+ this.actionMenuEl = document.createElement('div')
561
+ this.actionMenuEl.className = 'ql-ai-actions'
562
+
563
+ this.resultMenuList.forEach(({ text, icon }) => {
564
+ const menuItem = document.createElement('div')
565
+ menuItem.className = 'ql-ai-action-item'
566
+ menuItem.innerHTML = `${icon}<span class="ql-ai-result-menu-text">${text}</span>`
567
+ menuItem.addEventListener('click', () => this.handleAction(text))
568
+ this.actionMenuEl.appendChild(menuItem)
569
+ })
570
+
571
+ this.wrapContainerEl.appendChild(this.actionMenuEl)
572
+ }
573
+ const secondMenuItemText = this.actionMenuEl.children[1].querySelector('.ql-ai-result-menu-text') as HTMLDivElement
574
+
575
+ const firstChild = this.actionMenuEl.firstChild
576
+
577
+ if (!this._isSelectRangeMode) {
578
+ if (firstChild instanceof Element) {
579
+ firstChild.classList.add('hidden')
580
+ }
581
+
582
+ secondMenuItemText.textContent = INSERT_TEXT
583
+ }
584
+ else {
585
+ if (firstChild instanceof Element) {
586
+ firstChild.classList.remove('hidden')
587
+ }
588
+
589
+ secondMenuItemText.textContent = INSERT_SUB_CONTENT_TEXT
590
+ }
591
+
592
+ this.isThinking = false
593
+ }
594
+
595
+ private handleActionMenuDisplay(value: string = 'none') {
596
+ if (this.actionMenuEl) {
597
+ this.actionMenuEl.style.display = value
598
+ }
599
+ }
600
+
601
+ private switchInputEl(showInput = true) {
602
+ if (this.inputContainerEl) {
603
+ this.inputContainerEl.style.display = showInput ? 'flex' : 'none'
604
+ }
605
+
606
+ this.handleActionMenuDisplay(showInput ? 'block' : 'none')
607
+
608
+ if (this.thinkContainerEl) {
609
+ this.thinkContainerEl.style.display = showInput ? 'none' : 'flex'
610
+ }
611
+ }
612
+
613
+ // 创建思考元素
614
+ private createThinkElements() {
615
+ if (!this.thinkContainerEl) {
616
+ this.thinkContainerEl = document.createElement('div')
617
+ this.thinkContainerEl.className = 'ql-ai-input'
618
+ this.thinkContainerEl.innerHTML = `<span class="ql-ai-input-pre-icon ql-ai-think-icon">${THINK_ICON}</span><span class="ql-ai-think-text">${THINK_TEXT}</span>`
619
+ this.thinkBtnEl = document.createElement('div')
620
+ this.thinkBtnEl.className = 'ql-ai-think-btn'
621
+ this.thinkBtnEl.innerHTML = `${STOP_ICON}<span>${STOP_ANSWER}</span>`
622
+ this.thinkContainerEl.appendChild(this.thinkBtnEl)
623
+ this.wrapContainerEl.appendChild(this.thinkContainerEl) // 添加发送按钮
624
+ this.thinkBtnEl.addEventListener('click', () => {
625
+ this.isBreak = true
626
+ this.isThinking = false
627
+ })
628
+ }
629
+
630
+ this.isThinking = true
631
+ }
632
+
633
+ // AI查询
634
+ private async queryAI(question?: string): Promise<string> {
635
+ this.createThinkElements()
636
+ this.inputValue = question || this.inputEl.value
637
+ if (this.inputValue.trim() === '') {
638
+ return
639
+ }
640
+
641
+ // 有信息
642
+ this.isBreak = false // 重置打断标记,防止重复打断ai
643
+ // 这里实现实际的AI查询逻辑
644
+ try {
645
+ const response = await fetch(`${this.host}`, {
646
+ method: 'POST',
647
+ headers: {
648
+ 'Content-Type': 'application/json',
649
+ 'Authorization': `Bearer ${this.apiKey}`,
650
+ },
651
+ body: JSON.stringify({
652
+ model: this.model,
653
+ prompt: this.inputValue,
654
+ stream: true,
655
+ }),
656
+ })
657
+
658
+ if (!response.ok) {
659
+ throw new Error(`HTTP error! status: ${response.status}`)
660
+ }
661
+
662
+ const reader = response.body.getReader()
663
+ const decoder = new TextDecoder()
664
+ let content = ''
665
+
666
+ while (true) {
667
+ if (this.isBreak) {
668
+ this.isBreak = false
669
+ break
670
+ }
671
+
672
+ const { done, value } = await reader.read()
673
+ if (done) break
674
+
675
+ const chunk = decoder.decode(value)
676
+ const lines = chunk.split('\n').filter(line => line.trim() !== '')
677
+
678
+ for (const line of lines) {
679
+ try {
680
+ const data = JSON.parse(line)
681
+ content += data.response || ''
682
+ this.showAIResponse(content)
683
+ }
684
+ catch (e) {
685
+ console.error('解析错误:', e)
686
+ }
687
+ }
688
+ }
689
+
690
+ // 创建操作菜单
691
+ this.createActionMenu()
692
+ this.inputEl.value = '' // 清空输入框
693
+ this.hiddenInputSendBtnEl()
694
+ return content
695
+ }
696
+ catch (error) {
697
+ console.error('AI查询失败:', error)
698
+ return 'AI查询失败,请重试'
699
+ }
700
+ }
701
+
702
+ private showAIResponse(response: string) {
703
+ if (!this.resultPopupEl) return
704
+
705
+ // 显示结果
706
+ if (this._charCount <= this.textNumber) {
707
+ this.resultPopupContentEl.innerHTML = response
708
+ this.charCount = this.resultPopupContentEl.textContent.replace(/\s+/g, '').length
709
+ }
710
+ else {
711
+ this.isBreak = true
712
+ this.charCount = 0
713
+ }
714
+ this.showResultPopupEl = true
715
+ }
716
+
717
+ private handleAction(action: string) {
718
+ switch (action) {
719
+ case REPLACE_SELECT:
720
+ this.replaceSelectText()
721
+ break
722
+ case INSERT_TEXT:
723
+ this.insertAIResponse()
724
+ break
725
+ case REGENERATE:
726
+ this.regenerateResponse()
727
+ break
728
+ case CLOSE:
729
+ this.closeAIPanel()
730
+ break
731
+ }
732
+ }
733
+
734
+ private replaceSelectText() {
735
+ if (!this.resultPopupContentEl) return
736
+ const range = this.quill.getSelection(true)
737
+ if (range && range.length > 0) {
738
+ // 删除选中内容
739
+ this.quill.deleteText(range.index, range.length)
740
+ // 插入AI生成的内容
741
+ this.quill.clipboard.dangerouslyPasteHTML(range.index, this.resultPopupContentEl.innerHTML)
742
+ }
743
+ this.closeAIPanel()
744
+ }
745
+
746
+ private insertAIResponse() {
747
+ if (!this.resultPopupContentEl) return
748
+ const range = this.quill.getSelection(true)
749
+ if (range) {
750
+ this.quill.clipboard.dangerouslyPasteHTML(range.index + range.length, this.resultPopupContentEl.innerHTML)
751
+ }
752
+ this.closeAIPanel()
753
+ }
754
+
755
+ private async regenerateResponse() {
756
+ await this.queryAI(this.inputValue)
757
+ }
758
+
759
+ private closeAIPanel() {
760
+ this.isBreak = true // 停止查询
761
+
762
+ if (this.dialogContainerEl) {
763
+ this.dialogContainerEl.style.display = 'none'
764
+ }
765
+
766
+ if (this.actionMenuEl) {
767
+ this.actionMenuEl.style.display = 'none'
768
+ }
769
+
770
+ this.showResultPopupEl = false
771
+
772
+ if (this.inputEl && this.inputEl.value.trim() !== '') {
773
+ this.inputEl.value = '' // 清空输入框
774
+ }
775
+ this.hideSelectionBubble()
776
+ }
777
+
778
+ set charCount(value: number) {
779
+ // 清除之前的定时器
780
+ if (this._debounceTimer) {
781
+ clearTimeout(this._debounceTimer)
782
+ }
783
+
784
+ this._debounceTimer = setTimeout(() => {
785
+ this._charCount = value
786
+ if (this.resultPopupFooterTextEl) {
787
+ this.resultPopupFooterTextEl.textContent = `${this._charCount}/${this.textNumber}`
788
+ }
789
+ clearTimeout(this._debounceTimer)
790
+ this._debounceTimer = null
791
+ }, 210)
792
+ }
793
+
794
+ get charCount() {
795
+ return this._charCount
796
+ }
797
+
798
+ set inputPlaceholder(value: string) {
799
+ this._inputPlaceholder = value
800
+ if (this.inputEl) {
801
+ this.inputEl.placeholder = value
802
+ }
803
+ }
804
+
805
+ get inputPlaceholder() {
806
+ return this._inputPlaceholder
807
+ }
808
+
809
+ set showOperationMenu(value: boolean) {
810
+ this._showOperationMenu = value
811
+ if (this.menuContainerEl) {
812
+ this.menuContainerEl.style.display = value ? 'flex' : 'none'
813
+ }
814
+ }
815
+
816
+ get showOperationMenu() {
817
+ return this._showOperationMenu
818
+ }
819
+
820
+ set isSelectRangeMode(value: boolean) {
821
+ this._isSelectRangeMode = value
822
+ this.showOperationMenu = value
823
+ this.inputPlaceholder = value ? SELECT_PLACEHOLDER : INPUT_PLACEHOLDER
824
+ this.hideSelectionBubble()
825
+ }
826
+
827
+ get isSelectRangeMode() {
828
+ return this._isSelectRangeMode
829
+ }
830
+
831
+ set isThinking(value: boolean) {
832
+ this._isThinking = value
833
+ this.switchInputEl(!value)
834
+ }
835
+
836
+ get isThinking() {
837
+ return this._isThinking
838
+ }
839
+
840
+ set showResultPopupEl(value: boolean) {
841
+ this._showResultPopupEl = value
842
+ if (this.resultPopupEl) {
843
+ this.resultPopupEl.style.display = value ? 'block' : 'none'
844
+ }
845
+ }
846
+
847
+ get showResultPopupEl() {
848
+ return this._showResultPopupEl
849
+ }
850
+ }