@blocklet/editor-lite 2.6.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 (550) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +33 -0
  3. package/lib/blocklet-editor-viewer.d.ts +4 -0
  4. package/lib/blocklet-editor-viewer.js +12 -0
  5. package/lib/blocklet-editor.d.ts +2 -0
  6. package/lib/blocklet-editor.js +12 -0
  7. package/lib/components/Loading.d.ts +4 -0
  8. package/lib/components/Loading.js +13 -0
  9. package/lib/components/SelectionPopper.d.ts +14 -0
  10. package/lib/components/SelectionPopper.js +73 -0
  11. package/lib/components/animateText.d.ts +3 -0
  12. package/lib/components/animateText.js +29 -0
  13. package/lib/components/createPortal.d.ts +2 -0
  14. package/lib/components/createPortal.js +16 -0
  15. package/lib/config.d.ts +37 -0
  16. package/lib/config.js +12 -0
  17. package/lib/ext/AIPlugin/AIIcon.d.ts +5 -0
  18. package/lib/ext/AIPlugin/AIIcon.js +7 -0
  19. package/lib/ext/AIPlugin/Arrow.d.ts +1 -0
  20. package/lib/ext/AIPlugin/Arrow.js +5 -0
  21. package/lib/ext/AIPlugin/TextGeneration.d.ts +6 -0
  22. package/lib/ext/AIPlugin/TextGeneration.js +131 -0
  23. package/lib/ext/AIPlugin/Writing.d.ts +1 -0
  24. package/lib/ext/AIPlugin/Writing.js +7 -0
  25. package/lib/ext/AIPlugin/index.d.ts +9 -0
  26. package/lib/ext/AIPlugin/index.js +180 -0
  27. package/lib/ext/AIPlugin/utils.d.ts +6 -0
  28. package/lib/ext/AIPlugin/utils.js +44 -0
  29. package/lib/ext/AITranslationPlugin/index.d.ts +9 -0
  30. package/lib/ext/AITranslationPlugin/index.js +124 -0
  31. package/lib/ext/AITranslationPlugin/selection.d.ts +3 -0
  32. package/lib/ext/AITranslationPlugin/selection.js +45 -0
  33. package/lib/ext/AITranslationPlugin/translation.d.ts +3 -0
  34. package/lib/ext/AITranslationPlugin/translation.js +67 -0
  35. package/lib/ext/AITranslationPlugin/types.d.ts +49 -0
  36. package/lib/ext/AITranslationPlugin/types.js +1 -0
  37. package/lib/ext/AITranslationPlugin/utils.d.ts +46 -0
  38. package/lib/ext/AITranslationPlugin/utils.js +343 -0
  39. package/lib/ext/Aide/Aide.d.ts +4 -0
  40. package/lib/ext/Aide/Aide.js +30 -0
  41. package/lib/ext/Aide/Delayed.d.ts +7 -0
  42. package/lib/ext/Aide/Delayed.js +12 -0
  43. package/lib/ext/Aide/Input.d.ts +6 -0
  44. package/lib/ext/Aide/Input.js +49 -0
  45. package/lib/ext/Aide/Menu.d.ts +4 -0
  46. package/lib/ext/Aide/Menu.js +29 -0
  47. package/lib/ext/Aide/Output.d.ts +4 -0
  48. package/lib/ext/Aide/Output.js +14 -0
  49. package/lib/ext/Aide/Templates.d.ts +4 -0
  50. package/lib/ext/Aide/Templates.js +34 -0
  51. package/lib/ext/Aide/builtin-templates.d.ts +3 -0
  52. package/lib/ext/Aide/builtin-templates.js +48 -0
  53. package/lib/ext/Aide/context.d.ts +47 -0
  54. package/lib/ext/Aide/context.js +114 -0
  55. package/lib/ext/Aide/external-templates/Breadcrumb.d.ts +10 -0
  56. package/lib/ext/Aide/external-templates/Breadcrumb.js +11 -0
  57. package/lib/ext/Aide/external-templates/Output.d.ts +8 -0
  58. package/lib/ext/Aide/external-templates/Output.js +22 -0
  59. package/lib/ext/Aide/external-templates/Search.d.ts +6 -0
  60. package/lib/ext/Aide/external-templates/Search.js +14 -0
  61. package/lib/ext/Aide/external-templates/Tags.d.ts +4 -0
  62. package/lib/ext/Aide/external-templates/Tags.js +44 -0
  63. package/lib/ext/Aide/external-templates/Template.d.ts +7 -0
  64. package/lib/ext/Aide/external-templates/Template.js +110 -0
  65. package/lib/ext/Aide/external-templates/Templates.d.ts +6 -0
  66. package/lib/ext/Aide/external-templates/Templates.js +61 -0
  67. package/lib/ext/Aide/external-templates/index.d.ts +4 -0
  68. package/lib/ext/Aide/external-templates/index.js +83 -0
  69. package/lib/ext/Aide/external-templates/parameter-field.d.ts +6 -0
  70. package/lib/ext/Aide/external-templates/parameter-field.js +92 -0
  71. package/lib/ext/Aide/hooks.d.ts +7 -0
  72. package/lib/ext/Aide/hooks.js +14 -0
  73. package/lib/ext/Aide/index.d.ts +2 -0
  74. package/lib/ext/Aide/index.js +2 -0
  75. package/lib/ext/Aide/types.d.ts +84 -0
  76. package/lib/ext/Aide/types.js +25 -0
  77. package/lib/ext/Aide/withAiAvailable.d.ts +5 -0
  78. package/lib/ext/Aide/withAiAvailable.js +11 -0
  79. package/lib/ext/Alert/AlertComponent.d.ts +10 -0
  80. package/lib/ext/Alert/AlertComponent.js +38 -0
  81. package/lib/ext/Alert/AlertNode.d.ts +28 -0
  82. package/lib/ext/Alert/AlertNode.js +105 -0
  83. package/lib/ext/Alert/AlertPlugin.d.ts +11 -0
  84. package/lib/ext/Alert/AlertPlugin.js +41 -0
  85. package/lib/ext/BilibiliPlugin/BilibiliNode.d.ts +31 -0
  86. package/lib/ext/BilibiliPlugin/BilibiliNode.js +95 -0
  87. package/lib/ext/BilibiliPlugin/BilibiliVideo.d.ts +6 -0
  88. package/lib/ext/BilibiliPlugin/BilibiliVideo.js +24 -0
  89. package/lib/ext/BilibiliPlugin/config.d.ts +2 -0
  90. package/lib/ext/BilibiliPlugin/config.js +40 -0
  91. package/lib/ext/BilibiliPlugin/index.d.ts +5 -0
  92. package/lib/ext/BilibiliPlugin/index.js +20 -0
  93. package/lib/ext/BlockletEmbedPlugin/BlockletEmbed.d.ts +7 -0
  94. package/lib/ext/BlockletEmbedPlugin/BlockletEmbed.js +51 -0
  95. package/lib/ext/BlockletEmbedPlugin/BlockletEmbedNode.d.ts +30 -0
  96. package/lib/ext/BlockletEmbedPlugin/BlockletEmbedNode.js +96 -0
  97. package/lib/ext/BlockletEmbedPlugin/index.d.ts +12 -0
  98. package/lib/ext/BlockletEmbedPlugin/index.js +76 -0
  99. package/lib/ext/BlurTextPlugin.d.ts +1 -0
  100. package/lib/ext/BlurTextPlugin.js +40 -0
  101. package/lib/ext/BookmarkPlugin/Bookmark.d.ts +7 -0
  102. package/lib/ext/BookmarkPlugin/Bookmark.js +175 -0
  103. package/lib/ext/BookmarkPlugin/BookmarkNode.d.ts +35 -0
  104. package/lib/ext/BookmarkPlugin/BookmarkNode.js +110 -0
  105. package/lib/ext/BookmarkPlugin/index.d.ts +11 -0
  106. package/lib/ext/BookmarkPlugin/index.js +45 -0
  107. package/lib/ext/BusyPlugin.d.ts +9 -0
  108. package/lib/ext/BusyPlugin.js +17 -0
  109. package/lib/ext/CharacterCountPlugin/index.d.ts +10 -0
  110. package/lib/ext/CharacterCountPlugin/index.js +39 -0
  111. package/lib/ext/CharacterCountPlugin/useCharacterCount.d.ts +11 -0
  112. package/lib/ext/CharacterCountPlugin/useCharacterCount.js +49 -0
  113. package/lib/ext/CharacterLimitPlugin/index.d.ts +9 -0
  114. package/lib/ext/CharacterLimitPlugin/index.js +49 -0
  115. package/lib/ext/CheckboxPlugin.d.ts +3 -0
  116. package/lib/ext/CheckboxPlugin.js +75 -0
  117. package/lib/ext/CodeCopyPlugin/CodeCopyPlugin.d.ts +2 -0
  118. package/lib/ext/CodeCopyPlugin/CodeCopyPlugin.js +90 -0
  119. package/lib/ext/CodeCopyPlugin/copy.svg +1 -0
  120. package/lib/ext/CodeCopyPlugin/index.d.ts +1 -0
  121. package/lib/ext/CodeCopyPlugin/index.js +1 -0
  122. package/lib/ext/CodeCopyPlugin/style.css +12 -0
  123. package/lib/ext/ContentLocale.d.ts +7 -0
  124. package/lib/ext/ContentLocale.js +15 -0
  125. package/lib/ext/CustomOnChangePlugin/index.d.ts +5 -0
  126. package/lib/ext/CustomOnChangePlugin/index.js +17 -0
  127. package/lib/ext/CustomOnChangePlugin/styles.css +14 -0
  128. package/lib/ext/CustomOnChangePlugin/utils.d.ts +30 -0
  129. package/lib/ext/CustomOnChangePlugin/utils.js +148 -0
  130. package/lib/ext/EditorHolderPlugin/EditorHolderContext.d.ts +13 -0
  131. package/lib/ext/EditorHolderPlugin/EditorHolderContext.js +15 -0
  132. package/lib/ext/EditorHolderPlugin/EditorHolderPlugin.d.ts +1 -0
  133. package/lib/ext/EditorHolderPlugin/EditorHolderPlugin.js +11 -0
  134. package/lib/ext/EditorHolderPlugin/index.d.ts +2 -0
  135. package/lib/ext/EditorHolderPlugin/index.js +2 -0
  136. package/lib/ext/EditorReadyPlugin.d.ts +3 -0
  137. package/lib/ext/EditorReadyPlugin.js +15 -0
  138. package/lib/ext/FilePlugin/FileNode.d.ts +44 -0
  139. package/lib/ext/FilePlugin/FileNode.js +195 -0
  140. package/lib/ext/FilePlugin/FilePlugin.d.ts +7 -0
  141. package/lib/ext/FilePlugin/FilePlugin.js +27 -0
  142. package/lib/ext/FilePlugin/index.d.ts +2 -0
  143. package/lib/ext/FilePlugin/index.js +2 -0
  144. package/lib/ext/HeadingsIdPlugin.d.ts +1 -0
  145. package/lib/ext/HeadingsIdPlugin.js +67 -0
  146. package/lib/ext/ImagePathFixerPlugin.d.ts +1 -0
  147. package/lib/ext/ImagePathFixerPlugin.js +31 -0
  148. package/lib/ext/InlineTranslationPlugin/EditorTranslator.d.ts +42 -0
  149. package/lib/ext/InlineTranslationPlugin/EditorTranslator.js +199 -0
  150. package/lib/ext/InlineTranslationPlugin/InlineTranslationPlugin.d.ts +12 -0
  151. package/lib/ext/InlineTranslationPlugin/InlineTranslationPlugin.js +232 -0
  152. package/lib/ext/InlineTranslationPlugin/TranslationNode.d.ts +23 -0
  153. package/lib/ext/InlineTranslationPlugin/TranslationNode.js +49 -0
  154. package/lib/ext/InlineTranslationPlugin/index.d.ts +4 -0
  155. package/lib/ext/InlineTranslationPlugin/index.js +4 -0
  156. package/lib/ext/InlineTranslationPlugin/store.d.ts +50 -0
  157. package/lib/ext/InlineTranslationPlugin/store.js +94 -0
  158. package/lib/ext/InlineTranslationPlugin/types.d.ts +1 -0
  159. package/lib/ext/InlineTranslationPlugin/types.js +1 -0
  160. package/lib/ext/LexicalEditorRefPlugin.d.ts +14 -0
  161. package/lib/ext/LexicalEditorRefPlugin.js +26 -0
  162. package/lib/ext/OnContentChangePlugin.d.ts +14 -0
  163. package/lib/ext/OnContentChangePlugin.js +35 -0
  164. package/lib/ext/PasteSlackImagePlugin/index.d.ts +2 -0
  165. package/lib/ext/PasteSlackImagePlugin/index.js +22 -0
  166. package/lib/ext/PostLinkEmbedPlugin/PostLinkNode.d.ts +32 -0
  167. package/lib/ext/PostLinkEmbedPlugin/PostLinkNode.js +140 -0
  168. package/lib/ext/PostLinkEmbedPlugin/fixInvalidPostLinkNodes.d.ts +1 -0
  169. package/lib/ext/PostLinkEmbedPlugin/fixInvalidPostLinkNodes.js +15 -0
  170. package/lib/ext/PostLinkEmbedPlugin/index.d.ts +21 -0
  171. package/lib/ext/PostLinkEmbedPlugin/index.js +148 -0
  172. package/lib/ext/RemoveListPlugin.d.ts +1 -0
  173. package/lib/ext/RemoveListPlugin.js +63 -0
  174. package/lib/ext/SafeAreaPlugin.d.ts +12 -0
  175. package/lib/ext/SafeAreaPlugin.js +56 -0
  176. package/lib/ext/SelectBlockPlugin.d.ts +1 -0
  177. package/lib/ext/SelectBlockPlugin.js +95 -0
  178. package/lib/ext/ShortcutPlugin/CtrlsShortcutPlugin.d.ts +6 -0
  179. package/lib/ext/ShortcutPlugin/CtrlsShortcutPlugin.js +17 -0
  180. package/lib/ext/ShortcutPlugin/index.d.ts +1 -0
  181. package/lib/ext/ShortcutPlugin/index.js +1 -0
  182. package/lib/ext/TemplatePlugin.d.ts +8 -0
  183. package/lib/ext/TemplatePlugin.js +170 -0
  184. package/lib/ext/VideoPathFixerPlugin.d.ts +1 -0
  185. package/lib/ext/VideoPathFixerPlugin.js +31 -0
  186. package/lib/ext/VideoPlugin/VideoComponent.d.ts +5 -0
  187. package/lib/ext/VideoPlugin/VideoComponent.js +5 -0
  188. package/lib/ext/VideoPlugin/VideoNode.d.ts +37 -0
  189. package/lib/ext/VideoPlugin/VideoNode.js +97 -0
  190. package/lib/ext/VideoPlugin/VideoPlugin.d.ts +7 -0
  191. package/lib/ext/VideoPlugin/VideoPlugin.js +26 -0
  192. package/lib/ext/VideoPlugin/index.d.ts +2 -0
  193. package/lib/ext/VideoPlugin/index.js +2 -0
  194. package/lib/ext/common.d.ts +15 -0
  195. package/lib/ext/common.js +62 -0
  196. package/lib/ext/nodes/GithubComp.d.ts +3 -0
  197. package/lib/ext/nodes/GithubComp.js +20 -0
  198. package/lib/ext/nodes/GithubNode.d.ts +28 -0
  199. package/lib/ext/nodes/GithubNode.js +94 -0
  200. package/lib/ext/nodes/util.d.ts +5 -0
  201. package/lib/ext/nodes/util.js +1 -0
  202. package/lib/ext/translation/translation-utils.d.ts +16 -0
  203. package/lib/ext/translation/translation-utils.js +63 -0
  204. package/lib/ext/utils.d.ts +21 -0
  205. package/lib/ext/utils.js +88 -0
  206. package/lib/global.d.ts +1 -0
  207. package/lib/index.d.ts +4 -0
  208. package/lib/index.js +5 -0
  209. package/lib/lexical-utils/index.d.ts +46 -0
  210. package/lib/lexical-utils/index.js +243 -0
  211. package/lib/libs/sort-array-by-key.d.ts +4 -0
  212. package/lib/libs/sort-array-by-key.js +68 -0
  213. package/lib/libs/utm.d.ts +9 -0
  214. package/lib/libs/utm.js +43 -0
  215. package/lib/main/appSettings.d.ts +11 -0
  216. package/lib/main/appSettings.js +20 -0
  217. package/lib/main/context/SharedAutocompleteContext.d.ts +16 -0
  218. package/lib/main/context/SharedAutocompleteContext.js +35 -0
  219. package/lib/main/context/SharedHistoryContext.d.ts +17 -0
  220. package/lib/main/context/SharedHistoryContext.js +11 -0
  221. package/lib/main/editor-root.d.ts +2 -0
  222. package/lib/main/editor-root.js +46 -0
  223. package/lib/main/editor.d.ts +21 -0
  224. package/lib/main/editor.js +99 -0
  225. package/lib/main/hooks/hooks.d.ts +15 -0
  226. package/lib/main/hooks/hooks.js +49 -0
  227. package/lib/main/hooks/medium-zoom.d.ts +9 -0
  228. package/lib/main/hooks/medium-zoom.js +34 -0
  229. package/lib/main/hooks/use-mobile.d.ts +4 -0
  230. package/lib/main/hooks/use-mobile.js +6 -0
  231. package/lib/main/hooks/useBeforeUnload.d.ts +1 -0
  232. package/lib/main/hooks/useBeforeUnload.js +15 -0
  233. package/lib/main/hooks/useHasNodes.d.ts +1 -0
  234. package/lib/main/hooks/useHasNodes.js +8 -0
  235. package/lib/main/hooks/useIsFocused.d.ts +1 -0
  236. package/lib/main/hooks/useIsFocused.js +20 -0
  237. package/lib/main/hooks/useModal.d.ts +12 -0
  238. package/lib/main/hooks/useModal.js +33 -0
  239. package/lib/main/hooks/useReport.d.ts +8 -0
  240. package/lib/main/hooks/useReport.js +48 -0
  241. package/lib/main/hooks/useResponsiveTable.d.ts +5 -0
  242. package/lib/main/hooks/useResponsiveTable.js +31 -0
  243. package/lib/main/hooks/useTranslationListener.d.ts +4 -0
  244. package/lib/main/hooks/useTranslationListener.js +94 -0
  245. package/lib/main/icons.d.ts +3 -0
  246. package/lib/main/icons.js +25 -0
  247. package/lib/main/images/emoji/1F600.png +0 -0
  248. package/lib/main/images/emoji/1F641.png +0 -0
  249. package/lib/main/images/emoji/1F642.png +0 -0
  250. package/lib/main/images/emoji/2764.png +0 -0
  251. package/lib/main/images/excalidraw.svg +3 -0
  252. package/lib/main/images/icons/arrow-clockwise.svg +1 -0
  253. package/lib/main/images/icons/arrow-counterclockwise.svg +1 -0
  254. package/lib/main/images/icons/bg-color.svg +1 -0
  255. package/lib/main/images/icons/camera.svg +1 -0
  256. package/lib/main/images/icons/caret-right-fill.svg +1 -0
  257. package/lib/main/images/icons/chat-left-text.svg +1 -0
  258. package/lib/main/images/icons/chat-right-dots.svg +1 -0
  259. package/lib/main/images/icons/chat-right-text.svg +1 -0
  260. package/lib/main/images/icons/chat-right.svg +1 -0
  261. package/lib/main/images/icons/chat-square-quote.svg +1 -0
  262. package/lib/main/images/icons/chevron-down.svg +1 -0
  263. package/lib/main/images/icons/clipboard.svg +1 -0
  264. package/lib/main/images/icons/close.svg +1 -0
  265. package/lib/main/images/icons/code.svg +1 -0
  266. package/lib/main/images/icons/comments.svg +1 -0
  267. package/lib/main/images/icons/copy.svg +1 -0
  268. package/lib/main/images/icons/diagram-2.svg +1 -0
  269. package/lib/main/images/icons/download.svg +1 -0
  270. package/lib/main/images/icons/draggable-block-menu.svg +1 -0
  271. package/lib/main/images/icons/dropdown-more.svg +1 -0
  272. package/lib/main/images/icons/figma.svg +1 -0
  273. package/lib/main/images/icons/file-image.svg +1 -0
  274. package/lib/main/images/icons/filetype-gif.svg +1 -0
  275. package/lib/main/images/icons/font-color.svg +1 -0
  276. package/lib/main/images/icons/font-family.svg +1 -0
  277. package/lib/main/images/icons/gear.svg +1 -0
  278. package/lib/main/images/icons/horizontal-rule.svg +1 -0
  279. package/lib/main/images/icons/indent.svg +1 -0
  280. package/lib/main/images/icons/journal-code.svg +1 -0
  281. package/lib/main/images/icons/journal-text.svg +1 -0
  282. package/lib/main/images/icons/justify.svg +1 -0
  283. package/lib/main/images/icons/link.svg +1 -0
  284. package/lib/main/images/icons/list-ol.svg +1 -0
  285. package/lib/main/images/icons/list-ul.svg +1 -0
  286. package/lib/main/images/icons/lock-fill.svg +1 -0
  287. package/lib/main/images/icons/lock.svg +1 -0
  288. package/lib/main/images/icons/markdown.svg +1 -0
  289. package/lib/main/images/icons/mic.svg +1 -0
  290. package/lib/main/images/icons/outdent.svg +1 -0
  291. package/lib/main/images/icons/paint-bucket.svg +1 -0
  292. package/lib/main/images/icons/palette.svg +1 -0
  293. package/lib/main/images/icons/pencil-fill.svg +1 -0
  294. package/lib/main/images/icons/plug-fill.svg +1 -0
  295. package/lib/main/images/icons/plug.svg +1 -0
  296. package/lib/main/images/icons/plus-slash-minus.svg +1 -0
  297. package/lib/main/images/icons/plus.svg +1 -0
  298. package/lib/main/images/icons/prettier-error.svg +1 -0
  299. package/lib/main/images/icons/prettier.svg +1 -0
  300. package/lib/main/images/icons/send.svg +1 -0
  301. package/lib/main/images/icons/square-check.svg +1 -0
  302. package/lib/main/images/icons/sticky.svg +1 -0
  303. package/lib/main/images/icons/success.svg +1 -0
  304. package/lib/main/images/icons/table.svg +1 -0
  305. package/lib/main/images/icons/text-center.svg +1 -0
  306. package/lib/main/images/icons/text-left.svg +1 -0
  307. package/lib/main/images/icons/text-paragraph.svg +1 -0
  308. package/lib/main/images/icons/text-right.svg +1 -0
  309. package/lib/main/images/icons/trash.svg +1 -0
  310. package/lib/main/images/icons/trash3.svg +1 -0
  311. package/lib/main/images/icons/tweet.svg +1 -0
  312. package/lib/main/images/icons/type-bold.svg +1 -0
  313. package/lib/main/images/icons/type-h1.svg +1 -0
  314. package/lib/main/images/icons/type-h2.svg +1 -0
  315. package/lib/main/images/icons/type-h3.svg +1 -0
  316. package/lib/main/images/icons/type-h4.svg +1 -0
  317. package/lib/main/images/icons/type-h5.svg +1 -0
  318. package/lib/main/images/icons/type-h6.svg +1 -0
  319. package/lib/main/images/icons/type-italic.svg +1 -0
  320. package/lib/main/images/icons/type-strikethrough.svg +1 -0
  321. package/lib/main/images/icons/type-subscript.svg +1 -0
  322. package/lib/main/images/icons/type-superscript.svg +1 -0
  323. package/lib/main/images/icons/type-underline.svg +1 -0
  324. package/lib/main/images/icons/upload.svg +1 -0
  325. package/lib/main/images/icons/user.svg +1 -0
  326. package/lib/main/images/icons/youtube.svg +1 -0
  327. package/lib/main/images/landscape.jpg +0 -0
  328. package/lib/main/index.css +257 -0
  329. package/lib/main/index.d.ts +28 -0
  330. package/lib/main/index.js +52 -0
  331. package/lib/main/nodes/EmojiNode.d.ts +25 -0
  332. package/lib/main/nodes/EmojiNode.js +57 -0
  333. package/lib/main/nodes/EquationNode.d.ts +31 -0
  334. package/lib/main/nodes/EquationNode.js +65 -0
  335. package/lib/main/nodes/ExcalidrawNode/ExcalidrawComponent.d.ts +13 -0
  336. package/lib/main/nodes/ExcalidrawNode/ExcalidrawComponent.js +155 -0
  337. package/lib/main/nodes/ExcalidrawNode/ExcalidrawImage.d.ts +58 -0
  338. package/lib/main/nodes/ExcalidrawNode/ExcalidrawImage.js +60 -0
  339. package/lib/main/nodes/ExcalidrawNode/ExcalidrawModal.css +75 -0
  340. package/lib/main/nodes/ExcalidrawNode/ExcalidrawModal.d.ts +49 -0
  341. package/lib/main/nodes/ExcalidrawNode/ExcalidrawModal.js +197 -0
  342. package/lib/main/nodes/ExcalidrawNode/index.d.ts +30 -0
  343. package/lib/main/nodes/ExcalidrawNode/index.js +95 -0
  344. package/lib/main/nodes/ExcalidrawNode/utils.d.ts +5 -0
  345. package/lib/main/nodes/ExcalidrawNode/utils.js +71 -0
  346. package/lib/main/nodes/FigmaNode.d.ts +30 -0
  347. package/lib/main/nodes/FigmaNode.js +59 -0
  348. package/lib/main/nodes/ImageComponent.d.ts +27 -0
  349. package/lib/main/nodes/ImageComponent.js +432 -0
  350. package/lib/main/nodes/ImageNode.css +51 -0
  351. package/lib/main/nodes/ImageNode.d.ts +74 -0
  352. package/lib/main/nodes/ImageNode.js +151 -0
  353. package/lib/main/nodes/KeywordNode.d.ts +25 -0
  354. package/lib/main/nodes/KeywordNode.js +52 -0
  355. package/lib/main/nodes/MentionNode.d.ts +27 -0
  356. package/lib/main/nodes/MentionNode.js +88 -0
  357. package/lib/main/nodes/PlaygroundNodes.d.ts +10 -0
  358. package/lib/main/nodes/PlaygroundNodes.js +70 -0
  359. package/lib/main/nodes/TweetNode.d.ts +31 -0
  360. package/lib/main/nodes/TweetNode.js +126 -0
  361. package/lib/main/nodes/YouTubeNode.d.ts +32 -0
  362. package/lib/main/nodes/YouTubeNode.js +94 -0
  363. package/lib/main/plugins/AutoEmbedPlugin/index.d.ts +27 -0
  364. package/lib/main/plugins/AutoEmbedPlugin/index.js +353 -0
  365. package/lib/main/plugins/AutoEmbedPlugin/urlParseCache.d.ts +2 -0
  366. package/lib/main/plugins/AutoEmbedPlugin/urlParseCache.js +14 -0
  367. package/lib/main/plugins/AutoLinkPlugin/index.d.ts +9 -0
  368. package/lib/main/plugins/AutoLinkPlugin/index.js +39 -0
  369. package/lib/main/plugins/ClickableLinkPlugin/index.d.ts +8 -0
  370. package/lib/main/plugins/ClickableLinkPlugin/index.js +141 -0
  371. package/lib/main/plugins/CodeActionMenuPlugin/components/CopyButton/index.d.ts +7 -0
  372. package/lib/main/plugins/CodeActionMenuPlugin/components/CopyButton/index.js +44 -0
  373. package/lib/main/plugins/CodeActionMenuPlugin/index.css +46 -0
  374. package/lib/main/plugins/CodeActionMenuPlugin/index.d.ts +12 -0
  375. package/lib/main/plugins/CodeActionMenuPlugin/index.js +100 -0
  376. package/lib/main/plugins/CodeActionMenuPlugin/utils.d.ts +2 -0
  377. package/lib/main/plugins/CodeActionMenuPlugin/utils.js +18 -0
  378. package/lib/main/plugins/CodeHighlightPlugin/index.d.ts +9 -0
  379. package/lib/main/plugins/CodeHighlightPlugin/index.js +17 -0
  380. package/lib/main/plugins/CollapsiblePlugin/Collapsible.css +61 -0
  381. package/lib/main/plugins/CollapsiblePlugin/CollapsibleContainerNode.d.ts +30 -0
  382. package/lib/main/plugins/CollapsiblePlugin/CollapsibleContainerNode.js +120 -0
  383. package/lib/main/plugins/CollapsiblePlugin/CollapsibleContentNode.d.ts +24 -0
  384. package/lib/main/plugins/CollapsiblePlugin/CollapsibleContentNode.js +90 -0
  385. package/lib/main/plugins/CollapsiblePlugin/CollapsibleTitleNode.d.ts +24 -0
  386. package/lib/main/plugins/CollapsiblePlugin/CollapsibleTitleNode.js +95 -0
  387. package/lib/main/plugins/CollapsiblePlugin/CollapsibleUtils.d.ts +9 -0
  388. package/lib/main/plugins/CollapsiblePlugin/CollapsibleUtils.js +15 -0
  389. package/lib/main/plugins/CollapsiblePlugin/index.d.ts +11 -0
  390. package/lib/main/plugins/CollapsiblePlugin/index.js +147 -0
  391. package/lib/main/plugins/ComponentPickerPlugin/index.d.ts +12 -0
  392. package/lib/main/plugins/ComponentPickerPlugin/index.js +438 -0
  393. package/lib/main/plugins/DragDropPastePlugin/index.d.ts +8 -0
  394. package/lib/main/plugins/DragDropPastePlugin/index.js +32 -0
  395. package/lib/main/plugins/DraggableBlockPlugin/index.css +36 -0
  396. package/lib/main/plugins/DraggableBlockPlugin/index.d.ts +12 -0
  397. package/lib/main/plugins/DraggableBlockPlugin/index.js +288 -0
  398. package/lib/main/plugins/EmojisPlugin/index.d.ts +9 -0
  399. package/lib/main/plugins/EmojisPlugin/index.js +63 -0
  400. package/lib/main/plugins/ExcalidrawPlugin/index.d.ts +3 -0
  401. package/lib/main/plugins/ExcalidrawPlugin/index.js +30 -0
  402. package/lib/main/plugins/FigmaPlugin/index.d.ts +11 -0
  403. package/lib/main/plugins/FigmaPlugin/index.js +27 -0
  404. package/lib/main/plugins/FloatingLinkEditorPlugin/index.css +39 -0
  405. package/lib/main/plugins/FloatingLinkEditorPlugin/index.d.ts +12 -0
  406. package/lib/main/plugins/FloatingLinkEditorPlugin/index.js +181 -0
  407. package/lib/main/plugins/FloatingTextFormatToolbarPlugin/ColorPickerButton.d.ts +5 -0
  408. package/lib/main/plugins/FloatingTextFormatToolbarPlugin/ColorPickerButton.js +24 -0
  409. package/lib/main/plugins/FloatingTextFormatToolbarPlugin/index.css +128 -0
  410. package/lib/main/plugins/FloatingTextFormatToolbarPlugin/index.d.ts +12 -0
  411. package/lib/main/plugins/FloatingTextFormatToolbarPlugin/index.js +216 -0
  412. package/lib/main/plugins/HorizontalRulePlugin/index.d.ts +8 -0
  413. package/lib/main/plugins/HorizontalRulePlugin/index.js +30 -0
  414. package/lib/main/plugins/ImagesPlugin/index.d.ts +15 -0
  415. package/lib/main/plugins/ImagesPlugin/index.js +36 -0
  416. package/lib/main/plugins/LexicalTypeaheadMenuPlugin/index.d.ts +64 -0
  417. package/lib/main/plugins/LexicalTypeaheadMenuPlugin/index.js +493 -0
  418. package/lib/main/plugins/MarkdownShortcutPlugin/index.d.ts +9 -0
  419. package/lib/main/plugins/MarkdownShortcutPlugin/index.js +22 -0
  420. package/lib/main/plugins/MarkdownTransformers/index.d.ts +12 -0
  421. package/lib/main/plugins/MarkdownTransformers/index.js +185 -0
  422. package/lib/main/plugins/MaxLengthPlugin/index.d.ts +10 -0
  423. package/lib/main/plugins/MaxLengthPlugin/index.js +43 -0
  424. package/lib/main/plugins/MentionsPlugin/HighlightStyle.d.ts +2 -0
  425. package/lib/main/plugins/MentionsPlugin/HighlightStyle.js +13 -0
  426. package/lib/main/plugins/MentionsPlugin/index.d.ts +9 -0
  427. package/lib/main/plugins/MentionsPlugin/index.js +175 -0
  428. package/lib/main/plugins/TabFocusPlugin/index.d.ts +8 -0
  429. package/lib/main/plugins/TabFocusPlugin/index.js +41 -0
  430. package/lib/main/plugins/TableActionMenuPlugin/index.d.ts +12 -0
  431. package/lib/main/plugins/TableActionMenuPlugin/index.js +486 -0
  432. package/lib/main/plugins/TableCellResizer/index.css +20 -0
  433. package/lib/main/plugins/TableCellResizer/index.d.ts +3 -0
  434. package/lib/main/plugins/TableCellResizer/index.js +295 -0
  435. package/lib/main/plugins/TableOfContentsPlugin/index.css +87 -0
  436. package/lib/main/plugins/TableOfContentsPlugin/index.d.ts +2 -0
  437. package/lib/main/plugins/TableOfContentsPlugin/index.js +106 -0
  438. package/lib/main/plugins/TablePlugin.d.ts +38 -0
  439. package/lib/main/plugins/TablePlugin.js +63 -0
  440. package/lib/main/plugins/ToolbarPlugin/index.d.ts +8 -0
  441. package/lib/main/plugins/ToolbarPlugin/index.js +467 -0
  442. package/lib/main/plugins/TreeViewPlugin/index.d.ts +9 -0
  443. package/lib/main/plugins/TreeViewPlugin/index.js +14 -0
  444. package/lib/main/plugins/TwitterPlugin/index.d.ts +11 -0
  445. package/lib/main/plugins/TwitterPlugin/index.js +27 -0
  446. package/lib/main/plugins/TypingPerfPlugin/index.d.ts +9 -0
  447. package/lib/main/plugins/TypingPerfPlugin/index.js +100 -0
  448. package/lib/main/plugins/YouTubePlugin/index.d.ts +11 -0
  449. package/lib/main/plugins/YouTubePlugin/index.js +27 -0
  450. package/lib/main/server/validation.d.ts +8 -0
  451. package/lib/main/server/validation.js +119 -0
  452. package/lib/main/setupEnv.d.ts +8 -0
  453. package/lib/main/setupEnv.js +25 -0
  454. package/lib/main/style/editable.css +476 -0
  455. package/lib/main/styled-editor-content.d.ts +5 -0
  456. package/lib/main/styled-editor-content.js +206 -0
  457. package/lib/main/themes/code-highlight/index.d.ts +32 -0
  458. package/lib/main/themes/code-highlight/index.js +58 -0
  459. package/lib/main/themes/customTheme.d.ts +2 -0
  460. package/lib/main/themes/customTheme.js +324 -0
  461. package/lib/main/themes/defaultTheme.d.ts +10 -0
  462. package/lib/main/themes/defaultTheme.js +554 -0
  463. package/lib/main/themes/table/index.d.ts +3 -0
  464. package/lib/main/themes/table/index.js +20 -0
  465. package/lib/main/themes/table/table.css +214 -0
  466. package/lib/main/ui/Button.css +36 -0
  467. package/lib/main/ui/Button.d.ts +18 -0
  468. package/lib/main/ui/Button.js +13 -0
  469. package/lib/main/ui/ColorPicker.css +89 -0
  470. package/lib/main/ui/ColorPicker.d.ts +28 -0
  471. package/lib/main/ui/ColorPicker.js +206 -0
  472. package/lib/main/ui/ContentEditable.d.ts +2 -0
  473. package/lib/main/ui/ContentEditable.js +15 -0
  474. package/lib/main/ui/Dialog.css +17 -0
  475. package/lib/main/ui/Dialog.d.ts +16 -0
  476. package/lib/main/ui/Dialog.js +15 -0
  477. package/lib/main/ui/DropDown.d.ts +25 -0
  478. package/lib/main/ui/DropDown.js +146 -0
  479. package/lib/main/ui/FileInput.d.ts +17 -0
  480. package/lib/main/ui/FileInput.js +5 -0
  481. package/lib/main/ui/FrameMockup/browser.css +52 -0
  482. package/lib/main/ui/FrameMockup/browser.d.ts +13 -0
  483. package/lib/main/ui/FrameMockup/browser.js +22 -0
  484. package/lib/main/ui/FrameMockup/index.d.ts +113 -0
  485. package/lib/main/ui/FrameMockup/index.js +61 -0
  486. package/lib/main/ui/ImageEnhancer.d.ts +29 -0
  487. package/lib/main/ui/ImageEnhancer.js +113 -0
  488. package/lib/main/ui/ImageResizer.d.ts +24 -0
  489. package/lib/main/ui/ImageResizer.js +154 -0
  490. package/lib/main/ui/Input.css +30 -0
  491. package/lib/main/ui/Modal.css +62 -0
  492. package/lib/main/ui/Modal.d.ts +15 -0
  493. package/lib/main/ui/Modal.js +50 -0
  494. package/lib/main/ui/Placeholder.d.ts +6 -0
  495. package/lib/main/ui/Placeholder.js +20 -0
  496. package/lib/main/ui/TextInput.d.ts +20 -0
  497. package/lib/main/ui/TextInput.js +14 -0
  498. package/lib/main/utils/getDOMRangeRect.d.ts +8 -0
  499. package/lib/main/utils/getDOMRangeRect.js +22 -0
  500. package/lib/main/utils/getSelectedNode.d.ts +2 -0
  501. package/lib/main/utils/getSelectedNode.js +22 -0
  502. package/lib/main/utils/guard.d.ts +14 -0
  503. package/lib/main/utils/guard.js +36 -0
  504. package/lib/main/utils/images.d.ts +10 -0
  505. package/lib/main/utils/images.js +16 -0
  506. package/lib/main/utils/join-classes.d.ts +8 -0
  507. package/lib/main/utils/join-classes.js +10 -0
  508. package/lib/main/utils/point.d.ts +21 -0
  509. package/lib/main/utils/point.js +42 -0
  510. package/lib/main/utils/prevent-duplicate-upload.d.ts +2 -0
  511. package/lib/main/utils/prevent-duplicate-upload.js +25 -0
  512. package/lib/main/utils/rect.d.ts +45 -0
  513. package/lib/main/utils/rect.js +98 -0
  514. package/lib/main/utils/sanitizeUrl.d.ts +8 -0
  515. package/lib/main/utils/sanitizeUrl.js +17 -0
  516. package/lib/main/utils/setFloatingElemPosition.d.ts +1 -0
  517. package/lib/main/utils/setFloatingElemPosition.js +32 -0
  518. package/lib/main/utils/swipe.d.ts +11 -0
  519. package/lib/main/utils/swipe.js +98 -0
  520. package/lib/main/viewer/index.d.ts +5 -0
  521. package/lib/main/viewer/index.js +25 -0
  522. package/lib/main/viewer/types.d.ts +14 -0
  523. package/lib/main/viewer/types.js +1 -0
  524. package/lib/main/viewer/viewer.d.ts +3 -0
  525. package/lib/main/viewer/viewer.js +31 -0
  526. package/lib/shared/canUseDOM.d.ts +8 -0
  527. package/lib/shared/canUseDOM.js +10 -0
  528. package/lib/shared/environment.d.ts +24 -0
  529. package/lib/shared/environment.js +21 -0
  530. package/lib/shared/getDOMSelection.d.ts +9 -0
  531. package/lib/shared/getDOMSelection.js +10 -0
  532. package/lib/shared/invariant.d.ts +8 -0
  533. package/lib/shared/invariant.js +16 -0
  534. package/lib/shared/useLayoutEffect.d.ts +10 -0
  535. package/lib/shared/useLayoutEffect.js +11 -0
  536. package/lib/types.d.ts +19 -0
  537. package/lib/types.js +1 -0
  538. package/lib/vendor/LexicalCharacterLimitPlugin/LexicalCharacterLimitPlugin.d.ts +15 -0
  539. package/lib/vendor/LexicalCharacterLimitPlugin/LexicalCharacterLimitPlugin.js +45 -0
  540. package/lib/vendor/LexicalCharacterLimitPlugin/index.d.ts +1 -0
  541. package/lib/vendor/LexicalCharacterLimitPlugin/index.js +1 -0
  542. package/lib/vendor/LexicalCharacterLimitPlugin/useCharacterLimit.d.ts +16 -0
  543. package/lib/vendor/LexicalCharacterLimitPlugin/useCharacterLimit.js +208 -0
  544. package/lib/vendor/history/LexicalHistoryPlugin.d.ts +14 -0
  545. package/lib/vendor/history/LexicalHistoryPlugin.js +15 -0
  546. package/lib/vendor/history/history/index.d.ts +63 -0
  547. package/lib/vendor/history/history/index.js +351 -0
  548. package/lib/vendor/history/useHistory.d.ts +10 -0
  549. package/lib/vendor/history/useHistory.js +15 -0
  550. package/package.json +109 -0
@@ -0,0 +1,63 @@
1
+ import { $isParagraphNode, $isTextNode, $isElementNode, $createNodeSelection, $createTextNode, } from 'lexical';
2
+ import { $isHeadingNode, $isQuoteNode } from '@lexical/rich-text';
3
+ import { $isListNode, $isListItemNode } from '@lexical/list';
4
+ import { $dfs } from '@lexical/utils';
5
+ import { $generateHtmlFromNodes, $generateNodesFromDOM } from '@lexical/html';
6
+ import { $isExcalidrawNode } from '../../main/nodes/ExcalidrawNode';
7
+ import { $isMentionNode } from '../../main/nodes/MentionNode';
8
+ export const $nodeToHtml = (editor, node) => {
9
+ const selection = $createNodeSelection();
10
+ const children = node.getChildren();
11
+ // 剔除嵌套 list 节点
12
+ children
13
+ .filter((x) => !$isListNode(x))
14
+ .forEach((child) => $dfs(child)
15
+ .filter((x) => !$isExcalidrawNode(x.node))
16
+ .forEach((x) => selection.add(x.node.getKey())));
17
+ const html = $generateHtmlFromNodes(editor, selection);
18
+ return html;
19
+ };
20
+ export const $htmlToNodes = (editor, text) => {
21
+ try {
22
+ const dom = new DOMParser().parseFromString(text, 'text/html');
23
+ return $generateNodesFromDOM(editor, dom);
24
+ }
25
+ catch (e) {
26
+ console.error(e, text);
27
+ return [$createTextNode(text)];
28
+ }
29
+ };
30
+ /**
31
+ * 判断 node 是否是有效的 TextNode
32
+ * - $isTextNode => true
33
+ * - format 不是 code
34
+ */
35
+ export const $isValidTextNode = (node) => {
36
+ return $isTextNode(node) && node.getTextContent().trim() && !$isMentionNode(node);
37
+ };
38
+ /**
39
+ * 判断一个 ElementNode 是否含有效的 TextNode 的 child
40
+ */
41
+ export const $hasValidTextNode = (elementNode) => {
42
+ return elementNode.getChildren().some($isValidTextNode);
43
+ };
44
+ export const $findTranslatableElementNodes = () => {
45
+ const nodes = $dfs()
46
+ .map((x) => x.node)
47
+ .filter((node) => $isElementNode(node) &&
48
+ ($isHeadingNode(node) || $isParagraphNode(node) || $isQuoteNode(node) || $isListItemNode(node)))
49
+ .filter($hasValidTextNode);
50
+ return nodes;
51
+ };
52
+ // 创建映射表: node key -> node sequential ID
53
+ export const $createNodeKeyToSidMap = () => {
54
+ const nodes = $dfs();
55
+ let counter = 0;
56
+ return new Map(nodes.map((x) => [x.node.getKey(), `${counter++}`]));
57
+ };
58
+ // 创建映射表: node sequential ID -> node key
59
+ export const $createSidToNodeKeyMap = () => {
60
+ const nodes = $dfs();
61
+ let counter = 0;
62
+ return new Map(nodes.map((x) => [`${counter++}`, x.node.getKey()]));
63
+ };
@@ -0,0 +1,21 @@
1
+ import { LinkNode } from '@lexical/link';
2
+ import { type LexicalEditor } from 'lexical';
3
+ export declare function isValidUrl(url: string): boolean;
4
+ export declare const safeParseJSON: (json: string, defaultValue?: any) => any;
5
+ export declare const getBlockletMountPointInfo: (name: string) => any;
6
+ export declare const discussKitMountPoint: any;
7
+ export declare const discussKitUploadsUrl: string;
8
+ export declare const blockletExists: (name: string) => boolean;
9
+ export declare const fetchOpenGraphInfo: (openGraphEndpoint: string, url: string) => Promise<{
10
+ url: any;
11
+ title: any;
12
+ description: any;
13
+ image: any;
14
+ favicon: any;
15
+ } | null>;
16
+ export declare const $getLinkNode: (editor: LexicalEditor) => LinkNode | null;
17
+ export declare const sleep: (ms: number) => Promise<unknown>;
18
+ export declare const minDelay: <T>(promise: Promise<T>, ms: number) => Promise<T>;
19
+ export declare function exhaustiveGuard(_value: never): never;
20
+ export declare const isSameHost: (url: string | URL) => boolean;
21
+ export declare const isBlockletRunning: (name: string) => boolean;
@@ -0,0 +1,88 @@
1
+ import { $isLinkNode, LinkNode } from '@lexical/link';
2
+ import { $getNearestNodeOfType } from '@lexical/utils';
3
+ import { $getSelection, $isRangeSelection } from 'lexical';
4
+ import { joinURL } from 'ufo';
5
+ export function isValidUrl(url) {
6
+ try {
7
+ // eslint-disable-next-line no-new
8
+ new URL(url);
9
+ }
10
+ catch {
11
+ return false;
12
+ }
13
+ return true;
14
+ }
15
+ export const safeParseJSON = (json, defaultValue = null) => {
16
+ try {
17
+ return JSON.parse(json);
18
+ }
19
+ catch {
20
+ return defaultValue;
21
+ }
22
+ };
23
+ export const getBlockletMountPointInfo = (name) => {
24
+ return window.blocklet?.componentMountPoints?.find((x) => x.name === name);
25
+ };
26
+ export const discussKitMountPoint = window.blocklet?.componentMountPoints?.find((x) => x.did === 'z8ia1WEiBZ7hxURf6LwH21Wpg99vophFwSJdu')?.mountPoint || '/';
27
+ export const discussKitUploadsUrl = joinURL(discussKitMountPoint || '', '/uploads');
28
+ export const blockletExists = (name) => {
29
+ return !!getBlockletMountPointInfo(name);
30
+ };
31
+ export const fetchOpenGraphInfo = async (openGraphEndpoint, url) => {
32
+ const endpoint = new URL(openGraphEndpoint);
33
+ endpoint.searchParams.set('url', url);
34
+ try {
35
+ const response = await fetch(endpoint.href);
36
+ const openGraphInfo = (await response.json()) || {};
37
+ if (openGraphInfo) {
38
+ return {
39
+ url: openGraphInfo.url || openGraphInfo['og:url'],
40
+ title: openGraphInfo.title || openGraphInfo['og:title'],
41
+ description: openGraphInfo.description || openGraphInfo['og:description'],
42
+ image: openGraphInfo.image || openGraphInfo['og:image'],
43
+ favicon: openGraphInfo.favicon,
44
+ };
45
+ }
46
+ return null;
47
+ }
48
+ catch {
49
+ console.error('Failed to fetch open graph info');
50
+ return null;
51
+ }
52
+ };
53
+ // 获取当前光标处的 linkNode
54
+ export const $getLinkNode = (editor) => {
55
+ return editor.getEditorState().read(() => {
56
+ const selection = $getSelection();
57
+ if ($isRangeSelection(selection)) {
58
+ const anchorNode = selection.anchor.getNode();
59
+ const linkNode = $getNearestNodeOfType(anchorNode, LinkNode);
60
+ // 文本前嵌入时可能获取不到 linkNode, 检测 PreviousSibling 是否为 LinkNode
61
+ if (!linkNode && $isLinkNode(anchorNode.getPreviousSibling())) {
62
+ return anchorNode.getPreviousSibling();
63
+ }
64
+ return linkNode;
65
+ }
66
+ return null;
67
+ });
68
+ };
69
+ // eslint-disable-next-line no-promise-executor-return
70
+ export const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
71
+ export const minDelay = (promise, ms) => {
72
+ return Promise.all([promise, sleep(ms)]).then(([result]) => result);
73
+ };
74
+ export function exhaustiveGuard(_value) {
75
+ throw new Error(`ERROR! Reached forbidden guard function with unexpected value: ${JSON.stringify(_value)}`);
76
+ }
77
+ export const isSameHost = (url) => {
78
+ try {
79
+ const urlObj = typeof url === 'string' ? new URL(url) : url;
80
+ return urlObj.host === window.location.host;
81
+ }
82
+ catch (e) {
83
+ return false;
84
+ }
85
+ };
86
+ export const isBlockletRunning = (name) => {
87
+ return getBlockletMountPointInfo(name)?.status === 'running';
88
+ };
@@ -0,0 +1 @@
1
+ /// <reference path="../../../global.d.ts" />
package/lib/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import BlockletEditor from './main';
2
+ export default BlockletEditor;
3
+ export type { BlockletEditorProps } from './main';
4
+ export * from './config';
package/lib/index.js ADDED
@@ -0,0 +1,5 @@
1
+ import BlockletEditor from './main';
2
+ // @deprecated
3
+ // 建议使用 src/blocklet-editor.ts 代替
4
+ export default BlockletEditor;
5
+ export * from './config';
@@ -0,0 +1,46 @@
1
+ /** @module @lexical/utils */
2
+ /**
3
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ *
8
+ */
9
+ import { EditorState, ElementNode, Klass, LexicalEditor, LexicalNode } from 'lexical';
10
+ import { InitialEditorStateType } from '@lexical/react/LexicalComposer';
11
+ export type DFSNode = Readonly<{
12
+ depth: number;
13
+ node: LexicalNode;
14
+ }>;
15
+ export declare function addClassNamesToElement(element: HTMLElement, ...classNames: Array<typeof undefined | boolean | null | string>): void;
16
+ export declare function removeClassNamesFromElement(element: HTMLElement, ...classNames: Array<typeof undefined | boolean | null | string>): void;
17
+ export declare function isMimeType(file: File, acceptableMimeTypes: Array<string>): boolean;
18
+ /**
19
+ * Lexical File Reader with:
20
+ * 1. MIME type support
21
+ * 2. batched results (HistoryPlugin compatibility)
22
+ * 3. Order aware (respects the order when multiple Files are passed)
23
+ *
24
+ * const filesResult = await mediaFileReader(files, ['image/']);
25
+ * filesResult.forEach(file => editor.dispatchCommand('INSERT_IMAGE', {
26
+ * src: file.result,
27
+ * }));
28
+ */
29
+ export declare function mediaFileReader(files: Array<File>, acceptableMimeTypes: Array<string>): Promise<Array<{
30
+ file: File;
31
+ result: string;
32
+ }>>;
33
+ export declare function $dfs(startingNode?: LexicalNode, endingNode?: LexicalNode): Array<DFSNode>;
34
+ export declare function $getDepth(node: LexicalNode): number;
35
+ export declare function $getNearestNodeOfType<T extends ElementNode>(node: LexicalNode, klass: Klass<T>): T | null;
36
+ export declare function $getNearestBlockElementAncestorOrThrow(startNode: LexicalNode): ElementNode;
37
+ export type DOMNodeToLexicalConversion = (element: Node) => LexicalNode;
38
+ export type DOMNodeToLexicalConversionMap = Record<string, DOMNodeToLexicalConversion>;
39
+ export declare function $findMatchingParent(startingNode: LexicalNode, findFn: (node: LexicalNode) => boolean): LexicalNode | null;
40
+ type Func = () => void;
41
+ export declare function mergeRegister(...func: Array<Func>): () => void;
42
+ export declare function registerNestedElementResolver<N extends ElementNode>(editor: LexicalEditor, targetNode: Klass<N>, cloneNode: (from: N) => N, handleOverlap: (from: N, to: N) => void): () => void;
43
+ export declare function $restoreEditorState(editor: LexicalEditor, editorState: EditorState): void;
44
+ export declare function $wrapNodeInElement(node: LexicalNode, createElementNode: () => ElementNode): ElementNode;
45
+ export declare function getInitialEditorState(content: string, markdown?: boolean): InitialEditorStateType;
46
+ export {};
@@ -0,0 +1,243 @@
1
+ // TODO: 该文件由于官方未发布,直接拷贝过来的一份,等 lexical-utils 以后升级后,可将一下使用该模块的文件修正
2
+ // plugins/DragDropPastePlugin/index.ts
3
+ /** @module @lexical/utils */
4
+ /**
5
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ *
10
+ */
11
+ import { $getRoot, $isElementNode, $setSelection, } from 'lexical';
12
+ import { $convertFromMarkdownString } from '@lexical/markdown';
13
+ import invariant from '../shared/invariant';
14
+ import { PLAYGROUND_TRANSFORMERS } from '../main/plugins/MarkdownTransformers';
15
+ export function addClassNamesToElement(element, ...classNames) {
16
+ classNames.forEach((className) => {
17
+ if (typeof className === 'string') {
18
+ const classesToAdd = className.split(' ').filter((n) => n !== '');
19
+ element.classList.add(...classesToAdd);
20
+ }
21
+ });
22
+ }
23
+ export function removeClassNamesFromElement(element, ...classNames) {
24
+ classNames.forEach((className) => {
25
+ if (typeof className === 'string') {
26
+ element.classList.remove(...className.split(' '));
27
+ }
28
+ });
29
+ }
30
+ export function isMimeType(file, acceptableMimeTypes) {
31
+ for (const acceptableType of acceptableMimeTypes) {
32
+ if (file.type.startsWith(acceptableType)) {
33
+ return true;
34
+ }
35
+ }
36
+ return false;
37
+ }
38
+ /**
39
+ * Lexical File Reader with:
40
+ * 1. MIME type support
41
+ * 2. batched results (HistoryPlugin compatibility)
42
+ * 3. Order aware (respects the order when multiple Files are passed)
43
+ *
44
+ * const filesResult = await mediaFileReader(files, ['image/']);
45
+ * filesResult.forEach(file => editor.dispatchCommand('INSERT_IMAGE', {
46
+ * src: file.result,
47
+ * }));
48
+ */
49
+ export function mediaFileReader(files, acceptableMimeTypes) {
50
+ const filesIterator = files[Symbol.iterator]();
51
+ return new Promise((resolve, reject) => {
52
+ const processed = [];
53
+ const handleNextFile = () => {
54
+ const { done, value: file } = filesIterator.next();
55
+ if (done) {
56
+ return resolve(processed);
57
+ }
58
+ const fileReader = new FileReader();
59
+ fileReader.addEventListener('error', reject);
60
+ fileReader.addEventListener('load', () => {
61
+ const { result } = fileReader;
62
+ if (typeof result === 'string') {
63
+ processed.push({ file, result });
64
+ }
65
+ handleNextFile();
66
+ });
67
+ if (isMimeType(file, acceptableMimeTypes)) {
68
+ fileReader.readAsDataURL(file);
69
+ }
70
+ else {
71
+ handleNextFile();
72
+ }
73
+ return null;
74
+ };
75
+ handleNextFile();
76
+ });
77
+ }
78
+ export function $dfs(startingNode, endingNode) {
79
+ const nodes = [];
80
+ const start = (startingNode || $getRoot()).getLatest();
81
+ const end = endingNode || ($isElementNode(start) ? start.getLastDescendant() : start);
82
+ let node = start;
83
+ let depth = $getDepth(node);
84
+ while (node !== null && !node.is(end)) {
85
+ nodes.push({ depth, node });
86
+ if ($isElementNode(node) && node.getChildrenSize() > 0) {
87
+ node = node.getFirstChild();
88
+ depth++;
89
+ }
90
+ else {
91
+ // Find immediate sibling or nearest parent sibling
92
+ let sibling = null;
93
+ while (sibling === null && node !== null) {
94
+ sibling = node.getNextSibling();
95
+ if (sibling === null) {
96
+ node = node.getParent();
97
+ depth--;
98
+ }
99
+ else {
100
+ node = sibling;
101
+ }
102
+ }
103
+ }
104
+ }
105
+ if (node !== null && node.is(end)) {
106
+ nodes.push({ depth, node });
107
+ }
108
+ return nodes;
109
+ }
110
+ export function $getDepth(node) {
111
+ let innerNode = node;
112
+ let depth = 0;
113
+ // eslint-disable-next-line no-cond-assign
114
+ while ((innerNode = innerNode.getParent()) !== null) {
115
+ depth++;
116
+ }
117
+ return depth;
118
+ }
119
+ export function $getNearestNodeOfType(node, klass) {
120
+ let parent = node;
121
+ while (parent != null) {
122
+ if (parent instanceof klass) {
123
+ return parent;
124
+ }
125
+ parent = parent.getParent();
126
+ }
127
+ return null;
128
+ }
129
+ export function $getNearestBlockElementAncestorOrThrow(startNode) {
130
+ const blockNode = $findMatchingParent(startNode, (node) => $isElementNode(node) && !node.isInline());
131
+ if (!$isElementNode(blockNode)) {
132
+ invariant(false, 'Expected node %s to have closest block element node.', startNode.__key);
133
+ }
134
+ return blockNode;
135
+ }
136
+ export function $findMatchingParent(startingNode,
137
+ // eslint-disable-next-line no-unused-vars
138
+ findFn) {
139
+ let curr = startingNode;
140
+ while (curr !== $getRoot() && curr != null) {
141
+ if (findFn(curr)) {
142
+ return curr;
143
+ }
144
+ curr = curr.getParent();
145
+ }
146
+ return null;
147
+ }
148
+ export function mergeRegister(...func) {
149
+ return () => {
150
+ func.forEach((f) => f());
151
+ };
152
+ }
153
+ export function registerNestedElementResolver(editor, targetNode,
154
+ // eslint-disable-next-line no-unused-vars
155
+ cloneNode,
156
+ // eslint-disable-next-line no-unused-vars
157
+ handleOverlap) {
158
+ const $isTargetNode = (node) => {
159
+ return node instanceof targetNode;
160
+ };
161
+ function $findMatch(node) {
162
+ // First validate we don't have any children that are of the target,
163
+ // as we need to handle them first.
164
+ const children = node.getChildren();
165
+ for (let i = 0; i < children.length; i++) {
166
+ const child = children[i];
167
+ if ($isTargetNode(child)) {
168
+ return null;
169
+ }
170
+ }
171
+ let parentNode = node;
172
+ let childNode = node;
173
+ while (parentNode !== null) {
174
+ childNode = parentNode;
175
+ parentNode = parentNode.getParent();
176
+ if ($isTargetNode(parentNode)) {
177
+ return { child: childNode, parent: parentNode };
178
+ }
179
+ }
180
+ return null;
181
+ }
182
+ const elementNodeTransform = (node) => {
183
+ const match = $findMatch(node);
184
+ if (match !== null) {
185
+ const { child, parent } = match;
186
+ // Simple path, we can move child out and siblings into a new parent.
187
+ if (child.is(node)) {
188
+ handleOverlap(parent, node);
189
+ const nextSiblings = child.getNextSiblings();
190
+ const nextSiblingsLength = nextSiblings.length;
191
+ parent.insertAfter(child);
192
+ if (nextSiblingsLength !== 0) {
193
+ const newParent = cloneNode(parent);
194
+ child.insertAfter(newParent);
195
+ for (let i = 0; i < nextSiblingsLength; i++) {
196
+ newParent.append(nextSiblings[i]);
197
+ }
198
+ }
199
+ if (!parent.canBeEmpty() && parent.getChildrenSize() === 0) {
200
+ parent.remove();
201
+ }
202
+ }
203
+ else {
204
+ // Complex path, we have a deep node that isn't a child of the
205
+ // target parent.
206
+ // TODO: implement this functionality
207
+ }
208
+ }
209
+ };
210
+ return editor.registerNodeTransform(targetNode, elementNodeTransform);
211
+ }
212
+ export function $restoreEditorState(editor, editorState) {
213
+ const FULL_RECONCILE = 2;
214
+ const nodeMap = new Map(editorState._nodeMap);
215
+ const activeEditorState = editor._pendingEditorState;
216
+ if (activeEditorState) {
217
+ activeEditorState._nodeMap = nodeMap;
218
+ }
219
+ editor._dirtyType = FULL_RECONCILE;
220
+ const selection = editorState._selection;
221
+ $setSelection(selection === null ? null : selection.clone());
222
+ }
223
+ export function $wrapNodeInElement(node, createElementNode) {
224
+ const elementNode = createElementNode();
225
+ node.replace(elementNode);
226
+ elementNode.append(node);
227
+ return elementNode;
228
+ }
229
+ export function getInitialEditorState(content, markdown) {
230
+ if (markdown) {
231
+ return () => $convertFromMarkdownString(content, PLAYGROUND_TRANSFORMERS);
232
+ }
233
+ try {
234
+ const parsed = JSON.parse(content);
235
+ if (parsed && typeof parsed === 'object') {
236
+ return content;
237
+ }
238
+ return () => $convertFromMarkdownString(content, PLAYGROUND_TRANSFORMERS);
239
+ }
240
+ catch (e) {
241
+ return () => $convertFromMarkdownString(content, PLAYGROUND_TRANSFORMERS);
242
+ }
243
+ }
@@ -0,0 +1,4 @@
1
+ declare function sortArrayByKey<T extends {
2
+ [key: string]: any;
3
+ }>(arr: T[], keyword: string, key?: string): T[];
4
+ export default sortArrayByKey;
@@ -0,0 +1,68 @@
1
+ import leven from 'leven';
2
+ import orderBy from 'lodash/orderBy';
3
+ function sortArrByIndex(arr, keyword = '', key = 'fullName') {
4
+ // 将关键字转换成小写,以便于搜索
5
+ const lowerKeyword = keyword.toLowerCase();
6
+ // 创建一个数组的映射,用于存储关键字的索引
7
+ const map = arr.map((item) => {
8
+ // 在项目的键值中查找关键字的索引
9
+ item._mapIndex = (item[key] || '').toLowerCase().indexOf(lowerKeyword);
10
+ return item;
11
+ });
12
+ // 返回数组,根据关键字的索引进行排序
13
+ const result = orderBy(map, ['_mapIndex', key], ['asc', 'asc']);
14
+ return result;
15
+ }
16
+ function sortArrBySimilarity(arr, keyword = '', key = 'fullName') {
17
+ // 将关键字转换为小写
18
+ const lowerKeyword = keyword.toLowerCase();
19
+ // 创建一个与原始数组长度相同的新数组
20
+ // 并将数组中的每个项目映射到新数组中
21
+ const map = arr.map((item) => {
22
+ // 计算关键字与当前项目名称之间的相似度
23
+ item._mapSimilarity = item[key].length - leven((item[key] || '').toLowerCase() || '', lowerKeyword);
24
+ return item;
25
+ });
26
+ // 按相似度分数降序排列数组
27
+ // 然后按名称升序排列
28
+ const result = orderBy(map, ['_mapSimilarity', key], ['desc', 'asc']);
29
+ return result;
30
+ }
31
+ // 定义一个函数,输入一个数组和关键字,先优先匹配关键字,然后模糊匹配关键字
32
+ function sortArrayByKey(arr, keyword, key = 'fullName') {
33
+ if (!keyword) {
34
+ return arr;
35
+ }
36
+ if (!Array.isArray(arr)) {
37
+ throw new Error('The first argument must be an array.');
38
+ }
39
+ if (typeof keyword !== 'string') {
40
+ throw new Error('The second argument must be a string.');
41
+ }
42
+ if (typeof key !== 'string') {
43
+ throw new Error('The third argument must be a string.');
44
+ }
45
+ // 创建一个数组用于存储所有匹配的项
46
+ const allMatch = [];
47
+ // 创建一个数组用于存储所有不匹配的项
48
+ const otherMatch = [];
49
+ // 创建一个正则表达式对象用于匹配
50
+ const reg = new RegExp(keyword, 'i');
51
+ // 循环遍历数组来匹配
52
+ arr.forEach((item) => {
53
+ // 如果项匹配关键字,就将其推入allMatch数组中
54
+ if (reg.test(item[key])) {
55
+ allMatch.push(item);
56
+ }
57
+ else {
58
+ otherMatch.push(item);
59
+ }
60
+ });
61
+ // 按关键字的索引对allMatch数组进行排序
62
+ // 按关键字与项之间的相似度对otherMatch数组进行排序
63
+ // 然后将两个数组组合起来
64
+ const result = sortArrByIndex(allMatch, keyword, key).concat(sortArrBySimilarity(otherMatch, keyword, key));
65
+ // 返回结果
66
+ return result;
67
+ }
68
+ export default sortArrayByKey;
@@ -0,0 +1,9 @@
1
+ /**
2
+ *
3
+ * 为外部 URL 添加 UTM 追踪参数
4
+ * @param url - 原始 URL 地址
5
+ * @returns 添加 UTM 参数后的 URL
6
+ * @see https://team.arcblock.io/comment/discussions/7504c5ce-7453-4223-a539-27620efcf38e#6fd5adb6-49ab-4ead-9233-240aa53d1058
7
+ *
8
+ */
9
+ export declare function getUTMUrl(url: string): string;
@@ -0,0 +1,43 @@
1
+ import { withQuery, getQuery } from 'ufo';
2
+ function isExternal(url) {
3
+ try {
4
+ const u = new URL(url);
5
+ return u.origin !== window.location.origin;
6
+ }
7
+ catch {
8
+ return false;
9
+ }
10
+ }
11
+ /**
12
+ *
13
+ * 为外部 URL 添加 UTM 追踪参数
14
+ * @param url - 原始 URL 地址
15
+ * @returns 添加 UTM 参数后的 URL
16
+ * @see https://team.arcblock.io/comment/discussions/7504c5ce-7453-4223-a539-27620efcf38e#6fd5adb6-49ab-4ead-9233-240aa53d1058
17
+ *
18
+ */
19
+ export function getUTMUrl(url) {
20
+ try {
21
+ if (!isExternal(url)) {
22
+ return url;
23
+ }
24
+ const type = window.__discussKitPostType__ ?? 'discussion';
25
+ const existsQueryParams = getQuery(url);
26
+ const queryParams = {
27
+ // 自身站点的 hostname
28
+ utm_source: window.location.hostname,
29
+ // 标记导航点击
30
+ utm_medium: `${type}_link`,
31
+ // 全局导航统一标签
32
+ utm_campaign: 'default',
33
+ // 目标站点标识
34
+ utm_content: new URL(url).hostname,
35
+ ...existsQueryParams,
36
+ };
37
+ return withQuery(url, queryParams);
38
+ }
39
+ catch (error) {
40
+ console.error('Failed to generate UTM URL:', error);
41
+ return url;
42
+ }
43
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ export type SettingName = 'disableBeforeInput' | 'measureTypingPerf' | 'isRichText' | 'isCharLimit' | 'isMaxLength' | 'isCharLimitUtf8' | 'isAutocomplete' | 'emptyEditor' | 'showTableOfContents';
9
+ export type Settings = Record<SettingName, boolean>;
10
+ export declare const isDevPlayground: boolean;
11
+ export declare const DEFAULT_SETTINGS: Settings;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ const hostName = window.location.hostname;
9
+ export const isDevPlayground = hostName !== 'playground.lexical.dev' && hostName !== 'lexical-playground.vercel.app';
10
+ export const DEFAULT_SETTINGS = {
11
+ disableBeforeInput: false,
12
+ emptyEditor: isDevPlayground,
13
+ isAutocomplete: false,
14
+ isCharLimit: false,
15
+ isCharLimitUtf8: false,
16
+ isMaxLength: false,
17
+ isRichText: true,
18
+ measureTypingPerf: false,
19
+ showTableOfContents: false,
20
+ };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ import { ReactNode, type JSX } from 'react';
9
+ type Suggestion = null | string;
10
+ type PublishFn = (newSuggestion: Suggestion) => void;
11
+ type HookShape = [suggestion: Suggestion, setSuggestion: PublishFn];
12
+ export declare function SharedAutocompleteContext({ children }: {
13
+ children: ReactNode;
14
+ }): JSX.Element;
15
+ export declare const useSharedAutocompleteContext: () => HookShape;
16
+ export {};