@gravity-ui/markdown-editor 15.1.0 → 15.2.1

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 (299) hide show
  1. package/build/cjs/bundle/Editor.d.ts +3 -0
  2. package/build/cjs/bundle/Editor.js +21 -2
  3. package/build/cjs/bundle/Editor.js.map +1 -1
  4. package/build/cjs/bundle/MarkdownEditorView.js +2 -1
  5. package/build/cjs/bundle/MarkdownEditorView.js.map +1 -1
  6. package/build/cjs/bundle/MarkupEditorView.js +6 -1
  7. package/build/cjs/bundle/MarkupEditorView.js.map +1 -1
  8. package/build/cjs/bundle/MarkupManager.d.ts +3 -6
  9. package/build/cjs/bundle/MarkupManager.js +5 -5
  10. package/build/cjs/bundle/MarkupManager.js.map +1 -1
  11. package/build/cjs/bundle/WysiwygEditorView.js +6 -1
  12. package/build/cjs/bundle/WysiwygEditorView.js.map +1 -1
  13. package/build/cjs/bundle/types.d.ts +2 -0
  14. package/build/cjs/bundle/types.js.map +1 -1
  15. package/build/cjs/bundle/useMarkdownEditor.js +4 -2
  16. package/build/cjs/bundle/useMarkdownEditor.js.map +1 -1
  17. package/build/cjs/core/Editor.d.ts +3 -1
  18. package/build/cjs/core/Editor.js +6 -3
  19. package/build/cjs/core/Editor.js.map +1 -1
  20. package/build/cjs/core/ExtensionBuilder.d.ts +3 -1
  21. package/build/cjs/core/ExtensionBuilder.js +6 -1
  22. package/build/cjs/core/ExtensionBuilder.js.map +1 -1
  23. package/build/cjs/core/ExtensionsManager.d.ts +4 -2
  24. package/build/cjs/core/ExtensionsManager.js +6 -5
  25. package/build/cjs/core/ExtensionsManager.js.map +1 -1
  26. package/build/cjs/core/ParserTokensRegistry.d.ts +6 -0
  27. package/build/cjs/core/ParserTokensRegistry.js +9 -1
  28. package/build/cjs/core/ParserTokensRegistry.js.map +1 -1
  29. package/build/cjs/core/index.d.ts +1 -0
  30. package/build/cjs/core/index.js +3 -1
  31. package/build/cjs/core/index.js.map +1 -1
  32. package/build/cjs/core/markdown/MarkdownParser.d.ts +9 -1
  33. package/build/cjs/core/markdown/MarkdownParser.js +7 -3
  34. package/build/cjs/core/markdown/MarkdownParser.js.map +1 -1
  35. package/build/cjs/core/utils/logger.d.ts +3 -0
  36. package/build/cjs/core/utils/logger.js +12 -0
  37. package/build/cjs/core/utils/logger.js.map +1 -0
  38. package/build/cjs/core/utils/metrics.d.ts +2 -1
  39. package/build/cjs/core/utils/metrics.js +8 -2
  40. package/build/cjs/core/utils/metrics.js.map +1 -1
  41. package/build/cjs/extensions/additional/YfmHtmlBlock/utils.d.ts +1 -1
  42. package/build/cjs/extensions/additional/YfmHtmlBlock/utils.js +2 -2
  43. package/build/cjs/extensions/additional/YfmHtmlBlock/utils.js.map +1 -1
  44. package/build/cjs/extensions/behavior/Autocomplete/handler.d.ts +3 -1
  45. package/build/cjs/extensions/behavior/Autocomplete/handler.js +16 -10
  46. package/build/cjs/extensions/behavior/Autocomplete/handler.js.map +1 -1
  47. package/build/cjs/extensions/behavior/Autocomplete/index.js +1 -1
  48. package/build/cjs/extensions/behavior/Autocomplete/index.js.map +1 -1
  49. package/build/cjs/extensions/behavior/Clipboard/clipboard.d.ts +3 -1
  50. package/build/cjs/extensions/behavior/Clipboard/clipboard.js +31 -3
  51. package/build/cjs/extensions/behavior/Clipboard/clipboard.js.map +1 -1
  52. package/build/cjs/extensions/behavior/Clipboard/index.js +4 -0
  53. package/build/cjs/extensions/behavior/Clipboard/index.js.map +1 -1
  54. package/build/cjs/extensions/behavior/CommandMenu/handler.d.ts +3 -1
  55. package/build/cjs/extensions/behavior/CommandMenu/handler.js +6 -3
  56. package/build/cjs/extensions/behavior/CommandMenu/handler.js.map +1 -1
  57. package/build/cjs/extensions/behavior/CommandMenu/index.js +5 -3
  58. package/build/cjs/extensions/behavior/CommandMenu/index.js.map +1 -1
  59. package/build/cjs/extensions/behavior/EditorModeKeymap/index.js +13 -2
  60. package/build/cjs/extensions/behavior/EditorModeKeymap/index.js.map +1 -1
  61. package/build/cjs/extensions/behavior/FilePaste/index.d.ts +1 -1
  62. package/build/cjs/extensions/behavior/FilePaste/index.js +12 -0
  63. package/build/cjs/extensions/behavior/FilePaste/index.js.map +1 -1
  64. package/build/cjs/extensions/behavior/SelectionContext/index.js +3 -3
  65. package/build/cjs/extensions/behavior/SelectionContext/index.js.map +1 -1
  66. package/build/cjs/extensions/behavior/SelectionContext/tooltip.d.ts +3 -1
  67. package/build/cjs/extensions/behavior/SelectionContext/tooltip.js +7 -2
  68. package/build/cjs/extensions/behavior/SelectionContext/tooltip.js.map +1 -1
  69. package/build/cjs/extensions/behavior/utils/upload.d.ts +2 -0
  70. package/build/cjs/extensions/behavior/utils/upload.js +3 -0
  71. package/build/cjs/extensions/behavior/utils/upload.js.map +1 -1
  72. package/build/cjs/extensions/markdown/Breaks/index.js +2 -1
  73. package/build/cjs/extensions/markdown/Breaks/index.js.map +1 -1
  74. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +2 -1
  75. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
  76. package/build/cjs/extensions/markdown/Deflist/DeflistSpecs/index.js +2 -2
  77. package/build/cjs/extensions/markdown/Deflist/DeflistSpecs/index.js.map +1 -1
  78. package/build/cjs/extensions/markdown/Html/index.js +2 -1
  79. package/build/cjs/extensions/markdown/Html/index.js.map +1 -1
  80. package/build/cjs/extensions/markdown/Html/schema.js +2 -2
  81. package/build/cjs/extensions/markdown/Html/schema.js.map +1 -1
  82. package/build/cjs/extensions/markdown/Link/paste-plugin.d.ts +1 -1
  83. package/build/cjs/extensions/markdown/Link/paste-plugin.js +11 -0
  84. package/build/cjs/extensions/markdown/Link/paste-plugin.js.map +1 -1
  85. package/build/cjs/extensions/markdown/Superscript/SuperscriptSpecs/index.js +3 -3
  86. package/build/cjs/extensions/markdown/Superscript/SuperscriptSpecs/index.js.map +1 -1
  87. package/build/cjs/extensions/yfm/Checkbox/CheckboxSpecs/index.js +2 -2
  88. package/build/cjs/extensions/yfm/Checkbox/CheckboxSpecs/index.js.map +1 -1
  89. package/build/cjs/extensions/yfm/Emoji/EmojiSpecs/EmojiSpecs.js +2 -2
  90. package/build/cjs/extensions/yfm/Emoji/EmojiSpecs/EmojiSpecs.js.map +1 -1
  91. package/build/cjs/extensions/yfm/ImgSize/ImagePaste/index.d.ts +1 -1
  92. package/build/cjs/extensions/yfm/ImgSize/ImagePaste/index.js +14 -0
  93. package/build/cjs/extensions/yfm/ImgSize/ImagePaste/index.js.map +1 -1
  94. package/build/cjs/extensions/yfm/ImgSize/ImagePaste/upload.js +6 -5
  95. package/build/cjs/extensions/yfm/ImgSize/ImagePaste/upload.js.map +1 -1
  96. package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/const.d.ts +1 -1
  97. package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/const.js +6 -6
  98. package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/const.js.map +1 -1
  99. package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/index.js +3 -3
  100. package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/index.js.map +1 -1
  101. package/build/cjs/extensions/yfm/ImgSize/utils.d.ts +2 -1
  102. package/build/cjs/extensions/yfm/ImgSize/utils.js +3 -2
  103. package/build/cjs/extensions/yfm/ImgSize/utils.js.map +1 -1
  104. package/build/cjs/extensions/yfm/Monospace/MonospaceSpecs/index.js +3 -3
  105. package/build/cjs/extensions/yfm/Monospace/MonospaceSpecs/index.js.map +1 -1
  106. package/build/cjs/extensions/yfm/Video/VideoSpecs/index.js +2 -2
  107. package/build/cjs/extensions/yfm/Video/VideoSpecs/index.js.map +1 -1
  108. package/build/cjs/extensions/yfm/Video/VideoSpecs/md-video.d.ts +4 -4
  109. package/build/cjs/extensions/yfm/Video/VideoSpecs/md-video.js +7 -7
  110. package/build/cjs/extensions/yfm/Video/VideoSpecs/md-video.js.map +1 -1
  111. package/build/cjs/extensions/yfm/YfmConfigs/index.d.ts +2 -2
  112. package/build/cjs/extensions/yfm/YfmConfigs/index.js +2 -2
  113. package/build/cjs/extensions/yfm/YfmConfigs/index.js.map +1 -1
  114. package/build/cjs/extensions/yfm/YfmFile/YfmFilePaste/index.d.ts +1 -1
  115. package/build/cjs/extensions/yfm/YfmFile/YfmFilePaste/index.js +15 -1
  116. package/build/cjs/extensions/yfm/YfmFile/YfmFilePaste/index.js.map +1 -1
  117. package/build/cjs/extensions/yfm/YfmNote/YfmNoteSpecs/index.js +3 -3
  118. package/build/cjs/extensions/yfm/YfmNote/YfmNoteSpecs/index.js.map +1 -1
  119. package/build/cjs/extensions/yfm/YfmTable/YfmTableSpecs/index.js +3 -3
  120. package/build/cjs/extensions/yfm/YfmTable/YfmTableSpecs/index.js.map +1 -1
  121. package/build/cjs/extensions/yfm/YfmTabs/actions.js +4 -4
  122. package/build/cjs/extensions/yfm/YfmTabs/actions.js.map +1 -1
  123. package/build/cjs/extensions/yfm/YfmTabs/plugins.js +11 -11
  124. package/build/cjs/extensions/yfm/YfmTabs/plugins.js.map +1 -1
  125. package/build/cjs/i18n/yfm-note/index.d.ts +1 -1
  126. package/build/cjs/logger.d.ts +75 -0
  127. package/build/cjs/logger.js +89 -1
  128. package/build/cjs/logger.js.map +1 -1
  129. package/build/cjs/markdown-it/emoji.d.ts +2 -2
  130. package/build/cjs/markdown-it/emoji.js +4 -4
  131. package/build/cjs/markdown-it/emoji.js.map +1 -1
  132. package/build/cjs/markup/codemirror/create.d.ts +2 -0
  133. package/build/cjs/markup/codemirror/create.js +15 -4
  134. package/build/cjs/markup/codemirror/create.js.map +1 -1
  135. package/build/cjs/markup/codemirror/files-upload-plugin/plugin.js +13 -0
  136. package/build/cjs/markup/codemirror/files-upload-plugin/plugin.js.map +1 -1
  137. package/build/cjs/markup/codemirror/logger-facet.d.ts +3 -0
  138. package/build/cjs/markup/codemirror/logger-facet.js +9 -0
  139. package/build/cjs/markup/codemirror/logger-facet.js.map +1 -0
  140. package/build/cjs/utils/event-emitter.d.ts +1 -0
  141. package/build/cjs/utils/event-emitter.js +3 -0
  142. package/build/cjs/utils/event-emitter.js.map +1 -1
  143. package/build/cjs/utils/facet.d.ts +1 -0
  144. package/build/cjs/utils/facet.js +33 -0
  145. package/build/cjs/utils/facet.js.map +1 -0
  146. package/build/cjs/utils/keymap.js +7 -2
  147. package/build/cjs/utils/keymap.js.map +1 -1
  148. package/build/cjs/version.js +1 -1
  149. package/build/cjs/version.js.map +1 -1
  150. package/build/esm/bundle/Editor.d.ts +3 -0
  151. package/build/esm/bundle/Editor.js +22 -3
  152. package/build/esm/bundle/Editor.js.map +1 -1
  153. package/build/esm/bundle/MarkdownEditorView.js +3 -2
  154. package/build/esm/bundle/MarkdownEditorView.js.map +1 -1
  155. package/build/esm/bundle/MarkupEditorView.js +7 -2
  156. package/build/esm/bundle/MarkupEditorView.js.map +1 -1
  157. package/build/esm/bundle/MarkupManager.d.ts +3 -6
  158. package/build/esm/bundle/MarkupManager.js +5 -5
  159. package/build/esm/bundle/MarkupManager.js.map +1 -1
  160. package/build/esm/bundle/WysiwygEditorView.js +7 -2
  161. package/build/esm/bundle/WysiwygEditorView.js.map +1 -1
  162. package/build/esm/bundle/types.d.ts +2 -0
  163. package/build/esm/bundle/types.js.map +1 -1
  164. package/build/esm/bundle/useMarkdownEditor.js +5 -3
  165. package/build/esm/bundle/useMarkdownEditor.js.map +1 -1
  166. package/build/esm/core/Editor.d.ts +3 -1
  167. package/build/esm/core/Editor.js +6 -3
  168. package/build/esm/core/Editor.js.map +1 -1
  169. package/build/esm/core/ExtensionBuilder.d.ts +3 -1
  170. package/build/esm/core/ExtensionBuilder.js +6 -1
  171. package/build/esm/core/ExtensionBuilder.js.map +1 -1
  172. package/build/esm/core/ExtensionsManager.d.ts +4 -2
  173. package/build/esm/core/ExtensionsManager.js +6 -5
  174. package/build/esm/core/ExtensionsManager.js.map +1 -1
  175. package/build/esm/core/ParserTokensRegistry.d.ts +6 -0
  176. package/build/esm/core/ParserTokensRegistry.js +9 -1
  177. package/build/esm/core/ParserTokensRegistry.js.map +1 -1
  178. package/build/esm/core/index.d.ts +1 -0
  179. package/build/esm/core/index.js +1 -0
  180. package/build/esm/core/index.js.map +1 -1
  181. package/build/esm/core/markdown/MarkdownParser.d.ts +9 -1
  182. package/build/esm/core/markdown/MarkdownParser.js +7 -3
  183. package/build/esm/core/markdown/MarkdownParser.js.map +1 -1
  184. package/build/esm/core/utils/logger.d.ts +3 -0
  185. package/build/esm/core/utils/logger.js +8 -0
  186. package/build/esm/core/utils/logger.js.map +1 -0
  187. package/build/esm/core/utils/metrics.d.ts +2 -1
  188. package/build/esm/core/utils/metrics.js +8 -2
  189. package/build/esm/core/utils/metrics.js.map +1 -1
  190. package/build/esm/extensions/additional/YfmHtmlBlock/utils.d.ts +1 -1
  191. package/build/esm/extensions/additional/YfmHtmlBlock/utils.js +1 -1
  192. package/build/esm/extensions/additional/YfmHtmlBlock/utils.js.map +1 -1
  193. package/build/esm/extensions/behavior/Autocomplete/handler.d.ts +3 -1
  194. package/build/esm/extensions/behavior/Autocomplete/handler.js +15 -9
  195. package/build/esm/extensions/behavior/Autocomplete/handler.js.map +1 -1
  196. package/build/esm/extensions/behavior/Autocomplete/index.js +1 -1
  197. package/build/esm/extensions/behavior/Autocomplete/index.js.map +1 -1
  198. package/build/esm/extensions/behavior/Clipboard/clipboard.d.ts +3 -1
  199. package/build/esm/extensions/behavior/Clipboard/clipboard.js +32 -4
  200. package/build/esm/extensions/behavior/Clipboard/clipboard.js.map +1 -1
  201. package/build/esm/extensions/behavior/Clipboard/index.js +4 -0
  202. package/build/esm/extensions/behavior/Clipboard/index.js.map +1 -1
  203. package/build/esm/extensions/behavior/CommandMenu/handler.d.ts +3 -1
  204. package/build/esm/extensions/behavior/CommandMenu/handler.js +7 -4
  205. package/build/esm/extensions/behavior/CommandMenu/handler.js.map +1 -1
  206. package/build/esm/extensions/behavior/CommandMenu/index.js +6 -4
  207. package/build/esm/extensions/behavior/CommandMenu/index.js.map +1 -1
  208. package/build/esm/extensions/behavior/EditorModeKeymap/index.js +13 -2
  209. package/build/esm/extensions/behavior/EditorModeKeymap/index.js.map +1 -1
  210. package/build/esm/extensions/behavior/FilePaste/index.d.ts +1 -1
  211. package/build/esm/extensions/behavior/FilePaste/index.js +12 -0
  212. package/build/esm/extensions/behavior/FilePaste/index.js.map +1 -1
  213. package/build/esm/extensions/behavior/SelectionContext/index.js +3 -3
  214. package/build/esm/extensions/behavior/SelectionContext/index.js.map +1 -1
  215. package/build/esm/extensions/behavior/SelectionContext/tooltip.d.ts +3 -1
  216. package/build/esm/extensions/behavior/SelectionContext/tooltip.js +8 -3
  217. package/build/esm/extensions/behavior/SelectionContext/tooltip.js.map +1 -1
  218. package/build/esm/extensions/behavior/utils/upload.d.ts +2 -0
  219. package/build/esm/extensions/behavior/utils/upload.js +3 -0
  220. package/build/esm/extensions/behavior/utils/upload.js.map +1 -1
  221. package/build/esm/extensions/markdown/Breaks/index.js +3 -2
  222. package/build/esm/extensions/markdown/Breaks/index.js.map +1 -1
  223. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +3 -2
  224. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
  225. package/build/esm/extensions/markdown/Deflist/DeflistSpecs/index.js +1 -1
  226. package/build/esm/extensions/markdown/Deflist/DeflistSpecs/index.js.map +1 -1
  227. package/build/esm/extensions/markdown/Html/index.js +3 -2
  228. package/build/esm/extensions/markdown/Html/index.js.map +1 -1
  229. package/build/esm/extensions/markdown/Html/schema.js +1 -1
  230. package/build/esm/extensions/markdown/Html/schema.js.map +1 -1
  231. package/build/esm/extensions/markdown/Link/paste-plugin.d.ts +1 -1
  232. package/build/esm/extensions/markdown/Link/paste-plugin.js +11 -0
  233. package/build/esm/extensions/markdown/Link/paste-plugin.js.map +1 -1
  234. package/build/esm/extensions/markdown/Superscript/SuperscriptSpecs/index.js +2 -2
  235. package/build/esm/extensions/markdown/Superscript/SuperscriptSpecs/index.js.map +1 -1
  236. package/build/esm/extensions/yfm/Checkbox/CheckboxSpecs/index.js +1 -1
  237. package/build/esm/extensions/yfm/Checkbox/CheckboxSpecs/index.js.map +1 -1
  238. package/build/esm/extensions/yfm/Emoji/EmojiSpecs/EmojiSpecs.js +1 -1
  239. package/build/esm/extensions/yfm/Emoji/EmojiSpecs/EmojiSpecs.js.map +1 -1
  240. package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.d.ts +1 -1
  241. package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.js +14 -0
  242. package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.js.map +1 -1
  243. package/build/esm/extensions/yfm/ImgSize/ImagePaste/upload.js +7 -6
  244. package/build/esm/extensions/yfm/ImgSize/ImagePaste/upload.js.map +1 -1
  245. package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/const.d.ts +1 -1
  246. package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/const.js +1 -1
  247. package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/const.js.map +1 -1
  248. package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/index.js +2 -2
  249. package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/index.js.map +1 -1
  250. package/build/esm/extensions/yfm/ImgSize/utils.d.ts +2 -1
  251. package/build/esm/extensions/yfm/ImgSize/utils.js +4 -3
  252. package/build/esm/extensions/yfm/ImgSize/utils.js.map +1 -1
  253. package/build/esm/extensions/yfm/Monospace/MonospaceSpecs/index.js +2 -2
  254. package/build/esm/extensions/yfm/Monospace/MonospaceSpecs/index.js.map +1 -1
  255. package/build/esm/extensions/yfm/Video/VideoSpecs/index.js +1 -1
  256. package/build/esm/extensions/yfm/Video/VideoSpecs/index.js.map +1 -1
  257. package/build/esm/extensions/yfm/Video/VideoSpecs/md-video.d.ts +4 -4
  258. package/build/esm/extensions/yfm/Video/VideoSpecs/md-video.js +3 -3
  259. package/build/esm/extensions/yfm/Video/VideoSpecs/md-video.js.map +1 -1
  260. package/build/esm/extensions/yfm/YfmConfigs/index.d.ts +2 -2
  261. package/build/esm/extensions/yfm/YfmConfigs/index.js +2 -2
  262. package/build/esm/extensions/yfm/YfmConfigs/index.js.map +1 -1
  263. package/build/esm/extensions/yfm/YfmFile/YfmFilePaste/index.d.ts +1 -1
  264. package/build/esm/extensions/yfm/YfmFile/YfmFilePaste/index.js +15 -1
  265. package/build/esm/extensions/yfm/YfmFile/YfmFilePaste/index.js.map +1 -1
  266. package/build/esm/extensions/yfm/YfmNote/YfmNoteSpecs/index.js +2 -2
  267. package/build/esm/extensions/yfm/YfmNote/YfmNoteSpecs/index.js.map +1 -1
  268. package/build/esm/extensions/yfm/YfmTable/YfmTableSpecs/index.js +2 -2
  269. package/build/esm/extensions/yfm/YfmTable/YfmTableSpecs/index.js.map +1 -1
  270. package/build/esm/extensions/yfm/YfmTabs/actions.js +1 -1
  271. package/build/esm/extensions/yfm/YfmTabs/actions.js.map +1 -1
  272. package/build/esm/extensions/yfm/YfmTabs/plugins.js +1 -1
  273. package/build/esm/extensions/yfm/YfmTabs/plugins.js.map +1 -1
  274. package/build/esm/i18n/yfm-note/index.d.ts +1 -1
  275. package/build/esm/logger.d.ts +75 -0
  276. package/build/esm/logger.js +87 -0
  277. package/build/esm/logger.js.map +1 -1
  278. package/build/esm/markdown-it/emoji.d.ts +2 -2
  279. package/build/esm/markdown-it/emoji.js +2 -2
  280. package/build/esm/markdown-it/emoji.js.map +1 -1
  281. package/build/esm/markup/codemirror/create.d.ts +2 -0
  282. package/build/esm/markup/codemirror/create.js +16 -5
  283. package/build/esm/markup/codemirror/create.js.map +1 -1
  284. package/build/esm/markup/codemirror/files-upload-plugin/plugin.js +13 -0
  285. package/build/esm/markup/codemirror/files-upload-plugin/plugin.js.map +1 -1
  286. package/build/esm/markup/codemirror/logger-facet.d.ts +3 -0
  287. package/build/esm/markup/codemirror/logger-facet.js +6 -0
  288. package/build/esm/markup/codemirror/logger-facet.js.map +1 -0
  289. package/build/esm/utils/event-emitter.d.ts +1 -0
  290. package/build/esm/utils/event-emitter.js +3 -0
  291. package/build/esm/utils/event-emitter.js.map +1 -1
  292. package/build/esm/utils/facet.d.ts +1 -0
  293. package/build/esm/utils/facet.js +29 -0
  294. package/build/esm/utils/facet.js.map +1 -0
  295. package/build/esm/utils/keymap.js +7 -2
  296. package/build/esm/utils/keymap.js.map +1 -1
  297. package/build/esm/version.js +1 -1
  298. package/build/esm/version.js.map +1 -1
  299. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { generateID } from '@diplodoc/transform/lib/plugins/utils';
1
+ import { generateID } from '@diplodoc/transform/lib/plugins/utils.js';
2
2
  import { Plugin, TextSelection } from 'prosemirror-state';
3
3
  import { findChildren, findDomRefAtPos, findParentNodeOfType, findParentNodeOfTypeClosestToPos,
4
4
  // @ts-ignore // TODO: fix cjs build
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.js","sourceRoot":"../../../../../src","sources":["extensions/yfm/YfmTabs/plugins.ts"],"names":[],"mappings":"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","sourcesContent":["import {generateID} from '@diplodoc/transform/lib/plugins/utils';\nimport type {Node} from 'prosemirror-model';\nimport {type Command, Plugin, type PluginView, TextSelection} from 'prosemirror-state';\nimport {\n type NodeWithPos,\n findChildren,\n findDomRefAtPos,\n findParentNodeOfType,\n findParentNodeOfTypeClosestToPos,\n // @ts-ignore // TODO: fix cjs build\n} from 'prosemirror-utils';\nimport type {EditorView} from 'prosemirror-view';\n\nimport {\n createFakeParagraph,\n findFakeParaPosClosestToPos,\n findFakeParaPosForTextSelection,\n isGapCursorSelection,\n pType,\n} from '../../';\nimport {throttle} from '../../../lodash';\nimport {findChildIndex} from '../../../table-utils/helpers';\nimport {isSameNodeType} from '../../../utils';\nimport {get$Cursor, isTextSelection} from '../../../utils/selection';\n\nimport {TabAttrs, TabPanelAttrs} from './YfmTabsSpecs/const';\nimport {\n tabInactiveClassname,\n tabPanelActiveClassname,\n tabPanelInactiveClassname,\n tabPanelType,\n tabType,\n tabsListType,\n tabsType,\n} from './const';\nimport {atEndOfPanel, execAfterPaint, switchTabByElem, switchTabById} from './utils';\n\nexport const dragAutoSwitch = () =>\n new Plugin({\n view: TabsAutoSwitchOnDragOver.view,\n });\n\nclass TabsAutoSwitchOnDragOver implements PluginView {\n private static readonly TAB_SELECTOR = '.yfm-tab:not([data-diplodoc-is-active=true])';\n private static readonly OPEN_TIMEOUT = 500; //ms\n private static readonly THROTTLE_WAIT = 50; //ms\n\n static readonly view = (view: EditorView): PluginView => new this(view);\n\n private _tabElem: HTMLElement | null = null;\n private _editorView: EditorView;\n private _timeout: ReturnType<typeof setTimeout> | null = null;\n private readonly _docListener;\n\n constructor(view: EditorView) {\n this._editorView = view;\n this._docListener = throttle(\n this._onDocEvent.bind(this),\n TabsAutoSwitchOnDragOver.THROTTLE_WAIT,\n );\n document.addEventListener('mousemove', this._docListener);\n document.addEventListener('dragover', this._docListener);\n }\n\n destroy(): void {\n this._clear();\n this._docListener.cancel();\n document.removeEventListener('mousemove', this._docListener);\n document.removeEventListener('dragover', this._docListener);\n }\n\n private _onDocEvent(event: MouseEvent) {\n const view = this._editorView;\n if (!view.dragging) return;\n const pos = view.posAtCoords({left: event.clientX, top: event.clientY});\n if (pos) {\n const elem = findDomRefAtPos(pos.pos, view.domAtPos.bind(view)) as HTMLElement;\n const tabElem = elem.closest(TabsAutoSwitchOnDragOver.TAB_SELECTOR);\n if (tabElem === this._tabElem) return;\n this._clear();\n if (tabElem) this._setTabElem(tabElem as HTMLElement);\n }\n }\n\n private _clear() {\n if (this._timeout !== null) clearTimeout(this._timeout);\n this._timeout = null;\n this._tabElem = null;\n }\n\n private _setTabElem(elem: HTMLElement) {\n this._tabElem = elem;\n this._timeout = setTimeout(\n this._switchTab.bind(this),\n TabsAutoSwitchOnDragOver.OPEN_TIMEOUT,\n );\n }\n\n private _switchTab() {\n if (this._editorView.dragging && this._tabElem) {\n switchTabByElem(this._tabElem);\n }\n this._clear();\n }\n}\n\nexport const tabPanelArrowDown: Command = (state, dispatch, view) => {\n const {selection: sel} = state;\n const tabsParentNode = findParentNodeOfType(tabsType(state.schema))(state.selection);\n\n if (atEndOfPanel(view) && view?.endOfTextblock('down')) {\n const [direction, $cursor] = ['after', sel.$to] as const;\n let $pos;\n if (isTextSelection(sel)) {\n $pos =\n findFakeParaPosForTextSelection(sel, direction) ??\n findFakeParaPosClosestToPos($cursor, $cursor.depth - 2, direction);\n }\n if (isGapCursorSelection(sel) && tabsParentNode) {\n $pos = state.doc.resolve(tabsParentNode.pos + tabsParentNode.node.nodeSize);\n }\n if ($pos) {\n dispatch?.(createFakeParagraph(state.tr, $pos, direction).scrollIntoView());\n return true;\n }\n }\n\n return false;\n};\n\nexport const tabEnter: Command = (state) => {\n const $cursor = get$Cursor(state.selection);\n return $cursor?.node($cursor.depth).type === tabType(state.schema);\n};\n\nexport const liftEmptyBlockFromTabPanel: Command = (state, dispatch) => {\n const {selection, schema} = state;\n if (!isTextSelection(selection)) return false;\n\n const {$cursor} = selection;\n\n // cursor should be inside an empty textblock\n if (!$cursor || $cursor.parent.content.size) return false;\n\n if (\n $cursor.depth > 2 && // depth must be at least 3\n isSameNodeType($cursor.node(-1), tabPanelType(schema)) &&\n isSameNodeType($cursor.node(-2), tabsType(schema))\n ) {\n // current texblock is last child\n if ($cursor.after() === $cursor.end(-1)) {\n if (dispatch) {\n const copeidNode = $cursor.parent.copy();\n const tabsAfter = $cursor.after(-2);\n\n const {tr} = state;\n\n tr.insert(tabsAfter, copeidNode)\n .delete($cursor.before(), $cursor.after())\n .setSelection(TextSelection.create(tr.doc, tr.mapping.map(tabsAfter)));\n\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n }\n return false;\n};\n\nexport const createTab: (afterTab: NodeWithPos, tabsParentNode: NodeWithPos) => Command =\n (afterTab, tabsParentNode) => (state, dispatch, view) => {\n const tabNodes = findChildren(\n tabsParentNode.node,\n (node: Node) => node.type.name === tabType(state.schema).name,\n );\n\n const tabPanels = findChildren(tabsParentNode.node, (tabNode: Node) => {\n return tabNode.type.name === tabPanelType(state.schema).name;\n });\n\n const afterPanelNode = tabPanels.filter(\n (tabPanelNode: {node: Node}) =>\n tabPanelNode.node.attrs[TabPanelAttrs.ariaLabelledby] ===\n afterTab.node.attrs[TabAttrs.dataDiplodocid],\n )[0];\n\n const tabId = generateID();\n const panelId = generateID();\n\n const newPanel = tabPanelType(state.schema).create(\n {\n [TabPanelAttrs.ariaLabelledby]: tabId,\n [TabPanelAttrs.id]: panelId,\n [TabPanelAttrs.class]: tabPanelInactiveClassname,\n },\n pType(state.schema).createAndFill(),\n );\n const newTab = tabType(state.schema).create({\n [TabAttrs.id]: tabId,\n [TabAttrs.dataDiplodocid]: tabId,\n [TabAttrs.dataDiplodocKey]: tabId,\n [TabAttrs.dataDiplodocIsActive]: 'false',\n [TabAttrs.class]: tabInactiveClassname,\n [TabAttrs.role]: 'tab',\n [TabAttrs.ariaControls]: panelId,\n });\n\n const {tr} = state;\n\n // Change relative pos to absolute\n tabNodes.forEach((v: {pos: number}) => {\n v.pos = v.pos + tabsParentNode.pos + 1;\n });\n\n tabPanels.forEach((v: {pos: number}) => {\n v.pos = v.pos + tabsParentNode.pos + 1;\n });\n\n dispatch?.(\n tr\n .insert(afterPanelNode.pos + afterPanelNode.node.nodeSize, newPanel)\n .insert(afterTab.pos + afterTab.node.nodeSize, newTab)\n .setSelection(\n TextSelection.create(tr.doc, afterTab.pos + afterTab.node.nodeSize + 1),\n ),\n );\n\n view?.focus();\n\n if (view) {\n execAfterPaint(() => switchTabById(view.dom, tabId));\n }\n\n return true;\n };\n\nexport const removeTab: (tabToRemove: NodeWithPos, tabsParentNode: NodeWithPos) => Command =\n (tabToRemove, tabsParentNode) => (state, dispatch, view) => {\n const tabList = findChildren(tabsParentNode.node, (tabNode: Node) => {\n return tabNode.type.name === tabsListType(state.schema).name;\n })[0];\n const tabToRemoveIdx = findChildIndex(tabList.node, tabToRemove.node);\n\n const tabNodes = findChildren(\n tabList.node,\n (node: Node) => node.type.name === tabType(state.schema).name,\n );\n\n const tabPanels = findChildren(tabsParentNode.node, (tabNode: Node) => {\n return tabNode.type.name === tabPanelType(state.schema).name;\n });\n\n const panelToRemove = tabPanels.filter(\n (tabPanelNode: {node: Node}) =>\n tabPanelNode.node.attrs[TabPanelAttrs.ariaLabelledby] ===\n tabToRemove.node.attrs[TabAttrs.dataDiplodocid],\n )[0];\n\n if (panelToRemove && dispatch) {\n const {tr} = state;\n\n if (tabNodes.length <= 1) {\n tr.delete(tabsParentNode.pos, tabsParentNode.pos + tabsParentNode.node.nodeSize);\n } else {\n const newTabIdx = tabToRemoveIdx - 1 < 0 ? 1 : tabToRemoveIdx - 1;\n\n // Change relative pos to absolute\n tabNodes.forEach((v: {pos: number}) => {\n v.pos = v.pos + tabsParentNode.pos + 2;\n });\n\n tabPanels.forEach((v: {pos: number}) => {\n v.pos = v.pos + tabsParentNode.pos + 1;\n });\n\n const newTabNode = tabNodes[newTabIdx];\n const newActiveTabId: string = newTabNode.node.attrs[TabAttrs.dataDiplodocid];\n\n tr\n // Delete panel\n .delete(panelToRemove.pos, panelToRemove.pos + panelToRemove.node.nodeSize)\n // Delete tab\n .delete(tabToRemove.pos, tabToRemove.pos + tabToRemove.node.nodeSize)\n .setSelection(\n TextSelection.create(\n tr.doc,\n tr.mapping.map(newTabNode.pos + newTabNode.node.nodeSize - 1),\n ),\n );\n\n // Set new active tab\n if (view) execAfterPaint(() => switchTabById(view.dom, newActiveTabId));\n }\n dispatch(tr);\n view?.focus();\n\n return true;\n }\n\n return false;\n };\n\nexport const removeTabWhenCursorAtTheStartOfTab: Command = (state, dispatch) => {\n const tabToRemove = findParentNodeOfType(tabType(state.schema))(state.selection);\n const tabsParentNode = findParentNodeOfType(tabsType(state.schema))(state.selection);\n\n if (\n tabsParentNode &&\n tabToRemove &&\n state.selection.from === tabToRemove.pos + 1 &&\n state.selection.from === state.selection.to\n ) {\n return removeTab(tabToRemove, tabsParentNode)(state, dispatch);\n }\n\n return false;\n};\n\nexport const joinBackwardToOpenTab: Command = (state, dispatch) => {\n const $cursor = get$Cursor(state.selection);\n if (!$cursor || $cursor.parentOffset !== 0) return false;\n // --> cursor at start of textblock\n const textBlockIndex = $cursor.index($cursor.depth - 1);\n if (textBlockIndex <= 0) return false;\n const nodeBefore = $cursor.node($cursor.depth - 1).child(textBlockIndex - 1);\n\n if (nodeBefore.type !== tabsType(state.schema)) {\n return false;\n }\n\n const tabsParent = findParentNodeOfTypeClosestToPos(\n state.doc.resolve($cursor.pos - 2),\n tabsType(state.schema),\n );\n\n if (!tabsParent) {\n return false;\n }\n const activePanel = findChildren(\n tabsParent.node,\n (n: Node) => n.attrs.class === tabPanelActiveClassname,\n )[0];\n\n if (dispatch) {\n const posEndOfLastLayoutCell = activePanel.pos + tabsParent.pos + activePanel.node.nodeSize;\n const tr = state.tr;\n tr.delete($cursor.before(), $cursor.after());\n tr.insert(posEndOfLastLayoutCell, $cursor.parent);\n tr.setSelection(TextSelection.create(tr.doc, posEndOfLastLayoutCell + 1));\n dispatch(tr.scrollIntoView());\n }\n\n return true;\n};\n"]}
1
+ {"version":3,"file":"plugins.js","sourceRoot":"../../../../../src","sources":["extensions/yfm/YfmTabs/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,0CAA0C,CAAC;AAEpE,OAAO,EAAe,MAAM,EAAmB,aAAa,EAAC,MAAM,mBAAmB,CAAC;AACvF,OAAO,EAEH,YAAY,EACZ,eAAe,EACf,oBAAoB,EACpB,gCAAgC;AAChC,oCAAoC;EACvC,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACH,mBAAmB,EACnB,2BAA2B,EAC3B,+BAA+B,EAC/B,oBAAoB,EACpB,KAAK,GACR,uBAAe;AAChB,OAAO,EAAC,QAAQ,EAAC,2BAAwB;AACzC,OAAO,EAAC,cAAc,EAAC,wCAAqC;AAC5D,OAAO,EAAC,cAAc,EAAC,gCAAuB;AAC9C,OAAO,EAAC,UAAU,EAAE,eAAe,EAAC,oCAAiC;AAErE,OAAO,EAAC,QAAQ,EAAE,aAAa,EAAC,gCAA6B;AAC7D,OAAO,EACH,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,EACzB,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,QAAQ,GACX,mBAAgB;AACjB,OAAO,EAAC,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAC,mBAAgB;AAErF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE,CAC/B,IAAI,MAAM,CAAC;IACP,IAAI,EAAE,wBAAwB,CAAC,IAAI;CACtC,CAAC,CAAC;AAEP,MAAM,wBAAwB;IAClB,MAAM,CAAU,YAAY,GAAG,8CAA8C,CAAC;IAC9E,MAAM,CAAU,YAAY,GAAG,GAAG,CAAC,CAAC,IAAI;IACxC,MAAM,CAAU,aAAa,GAAG,EAAE,CAAC,CAAC,IAAI;IAEhD,MAAM,CAAU,IAAI,GAAG,CAAC,IAAgB,EAAc,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhE,QAAQ,GAAuB,IAAI,CAAC;IACpC,WAAW,CAAa;IACxB,QAAQ,GAAyC,IAAI,CAAC;IAC7C,YAAY,CAAC;IAE9B,YAAY,IAAgB;QACxB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,YAAY,GAAG,QAAQ,CACxB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAC3B,wBAAwB,CAAC,aAAa,CACzC,CAAC;QACF,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1D,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO;QACH,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAC3B,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7D,QAAQ,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAChE,CAAC;IAEO,WAAW,CAAC,KAAiB;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,EAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,EAAC,CAAC,CAAC;QACxE,IAAI,GAAG,EAAE,CAAC;YACN,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAgB,CAAC;YAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;YACpE,IAAI,OAAO,KAAK,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACtC,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,OAAO;gBAAE,IAAI,CAAC,WAAW,CAAC,OAAsB,CAAC,CAAC;QAC1D,CAAC;IACL,CAAC;IAEO,MAAM;QACV,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;YAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;IAEO,WAAW,CAAC,IAAiB;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,UAAU,CACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAC1B,wBAAwB,CAAC,YAAY,CACxC,CAAC;IACN,CAAC;IAEO,UAAU;QACd,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7C,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;;AAGL,MAAM,CAAC,MAAM,iBAAiB,GAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;IAChE,MAAM,EAAC,SAAS,EAAE,GAAG,EAAC,GAAG,KAAK,CAAC;IAC/B,MAAM,cAAc,GAAG,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAErF,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAU,CAAC;QACzD,IAAI,IAAI,CAAC;QACT,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI;gBACA,+BAA+B,CAAC,GAAG,EAAE,SAAS,CAAC;oBAC/C,2BAA2B,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,oBAAoB,CAAC,GAAG,CAAC,IAAI,cAAc,EAAE,CAAC;YAC9C,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACP,QAAQ,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;YAC5E,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAY,CAAC,KAAK,EAAE,EAAE;IACvC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC5C,OAAO,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACvE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;IACnE,MAAM,EAAC,SAAS,EAAE,MAAM,EAAC,GAAG,KAAK,CAAC;IAClC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAE9C,MAAM,EAAC,OAAO,EAAC,GAAG,SAAS,CAAC;IAE5B,6CAA6C;IAC7C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAE1D,IACI,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,2BAA2B;QAChD,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QACtD,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EACpD,CAAC;QACC,iCAAiC;QACjC,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtC,IAAI,QAAQ,EAAE,CAAC;gBACX,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACzC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEpC,MAAM,EAAC,EAAE,EAAC,GAAG,KAAK,CAAC;gBAEnB,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC;qBAC3B,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;qBACzC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAE3E,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;YAClC,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAClB,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;IACpD,MAAM,QAAQ,GAAG,YAAY,CACzB,cAAc,CAAC,IAAI,EACnB,CAAC,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAChE,CAAC;IAEF,MAAM,SAAS,GAAG,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,OAAa,EAAE,EAAE;QAClE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CACnC,CAAC,YAA0B,EAAE,EAAE,CAC3B,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC;QACrD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CACnD,CAAC,CAAC,CAAC,CAAC;IAEL,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAC9C;QACI,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,KAAK;QACrC,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,OAAO;QAC3B,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,yBAAyB;KACnD,EACD,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CACtC,CAAC;IACF,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;QACxC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK;QACpB,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK;QAChC,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK;QACjC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO;QACxC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,oBAAoB;QACtC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK;QACtB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO;KACnC,CAAC,CAAC;IAEH,MAAM,EAAC,EAAE,EAAC,GAAG,KAAK,CAAC;IAEnB,kCAAkC;IAClC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAgB,EAAE,EAAE;QAClC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,OAAO,CAAC,CAAC,CAAgB,EAAE,EAAE;QACnC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,QAAQ,EAAE,CACN,EAAE;SACG,MAAM,CAAC,cAAc,CAAC,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;SACnE,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;SACrD,YAAY,CACT,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAC1E,CACR,CAAC;IAEF,IAAI,EAAE,KAAK,EAAE,CAAC;IAEd,IAAI,IAAI,EAAE,CAAC;QACP,cAAc,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEN,MAAM,CAAC,MAAM,SAAS,GAClB,CAAC,WAAW,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;IACvD,MAAM,OAAO,GAAG,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,OAAa,EAAE,EAAE;QAChE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACN,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IAEtE,MAAM,QAAQ,GAAG,YAAY,CACzB,OAAO,CAAC,IAAI,EACZ,CAAC,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAChE,CAAC;IAEF,MAAM,SAAS,GAAG,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,OAAa,EAAE,EAAE;QAClE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAClC,CAAC,YAA0B,EAAE,EAAE,CAC3B,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC;QACrD,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CACtD,CAAC,CAAC,CAAC,CAAC;IAEL,IAAI,aAAa,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,EAAC,EAAE,EAAC,GAAG,KAAK,CAAC;QAEnB,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACvB,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrF,CAAC;aAAM,CAAC;YACJ,MAAM,SAAS,GAAG,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC;YAElE,kCAAkC;YAClC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAgB,EAAE,EAAE;gBAClC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;YAEH,SAAS,CAAC,OAAO,CAAC,CAAC,CAAgB,EAAE,EAAE;gBACnC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YACvC,MAAM,cAAc,GAAW,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YAE9E,EAAE;gBACE,eAAe;iBACd,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC3E,aAAa;iBACZ,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;iBACpE,YAAY,CACT,aAAa,CAAC,MAAM,CAChB,EAAE,CAAC,GAAG,EACN,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAChE,CACJ,CAAC;YAEN,qBAAqB;YACrB,IAAI,IAAI;gBAAE,cAAc,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;QAC5E,CAAC;QACD,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,EAAE,KAAK,EAAE,CAAC;QAEd,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEN,MAAM,CAAC,MAAM,kCAAkC,GAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;IAC3E,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACjF,MAAM,cAAc,GAAG,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAErF,IACI,cAAc;QACd,WAAW;QACX,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,WAAW,CAAC,GAAG,GAAG,CAAC;QAC5C,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC,EAAE,EAC7C,CAAC;QACC,OAAO,SAAS,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;IAC9D,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,mCAAmC;IACnC,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACxD,IAAI,cAAc,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;IAE7E,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,UAAU,GAAG,gCAAgC,CAC/C,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,EAClC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CACzB,CAAC;IAEF,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,WAAW,GAAG,YAAY,CAC5B,UAAU,CAAC,IAAI,EACf,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,uBAAuB,CACzD,CAAC,CAAC,CAAC,CAAC;IAEL,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,sBAAsB,GAAG,WAAW,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC5F,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACpB,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7C,EAAE,CAAC,MAAM,CAAC,sBAAsB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAClD,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,sBAAsB,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1E,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC","sourcesContent":["import {generateID} from '@diplodoc/transform/lib/plugins/utils.js';\nimport type {Node} from 'prosemirror-model';\nimport {type Command, Plugin, type PluginView, TextSelection} from 'prosemirror-state';\nimport {\n type NodeWithPos,\n findChildren,\n findDomRefAtPos,\n findParentNodeOfType,\n findParentNodeOfTypeClosestToPos,\n // @ts-ignore // TODO: fix cjs build\n} from 'prosemirror-utils';\nimport type {EditorView} from 'prosemirror-view';\n\nimport {\n createFakeParagraph,\n findFakeParaPosClosestToPos,\n findFakeParaPosForTextSelection,\n isGapCursorSelection,\n pType,\n} from '../../';\nimport {throttle} from '../../../lodash';\nimport {findChildIndex} from '../../../table-utils/helpers';\nimport {isSameNodeType} from '../../../utils';\nimport {get$Cursor, isTextSelection} from '../../../utils/selection';\n\nimport {TabAttrs, TabPanelAttrs} from './YfmTabsSpecs/const';\nimport {\n tabInactiveClassname,\n tabPanelActiveClassname,\n tabPanelInactiveClassname,\n tabPanelType,\n tabType,\n tabsListType,\n tabsType,\n} from './const';\nimport {atEndOfPanel, execAfterPaint, switchTabByElem, switchTabById} from './utils';\n\nexport const dragAutoSwitch = () =>\n new Plugin({\n view: TabsAutoSwitchOnDragOver.view,\n });\n\nclass TabsAutoSwitchOnDragOver implements PluginView {\n private static readonly TAB_SELECTOR = '.yfm-tab:not([data-diplodoc-is-active=true])';\n private static readonly OPEN_TIMEOUT = 500; //ms\n private static readonly THROTTLE_WAIT = 50; //ms\n\n static readonly view = (view: EditorView): PluginView => new this(view);\n\n private _tabElem: HTMLElement | null = null;\n private _editorView: EditorView;\n private _timeout: ReturnType<typeof setTimeout> | null = null;\n private readonly _docListener;\n\n constructor(view: EditorView) {\n this._editorView = view;\n this._docListener = throttle(\n this._onDocEvent.bind(this),\n TabsAutoSwitchOnDragOver.THROTTLE_WAIT,\n );\n document.addEventListener('mousemove', this._docListener);\n document.addEventListener('dragover', this._docListener);\n }\n\n destroy(): void {\n this._clear();\n this._docListener.cancel();\n document.removeEventListener('mousemove', this._docListener);\n document.removeEventListener('dragover', this._docListener);\n }\n\n private _onDocEvent(event: MouseEvent) {\n const view = this._editorView;\n if (!view.dragging) return;\n const pos = view.posAtCoords({left: event.clientX, top: event.clientY});\n if (pos) {\n const elem = findDomRefAtPos(pos.pos, view.domAtPos.bind(view)) as HTMLElement;\n const tabElem = elem.closest(TabsAutoSwitchOnDragOver.TAB_SELECTOR);\n if (tabElem === this._tabElem) return;\n this._clear();\n if (tabElem) this._setTabElem(tabElem as HTMLElement);\n }\n }\n\n private _clear() {\n if (this._timeout !== null) clearTimeout(this._timeout);\n this._timeout = null;\n this._tabElem = null;\n }\n\n private _setTabElem(elem: HTMLElement) {\n this._tabElem = elem;\n this._timeout = setTimeout(\n this._switchTab.bind(this),\n TabsAutoSwitchOnDragOver.OPEN_TIMEOUT,\n );\n }\n\n private _switchTab() {\n if (this._editorView.dragging && this._tabElem) {\n switchTabByElem(this._tabElem);\n }\n this._clear();\n }\n}\n\nexport const tabPanelArrowDown: Command = (state, dispatch, view) => {\n const {selection: sel} = state;\n const tabsParentNode = findParentNodeOfType(tabsType(state.schema))(state.selection);\n\n if (atEndOfPanel(view) && view?.endOfTextblock('down')) {\n const [direction, $cursor] = ['after', sel.$to] as const;\n let $pos;\n if (isTextSelection(sel)) {\n $pos =\n findFakeParaPosForTextSelection(sel, direction) ??\n findFakeParaPosClosestToPos($cursor, $cursor.depth - 2, direction);\n }\n if (isGapCursorSelection(sel) && tabsParentNode) {\n $pos = state.doc.resolve(tabsParentNode.pos + tabsParentNode.node.nodeSize);\n }\n if ($pos) {\n dispatch?.(createFakeParagraph(state.tr, $pos, direction).scrollIntoView());\n return true;\n }\n }\n\n return false;\n};\n\nexport const tabEnter: Command = (state) => {\n const $cursor = get$Cursor(state.selection);\n return $cursor?.node($cursor.depth).type === tabType(state.schema);\n};\n\nexport const liftEmptyBlockFromTabPanel: Command = (state, dispatch) => {\n const {selection, schema} = state;\n if (!isTextSelection(selection)) return false;\n\n const {$cursor} = selection;\n\n // cursor should be inside an empty textblock\n if (!$cursor || $cursor.parent.content.size) return false;\n\n if (\n $cursor.depth > 2 && // depth must be at least 3\n isSameNodeType($cursor.node(-1), tabPanelType(schema)) &&\n isSameNodeType($cursor.node(-2), tabsType(schema))\n ) {\n // current texblock is last child\n if ($cursor.after() === $cursor.end(-1)) {\n if (dispatch) {\n const copeidNode = $cursor.parent.copy();\n const tabsAfter = $cursor.after(-2);\n\n const {tr} = state;\n\n tr.insert(tabsAfter, copeidNode)\n .delete($cursor.before(), $cursor.after())\n .setSelection(TextSelection.create(tr.doc, tr.mapping.map(tabsAfter)));\n\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n }\n return false;\n};\n\nexport const createTab: (afterTab: NodeWithPos, tabsParentNode: NodeWithPos) => Command =\n (afterTab, tabsParentNode) => (state, dispatch, view) => {\n const tabNodes = findChildren(\n tabsParentNode.node,\n (node: Node) => node.type.name === tabType(state.schema).name,\n );\n\n const tabPanels = findChildren(tabsParentNode.node, (tabNode: Node) => {\n return tabNode.type.name === tabPanelType(state.schema).name;\n });\n\n const afterPanelNode = tabPanels.filter(\n (tabPanelNode: {node: Node}) =>\n tabPanelNode.node.attrs[TabPanelAttrs.ariaLabelledby] ===\n afterTab.node.attrs[TabAttrs.dataDiplodocid],\n )[0];\n\n const tabId = generateID();\n const panelId = generateID();\n\n const newPanel = tabPanelType(state.schema).create(\n {\n [TabPanelAttrs.ariaLabelledby]: tabId,\n [TabPanelAttrs.id]: panelId,\n [TabPanelAttrs.class]: tabPanelInactiveClassname,\n },\n pType(state.schema).createAndFill(),\n );\n const newTab = tabType(state.schema).create({\n [TabAttrs.id]: tabId,\n [TabAttrs.dataDiplodocid]: tabId,\n [TabAttrs.dataDiplodocKey]: tabId,\n [TabAttrs.dataDiplodocIsActive]: 'false',\n [TabAttrs.class]: tabInactiveClassname,\n [TabAttrs.role]: 'tab',\n [TabAttrs.ariaControls]: panelId,\n });\n\n const {tr} = state;\n\n // Change relative pos to absolute\n tabNodes.forEach((v: {pos: number}) => {\n v.pos = v.pos + tabsParentNode.pos + 1;\n });\n\n tabPanels.forEach((v: {pos: number}) => {\n v.pos = v.pos + tabsParentNode.pos + 1;\n });\n\n dispatch?.(\n tr\n .insert(afterPanelNode.pos + afterPanelNode.node.nodeSize, newPanel)\n .insert(afterTab.pos + afterTab.node.nodeSize, newTab)\n .setSelection(\n TextSelection.create(tr.doc, afterTab.pos + afterTab.node.nodeSize + 1),\n ),\n );\n\n view?.focus();\n\n if (view) {\n execAfterPaint(() => switchTabById(view.dom, tabId));\n }\n\n return true;\n };\n\nexport const removeTab: (tabToRemove: NodeWithPos, tabsParentNode: NodeWithPos) => Command =\n (tabToRemove, tabsParentNode) => (state, dispatch, view) => {\n const tabList = findChildren(tabsParentNode.node, (tabNode: Node) => {\n return tabNode.type.name === tabsListType(state.schema).name;\n })[0];\n const tabToRemoveIdx = findChildIndex(tabList.node, tabToRemove.node);\n\n const tabNodes = findChildren(\n tabList.node,\n (node: Node) => node.type.name === tabType(state.schema).name,\n );\n\n const tabPanels = findChildren(tabsParentNode.node, (tabNode: Node) => {\n return tabNode.type.name === tabPanelType(state.schema).name;\n });\n\n const panelToRemove = tabPanels.filter(\n (tabPanelNode: {node: Node}) =>\n tabPanelNode.node.attrs[TabPanelAttrs.ariaLabelledby] ===\n tabToRemove.node.attrs[TabAttrs.dataDiplodocid],\n )[0];\n\n if (panelToRemove && dispatch) {\n const {tr} = state;\n\n if (tabNodes.length <= 1) {\n tr.delete(tabsParentNode.pos, tabsParentNode.pos + tabsParentNode.node.nodeSize);\n } else {\n const newTabIdx = tabToRemoveIdx - 1 < 0 ? 1 : tabToRemoveIdx - 1;\n\n // Change relative pos to absolute\n tabNodes.forEach((v: {pos: number}) => {\n v.pos = v.pos + tabsParentNode.pos + 2;\n });\n\n tabPanels.forEach((v: {pos: number}) => {\n v.pos = v.pos + tabsParentNode.pos + 1;\n });\n\n const newTabNode = tabNodes[newTabIdx];\n const newActiveTabId: string = newTabNode.node.attrs[TabAttrs.dataDiplodocid];\n\n tr\n // Delete panel\n .delete(panelToRemove.pos, panelToRemove.pos + panelToRemove.node.nodeSize)\n // Delete tab\n .delete(tabToRemove.pos, tabToRemove.pos + tabToRemove.node.nodeSize)\n .setSelection(\n TextSelection.create(\n tr.doc,\n tr.mapping.map(newTabNode.pos + newTabNode.node.nodeSize - 1),\n ),\n );\n\n // Set new active tab\n if (view) execAfterPaint(() => switchTabById(view.dom, newActiveTabId));\n }\n dispatch(tr);\n view?.focus();\n\n return true;\n }\n\n return false;\n };\n\nexport const removeTabWhenCursorAtTheStartOfTab: Command = (state, dispatch) => {\n const tabToRemove = findParentNodeOfType(tabType(state.schema))(state.selection);\n const tabsParentNode = findParentNodeOfType(tabsType(state.schema))(state.selection);\n\n if (\n tabsParentNode &&\n tabToRemove &&\n state.selection.from === tabToRemove.pos + 1 &&\n state.selection.from === state.selection.to\n ) {\n return removeTab(tabToRemove, tabsParentNode)(state, dispatch);\n }\n\n return false;\n};\n\nexport const joinBackwardToOpenTab: Command = (state, dispatch) => {\n const $cursor = get$Cursor(state.selection);\n if (!$cursor || $cursor.parentOffset !== 0) return false;\n // --> cursor at start of textblock\n const textBlockIndex = $cursor.index($cursor.depth - 1);\n if (textBlockIndex <= 0) return false;\n const nodeBefore = $cursor.node($cursor.depth - 1).child(textBlockIndex - 1);\n\n if (nodeBefore.type !== tabsType(state.schema)) {\n return false;\n }\n\n const tabsParent = findParentNodeOfTypeClosestToPos(\n state.doc.resolve($cursor.pos - 2),\n tabsType(state.schema),\n );\n\n if (!tabsParent) {\n return false;\n }\n const activePanel = findChildren(\n tabsParent.node,\n (n: Node) => n.attrs.class === tabPanelActiveClassname,\n )[0];\n\n if (dispatch) {\n const posEndOfLastLayoutCell = activePanel.pos + tabsParent.pos + activePanel.node.nodeSize;\n const tr = state.tr;\n tr.delete($cursor.before(), $cursor.after());\n tr.insert(posEndOfLastLayoutCell, $cursor.parent);\n tr.setSelection(TextSelection.create(tr.doc, posEndOfLastLayoutCell + 1));\n dispatch(tr.scrollIntoView());\n }\n\n return true;\n};\n"]}
@@ -1,4 +1,4 @@
1
- export declare const i18n: <G extends "remove" | "info" | "alert" | "tip" | "warning", S extends string>(key: G | (string extends S ? S : never), params?: {
1
+ export declare const i18n: <G extends "info" | "remove" | "alert" | "tip" | "warning", S extends string>(key: G | (string extends S ? S : never), params?: {
2
2
  [key: string]: any;
3
3
  }) => S extends G ? {
4
4
  info: string;
@@ -1,16 +1,82 @@
1
+ import { type Listener, type Receiver } from "./utils/event-emitter.js";
2
+ type MsgObj = {
3
+ msg: string;
4
+ [key: string]: unknown;
5
+ };
6
+ type ErrObj = {
7
+ error: any;
8
+ [key: string]: unknown;
9
+ };
10
+ type EventObj = {
11
+ event: string;
12
+ [key: string]: unknown;
13
+ };
14
+ export declare namespace Logger2 {
15
+ type LogData = MsgObj;
16
+ type WarnData = MsgObj;
17
+ type ErrorData = ErrObj;
18
+ type ActionData = MdEditorLogger.ActionData;
19
+ type MetricsData = MdEditorLogger.MetricsData;
20
+ type EventData = EventObj;
21
+ type ReceiverDataMap = {
22
+ log: LogData;
23
+ warn: WarnData;
24
+ error: ErrorData;
25
+ event: EventData;
26
+ action: ActionData;
27
+ metrics: MetricsData;
28
+ };
29
+ interface LogReceiver extends Receiver<ReceiverDataMap> {
30
+ }
31
+ interface LogEmitter {
32
+ /** Log a regular message */
33
+ log(msg: string, ...data: object[]): void;
34
+ /** Log a warning message */
35
+ warn(msg: string, ...data: object[]): void;
36
+ /** Log an error */
37
+ error(err: string | Error | unknown, ...data: object[]): void;
38
+ /** Log an event triggered in editor. For example, changing mode, pasting, or otherwise */
39
+ event(data: Logger2.EventData): void;
40
+ /** Log the action called in editor and its source (from toolbar, or hotkeys, etc.) */
41
+ action(data: Logger2.ActionData): void;
42
+ /** Log metric data, such as parsing or execution time */
43
+ metrics(data: Logger2.MetricsData): void;
44
+ }
45
+ interface ILogger extends Logger2.LogEmitter, Logger2.LogReceiver {
46
+ /** Create nested logger with bound parameters */
47
+ nested(params: object): ILogger;
48
+ }
49
+ }
50
+ export declare class Logger2 implements Logger2.ILogger {
51
+ #private;
52
+ log(msg: string, ...data: object[]): void;
53
+ warn(msg: string, ...data: object[]): void;
54
+ error(err: string | Error | unknown, ...data: object[]): void;
55
+ action(data: Logger2.ActionData): void;
56
+ metrics(data: Logger2.MetricsData): void;
57
+ event(data: Logger2.EventData): void;
58
+ nested(params: object): Logger2.ILogger;
59
+ on<K extends keyof Logger2.ReceiverDataMap>(type: K, listener: Listener<Logger2.ReceiverDataMap[K]>): void;
60
+ off<K extends keyof Logger2.ReceiverDataMap>(type: K, listener: Listener<Logger2.ReceiverDataMap[K]>): void;
61
+ }
1
62
  declare global {
63
+ /** @deprecated */
2
64
  namespace MdEditorLogger {
65
+ /** @deprecated */
3
66
  type MetricsData = {
4
67
  component: string;
5
68
  event: string;
6
69
  duration?: number;
7
70
  meta?: Record<string, any>;
71
+ [key: string]: any;
8
72
  };
73
+ /** @deprecated */
9
74
  interface ActionData {
10
75
  action: string;
11
76
  source: string;
12
77
  [key: string]: any;
13
78
  }
79
+ /** @deprecated */
14
80
  interface Logger {
15
81
  log(...data: any[]): void;
16
82
  info(...data: any[]): void;
@@ -19,10 +85,12 @@ declare global {
19
85
  metrics(data: MetricsData): void;
20
86
  action(data: ActionData): void;
21
87
  }
88
+ /** @deprecated */
22
89
  interface Settings extends Partial<Logger> {
23
90
  }
24
91
  }
25
92
  }
93
+ /** @deprecated */
26
94
  declare class Logger implements MdEditorLogger.Logger {
27
95
  #private;
28
96
  get log(): (...data: any[]) => void;
@@ -39,5 +107,12 @@ declare class Logger implements MdEditorLogger.Logger {
39
107
  */
40
108
  createLogger(settings: MdEditorLogger.Settings): MdEditorLogger.Logger;
41
109
  }
110
+ /** @deprecated */
42
111
  export declare const logger: Logger;
112
+ /**
113
+ * Alias for global singleton logger instance
114
+ *
115
+ * @deprecated
116
+ */
117
+ export declare const globalLogger: Logger;
43
118
  export {};
@@ -1,4 +1,84 @@
1
+ import { SafeEventEmitter } from "./utils/event-emitter.js";
2
+ export class Logger2 {
3
+ #emitter = new SafeEventEmitter();
4
+ log(msg, ...data) {
5
+ const obj = Object.assign({}, ...data);
6
+ const logData = Object.assign(obj, { msg });
7
+ this.#emitter.emit('log', logData);
8
+ }
9
+ warn(msg, ...data) {
10
+ const obj = Object.assign({}, ...data);
11
+ const warnData = Object.assign(obj, { msg });
12
+ this.#emitter.emit('warn', warnData);
13
+ }
14
+ error(err, ...data) {
15
+ const error = typeof err === 'string' ? Error(err) : err;
16
+ const obj = Object.assign({}, ...data);
17
+ const errorData = Object.assign(obj, { error });
18
+ this.#emitter.emit('error', errorData);
19
+ }
20
+ action(data) {
21
+ this.#emitter.emit('action', data);
22
+ }
23
+ metrics(data) {
24
+ this.#emitter.emit('metrics', data);
25
+ }
26
+ event(data) {
27
+ this.#emitter.emit('event', data);
28
+ }
29
+ nested(params) {
30
+ const self = this;
31
+ const paramsKey = Symbol();
32
+ const logger = {
33
+ [paramsKey]: params,
34
+ log(msg, ...data) {
35
+ if (self.#emitter.countOf('log'))
36
+ self.log(msg, this[paramsKey], ...data);
37
+ },
38
+ warn(msg, ...data) {
39
+ if (self.#emitter.countOf('warn'))
40
+ self.warn(msg, this[paramsKey], ...data);
41
+ },
42
+ error(err, ...data) {
43
+ if (self.#emitter.countOf('error'))
44
+ self.error(err, this[paramsKey], ...data);
45
+ },
46
+ action(data) {
47
+ if (self.#emitter.countOf('action'))
48
+ self.action({ ...this[paramsKey], ...data });
49
+ },
50
+ metrics(data) {
51
+ if (self.#emitter.countOf('metrics'))
52
+ self.metrics({ ...this[paramsKey], ...data });
53
+ },
54
+ event(data) {
55
+ if (self.#emitter.countOf('event'))
56
+ self.event({ ...this[paramsKey], ...data });
57
+ },
58
+ nested(nestedParams) {
59
+ return {
60
+ ...this,
61
+ [paramsKey]: {
62
+ ...this[paramsKey],
63
+ ...nestedParams,
64
+ },
65
+ };
66
+ },
67
+ on: self.on.bind(self),
68
+ off: self.off.bind(self),
69
+ };
70
+ return logger;
71
+ }
72
+ on(type, listener) {
73
+ this.#emitter.on(type, listener);
74
+ }
75
+ off(type, listener) {
76
+ this.#emitter.off(type, listener);
77
+ }
78
+ }
79
+ // MAJOR: remove old logger implementation
1
80
  const noop = () => { };
81
+ /** @deprecated */
2
82
  class Logger {
3
83
  #logger = this.createLogger({});
4
84
  get log() {
@@ -38,5 +118,12 @@ class Logger {
38
118
  };
39
119
  }
40
120
  }
121
+ /** @deprecated */
41
122
  export const logger = new Logger();
123
+ /**
124
+ * Alias for global singleton logger instance
125
+ *
126
+ * @deprecated
127
+ */
128
+ export const globalLogger = logger;
42
129
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"../../src","sources":["logger.ts"],"names":[],"mappings":"AAAA,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AA8BtB,MAAM,MAAM;IACR,OAAO,GAA0B,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAEvD,IAAI,GAAG;QACH,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;IAC5B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAChC,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,SAAS,CAAC,WAAoC,EAAE;QAC5C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,QAAiC;QAC1C,OAAO;YACH,GAAG,EAAE,QAAQ,CAAC,GAAG,IAAI,IAAI;YACzB,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI;YAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI;YAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,IAAI;YAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,IAAI;YACjC,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI;SAClC,CAAC;IACN,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC","sourcesContent":["const noop = () => {};\n\ndeclare global {\n namespace MdEditorLogger {\n type MetricsData = {\n component: string;\n event: string;\n duration?: number;\n meta?: Record<string, any>;\n };\n\n interface ActionData {\n action: string;\n source: string;\n [key: string]: any;\n }\n\n interface Logger {\n log(...data: any[]): void;\n info(...data: any[]): void;\n error(...data: any[]): void;\n warn(...data: any[]): void;\n metrics(data: MetricsData): void;\n action(data: ActionData): void;\n }\n\n interface Settings extends Partial<Logger> {}\n }\n}\n\nclass Logger implements MdEditorLogger.Logger {\n #logger: MdEditorLogger.Logger = this.createLogger({});\n\n get log() {\n return this.#logger.log;\n }\n\n get info() {\n return this.#logger.info;\n }\n\n get error() {\n return this.#logger.error;\n }\n\n get warn() {\n return this.#logger.warn;\n }\n\n get metrics() {\n return this.#logger.metrics;\n }\n\n get action() {\n return this.#logger.action;\n }\n\n setLogger(settings: MdEditorLogger.Settings = {}) {\n this.#logger = this.createLogger(settings);\n }\n\n /**\n * @inner\n *\n * To override the default logger, use setLogger\n */\n createLogger(settings: MdEditorLogger.Settings): MdEditorLogger.Logger {\n return {\n log: settings.log ?? noop,\n info: settings.info ?? noop,\n warn: settings.warn ?? noop,\n error: settings.error ?? noop,\n metrics: settings.metrics ?? noop,\n action: settings.action ?? noop,\n };\n }\n}\n\nexport const logger = new Logger();\n"]}
1
+ {"version":3,"file":"logger.js","sourceRoot":"../../src","sources":["logger.ts"],"names":[],"mappings":"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","sourcesContent":["import {type Listener, type Receiver, SafeEventEmitter} from './utils/event-emitter';\n\ntype MsgObj = {\n msg: string;\n [key: string]: unknown;\n};\n\ntype ErrObj = {\n error: any;\n [key: string]: unknown;\n};\n\ntype EventObj = {\n event: string;\n [key: string]: unknown;\n};\n\n// MAJOR: rename Logger2 to Logger (namespace and class)\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace Logger2 {\n export type LogData = MsgObj;\n export type WarnData = MsgObj;\n export type ErrorData = ErrObj;\n export type ActionData = MdEditorLogger.ActionData;\n export type MetricsData = MdEditorLogger.MetricsData;\n export type EventData = EventObj;\n\n export type ReceiverDataMap = {\n log: LogData;\n warn: WarnData;\n error: ErrorData;\n event: EventData;\n action: ActionData;\n metrics: MetricsData;\n };\n\n export interface LogReceiver extends Receiver<ReceiverDataMap> {}\n\n export interface LogEmitter {\n /** Log a regular message */\n log(msg: string, ...data: object[]): void;\n /** Log a warning message */\n warn(msg: string, ...data: object[]): void;\n /** Log an error */\n error(err: string | Error | unknown, ...data: object[]): void;\n /** Log an event triggered in editor. For example, changing mode, pasting, or otherwise */\n event(data: Logger2.EventData): void;\n /** Log the action called in editor and its source (from toolbar, or hotkeys, etc.) */\n action(data: Logger2.ActionData): void;\n /** Log metric data, such as parsing or execution time */\n metrics(data: Logger2.MetricsData): void;\n }\n\n export interface ILogger extends Logger2.LogEmitter, Logger2.LogReceiver {\n /** Create nested logger with bound parameters */\n nested(params: object): ILogger;\n }\n}\n\nexport class Logger2 implements Logger2.ILogger {\n readonly #emitter = new SafeEventEmitter<Logger2.ReceiverDataMap>();\n\n log(msg: string, ...data: object[]): void {\n const obj: object = Object.assign({}, ...data);\n const logData = Object.assign(obj, {msg});\n this.#emitter.emit('log', logData);\n }\n\n warn(msg: string, ...data: object[]): void {\n const obj: object = Object.assign({}, ...data);\n const warnData = Object.assign(obj, {msg});\n this.#emitter.emit('warn', warnData);\n }\n\n error(err: string | Error | unknown, ...data: object[]): void {\n const error = typeof err === 'string' ? Error(err) : err;\n const obj: object = Object.assign({}, ...data);\n const errorData = Object.assign(obj, {error});\n this.#emitter.emit('error', errorData);\n }\n\n action(data: Logger2.ActionData): void {\n this.#emitter.emit('action', data);\n }\n\n metrics(data: Logger2.MetricsData): void {\n this.#emitter.emit('metrics', data);\n }\n\n event(data: Logger2.EventData): void {\n this.#emitter.emit('event', data);\n }\n\n nested(params: object): Logger2.ILogger {\n const self = this;\n const paramsKey = Symbol();\n\n const logger: Logger2.ILogger & {[paramsKey]: object} = {\n [paramsKey]: params,\n log(msg, ...data) {\n if (self.#emitter.countOf('log')) self.log(msg, this[paramsKey], ...data);\n },\n warn(msg, ...data) {\n if (self.#emitter.countOf('warn')) self.warn(msg, this[paramsKey], ...data);\n },\n error(err, ...data) {\n if (self.#emitter.countOf('error')) self.error(err, this[paramsKey], ...data);\n },\n action(data) {\n if (self.#emitter.countOf('action')) self.action({...this[paramsKey], ...data});\n },\n metrics(data) {\n if (self.#emitter.countOf('metrics')) self.metrics({...this[paramsKey], ...data});\n },\n event(data) {\n if (self.#emitter.countOf('event')) self.event({...this[paramsKey], ...data});\n },\n nested(nestedParams) {\n return {\n ...this,\n [paramsKey]: {\n ...this[paramsKey],\n ...nestedParams,\n },\n };\n },\n on: self.on.bind(self),\n off: self.off.bind(self),\n };\n\n return logger;\n }\n\n on<K extends keyof Logger2.ReceiverDataMap>(\n type: K,\n listener: Listener<Logger2.ReceiverDataMap[K]>,\n ): void {\n this.#emitter.on(type, listener);\n }\n\n off<K extends keyof Logger2.ReceiverDataMap>(\n type: K,\n listener: Listener<Logger2.ReceiverDataMap[K]>,\n ): void {\n this.#emitter.off(type, listener);\n }\n}\n\n// MAJOR: remove old logger implementation\n\nconst noop = () => {};\n\ndeclare global {\n /** @deprecated */\n namespace MdEditorLogger {\n /** @deprecated */\n type MetricsData = {\n component: string;\n event: string;\n duration?: number;\n meta?: Record<string, any>;\n [key: string]: any;\n };\n\n /** @deprecated */\n interface ActionData {\n action: string;\n source: string;\n [key: string]: any;\n }\n\n /** @deprecated */\n interface Logger {\n log(...data: any[]): void;\n info(...data: any[]): void;\n error(...data: any[]): void;\n warn(...data: any[]): void;\n metrics(data: MetricsData): void;\n action(data: ActionData): void;\n }\n\n /** @deprecated */\n interface Settings extends Partial<Logger> {}\n }\n}\n\n/** @deprecated */\nclass Logger implements MdEditorLogger.Logger {\n #logger: MdEditorLogger.Logger = this.createLogger({});\n\n get log() {\n return this.#logger.log;\n }\n\n get info() {\n return this.#logger.info;\n }\n\n get error() {\n return this.#logger.error;\n }\n\n get warn() {\n return this.#logger.warn;\n }\n\n get metrics() {\n return this.#logger.metrics;\n }\n\n get action() {\n return this.#logger.action;\n }\n\n setLogger(settings: MdEditorLogger.Settings = {}) {\n this.#logger = this.createLogger(settings);\n }\n\n /**\n * @inner\n *\n * To override the default logger, use setLogger\n */\n createLogger(settings: MdEditorLogger.Settings): MdEditorLogger.Logger {\n return {\n log: settings.log ?? noop,\n info: settings.info ?? noop,\n warn: settings.warn ?? noop,\n error: settings.error ?? noop,\n metrics: settings.metrics ?? noop,\n action: settings.action ?? noop,\n };\n }\n}\n\n/** @deprecated */\nexport const logger = new Logger();\n/**\n * Alias for global singleton logger instance\n *\n * @deprecated\n */\nexport const globalLogger = logger;\n"]}
@@ -1,5 +1,5 @@
1
1
  import emoji from 'markdown-it-emoji';
2
- import bare from 'markdown-it-emoji/bare';
3
- import light from 'markdown-it-emoji/light';
2
+ import bare from 'markdown-it-emoji/bare.js';
3
+ import light from 'markdown-it-emoji/light.js';
4
4
  export default emoji;
5
5
  export { bare, light };
@@ -1,6 +1,6 @@
1
1
  import emoji from 'markdown-it-emoji';
2
- import bare from 'markdown-it-emoji/bare';
3
- import light from 'markdown-it-emoji/light';
2
+ import bare from 'markdown-it-emoji/bare.js';
3
+ import light from 'markdown-it-emoji/light.js';
4
4
  export default emoji;
5
5
  export { bare, light };
6
6
  //# sourceMappingURL=emoji.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"emoji.js","sourceRoot":"../../../src","sources":["markdown-it/emoji.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,mBAAmB,CAAC;AACtC,OAAO,IAAI,MAAM,wBAAwB,CAAC;AAC1C,OAAO,KAAK,MAAM,yBAAyB,CAAC;AAE5C,eAAe,KAAK,CAAC;AAErB,OAAO,EAAC,IAAI,EAAE,KAAK,EAAC,CAAC","sourcesContent":["import emoji from 'markdown-it-emoji';\nimport bare from 'markdown-it-emoji/bare';\nimport light from 'markdown-it-emoji/light';\n\nexport default emoji;\n\nexport {bare, light};\n"]}
1
+ {"version":3,"file":"emoji.js","sourceRoot":"../../../src","sources":["markdown-it/emoji.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,mBAAmB,CAAC;AACtC,OAAO,IAAI,MAAM,2BAA2B,CAAC;AAC7C,OAAO,KAAK,MAAM,4BAA4B,CAAC;AAE/C,eAAe,KAAK,CAAC;AAErB,OAAO,EAAC,IAAI,EAAE,KAAK,EAAC,CAAC","sourcesContent":["import emoji from 'markdown-it-emoji';\nimport bare from 'markdown-it-emoji/bare.js';\nimport light from 'markdown-it-emoji/light.js';\n\nexport default emoji;\n\nexport {bare, light};\n"]}
@@ -4,6 +4,7 @@ import { EditorView, type EditorViewConfig, type KeyBinding, placeholder } from
4
4
  import type { ParseInsertedUrlAsImage } from "../../bundle/index.js";
5
5
  import type { EventMap } from "../../bundle/Editor.js";
6
6
  import type { ReactRenderStorage } from "../../extensions/index.js";
7
+ import { type Logger2 } from "../../logger.js";
7
8
  import type { Receiver } from "../../utils/index.js";
8
9
  import type { DirectiveSyntaxContext } from "../../utils/directive.js";
9
10
  import { type FileUploadHandler } from "./files-upload-facet.js";
@@ -13,6 +14,7 @@ type Autocompletion = Parameters<typeof autocompletion>[0];
13
14
  export type CreateCodemirrorParams = {
14
15
  doc: EditorViewConfig['doc'];
15
16
  placeholder: Parameters<typeof placeholder>[0];
17
+ logger: Logger2.ILogger;
16
18
  onCancel: () => void;
17
19
  onSubmit: () => void;
18
20
  onChange: () => void;
@@ -3,7 +3,7 @@ import { defaultKeymap, history, historyKeymap, indentWithTab, insertNewlineKeep
3
3
  import { syntaxHighlighting } from '@codemirror/language';
4
4
  import { EditorView, keymap, placeholder, } from '@codemirror/view';
5
5
  import { ActionName } from "../../bundle/config/action-names.js";
6
- import { logger } from "../../logger.js";
6
+ import { globalLogger } from "../../logger.js";
7
7
  import { Action as A, formatter as f } from "../../shortcuts/index.js";
8
8
  import { DataTransferType, shouldSkipHtmlConversion } from "../../utils/clipboard.js";
9
9
  import { insertEmptyRow, insertImages, insertLink, toH1, toH2, toH3, toH4, toH5, toH6, toggleBold, toggleItalic, toggleStrikethrough, toggleUnderline, wrapToCodeBlock, wrapToInlineCode, wrapToYfmCut, wrapToYfmNote, } from "../commands/index.js";
@@ -11,18 +11,19 @@ import { DirectiveSyntaxFacet } from "./directive-facet.js";
11
11
  import { FileUploadHandlerFacet } from "./files-upload-facet.js";
12
12
  import { gravityHighlightStyle, gravityTheme } from "./gravity.js";
13
13
  import { MarkdownConverter } from "./html-to-markdown/converters.js";
14
+ import { LoggerFacet } from "./logger-facet.js";
14
15
  import { PairingCharactersExtension } from "./pairing-chars.js";
15
16
  import { ReactRendererFacet } from "./react-facet.js";
16
17
  import { SearchPanelPlugin } from "./search-plugin/plugin.js";
17
18
  import { smartReindent } from "./smart-reindent/index.js";
18
19
  import { yfmLang } from "./yfm.js";
19
20
  export function createCodemirror(params) {
20
- const { doc, reactRenderer, onCancel, onScroll, onSubmit, onChange, onDocChange, disabledExtensions = {}, keymaps = [], receiver, yfmLangOptions, extensions: extraExtensions, placeholder: placeholderContent, autocompletion: autocompletionConfig, parseHtmlOnPaste, parseInsertedUrlAsImage, directiveSyntax, preserveEmptyRows, } = params;
21
+ const { logger, doc, reactRenderer, onCancel, onScroll, onSubmit, onChange, onDocChange, disabledExtensions = {}, keymaps = [], receiver, yfmLangOptions, extensions: extraExtensions, placeholder: placeholderContent, autocompletion: autocompletionConfig, parseHtmlOnPaste, parseInsertedUrlAsImage, directiveSyntax, preserveEmptyRows, } = params;
21
22
  const extensions = [gravityTheme, placeholder(placeholderContent)];
22
23
  if (!disabledExtensions.history) {
23
24
  extensions.push(history());
24
25
  }
25
- extensions.push(syntaxHighlighting(gravityHighlightStyle), keymap.of([
26
+ extensions.push(syntaxHighlighting(gravityHighlightStyle), LoggerFacet.of(logger), keymap.of([
26
27
  { key: f.toCM(A.Bold), run: withLogger(ActionName.bold, toggleBold) },
27
28
  { key: f.toCM(A.Italic), run: withLogger(ActionName.italic, toggleItalic) },
28
29
  { key: f.toCM(A.Strike), run: withLogger(ActionName.strike, toggleStrikethrough) },
@@ -70,6 +71,10 @@ export function createCodemirror(params) {
70
71
  paste(event, editor) {
71
72
  if (!event.clipboardData)
72
73
  return;
74
+ const pasteLogger = logger.nested({
75
+ domEvent: 'paste',
76
+ dataTypes: event.clipboardData.types,
77
+ });
73
78
  const { from } = editor.state.selection.main;
74
79
  const line = editor.state.doc.lineAt(from);
75
80
  const currentLine = line.text;
@@ -78,6 +83,7 @@ export function createCodemirror(params) {
78
83
  const yfmContent = event.clipboardData.getData(DataTransferType.Yfm);
79
84
  if (yfmContent) {
80
85
  event.preventDefault();
86
+ logger.event({ event: 'paste-markup' });
81
87
  const reindentedYfmContent = smartReindent(yfmContent, currentLine);
82
88
  editor.dispatch(editor.state.replaceSelection(reindentedYfmContent));
83
89
  return;
@@ -100,10 +106,12 @@ export function createCodemirror(params) {
100
106
  // especially with invalid HTML or weird DOM parsing errors.
101
107
  // If something goes wrong, I just want to fall back to the "default pasting"
102
108
  // rather than break the entire experience for the user.
103
- logger.error(e);
109
+ pasteLogger.error(e, { event: 'parse-html-to-md' });
110
+ globalLogger.error(e);
104
111
  }
105
112
  if (parsedMarkdownMarkup !== undefined) {
106
113
  event.preventDefault();
114
+ logger.event({ event: 'paste-parsed-html' });
107
115
  const reindentedHtmlContent = smartReindent(parsedMarkdownMarkup, currentLine);
108
116
  editor.dispatch(editor.state.replaceSelection(reindentedHtmlContent));
109
117
  return;
@@ -113,6 +121,7 @@ export function createCodemirror(params) {
113
121
  const { imageUrl, title } = parseInsertedUrlAsImage(event.clipboardData.getData(DataTransferType.Text) ?? '') || {};
114
122
  if (imageUrl) {
115
123
  event.preventDefault();
124
+ logger.event({ event: 'paste-url-as-image' });
116
125
  insertImages([
117
126
  {
118
127
  url: imageUrl,
@@ -164,7 +173,9 @@ export function createCodemirror(params) {
164
173
  }
165
174
  export function withLogger(action, command) {
166
175
  return (...args) => {
167
- logger.action({ mode: 'markup', source: 'keymap', action });
176
+ const { state } = args[0];
177
+ state.facet(LoggerFacet).action({ source: 'keymap', action });
178
+ globalLogger.action({ mode: 'markup', source: 'keymap', action });
168
179
  return command(...args);
169
180
  };
170
181
  }
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"../../../../src","sources":["markup/codemirror/create.ts"],"names":[],"mappings":"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","sourcesContent":["import {autocompletion} from '@codemirror/autocomplete';\nimport {\n defaultKeymap,\n history,\n historyKeymap,\n indentWithTab,\n insertNewlineKeepIndent,\n insertTab,\n} from '@codemirror/commands';\nimport {syntaxHighlighting} from '@codemirror/language';\nimport type {Extension, StateCommand} from '@codemirror/state';\nimport {\n EditorView,\n type EditorViewConfig,\n type KeyBinding,\n keymap,\n placeholder,\n} from '@codemirror/view';\n\nimport type {ParseInsertedUrlAsImage} from '../../bundle';\nimport type {EventMap} from '../../bundle/Editor';\nimport {ActionName} from '../../bundle/config/action-names';\nimport type {ReactRenderStorage} from '../../extensions';\nimport {logger} from '../../logger';\nimport {Action as A, formatter as f} from '../../shortcuts';\nimport type {Receiver} from '../../utils';\nimport {DataTransferType, shouldSkipHtmlConversion} from '../../utils/clipboard';\nimport type {DirectiveSyntaxContext} from '../../utils/directive';\nimport {\n insertEmptyRow,\n insertImages,\n insertLink,\n toH1,\n toH2,\n toH3,\n toH4,\n toH5,\n toH6,\n toggleBold,\n toggleItalic,\n toggleStrikethrough,\n toggleUnderline,\n wrapToCodeBlock,\n wrapToInlineCode,\n wrapToYfmCut,\n wrapToYfmNote,\n} from '../commands';\n\nimport {DirectiveSyntaxFacet} from './directive-facet';\nimport {type FileUploadHandler, FileUploadHandlerFacet} from './files-upload-facet';\nimport {gravityHighlightStyle, gravityTheme} from './gravity';\nimport {MarkdownConverter} from './html-to-markdown/converters';\nimport {PairingCharactersExtension} from './pairing-chars';\nimport {ReactRendererFacet} from './react-facet';\nimport {SearchPanelPlugin} from './search-plugin/plugin';\nimport {smartReindent} from './smart-reindent';\nimport {type YfmLangOptions, yfmLang} from './yfm';\n\nexport type {YfmLangOptions};\n\ntype Autocompletion = Parameters<typeof autocompletion>[0];\n\nexport type CreateCodemirrorParams = {\n doc: EditorViewConfig['doc'];\n placeholder: Parameters<typeof placeholder>[0];\n onCancel: () => void;\n onSubmit: () => void;\n onChange: () => void;\n onDocChange: () => void;\n onScroll: (event: Event) => void;\n reactRenderer: ReactRenderStorage;\n uploadHandler?: FileUploadHandler;\n parseHtmlOnPaste?: boolean;\n parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n needImageDimensions?: boolean;\n enableNewImageSizeCalculation?: boolean;\n extensions?: Extension[];\n disabledExtensions?: {\n history?: boolean;\n };\n keymaps?: readonly KeyBinding[];\n receiver?: Receiver<EventMap>;\n yfmLangOptions?: YfmLangOptions;\n autocompletion?: Autocompletion;\n directiveSyntax: DirectiveSyntaxContext;\n preserveEmptyRows: boolean;\n};\n\nexport function createCodemirror(params: CreateCodemirrorParams) {\n const {\n doc,\n reactRenderer,\n onCancel,\n onScroll,\n onSubmit,\n onChange,\n onDocChange,\n disabledExtensions = {},\n keymaps = [],\n receiver,\n yfmLangOptions,\n extensions: extraExtensions,\n placeholder: placeholderContent,\n autocompletion: autocompletionConfig,\n parseHtmlOnPaste,\n parseInsertedUrlAsImage,\n directiveSyntax,\n preserveEmptyRows,\n } = params;\n\n const extensions: Extension[] = [gravityTheme, placeholder(placeholderContent)];\n\n if (!disabledExtensions.history) {\n extensions.push(history());\n }\n\n extensions.push(\n syntaxHighlighting(gravityHighlightStyle),\n keymap.of([\n {key: f.toCM(A.Bold)!, run: withLogger(ActionName.bold, toggleBold)},\n {key: f.toCM(A.Italic)!, run: withLogger(ActionName.italic, toggleItalic)},\n {key: f.toCM(A.Strike)!, run: withLogger(ActionName.strike, toggleStrikethrough)},\n {key: f.toCM(A.Underline)!, run: withLogger(ActionName.underline, toggleUnderline)},\n {key: f.toCM(A.Link)!, run: withLogger(ActionName.link, insertLink)},\n {key: f.toCM(A.Heading1)!, run: withLogger(ActionName.heading1, toH1)},\n {key: f.toCM(A.Heading2)!, run: withLogger(ActionName.heading2, toH2)},\n {key: f.toCM(A.Heading3)!, run: withLogger(ActionName.heading3, toH3)},\n {key: f.toCM(A.Heading4)!, run: withLogger(ActionName.heading4, toH4)},\n {key: f.toCM(A.Heading5)!, run: withLogger(ActionName.heading5, toH5)},\n {key: f.toCM(A.Heading6)!, run: withLogger(ActionName.heading6, toH6)},\n {key: f.toCM(A.Code)!, run: withLogger(ActionName.code_inline, wrapToInlineCode)},\n {key: f.toCM(A.CodeBlock)!, run: withLogger(ActionName.code_block, wrapToCodeBlock)},\n {key: f.toCM(A.Cut)!, run: withLogger(ActionName.yfm_cut, wrapToYfmCut)},\n {key: f.toCM(A.Note)!, run: withLogger(ActionName.yfm_note, wrapToYfmNote)},\n {\n key: f.toCM(A.Cancel)!,\n preventDefault: true,\n run: () => {\n onCancel();\n return true;\n },\n },\n {\n key: f.toCM(A.Submit)!,\n preventDefault: true,\n run: () => {\n onSubmit();\n return true;\n },\n },\n {key: 'Tab', preventDefault: true, run: insertTab},\n {\n key: 'Enter',\n shift: insertNewlineKeepIndent,\n },\n indentWithTab,\n ...defaultKeymap,\n ...(disabledExtensions.history ? [] : historyKeymap),\n ...keymaps,\n ]),\n autocompletion(autocompletionConfig),\n yfmLang(yfmLangOptions),\n ReactRendererFacet.of(reactRenderer),\n DirectiveSyntaxFacet.of(directiveSyntax),\n PairingCharactersExtension,\n EditorView.lineWrapping,\n EditorView.contentAttributes.of({spellcheck: 'true'}),\n EditorView.domEventHandlers({\n scroll(event) {\n onScroll(event);\n },\n paste(event, editor) {\n if (!event.clipboardData) return;\n\n const {from} = editor.state.selection.main;\n const line = editor.state.doc.lineAt(from);\n const currentLine = line.text;\n\n // if clipboard contains YFM content - avoid any meddling with pasted content\n // since text/yfm will contain valid markdown\n const yfmContent = event.clipboardData.getData(DataTransferType.Yfm);\n if (yfmContent) {\n event.preventDefault();\n const reindentedYfmContent = smartReindent(yfmContent, currentLine);\n editor.dispatch(editor.state.replaceSelection(reindentedYfmContent));\n return;\n }\n\n // checking if a copy buffer content is suitable for convertion\n const shouldSkipHtml = shouldSkipHtmlConversion(event.clipboardData);\n\n // if we have text/html inside copy/paste buffer\n const htmlContent = event.clipboardData.getData(DataTransferType.Html);\n // if we pasting markdown from VsCode we need skip html transformation\n if (htmlContent && parseHtmlOnPaste && !shouldSkipHtml) {\n let parsedMarkdownMarkup: string | undefined;\n try {\n const parser = new DOMParser();\n const htmlDoc = parser.parseFromString(htmlContent, 'text/html');\n\n const converter = new MarkdownConverter();\n parsedMarkdownMarkup = converter.processNode(htmlDoc.body).trim();\n } catch (e) {\n // The code is pretty new and there might be random issues we haven't caught yet,\n // especially with invalid HTML or weird DOM parsing errors.\n // If something goes wrong, I just want to fall back to the \"default pasting\"\n // rather than break the entire experience for the user.\n logger.error(e);\n }\n\n if (parsedMarkdownMarkup !== undefined) {\n event.preventDefault();\n const reindentedHtmlContent = smartReindent(\n parsedMarkdownMarkup,\n currentLine,\n );\n editor.dispatch(editor.state.replaceSelection(reindentedHtmlContent));\n return;\n }\n }\n\n if (parseInsertedUrlAsImage) {\n const {imageUrl, title} =\n parseInsertedUrlAsImage(\n event.clipboardData.getData(DataTransferType.Text) ?? '',\n ) || {};\n\n if (imageUrl) {\n event.preventDefault();\n\n insertImages([\n {\n url: imageUrl,\n alt: title,\n title,\n },\n ])(editor);\n }\n }\n\n // Reindenting pasted plain text\n const pastedText = event.clipboardData.getData(DataTransferType.Text);\n const reindentedText = smartReindent(pastedText, currentLine);\n // but only if there is a need for reindentation\n if (pastedText !== reindentedText) {\n editor.dispatch(editor.state.replaceSelection(reindentedText));\n event.preventDefault();\n }\n },\n }),\n SearchPanelPlugin({\n anchorSelector: '.g-md-search-anchor',\n receiver,\n }),\n );\n\n if (preserveEmptyRows) {\n extensions.push(\n keymap.of([\n {key: f.toCM(A.EmptyRow)!, run: withLogger(ActionName.emptyRow, insertEmptyRow)},\n ]),\n );\n }\n\n if (params.uploadHandler) {\n extensions.push(\n FileUploadHandlerFacet.of({\n fn: params.uploadHandler,\n imageWithDimensions: params.needImageDimensions,\n enableNewImageSizeCalculation: params.enableNewImageSizeCalculation,\n }),\n );\n }\n\n if (extraExtensions) {\n extensions.push(...extraExtensions);\n }\n\n return new EditorView({\n doc,\n extensions,\n dispatchTransactions: (trs, view) => {\n view.update(trs);\n onChange();\n if (trs.some((tr) => tr.docChanged)) {\n onDocChange();\n }\n },\n });\n}\n\nexport function withLogger(action: string, command: StateCommand): StateCommand {\n return (...args) => {\n logger.action({mode: 'markup', source: 'keymap', action});\n return command(...args);\n };\n}\n"]}
1
+ {"version":3,"file":"create.js","sourceRoot":"../../../../src","sources":["markup/codemirror/create.ts"],"names":[],"mappings":"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","sourcesContent":["import {autocompletion} from '@codemirror/autocomplete';\nimport {\n defaultKeymap,\n history,\n historyKeymap,\n indentWithTab,\n insertNewlineKeepIndent,\n insertTab,\n} from '@codemirror/commands';\nimport {syntaxHighlighting} from '@codemirror/language';\nimport type {Extension, StateCommand} from '@codemirror/state';\nimport {\n EditorView,\n type EditorViewConfig,\n type KeyBinding,\n keymap,\n placeholder,\n} from '@codemirror/view';\n\nimport type {ParseInsertedUrlAsImage} from '../../bundle';\nimport type {EventMap} from '../../bundle/Editor';\nimport {ActionName} from '../../bundle/config/action-names';\nimport type {ReactRenderStorage} from '../../extensions';\nimport {type Logger2, globalLogger} from '../../logger';\nimport {Action as A, formatter as f} from '../../shortcuts';\nimport type {Receiver} from '../../utils';\nimport {DataTransferType, shouldSkipHtmlConversion} from '../../utils/clipboard';\nimport type {DirectiveSyntaxContext} from '../../utils/directive';\nimport {\n insertEmptyRow,\n insertImages,\n insertLink,\n toH1,\n toH2,\n toH3,\n toH4,\n toH5,\n toH6,\n toggleBold,\n toggleItalic,\n toggleStrikethrough,\n toggleUnderline,\n wrapToCodeBlock,\n wrapToInlineCode,\n wrapToYfmCut,\n wrapToYfmNote,\n} from '../commands';\n\nimport {DirectiveSyntaxFacet} from './directive-facet';\nimport {type FileUploadHandler, FileUploadHandlerFacet} from './files-upload-facet';\nimport {gravityHighlightStyle, gravityTheme} from './gravity';\nimport {MarkdownConverter} from './html-to-markdown/converters';\nimport {LoggerFacet} from './logger-facet';\nimport {PairingCharactersExtension} from './pairing-chars';\nimport {ReactRendererFacet} from './react-facet';\nimport {SearchPanelPlugin} from './search-plugin/plugin';\nimport {smartReindent} from './smart-reindent';\nimport {type YfmLangOptions, yfmLang} from './yfm';\n\nexport type {YfmLangOptions};\n\ntype Autocompletion = Parameters<typeof autocompletion>[0];\n\nexport type CreateCodemirrorParams = {\n doc: EditorViewConfig['doc'];\n placeholder: Parameters<typeof placeholder>[0];\n logger: Logger2.ILogger;\n onCancel: () => void;\n onSubmit: () => void;\n onChange: () => void;\n onDocChange: () => void;\n onScroll: (event: Event) => void;\n reactRenderer: ReactRenderStorage;\n uploadHandler?: FileUploadHandler;\n parseHtmlOnPaste?: boolean;\n parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n needImageDimensions?: boolean;\n enableNewImageSizeCalculation?: boolean;\n extensions?: Extension[];\n disabledExtensions?: {\n history?: boolean;\n };\n keymaps?: readonly KeyBinding[];\n receiver?: Receiver<EventMap>;\n yfmLangOptions?: YfmLangOptions;\n autocompletion?: Autocompletion;\n directiveSyntax: DirectiveSyntaxContext;\n preserveEmptyRows: boolean;\n};\n\nexport function createCodemirror(params: CreateCodemirrorParams) {\n const {\n logger,\n doc,\n reactRenderer,\n onCancel,\n onScroll,\n onSubmit,\n onChange,\n onDocChange,\n disabledExtensions = {},\n keymaps = [],\n receiver,\n yfmLangOptions,\n extensions: extraExtensions,\n placeholder: placeholderContent,\n autocompletion: autocompletionConfig,\n parseHtmlOnPaste,\n parseInsertedUrlAsImage,\n directiveSyntax,\n preserveEmptyRows,\n } = params;\n\n const extensions: Extension[] = [gravityTheme, placeholder(placeholderContent)];\n\n if (!disabledExtensions.history) {\n extensions.push(history());\n }\n\n extensions.push(\n syntaxHighlighting(gravityHighlightStyle),\n LoggerFacet.of(logger),\n keymap.of([\n {key: f.toCM(A.Bold)!, run: withLogger(ActionName.bold, toggleBold)},\n {key: f.toCM(A.Italic)!, run: withLogger(ActionName.italic, toggleItalic)},\n {key: f.toCM(A.Strike)!, run: withLogger(ActionName.strike, toggleStrikethrough)},\n {key: f.toCM(A.Underline)!, run: withLogger(ActionName.underline, toggleUnderline)},\n {key: f.toCM(A.Link)!, run: withLogger(ActionName.link, insertLink)},\n {key: f.toCM(A.Heading1)!, run: withLogger(ActionName.heading1, toH1)},\n {key: f.toCM(A.Heading2)!, run: withLogger(ActionName.heading2, toH2)},\n {key: f.toCM(A.Heading3)!, run: withLogger(ActionName.heading3, toH3)},\n {key: f.toCM(A.Heading4)!, run: withLogger(ActionName.heading4, toH4)},\n {key: f.toCM(A.Heading5)!, run: withLogger(ActionName.heading5, toH5)},\n {key: f.toCM(A.Heading6)!, run: withLogger(ActionName.heading6, toH6)},\n {key: f.toCM(A.Code)!, run: withLogger(ActionName.code_inline, wrapToInlineCode)},\n {key: f.toCM(A.CodeBlock)!, run: withLogger(ActionName.code_block, wrapToCodeBlock)},\n {key: f.toCM(A.Cut)!, run: withLogger(ActionName.yfm_cut, wrapToYfmCut)},\n {key: f.toCM(A.Note)!, run: withLogger(ActionName.yfm_note, wrapToYfmNote)},\n {\n key: f.toCM(A.Cancel)!,\n preventDefault: true,\n run: () => {\n onCancel();\n return true;\n },\n },\n {\n key: f.toCM(A.Submit)!,\n preventDefault: true,\n run: () => {\n onSubmit();\n return true;\n },\n },\n {key: 'Tab', preventDefault: true, run: insertTab},\n {\n key: 'Enter',\n shift: insertNewlineKeepIndent,\n },\n indentWithTab,\n ...defaultKeymap,\n ...(disabledExtensions.history ? [] : historyKeymap),\n ...keymaps,\n ]),\n autocompletion(autocompletionConfig),\n yfmLang(yfmLangOptions),\n ReactRendererFacet.of(reactRenderer),\n DirectiveSyntaxFacet.of(directiveSyntax),\n PairingCharactersExtension,\n EditorView.lineWrapping,\n EditorView.contentAttributes.of({spellcheck: 'true'}),\n EditorView.domEventHandlers({\n scroll(event) {\n onScroll(event);\n },\n paste(event, editor) {\n if (!event.clipboardData) return;\n\n const pasteLogger = logger.nested({\n domEvent: 'paste',\n dataTypes: event.clipboardData.types,\n });\n\n const {from} = editor.state.selection.main;\n const line = editor.state.doc.lineAt(from);\n const currentLine = line.text;\n\n // if clipboard contains YFM content - avoid any meddling with pasted content\n // since text/yfm will contain valid markdown\n const yfmContent = event.clipboardData.getData(DataTransferType.Yfm);\n if (yfmContent) {\n event.preventDefault();\n logger.event({event: 'paste-markup'});\n const reindentedYfmContent = smartReindent(yfmContent, currentLine);\n editor.dispatch(editor.state.replaceSelection(reindentedYfmContent));\n return;\n }\n\n // checking if a copy buffer content is suitable for convertion\n const shouldSkipHtml = shouldSkipHtmlConversion(event.clipboardData);\n\n // if we have text/html inside copy/paste buffer\n const htmlContent = event.clipboardData.getData(DataTransferType.Html);\n // if we pasting markdown from VsCode we need skip html transformation\n if (htmlContent && parseHtmlOnPaste && !shouldSkipHtml) {\n let parsedMarkdownMarkup: string | undefined;\n try {\n const parser = new DOMParser();\n const htmlDoc = parser.parseFromString(htmlContent, 'text/html');\n\n const converter = new MarkdownConverter();\n parsedMarkdownMarkup = converter.processNode(htmlDoc.body).trim();\n } catch (e) {\n // The code is pretty new and there might be random issues we haven't caught yet,\n // especially with invalid HTML or weird DOM parsing errors.\n // If something goes wrong, I just want to fall back to the \"default pasting\"\n // rather than break the entire experience for the user.\n pasteLogger.error(e, {event: 'parse-html-to-md'});\n globalLogger.error(e);\n }\n\n if (parsedMarkdownMarkup !== undefined) {\n event.preventDefault();\n logger.event({event: 'paste-parsed-html'});\n const reindentedHtmlContent = smartReindent(\n parsedMarkdownMarkup,\n currentLine,\n );\n editor.dispatch(editor.state.replaceSelection(reindentedHtmlContent));\n return;\n }\n }\n\n if (parseInsertedUrlAsImage) {\n const {imageUrl, title} =\n parseInsertedUrlAsImage(\n event.clipboardData.getData(DataTransferType.Text) ?? '',\n ) || {};\n\n if (imageUrl) {\n event.preventDefault();\n logger.event({event: 'paste-url-as-image'});\n insertImages([\n {\n url: imageUrl,\n alt: title,\n title,\n },\n ])(editor);\n }\n }\n\n // Reindenting pasted plain text\n const pastedText = event.clipboardData.getData(DataTransferType.Text);\n const reindentedText = smartReindent(pastedText, currentLine);\n // but only if there is a need for reindentation\n if (pastedText !== reindentedText) {\n editor.dispatch(editor.state.replaceSelection(reindentedText));\n event.preventDefault();\n }\n },\n }),\n SearchPanelPlugin({\n anchorSelector: '.g-md-search-anchor',\n receiver,\n }),\n );\n\n if (preserveEmptyRows) {\n extensions.push(\n keymap.of([\n {key: f.toCM(A.EmptyRow)!, run: withLogger(ActionName.emptyRow, insertEmptyRow)},\n ]),\n );\n }\n\n if (params.uploadHandler) {\n extensions.push(\n FileUploadHandlerFacet.of({\n fn: params.uploadHandler,\n imageWithDimensions: params.needImageDimensions,\n enableNewImageSizeCalculation: params.enableNewImageSizeCalculation,\n }),\n );\n }\n\n if (extraExtensions) {\n extensions.push(...extraExtensions);\n }\n\n return new EditorView({\n doc,\n extensions,\n dispatchTransactions: (trs, view) => {\n view.update(trs);\n onChange();\n if (trs.some((tr) => tr.docChanged)) {\n onDocChange();\n }\n },\n });\n}\n\nexport function withLogger(action: string, command: StateCommand): StateCommand {\n return (...args) => {\n const {state} = args[0];\n state.facet(LoggerFacet).action({source: 'keymap', action});\n globalLogger.action({mode: 'markup', source: 'keymap', action});\n return command(...args);\n };\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  import { Decoration, ViewPlugin, WidgetType, } from '@codemirror/view';
2
2
  import { getProportionalSize } from "../../../utils/index.js";
3
3
  import { FileUploadHandlerFacet } from "../files-upload-facet.js";
4
+ import { LoggerFacet } from "../logger-facet.js";
4
5
  import { ReactRendererFacet } from "../react-facet.js";
5
6
  import { IMG_MAX_HEIGHT, SUCCESS_UPLOAD_REMOVE_TIMEOUT } from "./const.js";
6
7
  import { AddUploadWidgetEffect, RemoveUploadWidgetEffect } from "./effects.js";
@@ -206,6 +207,12 @@ export const FilesUploadPlugin = ViewPlugin.fromClass(class {
206
207
  if (!files)
207
208
  return false;
208
209
  const { from, to } = view.state.selection.main;
210
+ view.state.facet(LoggerFacet).event({
211
+ domEvent: 'paste',
212
+ event: 'paste-files',
213
+ plugin: 'files-upload',
214
+ dataTypes: event.clipboardData.types,
215
+ });
209
216
  view.dispatch({
210
217
  selection: { anchor: from },
211
218
  effects: AddUploadWidgetEffect.of({ files, pos: from }),
@@ -220,6 +227,12 @@ export const FilesUploadPlugin = ViewPlugin.fromClass(class {
220
227
  const files = getTransferFiles(event.dataTransfer);
221
228
  if (!files)
222
229
  return false;
230
+ view.state.facet(LoggerFacet).event({
231
+ domEvent: 'drop',
232
+ event: 'drop-files',
233
+ plugin: 'files-upload',
234
+ dataTypes: event.dataTransfer.types,
235
+ });
223
236
  const pos = this.view.posAtCoords(event, false);
224
237
  view.dispatch({
225
238
  selection: { anchor: pos },