@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 +1 @@
1
- {"version":3,"file":"tooltip.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/SelectionContext/tooltip.tsx"],"names":[],"mappings":";;;;AAAA,8CAAiD,CAAC,wDAAwD;AAC1G,6CAAyD;AAKzD,+CAA2C;AAC3C,+CAAuC;AACvC,yEAAuE;AACvE,uDAAyC;AAOzC,6DAA8E;AAQ9E,MAAM,gBAAgB,GAAoC,CAAC,EACvD,IAAI,EACJ,WAAW,EACX,GAAG,YAAY,EAClB,EAAE,EAAE;IACD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,CACH,uBAAC,aAAK,IAAC,IAAI,WAAK,WAAW,EAAE,KAAK,EAAE,EAAC,OAAO,EAAE,SAAS,EAAC,YACpD,uBAAC,iBAAO,OAAK,YAAY,GAAI,GACzB,CACX,CAAC;AACN,CAAC,CAAC;AAaF,MAAa,WAAW;IACpB,cAAc,GAAG,KAAK,CAAC;IAEf,OAAO,CAAgB;IACvB,UAAU,CAAgB;IAE1B,IAAI,CAAc;IAClB,SAAS,GAA8B,EAAC,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAC,CAAC;IACtE,kBAAkB,GAAwB,IAAI,CAAC;IAEvD,YAAY,OAAsB,EAAE,UAAyB;QACzD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAED,IAAI,aAAa;QACb,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,IAAgB,EAAE,UAAuB;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG;YACb,IAAI,EAAE,IAAI;YACV,WAAW,EAAE;gBACT,GAAG,UAAU;gBACb,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;aAC7B;SACJ,CAAC;QACF,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,IAAgB;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,EAAC,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAC,CAAC;QAChD,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,OAAO;QACH,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC;QAClC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACnC,CAAC;IAEO,wBAAwB;QAC5B,OAAO;YACH,GAAG,IAAI,CAAC,SAAS;YACjB,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YAC9B,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE;YAC9B,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,eAAM,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,EAAC,CAAC;SACxF,CAAC;IACN,CAAC;IAEO,iBAAiB;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI;YACtB,CAAC,CAAC,IAAI,CAAC,UAAU;iBACV,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CACf,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;gBACtB,MAAM,EAAC,SAAS,EAAC,GAAG,IAAI,CAAC;gBACzB,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvC,CAAC;gBACD,IAAI,IAAA,mBAAU,EAAC,SAAS,CAAC,EAAE,CAAC;oBACxB,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtC,CAAC;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CACL;iBACA,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACvD,CAAC,CAAC,EAAE,CAAC;IACb,CAAC;IAEO,WAAW;QACf,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;IACtC,CAAC;IAED,IAAY,iBAAiB;QACzB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3B,MAAM,aAAa,GAAG,IAAA,yCAAyB,EAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjE,IAAI,CAAC,kBAAkB,GAAG,aAAa,CAAC,UAAU,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAC1E,uBAAC,mCAAmB,cAChB,uBAAC,gBAAgB,OAAK,IAAI,CAAC,wBAAwB,EAAE,GAAI,GACvC,CACzB,CAAC,CAAC;QACP,CAAC;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAEO,YAAY,CAAC,IAAgB;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAc,CAAC;QACpC,6DAA6D;QAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAEhD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;QAC/C,MAAM,aAAa,GAAG,SAAS,GAAG,CAAC,CAAC;QAEpC,kCAAkC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAEtD,kEAAkE;QAClE,+CAA+C;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAEnE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC;QACzD,MAAM,YAAY,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;QAE3E,OAAO;YACH,SAAS,EAAE,QAAQ;YACnB,aAAa,EAAE,OAAO;YACtB,gCAAgC;YAChC,mBAAmB,EAAE;gBACjB,IAAA,cAAM,EAAC;oBACH,QAAQ,EAAE,YAAY;oBACtB,SAAS,EAAE,UAAU;iBACxB,CAAC;gBACF,IAAA,aAAK,EAAC;oBACF,QAAQ,EAAE,IAAI;oBACd,SAAS,EAAE,KAAK;oBAChB,OAAO,EAAE,CAAC;iBACb,CAAC;aACL;SACJ,CAAC;IACN,CAAC;IAED,IAAY,eAAe;QACvB,OAAO,CAAC,CAAC,CAAC,iCAAiC;IAC/C,CAAC;CACJ;AAjID,kCAiIC","sourcesContent":["import {offset, shift} from '@floating-ui/react'; // eslint-disable-line import/no-extraneous-dependencies\nimport {Popup, type PopupProps} from '@gravity-ui/uikit';\nimport type {EditorState} from 'prosemirror-state';\nimport type {EditorView} from 'prosemirror-view';\n\nimport type {ActionStorage} from '../../../core';\nimport {isFunction} from '../../../lodash';\nimport {logger} from '../../../logger';\nimport {ErrorLoggerBoundary} from '../../../react-utils/ErrorBoundary';\nimport {Toolbar} from '../../../toolbar';\nimport type {\n ToolbarButtonPopupData,\n ToolbarGroupItemData,\n ToolbarProps,\n ToolbarSingleItemData,\n} from '../../../toolbar';\nimport {type RendererItem, getReactRendererFromState} from '../ReactRenderer';\n\ntype SelectionTooltipBaseProps = {\n show?: boolean;\n poppupProps: PopupProps;\n};\ntype SelectionTooltipProps = SelectionTooltipBaseProps & ToolbarProps<ActionStorage>;\n\nconst SelectionTooltip: React.FC<SelectionTooltipProps> = ({\n show,\n poppupProps,\n ...toolbarProps\n}) => {\n if (!show) return null;\n return (\n <Popup open {...poppupProps} style={{padding: '4px 8px'}}>\n <Toolbar {...toolbarProps} />\n </Popup>\n );\n};\n\nexport type ContextGroupItemData =\n | (ToolbarGroupItemData<ActionStorage> & {\n condition?: (state: EditorState) => void;\n })\n | ((ToolbarSingleItemData<ActionStorage> | ToolbarButtonPopupData<ActionStorage>) & {\n condition?: 'enabled';\n });\n\nexport type ContextGroupData = ContextGroupItemData[];\nexport type ContextConfig = ContextGroupData[];\n\nexport class TooltipView {\n #isTooltipOpen = false;\n\n private actions: ActionStorage;\n private menuConfig: ContextConfig;\n\n private view!: EditorView;\n private baseProps: SelectionTooltipBaseProps = {show: false, poppupProps: {}};\n private _tooltipRenderItem: RendererItem | null = null;\n\n constructor(actions: ActionStorage, menuConfig: ContextConfig) {\n this.actions = actions;\n this.menuConfig = menuConfig;\n }\n\n get isTooltipOpen(): boolean {\n return this.#isTooltipOpen;\n }\n\n show(view: EditorView, popupProps?: PopupProps) {\n this.view = view;\n this.#isTooltipOpen = true;\n this.baseProps = {\n show: true,\n poppupProps: {\n ...popupProps,\n ...this.calcPosition(view),\n },\n };\n this.renderPopup();\n }\n\n hide(view: EditorView) {\n this.view = view;\n this.#isTooltipOpen = false;\n this.baseProps = {show: false, poppupProps: {}};\n this.renderPopup();\n }\n\n destroy() {\n this._tooltipRenderItem?.remove();\n this._tooltipRenderItem = null;\n }\n\n private getSelectionTooltipProps(): SelectionTooltipProps {\n return {\n ...this.baseProps,\n focus: () => this.view.focus(),\n data: this.getFilteredConfig(),\n editor: this.actions,\n onClick: (id) => logger.action({mode: 'wysiwyg', source: 'context-menu', action: id}),\n };\n }\n\n private getFilteredConfig(): ContextConfig {\n return this.baseProps.show\n ? this.menuConfig\n .map((groupData) =>\n groupData.filter((item) => {\n const {condition} = item;\n if (condition === 'enabled') {\n return item.isEnable(this.actions);\n }\n if (isFunction(condition)) {\n return condition(this.view.state);\n }\n return true;\n }),\n )\n .filter((groupData) => Boolean(groupData.length))\n : [];\n }\n\n private renderPopup() {\n this.tooltipRenderItem.rerender();\n }\n\n private get tooltipRenderItem() {\n if (!this._tooltipRenderItem) {\n const reactRenderer = getReactRendererFromState(this.view.state);\n this._tooltipRenderItem = reactRenderer.createItem('selection_context', () => (\n <ErrorLoggerBoundary>\n <SelectionTooltip {...this.getSelectionTooltipProps()} />\n </ErrorLoggerBoundary>\n ));\n }\n return this._tooltipRenderItem;\n }\n\n private calcPosition(view: EditorView): PopupProps {\n const viewDom = view.dom as Element;\n // The box in which the tooltip is positioned, to use as base\n const viewBox = viewDom.getBoundingClientRect();\n\n const viewWidth = viewBox.right - viewBox.left;\n const viewHalfWidth = viewWidth / 2;\n\n // These are in screen coordinates\n const start = view.coordsAtPos(view.state.selection.from);\n const end = view.coordsAtPos(view.state.selection.to);\n\n // Find a center-ish x position from the selection endpoints (when\n // crossing lines, end may be more to the left)\n const left = Math.max((start.left + end.left) / 2, start.left + 3);\n\n const leftOffset = left - (viewBox.left + viewHalfWidth);\n const bottomOffset = -(viewBox.bottom - end.bottom) + this.popupTextOffset;\n\n return {\n placement: 'bottom',\n anchorElement: viewDom,\n // override floating middlewares\n floatingMiddlewares: [\n offset({\n mainAxis: bottomOffset,\n crossAxis: leftOffset,\n }),\n shift({\n mainAxis: true,\n crossAxis: false,\n padding: 4,\n }),\n ],\n };\n }\n\n private get popupTextOffset() {\n return 4; // 4px offset from text selection\n }\n}\n"]}
1
+ {"version":3,"file":"tooltip.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/SelectionContext/tooltip.tsx"],"names":[],"mappings":"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","sourcesContent":["import {offset, shift} from '@floating-ui/react'; // eslint-disable-line import/no-extraneous-dependencies\nimport {Popup, type PopupProps} from '@gravity-ui/uikit';\nimport type {EditorState} from 'prosemirror-state';\nimport type {EditorView} from 'prosemirror-view';\n\nimport type {ActionStorage} from '../../../core';\nimport {isFunction} from '../../../lodash';\nimport {type Logger2, globalLogger} from '../../../logger';\nimport {ErrorLoggerBoundary} from '../../../react-utils/ErrorBoundary';\nimport {Toolbar} from '../../../toolbar';\nimport type {\n ToolbarButtonPopupData,\n ToolbarGroupItemData,\n ToolbarProps,\n ToolbarSingleItemData,\n} from '../../../toolbar';\nimport {type RendererItem, getReactRendererFromState} from '../ReactRenderer';\n\ntype SelectionTooltipBaseProps = {\n show?: boolean;\n poppupProps: PopupProps;\n};\ntype SelectionTooltipProps = SelectionTooltipBaseProps & ToolbarProps<ActionStorage>;\n\nconst SelectionTooltip: React.FC<SelectionTooltipProps> = ({\n show,\n poppupProps,\n ...toolbarProps\n}) => {\n if (!show) return null;\n return (\n <Popup open {...poppupProps} style={{padding: '4px 8px'}}>\n <Toolbar {...toolbarProps} />\n </Popup>\n );\n};\n\nexport type ContextGroupItemData =\n | (ToolbarGroupItemData<ActionStorage> & {\n condition?: (state: EditorState) => void;\n })\n | ((ToolbarSingleItemData<ActionStorage> | ToolbarButtonPopupData<ActionStorage>) & {\n condition?: 'enabled';\n });\n\nexport type ContextGroupData = ContextGroupItemData[];\nexport type ContextConfig = ContextGroupData[];\n\nexport class TooltipView {\n #isTooltipOpen = false;\n\n private logger: Logger2.ILogger;\n private actions: ActionStorage;\n private menuConfig: ContextConfig;\n\n private view!: EditorView;\n private baseProps: SelectionTooltipBaseProps = {show: false, poppupProps: {}};\n private _tooltipRenderItem: RendererItem | null = null;\n\n constructor(actions: ActionStorage, menuConfig: ContextConfig, logger: Logger2.ILogger) {\n this.logger = logger;\n this.actions = actions;\n this.menuConfig = menuConfig;\n }\n\n get isTooltipOpen(): boolean {\n return this.#isTooltipOpen;\n }\n\n show(view: EditorView, popupProps?: PopupProps) {\n this.view = view;\n this.#isTooltipOpen = true;\n this.baseProps = {\n show: true,\n poppupProps: {\n ...popupProps,\n ...this.calcPosition(view),\n },\n };\n this.renderPopup();\n }\n\n hide(view: EditorView) {\n this.view = view;\n this.#isTooltipOpen = false;\n this.baseProps = {show: false, poppupProps: {}};\n this.renderPopup();\n }\n\n destroy() {\n this._tooltipRenderItem?.remove();\n this._tooltipRenderItem = null;\n }\n\n private getSelectionTooltipProps(): SelectionTooltipProps {\n return {\n ...this.baseProps,\n focus: () => this.view.focus(),\n data: this.getFilteredConfig(),\n editor: this.actions,\n onClick: (id) => {\n globalLogger.action({mode: 'wysiwyg', source: 'context-menu', action: id});\n this.logger.action({source: 'context-menu', action: id});\n },\n };\n }\n\n private getFilteredConfig(): ContextConfig {\n return this.baseProps.show\n ? this.menuConfig\n .map((groupData) =>\n groupData.filter((item) => {\n const {condition} = item;\n if (condition === 'enabled') {\n return item.isEnable(this.actions);\n }\n if (isFunction(condition)) {\n return condition(this.view.state);\n }\n return true;\n }),\n )\n .filter((groupData) => Boolean(groupData.length))\n : [];\n }\n\n private renderPopup() {\n this.tooltipRenderItem.rerender();\n }\n\n private get tooltipRenderItem() {\n if (!this._tooltipRenderItem) {\n const reactRenderer = getReactRendererFromState(this.view.state);\n this._tooltipRenderItem = reactRenderer.createItem('selection_context', () => (\n <ErrorLoggerBoundary>\n <SelectionTooltip {...this.getSelectionTooltipProps()} />\n </ErrorLoggerBoundary>\n ));\n }\n return this._tooltipRenderItem;\n }\n\n private calcPosition(view: EditorView): PopupProps {\n const viewDom = view.dom as Element;\n // The box in which the tooltip is positioned, to use as base\n const viewBox = viewDom.getBoundingClientRect();\n\n const viewWidth = viewBox.right - viewBox.left;\n const viewHalfWidth = viewWidth / 2;\n\n // These are in screen coordinates\n const start = view.coordsAtPos(view.state.selection.from);\n const end = view.coordsAtPos(view.state.selection.to);\n\n // Find a center-ish x position from the selection endpoints (when\n // crossing lines, end may be more to the left)\n const left = Math.max((start.left + end.left) / 2, start.left + 3);\n\n const leftOffset = left - (viewBox.left + viewHalfWidth);\n const bottomOffset = -(viewBox.bottom - end.bottom) + this.popupTextOffset;\n\n return {\n placement: 'bottom',\n anchorElement: viewDom,\n // override floating middlewares\n floatingMiddlewares: [\n offset({\n mainAxis: bottomOffset,\n crossAxis: leftOffset,\n }),\n shift({\n mainAxis: true,\n crossAxis: false,\n padding: 4,\n }),\n ],\n };\n }\n\n private get popupTextOffset() {\n return 4; // 4px offset from text selection\n }\n}\n"]}
@@ -1,11 +1,13 @@
1
1
  import type { Node } from 'prosemirror-model';
2
2
  import type { EditorView } from 'prosemirror-view';
3
+ import type { Logger2 } from "../../../logger.js";
3
4
  import { type FileUploadHandler, type UploadSuccessItem } from "../../../utils/upload.js";
4
5
  import type { WidgetDescriptor } from "../WidgetDecoration/index.js";
5
6
  export declare abstract class FilesBatchUploadProcess {
6
7
  protected readonly view: EditorView;
7
8
  protected readonly files: readonly File[];
8
9
  protected readonly uploadHandler: FileUploadHandler;
10
+ protected readonly logger: Logger2.ILogger;
9
11
  protected skeletonDescriptor?: WidgetDescriptor;
10
12
  constructor(view: EditorView, files: readonly File[], uploadHandler: FileUploadHandler);
11
13
  run(): Promise<void>;
@@ -1,16 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FilesBatchUploadProcess = void 0;
4
+ const core_1 = require("../../../core/index.js");
4
5
  const upload_1 = require("../../../utils/upload.js");
5
6
  class FilesBatchUploadProcess {
6
7
  view;
7
8
  files;
8
9
  uploadHandler;
10
+ logger;
9
11
  skeletonDescriptor;
10
12
  constructor(view, files, uploadHandler) {
11
13
  this.view = view;
12
14
  this.files = files;
13
15
  this.uploadHandler = uploadHandler;
16
+ this.logger = (0, core_1.getLoggerFromState)(view.state);
14
17
  }
15
18
  async run() {
16
19
  await this.insertSkeleton();
@@ -1 +1 @@
1
- {"version":3,"file":"upload.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/utils/upload.ts"],"names":[],"mappings":";;;AAGA,qDAI+B;AAG/B,MAAsB,uBAAuB;IACtB,IAAI,CAAC;IACL,KAAK,CAAC;IACN,aAAa,CAAC;IAEvB,kBAAkB,CAAoB;IAEhD,YAAY,IAAgB,EAAE,KAAsB,EAAE,aAAgC;QAClF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,GAAG;QACL,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAES,KAAK,CAAC,cAAc;QAC1B,MAAM,EAAC,IAAI,EAAC,GAAG,IAAI,CAAC;QACpB,MAAM,EAAC,KAAK,EAAC,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,kBAAkB,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QACtD,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK;YAAE,EAAE,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC;QACtD,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IAIS,KAAK,CAAC,WAAW;QACvB,MAAM,WAAW,GAAoB,EAAE,CAAC;QACxC,MAAM,IAAA,yBAAgB,EAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE;YAC3D,WAAW,CAAC,IAAI,CACZ,CAAC,KAAK,IAAI,EAAE;gBACR,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBAC1C,MAAM,EAAC,IAAI,EAAC,GAAG,IAAI,CAAC;gBACpB,MAAM,EAAC,MAAM,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC5B,IAAI,CAAC,QAAQ,CACT,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAmB,CAAC,GAAG,EAAE;oBAC/C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;oBAChB,IAAI;oBACJ,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;iBACnB,CAAC,CACL,CAAC;YACN,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAC5B,CAAC;QACN,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IAIS,cAAc;QACpB,MAAM,EAAC,IAAI,EAAC,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAClE,CAAC;CACJ;AA1DD,0DA0DC","sourcesContent":["import type {Node} from 'prosemirror-model';\nimport type {EditorView} from 'prosemirror-view';\n\nimport {\n type FileUploadHandler,\n type UploadSuccessItem,\n batchUploadFiles,\n} from '../../../utils/upload';\nimport type {WidgetDescriptor} from '../WidgetDecoration';\n\nexport abstract class FilesBatchUploadProcess {\n protected readonly view;\n protected readonly files;\n protected readonly uploadHandler;\n\n protected skeletonDescriptor?: WidgetDescriptor;\n\n constructor(view: EditorView, files: readonly File[], uploadHandler: FileUploadHandler) {\n this.view = view;\n this.files = files;\n this.uploadHandler = uploadHandler;\n }\n\n async run() {\n await this.insertSkeleton();\n await this.batchUpload();\n this.removeSkeleton();\n }\n\n protected async insertSkeleton() {\n const {view} = this;\n const {state} = view;\n this.skeletonDescriptor = await this.createSkeleton();\n let tr = state.tr;\n if (!state.selection.empty) tr = tr.deleteSelection();\n tr = this.skeletonDescriptor.applyTo(tr);\n view.dispatch(tr);\n }\n\n protected abstract createSkeleton(): WidgetDescriptor | Promise<WidgetDescriptor>;\n\n protected async batchUpload() {\n const insertQueue: Promise<void>[] = [];\n await batchUploadFiles(this.files, this.uploadHandler, (res) => {\n insertQueue.push(\n (async () => {\n const node = await this.createPMNode(res);\n const {view} = this;\n const {schema} = view.state;\n view.dispatch(\n view.state.tr.insert(this.skeletonDescriptor!.pos, [\n schema.text(' '),\n node,\n schema.text(' '),\n ]),\n );\n })().catch(console.error),\n );\n });\n await Promise.allSettled(insertQueue);\n }\n\n protected abstract createPMNode(res: UploadSuccessItem): Promise<Node>;\n\n protected removeSkeleton() {\n const {view} = this;\n view.dispatch(this.skeletonDescriptor!.rmDeco(view.state.tr));\n }\n}\n"]}
1
+ {"version":3,"file":"upload.js","sourceRoot":"../../../../../src","sources":["extensions/behavior/utils/upload.ts"],"names":[],"mappings":";;;AAGA,iDAAiD;AAEjD,qDAI+B;AAG/B,MAAsB,uBAAuB;IACtB,IAAI,CAAC;IACL,KAAK,CAAC;IACN,aAAa,CAAC;IACd,MAAM,CAAkB;IAEjC,kBAAkB,CAAoB;IAEhD,YAAY,IAAgB,EAAE,KAAsB,EAAE,aAAgC;QAClF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,IAAA,yBAAkB,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,GAAG;QACL,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAES,KAAK,CAAC,cAAc;QAC1B,MAAM,EAAC,IAAI,EAAC,GAAG,IAAI,CAAC;QACpB,MAAM,EAAC,KAAK,EAAC,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,kBAAkB,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QACtD,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK;YAAE,EAAE,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC;QACtD,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IAIS,KAAK,CAAC,WAAW;QACvB,MAAM,WAAW,GAAoB,EAAE,CAAC;QACxC,MAAM,IAAA,yBAAgB,EAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE;YAC3D,WAAW,CAAC,IAAI,CACZ,CAAC,KAAK,IAAI,EAAE;gBACR,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBAC1C,MAAM,EAAC,IAAI,EAAC,GAAG,IAAI,CAAC;gBACpB,MAAM,EAAC,MAAM,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC5B,IAAI,CAAC,QAAQ,CACT,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAmB,CAAC,GAAG,EAAE;oBAC/C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;oBAChB,IAAI;oBACJ,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;iBACnB,CAAC,CACL,CAAC;YACN,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAC5B,CAAC;QACN,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IAIS,cAAc;QACpB,MAAM,EAAC,IAAI,EAAC,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAClE,CAAC;CACJ;AA5DD,0DA4DC","sourcesContent":["import type {Node} from 'prosemirror-model';\nimport type {EditorView} from 'prosemirror-view';\n\nimport {getLoggerFromState} from '../../../core';\nimport type {Logger2} from '../../../logger';\nimport {\n type FileUploadHandler,\n type UploadSuccessItem,\n batchUploadFiles,\n} from '../../../utils/upload';\nimport type {WidgetDescriptor} from '../WidgetDecoration';\n\nexport abstract class FilesBatchUploadProcess {\n protected readonly view;\n protected readonly files;\n protected readonly uploadHandler;\n protected readonly logger: Logger2.ILogger;\n\n protected skeletonDescriptor?: WidgetDescriptor;\n\n constructor(view: EditorView, files: readonly File[], uploadHandler: FileUploadHandler) {\n this.view = view;\n this.files = files;\n this.uploadHandler = uploadHandler;\n this.logger = getLoggerFromState(view.state);\n }\n\n async run() {\n await this.insertSkeleton();\n await this.batchUpload();\n this.removeSkeleton();\n }\n\n protected async insertSkeleton() {\n const {view} = this;\n const {state} = view;\n this.skeletonDescriptor = await this.createSkeleton();\n let tr = state.tr;\n if (!state.selection.empty) tr = tr.deleteSelection();\n tr = this.skeletonDescriptor.applyTo(tr);\n view.dispatch(tr);\n }\n\n protected abstract createSkeleton(): WidgetDescriptor | Promise<WidgetDescriptor>;\n\n protected async batchUpload() {\n const insertQueue: Promise<void>[] = [];\n await batchUploadFiles(this.files, this.uploadHandler, (res) => {\n insertQueue.push(\n (async () => {\n const node = await this.createPMNode(res);\n const {view} = this;\n const {schema} = view.state;\n view.dispatch(\n view.state.tr.insert(this.skeletonDescriptor!.pos, [\n schema.text(' '),\n node,\n schema.text(' '),\n ]),\n );\n })().catch(console.error),\n );\n });\n await Promise.allSettled(insertQueue);\n }\n\n protected abstract createPMNode(res: UploadSuccessItem): Promise<Node>;\n\n protected removeSkeleton() {\n const {view} = this;\n view.dispatch(this.skeletonDescriptor!.rmDeco(view.state.tr));\n }\n}\n"]}
@@ -20,7 +20,8 @@ const Breaks = (builder, opts) => {
20
20
  }
21
21
  else {
22
22
  preferredBreak = opts.preferredBreak ?? 'hard';
23
- logger_1.logger.info("[Breaks extension]: Parameter 'breaks' is not defined in context; value from options is used");
23
+ logger_1.globalLogger.info("[Breaks extension]: Parameter 'breaks' is not defined in context; value from options is used");
24
+ builder.logger.log("[Breaks extension]: Parameter 'breaks' is not defined in context; value from options is used");
24
25
  }
25
26
  builder.use(BreaksSpecs_1.BreaksSpecs, { preferredBreak });
26
27
  builder.addKeymap(({ schema }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/markdown/Breaks/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {chainCommands, exitCode} from 'prosemirror-commands';\nimport type {Node, NodeType} from 'prosemirror-model';\nimport {TextSelection} from 'prosemirror-state';\n\nimport type {ExtensionAuto, Keymap} from '../../../core';\nimport {logger} from '../../../logger';\nimport {isMac} from '../../../utils/platform';\nimport {isTextSelection} from '../../../utils/selection';\nimport {pType} from '../../base/BaseSchema/BaseSchemaSpecs';\n\nimport {BreaksSpecs, type BreaksSpecsOptions, hbType, sbType} from './BreaksSpecs';\n\nexport {BreaksSpecs, BreakNodeName, hbType, sbType} from './BreaksSpecs';\n\nexport type BreaksOptions = {\n /**\n * This option is used if the 'breaks' parameter is not specified via the context\n * @default 'hard'\n */\n // TODO: [context] make this deprecated\n preferredBreak?: 'hard' | 'soft';\n};\n\nexport const Breaks: ExtensionAuto<BreaksOptions> = (builder, opts) => {\n let preferredBreak: 'hard' | 'soft';\n if (builder.context.has('breaks')) {\n preferredBreak = builder.context.get('breaks') ? 'soft' : 'hard';\n } else {\n preferredBreak = opts.preferredBreak ?? 'hard';\n logger.info(\n \"[Breaks extension]: Parameter 'breaks' is not defined in context; value from options is used\",\n );\n }\n\n builder.use<BreaksSpecsOptions>(BreaksSpecs, {preferredBreak});\n\n builder.addKeymap(({schema}) => {\n const cmd = addBr((preferredBreak === 'soft' ? sbType : hbType)(schema));\n const keys: Keymap = {\n 'Shift-Enter': cmd,\n };\n\n if (isMac()) {\n keys['Ctrl-Enter'] = cmd;\n }\n\n return keys;\n });\n};\n\nconst addBr = (br: NodeType) =>\n chainCommands(exitCode, (state, dispatch) => {\n const {selection: sel, schema} = state;\n if (\n !isTextSelection(sel) ||\n !sel.empty ||\n // breaks can only be in the paragraph\n sel.$cursor?.parent.type !== pType(schema)\n )\n return false;\n\n if (isBreakNode(sel.$cursor.nodeBefore)) {\n if (dispatch) {\n const {\n $cursor,\n $cursor: {pos},\n } = sel;\n const from = isBreakNode($cursor.nodeAfter) ? pos + 1 : pos;\n const posEnd = $cursor.end();\n const posAfter = $cursor.after();\n\n const contentAfter = state.doc.slice(from, posEnd, false).content;\n\n let tr = state.tr.insert(posAfter, pType(schema).create(null, contentAfter));\n tr = tr\n .setSelection(TextSelection.create(tr.doc, posAfter + 1))\n .scrollIntoView()\n .delete(pos, posEnd) // remove content after current pos (it's moved to next para)\n .delete(pos - 1, pos); // remove break before current pos ($cursor.nodeBefore)\n dispatch(tr);\n }\n return true;\n }\n\n dispatch?.(state.tr.replaceSelectionWith(br.create()).scrollIntoView());\n return true;\n });\n\ndeclare global {\n namespace WysiwygEditor {\n interface Context {\n /**\n * Same as @type {MarkdownIt.Options.breaks}\n */\n breaks: boolean;\n }\n }\n}\n\nfunction isBreakNode(node?: Node | null | undefined): boolean {\n return Boolean(node?.type.spec.isBreak);\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/markdown/Breaks/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {chainCommands, exitCode} from 'prosemirror-commands';\nimport type {Node, NodeType} from 'prosemirror-model';\nimport {TextSelection} from 'prosemirror-state';\n\nimport type {ExtensionAuto, Keymap} from '../../../core';\nimport {globalLogger} from '../../../logger';\nimport {isMac} from '../../../utils/platform';\nimport {isTextSelection} from '../../../utils/selection';\nimport {pType} from '../../base/BaseSchema/BaseSchemaSpecs';\n\nimport {BreaksSpecs, type BreaksSpecsOptions, hbType, sbType} from './BreaksSpecs';\n\nexport {BreaksSpecs, BreakNodeName, hbType, sbType} from './BreaksSpecs';\n\nexport type BreaksOptions = {\n /**\n * This option is used if the 'breaks' parameter is not specified via the context\n * @default 'hard'\n */\n // TODO: [context] make this deprecated\n preferredBreak?: 'hard' | 'soft';\n};\n\nexport const Breaks: ExtensionAuto<BreaksOptions> = (builder, opts) => {\n let preferredBreak: 'hard' | 'soft';\n if (builder.context.has('breaks')) {\n preferredBreak = builder.context.get('breaks') ? 'soft' : 'hard';\n } else {\n preferredBreak = opts.preferredBreak ?? 'hard';\n globalLogger.info(\n \"[Breaks extension]: Parameter 'breaks' is not defined in context; value from options is used\",\n );\n builder.logger.log(\n \"[Breaks extension]: Parameter 'breaks' is not defined in context; value from options is used\",\n );\n }\n\n builder.use<BreaksSpecsOptions>(BreaksSpecs, {preferredBreak});\n\n builder.addKeymap(({schema}) => {\n const cmd = addBr((preferredBreak === 'soft' ? sbType : hbType)(schema));\n const keys: Keymap = {\n 'Shift-Enter': cmd,\n };\n\n if (isMac()) {\n keys['Ctrl-Enter'] = cmd;\n }\n\n return keys;\n });\n};\n\nconst addBr = (br: NodeType) =>\n chainCommands(exitCode, (state, dispatch) => {\n const {selection: sel, schema} = state;\n if (\n !isTextSelection(sel) ||\n !sel.empty ||\n // breaks can only be in the paragraph\n sel.$cursor?.parent.type !== pType(schema)\n )\n return false;\n\n if (isBreakNode(sel.$cursor.nodeBefore)) {\n if (dispatch) {\n const {\n $cursor,\n $cursor: {pos},\n } = sel;\n const from = isBreakNode($cursor.nodeAfter) ? pos + 1 : pos;\n const posEnd = $cursor.end();\n const posAfter = $cursor.after();\n\n const contentAfter = state.doc.slice(from, posEnd, false).content;\n\n let tr = state.tr.insert(posAfter, pType(schema).create(null, contentAfter));\n tr = tr\n .setSelection(TextSelection.create(tr.doc, posAfter + 1))\n .scrollIntoView()\n .delete(pos, posEnd) // remove content after current pos (it's moved to next para)\n .delete(pos - 1, pos); // remove break before current pos ($cursor.nodeBefore)\n dispatch(tr);\n }\n return true;\n }\n\n dispatch?.(state.tr.replaceSelectionWith(br.create()).scrollIntoView());\n return true;\n });\n\ndeclare global {\n namespace WysiwygEditor {\n interface Context {\n /**\n * Same as @type {MarkdownIt.Options.breaks}\n */\n breaks: boolean;\n }\n }\n}\n\nfunction isBreakNode(node?: Node | null | undefined): boolean {\n return Boolean(node?.type.spec.isBreak);\n}\n"]}
@@ -23,7 +23,8 @@ const CodeBlockHighlight = (builder, opts) => {
23
23
  lowlight = create(langs);
24
24
  }
25
25
  catch (e) {
26
- logger_1.logger.info('Skip code_block highlighting');
26
+ logger_1.globalLogger.info('Skip code_block highlighting');
27
+ builder.logger.log('Skip code_block highlighting');
27
28
  return;
28
29
  }
29
30
  builder.addPlugin(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"CodeBlockHighlight.js","sourceRoot":"../../../../../../src","sources":["extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Options} from '@diplodoc/transform';\n// importing only type, because lowlight and highlight.js is optional deps\nimport type HLJS from 'highlight.js/lib/core';\nimport type {createLowlight} from 'lowlight' with {'resolution-mode': 'import'};\nimport type {Node} from 'prosemirror-model';\nimport {Plugin, PluginKey} from 'prosemirror-state';\nimport type {Step} from 'prosemirror-transform';\n// @ts-ignore // TODO: fix cjs build\nimport {findChildrenByType} from 'prosemirror-utils';\nimport {Decoration, DecorationSet} from 'prosemirror-view';\n\nimport type {ExtensionAuto} from '../../../../core';\nimport {capitalize} from '../../../../lodash';\nimport {logger} from '../../../../logger';\nimport {CodeBlockNodeAttr, codeBlockNodeName, codeBlockType} from '../CodeBlockSpecs';\n\nimport {codeLangSelectTooltipViewCreator} from './TooltipPlugin';\n\nexport type HighlightLangMap = Options['highlightLangs'];\n\ntype Lowlight = ReturnType<typeof createLowlight>;\ntype Root = ReturnType<Lowlight['highlight']>;\n\ntype LangSelectItem = {\n value: string;\n content: string;\n};\n\nconst key = new PluginKey<DecorationSet>('code_block_highlight');\n\nexport type CodeBlockHighlightOptions = {\n langs?: HighlightLangMap;\n};\n\nexport const CodeBlockHighlight: ExtensionAuto<CodeBlockHighlightOptions> = (builder, opts) => {\n let langs: NonNullable<HighlightLangMap>;\n let lowlight: Lowlight;\n let hljs: typeof HLJS;\n\n try {\n hljs = require('highlight.js/lib/core');\n const low = require('lowlight');\n const all: HighlightLangMap = low.all;\n const create: typeof createLowlight = low.createLowlight;\n langs = {...all, ...opts.langs};\n lowlight = create(langs);\n } catch (e) {\n logger.info('Skip code_block highlighting');\n return;\n }\n\n builder.addPlugin(() => {\n const selectItems: LangSelectItem[] = [];\n const mapping: Record<string, string> = {};\n for (const lang of Object.keys(langs)) {\n const defs = langs[lang](hljs);\n selectItems.push({\n value: lang,\n content: defs.name || capitalize(lang),\n });\n if (defs.aliases) {\n for (const alias of defs.aliases) {\n mapping[alias] = lang;\n }\n }\n }\n\n // TODO: add TAB key handler\n // TODO: Remove constant selection of block\n return new Plugin<DecorationSet>({\n key,\n state: {\n init: (_, state) => getDecorations(state.doc),\n apply: (tr, decos, oldState, newState) => {\n if (tr.docChanged) {\n const oldNodeName = oldState.selection.$head.parent.type.name;\n const newNodeName = newState.selection.$head.parent.type.name;\n\n // Apply decorations if:\n if (\n oldNodeName === codeBlockNodeName ||\n newNodeName === codeBlockNodeName\n ) {\n // selection includes codeblock node,\n return getDecorations(tr.doc);\n } else {\n const oldNodes = findChildrenByType(\n oldState.doc,\n codeBlockType(oldState.schema),\n );\n const newNodes = findChildrenByType(\n newState.doc,\n codeBlockType(newState.schema),\n );\n if (\n // OR transaction adds/removes codeblock nodes,\n newNodes.length !== oldNodes.length ||\n // OR transaction has changes that completely encapsulate a node\n // (for example, a transaction that affects the entire document).\n // Such transactions can happen during collab syncing via y-prosemirror, for example.\n tr.steps.some((step) => {\n return (\n stepHasFromTo(step) &&\n oldNodes.some(\n (node: {node: Node; pos: number}) =>\n node.pos >= step.from &&\n node.pos + node.node.nodeSize <= step.to,\n )\n );\n })\n ) {\n return getDecorations(tr.doc);\n }\n }\n }\n return decos.map(tr.mapping, tr.doc);\n },\n },\n view: (view) => codeLangSelectTooltipViewCreator(view, selectItems, mapping),\n props: {\n decorations: (state) => {\n return key.getState(state);\n },\n nodeViews: {\n [codeBlockNodeName]: (node) => {\n let prevLang = node.attrs[CodeBlockNodeAttr.Lang];\n\n const dom = document.createElement('pre');\n\n const contentDOM = document.createElement('code');\n contentDOM.classList.add('hljs');\n\n if (prevLang) {\n dom.setAttribute(CodeBlockNodeAttr.Lang, prevLang);\n contentDOM.classList.add(prevLang);\n }\n\n dom.append(contentDOM);\n\n return {\n dom,\n contentDOM,\n update(newNode) {\n if (node.type !== newNode.type) return false;\n\n const newLang = newNode.attrs[CodeBlockNodeAttr.Lang];\n if (prevLang !== newLang) {\n contentDOM.className = 'hljs';\n if (newLang) {\n dom.setAttribute(CodeBlockNodeAttr.Lang, newLang);\n contentDOM.classList.add(newLang);\n } else {\n dom.removeAttribute(CodeBlockNodeAttr.Lang);\n }\n prevLang = newLang;\n }\n\n return true;\n },\n };\n },\n },\n },\n });\n });\n\n function getDecorations(doc: Node) {\n const decos: Decoration[] = [];\n\n for (const {node, pos} of findChildrenByType(doc, codeBlockType(doc.type.schema), true)) {\n let from = pos + 1;\n let nodes: Root['children'];\n\n const lang: string | undefined = node.attrs[CodeBlockNodeAttr.Lang];\n if (lang && lowlight.registered(lang)) {\n nodes = lowlight.highlight(lang, node.textContent).children;\n } else {\n continue;\n }\n\n for (const {text, classes} of parseNodes(nodes)) {\n const to = from + text.length;\n if (classes.length) {\n decos.push(\n Decoration.inline(from, to, {\n class: classes.join(' '),\n }),\n );\n }\n from = to;\n }\n }\n\n return DecorationSet.create(doc, decos);\n }\n};\n\nfunction parseNodes(\n nodes: Root['children'],\n className: readonly string[] = [],\n): {text: string; classes: readonly string[]}[] {\n return nodes\n .map((node) => {\n let classes = className;\n if (node.type === 'element') {\n classes = classes.concat((node.properties.className as string[]) ?? []);\n return parseNodes(node.children, classes);\n }\n\n return {\n text: node.type === 'comment' || node.type === 'text' ? node.value : '',\n classes,\n };\n })\n .flat();\n}\n\nfunction stepHasFromTo(step: Step): step is Step & {from: number; to: number} {\n // @ts-expect-error\n return typeof step.from === 'number' && typeof step.to === 'number';\n}\n"]}
1
+ {"version":3,"file":"CodeBlockHighlight.js","sourceRoot":"../../../../../../src","sources":["extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Options} from '@diplodoc/transform';\n// importing only type, because lowlight and highlight.js is optional deps\nimport type HLJS from 'highlight.js/lib/core';\nimport type {createLowlight} from 'lowlight' with {'resolution-mode': 'import'};\nimport type {Node} from 'prosemirror-model';\nimport {Plugin, PluginKey} from 'prosemirror-state';\nimport type {Step} from 'prosemirror-transform';\n// @ts-ignore // TODO: fix cjs build\nimport {findChildrenByType} from 'prosemirror-utils';\nimport {Decoration, DecorationSet} from 'prosemirror-view';\n\nimport type {ExtensionAuto} from '../../../../core';\nimport {capitalize} from '../../../../lodash';\nimport {globalLogger} from '../../../../logger';\nimport {CodeBlockNodeAttr, codeBlockNodeName, codeBlockType} from '../CodeBlockSpecs';\n\nimport {codeLangSelectTooltipViewCreator} from './TooltipPlugin';\n\nexport type HighlightLangMap = Options['highlightLangs'];\n\ntype Lowlight = ReturnType<typeof createLowlight>;\ntype Root = ReturnType<Lowlight['highlight']>;\n\ntype LangSelectItem = {\n value: string;\n content: string;\n};\n\nconst key = new PluginKey<DecorationSet>('code_block_highlight');\n\nexport type CodeBlockHighlightOptions = {\n langs?: HighlightLangMap;\n};\n\nexport const CodeBlockHighlight: ExtensionAuto<CodeBlockHighlightOptions> = (builder, opts) => {\n let langs: NonNullable<HighlightLangMap>;\n let lowlight: Lowlight;\n let hljs: typeof HLJS;\n\n try {\n hljs = require('highlight.js/lib/core');\n const low = require('lowlight');\n const all: HighlightLangMap = low.all;\n const create: typeof createLowlight = low.createLowlight;\n langs = {...all, ...opts.langs};\n lowlight = create(langs);\n } catch (e) {\n globalLogger.info('Skip code_block highlighting');\n builder.logger.log('Skip code_block highlighting');\n return;\n }\n\n builder.addPlugin(() => {\n const selectItems: LangSelectItem[] = [];\n const mapping: Record<string, string> = {};\n for (const lang of Object.keys(langs)) {\n const defs = langs[lang](hljs);\n selectItems.push({\n value: lang,\n content: defs.name || capitalize(lang),\n });\n if (defs.aliases) {\n for (const alias of defs.aliases) {\n mapping[alias] = lang;\n }\n }\n }\n\n // TODO: add TAB key handler\n // TODO: Remove constant selection of block\n return new Plugin<DecorationSet>({\n key,\n state: {\n init: (_, state) => getDecorations(state.doc),\n apply: (tr, decos, oldState, newState) => {\n if (tr.docChanged) {\n const oldNodeName = oldState.selection.$head.parent.type.name;\n const newNodeName = newState.selection.$head.parent.type.name;\n\n // Apply decorations if:\n if (\n oldNodeName === codeBlockNodeName ||\n newNodeName === codeBlockNodeName\n ) {\n // selection includes codeblock node,\n return getDecorations(tr.doc);\n } else {\n const oldNodes = findChildrenByType(\n oldState.doc,\n codeBlockType(oldState.schema),\n );\n const newNodes = findChildrenByType(\n newState.doc,\n codeBlockType(newState.schema),\n );\n if (\n // OR transaction adds/removes codeblock nodes,\n newNodes.length !== oldNodes.length ||\n // OR transaction has changes that completely encapsulate a node\n // (for example, a transaction that affects the entire document).\n // Such transactions can happen during collab syncing via y-prosemirror, for example.\n tr.steps.some((step) => {\n return (\n stepHasFromTo(step) &&\n oldNodes.some(\n (node: {node: Node; pos: number}) =>\n node.pos >= step.from &&\n node.pos + node.node.nodeSize <= step.to,\n )\n );\n })\n ) {\n return getDecorations(tr.doc);\n }\n }\n }\n return decos.map(tr.mapping, tr.doc);\n },\n },\n view: (view) => codeLangSelectTooltipViewCreator(view, selectItems, mapping),\n props: {\n decorations: (state) => {\n return key.getState(state);\n },\n nodeViews: {\n [codeBlockNodeName]: (node) => {\n let prevLang = node.attrs[CodeBlockNodeAttr.Lang];\n\n const dom = document.createElement('pre');\n\n const contentDOM = document.createElement('code');\n contentDOM.classList.add('hljs');\n\n if (prevLang) {\n dom.setAttribute(CodeBlockNodeAttr.Lang, prevLang);\n contentDOM.classList.add(prevLang);\n }\n\n dom.append(contentDOM);\n\n return {\n dom,\n contentDOM,\n update(newNode) {\n if (node.type !== newNode.type) return false;\n\n const newLang = newNode.attrs[CodeBlockNodeAttr.Lang];\n if (prevLang !== newLang) {\n contentDOM.className = 'hljs';\n if (newLang) {\n dom.setAttribute(CodeBlockNodeAttr.Lang, newLang);\n contentDOM.classList.add(newLang);\n } else {\n dom.removeAttribute(CodeBlockNodeAttr.Lang);\n }\n prevLang = newLang;\n }\n\n return true;\n },\n };\n },\n },\n },\n });\n });\n\n function getDecorations(doc: Node) {\n const decos: Decoration[] = [];\n\n for (const {node, pos} of findChildrenByType(doc, codeBlockType(doc.type.schema), true)) {\n let from = pos + 1;\n let nodes: Root['children'];\n\n const lang: string | undefined = node.attrs[CodeBlockNodeAttr.Lang];\n if (lang && lowlight.registered(lang)) {\n nodes = lowlight.highlight(lang, node.textContent).children;\n } else {\n continue;\n }\n\n for (const {text, classes} of parseNodes(nodes)) {\n const to = from + text.length;\n if (classes.length) {\n decos.push(\n Decoration.inline(from, to, {\n class: classes.join(' '),\n }),\n );\n }\n from = to;\n }\n }\n\n return DecorationSet.create(doc, decos);\n }\n};\n\nfunction parseNodes(\n nodes: Root['children'],\n className: readonly string[] = [],\n): {text: string; classes: readonly string[]}[] {\n return nodes\n .map((node) => {\n let classes = className;\n if (node.type === 'element') {\n classes = classes.concat((node.properties.className as string[]) ?? []);\n return parseNodes(node.children, classes);\n }\n\n return {\n text: node.type === 'comment' || node.type === 'text' ? node.value : '',\n classes,\n };\n })\n .flat();\n}\n\nfunction stepHasFromTo(step: Step): step is Step & {from: number; to: number} {\n // @ts-expect-error\n return typeof step.from === 'number' && typeof step.to === 'number';\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DeflistSpecs = exports.defDescType = exports.defTermType = exports.defListType = exports.DeflistNode = void 0;
4
4
  const tslib_1 = require("tslib");
5
- const deflist_1 = tslib_1.__importDefault(require("@diplodoc/transform/lib/plugins/deflist"));
5
+ const deflist_js_1 = tslib_1.__importDefault(require("@diplodoc/transform/lib/plugins/deflist.js"));
6
6
  const schema_1 = require("../../../../utils/schema.js");
7
7
  const const_1 = require("./const.js");
8
8
  const parser_1 = require("./parser.js");
@@ -15,7 +15,7 @@ exports.defTermType = (0, schema_1.nodeTypeFactory)(const_1.DeflistNode.Term);
15
15
  exports.defDescType = (0, schema_1.nodeTypeFactory)(const_1.DeflistNode.Desc);
16
16
  const DeflistSpecs = (builder, opts) => {
17
17
  const schemaSpecs = (0, schema_2.getSchemaSpecs)(opts, builder.context.get('placeholder'));
18
- builder.configureMd((md) => md.use(deflist_1.default));
18
+ builder.configureMd((md) => md.use(deflist_js_1.default));
19
19
  builder
20
20
  .addNode(const_1.DeflistNode.List, () => ({
21
21
  spec: schemaSpecs[const_1.DeflistNode.List],
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/markdown/Deflist/DeflistSpecs/index.ts"],"names":[],"mappings":";;;;AAAA,8FAAoE;AAIpE,wDAAyD;AAEzD,sCAAoC;AACpC,wCAAsC;AACtC,wCAAwC;AACxC,gDAA8C;AAE9C,oCAAoC;AAA5B,oGAAA,WAAW,OAAA;AACN,QAAA,WAAW,GAAG,IAAA,wBAAe,EAAC,mBAAW,CAAC,IAAI,CAAC,CAAC;AAChD,QAAA,WAAW,GAAG,IAAA,wBAAe,EAAC,mBAAW,CAAC,IAAI,CAAC,CAAC;AAChD,QAAA,WAAW,GAAG,IAAA,wBAAe,EAAC,mBAAW,CAAC,IAAI,CAAC,CAAC;AAatD,MAAM,YAAY,GAAuC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IAC9E,MAAM,WAAW,GAAG,IAAA,uBAAc,EAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IAE7E,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,iBAAa,CAAC,CAAC,CAAC;IACnD,OAAO;SACF,OAAO,CAAC,mBAAW,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,IAAI,EAAE,WAAW,CAAC,mBAAW,CAAC,IAAI,CAAC;QACnC,MAAM,EAAE,EAAC,SAAS,EAAE,qBAAY,CAAC,mBAAW,CAAC,IAAI,CAAC,EAAC;QACnD,IAAI,EAAE,6BAAgB,CAAC,mBAAW,CAAC,IAAI,CAAC;KAC3C,CAAC,CAAC;SACF,OAAO,CAAC,mBAAW,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,IAAI,EAAE,WAAW,CAAC,mBAAW,CAAC,IAAI,CAAC;QACnC,MAAM,EAAE,EAAC,SAAS,EAAE,qBAAY,CAAC,mBAAW,CAAC,IAAI,CAAC,EAAC;QACnD,IAAI,EAAE,6BAAgB,CAAC,mBAAW,CAAC,IAAI,CAAC;KAC3C,CAAC,CAAC;SACF,OAAO,CAAC,mBAAW,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,IAAI,EAAE,WAAW,CAAC,mBAAW,CAAC,IAAI,CAAC;QACnC,MAAM,EAAE,EAAC,SAAS,EAAE,qBAAY,CAAC,mBAAW,CAAC,IAAI,CAAC,EAAC;QACnD,IAAI,EAAE,6BAAgB,CAAC,mBAAW,CAAC,IAAI,CAAC;KAC3C,CAAC,CAAC,CAAC;AACZ,CAAC,CAAC;AApBW,QAAA,YAAY,gBAoBvB","sourcesContent":["import deflistPlugin from '@diplodoc/transform/lib/plugins/deflist';\nimport type {NodeSpec} from 'prosemirror-model';\n\nimport type {ExtensionAuto} from '../../../../core';\nimport {nodeTypeFactory} from '../../../../utils/schema';\n\nimport {DeflistNode} from './const';\nimport {parserTokens} from './parser';\nimport {getSchemaSpecs} from './schema';\nimport {serializerTokens} from './serializer';\n\nexport {DeflistNode} from './const';\nexport const defListType = nodeTypeFactory(DeflistNode.List);\nexport const defTermType = nodeTypeFactory(DeflistNode.Term);\nexport const defDescType = nodeTypeFactory(DeflistNode.Desc);\n\nexport type DeflistSpecsOptions = {\n /**\n * @deprecated: use placeholder option in BehaviorPreset instead.\n */\n deflistTermPlaceholder?: NonNullable<NodeSpec['placeholder']>['content'];\n /**\n * @deprecated: use placeholder option in BehaviorPreset instead.\n */\n deflistDescPlaceholder?: NonNullable<NodeSpec['placeholder']>['content'];\n};\n\nexport const DeflistSpecs: ExtensionAuto<DeflistSpecsOptions> = (builder, opts) => {\n const schemaSpecs = getSchemaSpecs(opts, builder.context.get('placeholder'));\n\n builder.configureMd((md) => md.use(deflistPlugin));\n builder\n .addNode(DeflistNode.List, () => ({\n spec: schemaSpecs[DeflistNode.List],\n fromMd: {tokenSpec: parserTokens[DeflistNode.List]},\n toMd: serializerTokens[DeflistNode.List],\n }))\n .addNode(DeflistNode.Term, () => ({\n spec: schemaSpecs[DeflistNode.Term],\n fromMd: {tokenSpec: parserTokens[DeflistNode.Term]},\n toMd: serializerTokens[DeflistNode.Term],\n }))\n .addNode(DeflistNode.Desc, () => ({\n spec: schemaSpecs[DeflistNode.Desc],\n fromMd: {tokenSpec: parserTokens[DeflistNode.Desc]},\n toMd: serializerTokens[DeflistNode.Desc],\n }));\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/markdown/Deflist/DeflistSpecs/index.ts"],"names":[],"mappings":";;;;AAAA,oGAAuE;AAIvE,wDAAyD;AAEzD,sCAAoC;AACpC,wCAAsC;AACtC,wCAAwC;AACxC,gDAA8C;AAE9C,oCAAoC;AAA5B,oGAAA,WAAW,OAAA;AACN,QAAA,WAAW,GAAG,IAAA,wBAAe,EAAC,mBAAW,CAAC,IAAI,CAAC,CAAC;AAChD,QAAA,WAAW,GAAG,IAAA,wBAAe,EAAC,mBAAW,CAAC,IAAI,CAAC,CAAC;AAChD,QAAA,WAAW,GAAG,IAAA,wBAAe,EAAC,mBAAW,CAAC,IAAI,CAAC,CAAC;AAatD,MAAM,YAAY,GAAuC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IAC9E,MAAM,WAAW,GAAG,IAAA,uBAAc,EAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IAE7E,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,oBAAa,CAAC,CAAC,CAAC;IACnD,OAAO;SACF,OAAO,CAAC,mBAAW,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,IAAI,EAAE,WAAW,CAAC,mBAAW,CAAC,IAAI,CAAC;QACnC,MAAM,EAAE,EAAC,SAAS,EAAE,qBAAY,CAAC,mBAAW,CAAC,IAAI,CAAC,EAAC;QACnD,IAAI,EAAE,6BAAgB,CAAC,mBAAW,CAAC,IAAI,CAAC;KAC3C,CAAC,CAAC;SACF,OAAO,CAAC,mBAAW,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,IAAI,EAAE,WAAW,CAAC,mBAAW,CAAC,IAAI,CAAC;QACnC,MAAM,EAAE,EAAC,SAAS,EAAE,qBAAY,CAAC,mBAAW,CAAC,IAAI,CAAC,EAAC;QACnD,IAAI,EAAE,6BAAgB,CAAC,mBAAW,CAAC,IAAI,CAAC;KAC3C,CAAC,CAAC;SACF,OAAO,CAAC,mBAAW,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,IAAI,EAAE,WAAW,CAAC,mBAAW,CAAC,IAAI,CAAC;QACnC,MAAM,EAAE,EAAC,SAAS,EAAE,qBAAY,CAAC,mBAAW,CAAC,IAAI,CAAC,EAAC;QACnD,IAAI,EAAE,6BAAgB,CAAC,mBAAW,CAAC,IAAI,CAAC;KAC3C,CAAC,CAAC,CAAC;AACZ,CAAC,CAAC;AApBW,QAAA,YAAY,gBAoBvB","sourcesContent":["import deflistPlugin from '@diplodoc/transform/lib/plugins/deflist.js';\nimport type {NodeSpec} from 'prosemirror-model';\n\nimport type {ExtensionAuto} from '../../../../core';\nimport {nodeTypeFactory} from '../../../../utils/schema';\n\nimport {DeflistNode} from './const';\nimport {parserTokens} from './parser';\nimport {getSchemaSpecs} from './schema';\nimport {serializerTokens} from './serializer';\n\nexport {DeflistNode} from './const';\nexport const defListType = nodeTypeFactory(DeflistNode.List);\nexport const defTermType = nodeTypeFactory(DeflistNode.Term);\nexport const defDescType = nodeTypeFactory(DeflistNode.Desc);\n\nexport type DeflistSpecsOptions = {\n /**\n * @deprecated: use placeholder option in BehaviorPreset instead.\n */\n deflistTermPlaceholder?: NonNullable<NodeSpec['placeholder']>['content'];\n /**\n * @deprecated: use placeholder option in BehaviorPreset instead.\n */\n deflistDescPlaceholder?: NonNullable<NodeSpec['placeholder']>['content'];\n};\n\nexport const DeflistSpecs: ExtensionAuto<DeflistSpecsOptions> = (builder, opts) => {\n const schemaSpecs = getSchemaSpecs(opts, builder.context.get('placeholder'));\n\n builder.configureMd((md) => md.use(deflistPlugin));\n builder\n .addNode(DeflistNode.List, () => ({\n spec: schemaSpecs[DeflistNode.List],\n fromMd: {tokenSpec: parserTokens[DeflistNode.List]},\n toMd: serializerTokens[DeflistNode.List],\n }))\n .addNode(DeflistNode.Term, () => ({\n spec: schemaSpecs[DeflistNode.Term],\n fromMd: {tokenSpec: parserTokens[DeflistNode.Term]},\n toMd: serializerTokens[DeflistNode.Term],\n }))\n .addNode(DeflistNode.Desc, () => ({\n spec: schemaSpecs[DeflistNode.Desc],\n fromMd: {tokenSpec: parserTokens[DeflistNode.Desc]},\n toMd: serializerTokens[DeflistNode.Desc],\n }));\n};\n"]}
@@ -11,7 +11,8 @@ Object.defineProperty(exports, "HtmlAttr", { enumerable: true, get: function ()
11
11
  Object.defineProperty(exports, "HtmlNode", { enumerable: true, get: function () { return const_2.HtmlNode; } });
12
12
  const Html = (builder) => {
13
13
  if (builder.context.has('html') && builder.context.get('html') === false) {
14
- logger_1.logger.info('[HTML extension]: Skip extension, because HTML disabled via context');
14
+ logger_1.globalLogger.info('[HTML extension]: Skip extension, because HTML disabled via context');
15
+ builder.logger.log('[HTML extension]: Skip extension, because HTML disabled via context');
15
16
  return;
16
17
  }
17
18
  builder.addNode(const_1.HtmlNode.Block, () => ({
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/markdown/Html/index.ts"],"names":[],"mappings":";;;AACA,+CAAuC;AAEvC,sCAAiC;AACjC,wCAAsC;AACtC,wCAAqC;AACrC,gDAA8C;AAE9C,oCAA2C;AAAnC,iGAAA,QAAQ,OAAA;AAAE,iGAAA,QAAQ,OAAA;AAEnB,MAAM,IAAI,GAAkB,CAAC,OAAO,EAAE,EAAE;IAC3C,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC;QACvE,eAAM,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;QACnF,OAAO;IACX,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,gBAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,IAAI,EAAE,oBAAW,CAAC,gBAAQ,CAAC,KAAK,CAAC;QACjC,MAAM,EAAE,EAAC,SAAS,EAAE,qBAAY,CAAC,gBAAQ,CAAC,KAAK,CAAC,EAAC;QACjD,IAAI,EAAE,6BAAgB,CAAC,gBAAQ,CAAC,KAAK,CAAC;KACzC,CAAC,CAAC,CAAC;IAEJ,OAAO,CAAC,OAAO,CAAC,gBAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACpC,IAAI,EAAE,oBAAW,CAAC,gBAAQ,CAAC,MAAM,CAAC;QAClC,MAAM,EAAE,EAAC,SAAS,EAAE,qBAAY,CAAC,gBAAQ,CAAC,MAAM,CAAC,EAAC;QAClD,IAAI,EAAE,6BAAgB,CAAC,gBAAQ,CAAC,MAAM,CAAC;KAC1C,CAAC,CAAC,CAAC;AACR,CAAC,CAAC;AAjBW,QAAA,IAAI,QAiBf","sourcesContent":["import type {ExtensionAuto} from '../../../core';\nimport {logger} from '../../../logger';\n\nimport {HtmlNode} from './const';\nimport {parserTokens} from './parser';\nimport {schemaSpecs} from './schema';\nimport {serializerTokens} from './serializer';\n\nexport {HtmlAttr, HtmlNode} from './const';\n\nexport const Html: ExtensionAuto = (builder) => {\n if (builder.context.has('html') && builder.context.get('html') === false) {\n logger.info('[HTML extension]: Skip extension, because HTML disabled via context');\n return;\n }\n\n builder.addNode(HtmlNode.Block, () => ({\n spec: schemaSpecs[HtmlNode.Block],\n fromMd: {tokenSpec: parserTokens[HtmlNode.Block]},\n toMd: serializerTokens[HtmlNode.Block],\n }));\n\n builder.addNode(HtmlNode.Inline, () => ({\n spec: schemaSpecs[HtmlNode.Inline],\n fromMd: {tokenSpec: parserTokens[HtmlNode.Inline]},\n toMd: serializerTokens[HtmlNode.Inline],\n }));\n};\n\ndeclare global {\n namespace WysiwygEditor {\n interface Context {\n /**\n * Same as @type {MarkdownIt.Options.html}\n */\n html: boolean;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/markdown/Html/index.ts"],"names":[],"mappings":";;;AACA,+CAA6C;AAE7C,sCAAiC;AACjC,wCAAsC;AACtC,wCAAqC;AACrC,gDAA8C;AAE9C,oCAA2C;AAAnC,iGAAA,QAAQ,OAAA;AAAE,iGAAA,QAAQ,OAAA;AAEnB,MAAM,IAAI,GAAkB,CAAC,OAAO,EAAE,EAAE;IAC3C,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC;QACvE,qBAAY,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;QACzF,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;QAC1F,OAAO;IACX,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,gBAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,IAAI,EAAE,oBAAW,CAAC,gBAAQ,CAAC,KAAK,CAAC;QACjC,MAAM,EAAE,EAAC,SAAS,EAAE,qBAAY,CAAC,gBAAQ,CAAC,KAAK,CAAC,EAAC;QACjD,IAAI,EAAE,6BAAgB,CAAC,gBAAQ,CAAC,KAAK,CAAC;KACzC,CAAC,CAAC,CAAC;IAEJ,OAAO,CAAC,OAAO,CAAC,gBAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACpC,IAAI,EAAE,oBAAW,CAAC,gBAAQ,CAAC,MAAM,CAAC;QAClC,MAAM,EAAE,EAAC,SAAS,EAAE,qBAAY,CAAC,gBAAQ,CAAC,MAAM,CAAC,EAAC;QAClD,IAAI,EAAE,6BAAgB,CAAC,gBAAQ,CAAC,MAAM,CAAC;KAC1C,CAAC,CAAC,CAAC;AACR,CAAC,CAAC;AAlBW,QAAA,IAAI,QAkBf","sourcesContent":["import type {ExtensionAuto} from '../../../core';\nimport {globalLogger} from '../../../logger';\n\nimport {HtmlNode} from './const';\nimport {parserTokens} from './parser';\nimport {schemaSpecs} from './schema';\nimport {serializerTokens} from './serializer';\n\nexport {HtmlAttr, HtmlNode} from './const';\n\nexport const Html: ExtensionAuto = (builder) => {\n if (builder.context.has('html') && builder.context.get('html') === false) {\n globalLogger.info('[HTML extension]: Skip extension, because HTML disabled via context');\n builder.logger.log('[HTML extension]: Skip extension, because HTML disabled via context');\n return;\n }\n\n builder.addNode(HtmlNode.Block, () => ({\n spec: schemaSpecs[HtmlNode.Block],\n fromMd: {tokenSpec: parserTokens[HtmlNode.Block]},\n toMd: serializerTokens[HtmlNode.Block],\n }));\n\n builder.addNode(HtmlNode.Inline, () => ({\n spec: schemaSpecs[HtmlNode.Inline],\n fromMd: {tokenSpec: parserTokens[HtmlNode.Inline]},\n toMd: serializerTokens[HtmlNode.Inline],\n }));\n};\n\ndeclare global {\n namespace WysiwygEditor {\n interface Context {\n /**\n * Same as @type {MarkdownIt.Options.html}\n */\n html: boolean;\n }\n }\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.schemaSpecs = void 0;
4
4
  const tslib_1 = require("tslib");
5
- const sanitize_1 = tslib_1.__importDefault(require("@diplodoc/transform/lib/sanitize"));
5
+ const sanitize_js_1 = tslib_1.__importDefault(require("@diplodoc/transform/lib/sanitize.js"));
6
6
  const const_1 = require("./const.js");
7
7
  var DomAttr;
8
8
  (function (DomAttr) {
@@ -31,7 +31,7 @@ exports.schemaSpecs = {
31
31
  elem.setAttribute(DomAttr.Html, '');
32
32
  elem.setAttribute(DomAttr.HtmlRaw, htmlContent);
33
33
  elem.contentEditable = 'false';
34
- elem.innerHTML = (0, sanitize_1.default)(htmlContent);
34
+ elem.innerHTML = (0, sanitize_js_1.default)(htmlContent);
35
35
  return elem;
36
36
  },
37
37
  },
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"../../../../../src","sources":["extensions/markdown/Html/schema.ts"],"names":[],"mappings":";;;;AAAA,wFAAwD;AAGxD,sCAA2C;AAE3C,IAAK,OAGJ;AAHD,WAAK,OAAO;IACR,6BAAkB,CAAA;IAClB,oCAAyB,CAAA;AAC7B,CAAC,EAHI,OAAO,KAAP,OAAO,QAGX;AAEY,QAAA,WAAW,GAA+B;IACnD,CAAC,gBAAQ,CAAC,KAAK,CAAC,EAAE;QACd,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,EAAC,CAAC,gBAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAC;QAC/B,QAAQ,EAAE;YACN;gBACI,GAAG,EAAE,OAAO,OAAO,CAAC,IAAI,GAAG;gBAC3B,QAAQ,CAAC,GAAG;oBACR,MAAM,IAAI,GAAG,GAAkB,CAAC;oBAChC,OAAO;wBACH,CAAC,gBAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS;qBAC3E,CAAC;gBACN,CAAC;aACJ;SACJ;QACD,KAAK,CAAC,IAAI;YACN,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAQ,CAAC,OAAO,CAAW,CAAC;YAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAChD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAC/B,IAAI,CAAC,SAAS,GAAG,IAAA,kBAAQ,EAAC,WAAW,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC;QAChB,CAAC;KACJ;IAED,CAAC,gBAAQ,CAAC,MAAM,CAAC,EAAE;QACf,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,EAAC,CAAC,gBAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAC;QAC/B,QAAQ,EAAE;YACN;gBACI,GAAG,EAAE,QAAQ,OAAO,CAAC,IAAI,GAAG;gBAC5B,QAAQ,CAAC,GAAG;oBACR,OAAO,EAAC,CAAC,gBAAQ,CAAC,OAAO,CAAC,EAAG,GAAmB,CAAC,WAAW,EAAC,CAAC;gBAClE,CAAC;aACJ;SACJ;QACD,KAAK,CAAC,IAAI;YACN,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAQ,CAAC,OAAO,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC;QAChB,CAAC;KACJ;CACJ,CAAC","sourcesContent":["import sanitize from '@diplodoc/transform/lib/sanitize';\nimport type {NodeSpec} from 'prosemirror-model';\n\nimport {HtmlAttr, HtmlNode} from './const';\n\nenum DomAttr {\n Html = 'data-html',\n HtmlRaw = 'data-html-raw',\n}\n\nexport const schemaSpecs: Record<HtmlNode, NodeSpec> = {\n [HtmlNode.Block]: {\n atom: true,\n group: 'block',\n attrs: {[HtmlAttr.Content]: {}},\n parseDOM: [\n {\n tag: `div[${DomAttr.Html}]`,\n getAttrs(dom) {\n const dom_ = dom as HTMLElement;\n return {\n [HtmlAttr.Content]: dom_.getAttribute(DomAttr.HtmlRaw) || dom_.innerHTML,\n };\n },\n },\n ],\n toDOM(node) {\n const htmlContent = node.attrs[HtmlAttr.Content] as string;\n const elem = document.createElement('div');\n elem.setAttribute(DomAttr.Html, '');\n elem.setAttribute(DomAttr.HtmlRaw, htmlContent);\n elem.contentEditable = 'false';\n elem.innerHTML = sanitize(htmlContent);\n return elem;\n },\n },\n\n [HtmlNode.Inline]: {\n atom: true,\n inline: true,\n group: 'inline',\n attrs: {[HtmlAttr.Content]: {}},\n parseDOM: [\n {\n tag: `span[${DomAttr.Html}]`,\n getAttrs(dom) {\n return {[HtmlAttr.Content]: (dom as HTMLElement).textContent};\n },\n },\n ],\n toDOM(node) {\n const elem = document.createElement('span');\n elem.setAttribute(DomAttr.Html, '');\n elem.contentEditable = 'false';\n elem.textContent = node.attrs[HtmlAttr.Content];\n return elem;\n },\n },\n};\n"]}
1
+ {"version":3,"file":"schema.js","sourceRoot":"../../../../../src","sources":["extensions/markdown/Html/schema.ts"],"names":[],"mappings":";;;;AAAA,8FAA2D;AAG3D,sCAA2C;AAE3C,IAAK,OAGJ;AAHD,WAAK,OAAO;IACR,6BAAkB,CAAA;IAClB,oCAAyB,CAAA;AAC7B,CAAC,EAHI,OAAO,KAAP,OAAO,QAGX;AAEY,QAAA,WAAW,GAA+B;IACnD,CAAC,gBAAQ,CAAC,KAAK,CAAC,EAAE;QACd,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,EAAC,CAAC,gBAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAC;QAC/B,QAAQ,EAAE;YACN;gBACI,GAAG,EAAE,OAAO,OAAO,CAAC,IAAI,GAAG;gBAC3B,QAAQ,CAAC,GAAG;oBACR,MAAM,IAAI,GAAG,GAAkB,CAAC;oBAChC,OAAO;wBACH,CAAC,gBAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS;qBAC3E,CAAC;gBACN,CAAC;aACJ;SACJ;QACD,KAAK,CAAC,IAAI;YACN,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAQ,CAAC,OAAO,CAAW,CAAC;YAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAChD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAC/B,IAAI,CAAC,SAAS,GAAG,IAAA,qBAAQ,EAAC,WAAW,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC;QAChB,CAAC;KACJ;IAED,CAAC,gBAAQ,CAAC,MAAM,CAAC,EAAE;QACf,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,EAAC,CAAC,gBAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAC;QAC/B,QAAQ,EAAE;YACN;gBACI,GAAG,EAAE,QAAQ,OAAO,CAAC,IAAI,GAAG;gBAC5B,QAAQ,CAAC,GAAG;oBACR,OAAO,EAAC,CAAC,gBAAQ,CAAC,OAAO,CAAC,EAAG,GAAmB,CAAC,WAAW,EAAC,CAAC;gBAClE,CAAC;aACJ;SACJ;QACD,KAAK,CAAC,IAAI;YACN,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAQ,CAAC,OAAO,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC;QAChB,CAAC;KACJ;CACJ,CAAC","sourcesContent":["import sanitize from '@diplodoc/transform/lib/sanitize.js';\nimport type {NodeSpec} from 'prosemirror-model';\n\nimport {HtmlAttr, HtmlNode} from './const';\n\nenum DomAttr {\n Html = 'data-html',\n HtmlRaw = 'data-html-raw',\n}\n\nexport const schemaSpecs: Record<HtmlNode, NodeSpec> = {\n [HtmlNode.Block]: {\n atom: true,\n group: 'block',\n attrs: {[HtmlAttr.Content]: {}},\n parseDOM: [\n {\n tag: `div[${DomAttr.Html}]`,\n getAttrs(dom) {\n const dom_ = dom as HTMLElement;\n return {\n [HtmlAttr.Content]: dom_.getAttribute(DomAttr.HtmlRaw) || dom_.innerHTML,\n };\n },\n },\n ],\n toDOM(node) {\n const htmlContent = node.attrs[HtmlAttr.Content] as string;\n const elem = document.createElement('div');\n elem.setAttribute(DomAttr.Html, '');\n elem.setAttribute(DomAttr.HtmlRaw, htmlContent);\n elem.contentEditable = 'false';\n elem.innerHTML = sanitize(htmlContent);\n return elem;\n },\n },\n\n [HtmlNode.Inline]: {\n atom: true,\n inline: true,\n group: 'inline',\n attrs: {[HtmlAttr.Content]: {}},\n parseDOM: [\n {\n tag: `span[${DomAttr.Html}]`,\n getAttrs(dom) {\n return {[HtmlAttr.Content]: (dom as HTMLElement).textContent};\n },\n },\n ],\n toDOM(node) {\n const elem = document.createElement('span');\n elem.setAttribute(DomAttr.Html, '');\n elem.contentEditable = 'false';\n elem.textContent = node.attrs[HtmlAttr.Content];\n return elem;\n },\n },\n};\n"]}
@@ -1,3 +1,3 @@
1
1
  import { Plugin } from 'prosemirror-state';
2
- import type { ExtensionDeps } from "../../../core/index.js";
2
+ import { type ExtensionDeps } from "../../../core/index.js";
3
3
  export declare function linkPasteEnhance({ markupParser: parser }: ExtensionDeps): Plugin<any>;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.linkPasteEnhance = linkPasteEnhance;
4
4
  const prosemirror_state_1 = require("prosemirror-state");
5
+ const core_1 = require("../../../core/index.js");
5
6
  const selection_1 = require("../../../utils/selection.js");
6
7
  const utils_1 = require("../../behavior/Clipboard/utils.js");
7
8
  const Image_1 = require("../Image/index.js");
@@ -11,6 +12,10 @@ function linkPasteEnhance({ markupParser: parser }) {
11
12
  props: {
12
13
  handleDOMEvents: {
13
14
  paste(view, e) {
15
+ const logger = (0, core_1.getLoggerFromState)(view.state).nested({
16
+ plugin: 'link-paste-enhance',
17
+ domEvent: 'paste',
18
+ });
14
19
  const { state, dispatch } = view;
15
20
  const sel = state.selection;
16
21
  let tr = null;
@@ -27,6 +32,9 @@ function linkPasteEnhance({ markupParser: parser }) {
27
32
  .filter((mark) => mark.type !== linkMarkType),
28
33
  linkMarkType.create({ [index_1.LinkAttr.Href]: url }),
29
34
  ]), false);
35
+ logger.event({
36
+ event: 'paste-url',
37
+ });
30
38
  }
31
39
  }
32
40
  else if ($from.sameParent($to)) {
@@ -36,6 +44,9 @@ function linkPasteEnhance({ markupParser: parser }) {
36
44
  [index_1.LinkAttr.Href]: url,
37
45
  }));
38
46
  tr.setSelection(prosemirror_state_1.TextSelection.create(tr.doc, $to.pos));
47
+ logger.event({
48
+ event: 'paste-url-on-text',
49
+ });
39
50
  }
40
51
  }
41
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"paste-plugin.js","sourceRoot":"../../../../../src","sources":["extensions/markdown/Link/paste-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import {Plugin, TextSelection, type Transaction} from 'prosemirror-state';\n\nimport type {ExtensionDeps, Parser} from '../../../core';\nimport {isNodeSelection, isTextSelection} from '../../../utils/selection';\nimport {DataTransferType, isIosSafariShare} from '../../behavior/Clipboard/utils';\nimport {imageType} from '../Image';\n\nimport {LinkAttr, linkType} from './index';\n\nexport function linkPasteEnhance({markupParser: parser}: ExtensionDeps) {\n return new Plugin({\n props: {\n handleDOMEvents: {\n paste(view, e): boolean {\n const {state, dispatch} = view;\n const sel = state.selection;\n let tr: Transaction | null = null;\n\n if (\n isTextSelection(sel) ||\n (isNodeSelection(sel) && sel.node.type === imageType(state.schema))\n ) {\n const {$from, $to} = sel;\n if ($from.pos === $to.pos) {\n const url = getUrl(e.clipboardData, parser);\n if (url) {\n const linkMarkType = linkType(state.schema);\n tr = state.tr.replaceSelectionWith(\n state.schema.text(url, [\n ...$from\n .marks()\n .filter((mark) => mark.type !== linkMarkType),\n linkMarkType.create({[LinkAttr.Href]: url}),\n ]),\n false,\n );\n }\n } else if ($from.sameParent($to)) {\n const url = getUrl(e.clipboardData, parser);\n if (url) {\n tr = state.tr.addMark(\n $from.pos,\n $to.pos,\n linkType(state.schema).create({\n [LinkAttr.Href]: url,\n }),\n );\n tr.setSelection(TextSelection.create(tr.doc, $to.pos));\n }\n }\n }\n\n if (tr) {\n dispatch(tr.scrollIntoView());\n e.preventDefault();\n return true;\n }\n\n return false;\n },\n },\n },\n });\n}\n\nfunction getUrl(data: DataTransfer | null, parser: Parser): string | null {\n if (!data || data.types.includes(DataTransferType.Yfm)) return null;\n if (isIosSafariShare(data)) return data.getData(DataTransferType.UriList);\n // TODO: should we process HTML here?\n const text = data.getData(DataTransferType.Text);\n const match = parser.matchLinks(text);\n if (match?.[0]?.raw === text) return match[0].url;\n return null;\n}\n"]}
1
+ {"version":3,"file":"paste-plugin.js","sourceRoot":"../../../../../src","sources":["extensions/markdown/Link/paste-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import {Plugin, TextSelection, type Transaction} from 'prosemirror-state';\n\nimport {type ExtensionDeps, type Parser, getLoggerFromState} from '../../../core';\nimport {isNodeSelection, isTextSelection} from '../../../utils/selection';\nimport {DataTransferType, isIosSafariShare} from '../../behavior/Clipboard/utils';\nimport {imageType} from '../Image';\n\nimport {LinkAttr, linkType} from './index';\n\nexport function linkPasteEnhance({markupParser: parser}: ExtensionDeps) {\n return new Plugin({\n props: {\n handleDOMEvents: {\n paste(view, e): boolean {\n const logger = getLoggerFromState(view.state).nested({\n plugin: 'link-paste-enhance',\n domEvent: 'paste',\n });\n\n const {state, dispatch} = view;\n const sel = state.selection;\n let tr: Transaction | null = null;\n\n if (\n isTextSelection(sel) ||\n (isNodeSelection(sel) && sel.node.type === imageType(state.schema))\n ) {\n const {$from, $to} = sel;\n if ($from.pos === $to.pos) {\n const url = getUrl(e.clipboardData, parser);\n if (url) {\n const linkMarkType = linkType(state.schema);\n tr = state.tr.replaceSelectionWith(\n state.schema.text(url, [\n ...$from\n .marks()\n .filter((mark) => mark.type !== linkMarkType),\n linkMarkType.create({[LinkAttr.Href]: url}),\n ]),\n false,\n );\n logger.event({\n event: 'paste-url',\n });\n }\n } else if ($from.sameParent($to)) {\n const url = getUrl(e.clipboardData, parser);\n if (url) {\n tr = state.tr.addMark(\n $from.pos,\n $to.pos,\n linkType(state.schema).create({\n [LinkAttr.Href]: url,\n }),\n );\n tr.setSelection(TextSelection.create(tr.doc, $to.pos));\n logger.event({\n event: 'paste-url-on-text',\n });\n }\n }\n }\n\n if (tr) {\n dispatch(tr.scrollIntoView());\n e.preventDefault();\n return true;\n }\n\n return false;\n },\n },\n },\n });\n}\n\nfunction getUrl(data: DataTransfer | null, parser: Parser): string | null {\n if (!data || data.types.includes(DataTransferType.Yfm)) return null;\n if (isIosSafariShare(data)) return data.getData(DataTransferType.UriList);\n // TODO: should we process HTML here?\n const text = data.getData(DataTransferType.Text);\n const match = parser.matchLinks(text);\n if (match?.[0]?.raw === text) return match[0].url;\n return null;\n}\n"]}
@@ -2,14 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SuperscriptSpecs = exports.superscriptType = exports.superscriptMarkName = void 0;
4
4
  const tslib_1 = require("tslib");
5
- const log_1 = tslib_1.__importDefault(require("@diplodoc/transform/lib/log"));
6
- const sup_1 = tslib_1.__importDefault(require("@diplodoc/transform/lib/plugins/sup"));
5
+ const log_js_1 = tslib_1.__importDefault(require("@diplodoc/transform/lib/log.js"));
6
+ const sup_js_1 = tslib_1.__importDefault(require("@diplodoc/transform/lib/plugins/sup.js"));
7
7
  const schema_1 = require("../../../../utils/schema.js");
8
8
  exports.superscriptMarkName = 'sup';
9
9
  exports.superscriptType = (0, schema_1.markTypeFactory)(exports.superscriptMarkName);
10
10
  const SuperscriptSpecs = (builder) => {
11
11
  builder
12
- .configureMd((md) => md.use(sup_1.default, { log: log_1.default }))
12
+ .configureMd((md) => md.use(sup_js_1.default, { log: log_js_1.default }))
13
13
  .addMark(exports.superscriptMarkName, () => ({
14
14
  spec: {
15
15
  excludes: '_',
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/markdown/Superscript/SuperscriptSpecs/index.ts"],"names":[],"mappings":";;;;AAAA,8EAA8C;AAC9C,sFAAsD;AAGtD,wDAAyD;AAE5C,QAAA,mBAAmB,GAAG,KAAK,CAAC;AAC5B,QAAA,eAAe,GAAG,IAAA,wBAAe,EAAC,2BAAmB,CAAC,CAAC;AAE7D,MAAM,gBAAgB,GAAkB,CAAC,OAAO,EAAE,EAAE;IACvD,OAAO;SACF,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,aAAG,EAAE,EAAC,GAAG,EAAH,aAAG,EAAC,CAAC,CAAC;SACvC,OAAO,CAAC,2BAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;QACjC,IAAI,EAAE;YACF,QAAQ,EAAE,GAAG;YACb,QAAQ,EAAE,CAAC,EAAC,GAAG,EAAE,KAAK,EAAC,CAAC;YACxB,KAAK;gBACD,OAAO,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;SACJ;QACD,IAAI,EAAE;YACF,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBACZ,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC9B,OAAO,GAAG,CAAC;YACf,CAAC;YACD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBACb,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC;gBAC/B,OAAO,GAAG,CAAC;YACf,CAAC;YACD,OAAO,EAAE,IAAI;YACb,wBAAwB,EAAE,IAAI;SACjC;QACD,MAAM,EAAE,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,2BAAmB,EAAE,IAAI,EAAE,MAAM,EAAC,EAAC;KACjE,CAAC,CAAC,CAAC;AACZ,CAAC,CAAC;AAzBW,QAAA,gBAAgB,oBAyB3B","sourcesContent":["import log from '@diplodoc/transform/lib/log';\nimport sup from '@diplodoc/transform/lib/plugins/sup';\n\nimport type {ExtensionAuto} from '../../../../core';\nimport {markTypeFactory} from '../../../../utils/schema';\n\nexport const superscriptMarkName = 'sup';\nexport const superscriptType = markTypeFactory(superscriptMarkName);\n\nexport const SuperscriptSpecs: ExtensionAuto = (builder) => {\n builder\n .configureMd((md) => md.use(sup, {log}))\n .addMark(superscriptMarkName, () => ({\n spec: {\n excludes: '_',\n parseDOM: [{tag: 'sup'}],\n toDOM() {\n return ['sup'];\n },\n },\n toMd: {\n open: (state) => {\n state.escapeWhitespace = true;\n return '^';\n },\n close: (state) => {\n state.escapeWhitespace = false;\n return '^';\n },\n mixable: true,\n expelEnclosingWhitespace: true,\n },\n fromMd: {tokenSpec: {name: superscriptMarkName, type: 'mark'}},\n }));\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/markdown/Superscript/SuperscriptSpecs/index.ts"],"names":[],"mappings":";;;;AAAA,oFAAiD;AACjD,4FAAyD;AAGzD,wDAAyD;AAE5C,QAAA,mBAAmB,GAAG,KAAK,CAAC;AAC5B,QAAA,eAAe,GAAG,IAAA,wBAAe,EAAC,2BAAmB,CAAC,CAAC;AAE7D,MAAM,gBAAgB,GAAkB,CAAC,OAAO,EAAE,EAAE;IACvD,OAAO;SACF,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,gBAAG,EAAE,EAAC,GAAG,EAAH,gBAAG,EAAC,CAAC,CAAC;SACvC,OAAO,CAAC,2BAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;QACjC,IAAI,EAAE;YACF,QAAQ,EAAE,GAAG;YACb,QAAQ,EAAE,CAAC,EAAC,GAAG,EAAE,KAAK,EAAC,CAAC;YACxB,KAAK;gBACD,OAAO,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;SACJ;QACD,IAAI,EAAE;YACF,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBACZ,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC9B,OAAO,GAAG,CAAC;YACf,CAAC;YACD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBACb,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC;gBAC/B,OAAO,GAAG,CAAC;YACf,CAAC;YACD,OAAO,EAAE,IAAI;YACb,wBAAwB,EAAE,IAAI;SACjC;QACD,MAAM,EAAE,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,2BAAmB,EAAE,IAAI,EAAE,MAAM,EAAC,EAAC;KACjE,CAAC,CAAC,CAAC;AACZ,CAAC,CAAC;AAzBW,QAAA,gBAAgB,oBAyB3B","sourcesContent":["import log from '@diplodoc/transform/lib/log.js';\nimport sup from '@diplodoc/transform/lib/plugins/sup.js';\n\nimport type {ExtensionAuto} from '../../../../core';\nimport {markTypeFactory} from '../../../../utils/schema';\n\nexport const superscriptMarkName = 'sup';\nexport const superscriptType = markTypeFactory(superscriptMarkName);\n\nexport const SuperscriptSpecs: ExtensionAuto = (builder) => {\n builder\n .configureMd((md) => md.use(sup, {log}))\n .addMark(superscriptMarkName, () => ({\n spec: {\n excludes: '_',\n parseDOM: [{tag: 'sup'}],\n toDOM() {\n return ['sup'];\n },\n },\n toMd: {\n open: (state) => {\n state.escapeWhitespace = true;\n return '^';\n },\n close: (state) => {\n state.escapeWhitespace = false;\n return '^';\n },\n mixable: true,\n expelEnclosingWhitespace: true,\n },\n fromMd: {tokenSpec: {name: superscriptMarkName, type: 'mark'}},\n }));\n};\n"]}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CheckboxSpecs = exports.checkboxInputType = exports.checkboxLabelType = exports.checkboxType = exports.CheckboxNode = exports.CheckboxAttr = void 0;
4
4
  const tslib_1 = require("tslib");
5
- const checkbox_1 = tslib_1.__importDefault(require("@diplodoc/transform/lib/plugins/checkbox"));
5
+ const index_js_1 = tslib_1.__importDefault(require("@diplodoc/transform/lib/plugins/checkbox/index.js"));
6
6
  const const_1 = require("./const.js");
7
7
  const parser_1 = require("./parser.js");
8
8
  const schema_1 = require("./schema.js");
@@ -16,7 +16,7 @@ Object.defineProperty(exports, "checkboxInputType", { enumerable: true, get: fun
16
16
  const CheckboxSpecs = (builder, opts) => {
17
17
  const schemaSpecs = (0, schema_1.getSchemaSpecs)(opts, builder.context.get('placeholder'));
18
18
  builder
19
- .configureMd((md) => md.use(checkbox_1.default, { idPrefix: const_1.idPrefix, divClass: (0, const_1.b)() }))
19
+ .configureMd((md) => md.use(index_js_1.default, { idPrefix: const_1.idPrefix, divClass: (0, const_1.b)() }))
20
20
  .addNode(const_1.CheckboxNode.Checkbox, () => ({
21
21
  spec: schemaSpecs[const_1.CheckboxNode.Checkbox],
22
22
  toMd: serializer_1.serializerTokens[const_1.CheckboxNode.Checkbox],
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/Checkbox/CheckboxSpecs/index.ts"],"names":[],"mappings":";;;;AAAA,gGAAsE;AAKtE,sCAAkD;AAClD,wCAAsC;AACtC,wCAAwC;AACxC,gDAA8C;AAE9C,oCAMiB;AALb,qGAAA,YAAY,OAAA;AACZ,qGAAA,YAAY,OAAA;AACZ,qGAAA,YAAY,OAAA;AACZ,0GAAA,iBAAiB,OAAA;AACjB,0GAAA,iBAAiB,OAAA;AAad,MAAM,aAAa,GAAwC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IAChF,MAAM,WAAW,GAAG,IAAA,uBAAc,EAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IAE7E,OAAO;SACF,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,kBAAc,EAAE,EAAC,QAAQ,EAAR,gBAAQ,EAAE,QAAQ,EAAE,IAAA,SAAC,GAAE,EAAC,CAAC,CAAC;SACtE,OAAO,CAAC,oBAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,IAAI,EAAE,WAAW,CAAC,oBAAY,CAAC,QAAQ,CAAC;QACxC,IAAI,EAAE,6BAAgB,CAAC,oBAAY,CAAC,QAAQ,CAAC;QAC7C,MAAM,EAAE;YACJ,SAAS,EAAE,qBAAY,CAAC,oBAAY,CAAC,QAAQ,CAAC;SACjD;QACD,IAAI,EAAE,IAAI,CAAC,YAAY;KAC1B,CAAC,CAAC;SACF,OAAO,CAAC,oBAAY,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAChC,IAAI,EAAE,WAAW,CAAC,oBAAY,CAAC,KAAK,CAAC;QACrC,IAAI,EAAE,6BAAgB,CAAC,oBAAY,CAAC,KAAK,CAAC;QAC1C,MAAM,EAAE;YACJ,SAAS,EAAE,qBAAY,CAAC,oBAAY,CAAC,KAAK,CAAC;SAC9C;QACD,IAAI,EAAE,IAAI,CAAC,SAAS;KACvB,CAAC,CAAC;SACF,OAAO,CAAC,oBAAY,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAChC,IAAI,EAAE,WAAW,CAAC,oBAAY,CAAC,KAAK,CAAC;QACrC,IAAI,EAAE,6BAAgB,CAAC,oBAAY,CAAC,KAAK,CAAC;QAC1C,MAAM,EAAE;YACJ,SAAS,EAAE,qBAAY,CAAC,oBAAY,CAAC,KAAK,CAAC;YAC3C,SAAS,EAAE,gBAAgB;SAC9B;QACD,IAAI,EAAE,IAAI,CAAC,SAAS;KACvB,CAAC,CAAC,CAAC;AACZ,CAAC,CAAC;AA9BW,QAAA,aAAa,iBA8BxB","sourcesContent":["import checkboxPlugin from '@diplodoc/transform/lib/plugins/checkbox';\nimport type {NodeSpec} from 'prosemirror-model';\n\nimport type {ExtensionAuto, ExtensionNodeSpec} from '../../../../core';\n\nimport {CheckboxNode, b, idPrefix} from './const';\nimport {parserTokens} from './parser';\nimport {getSchemaSpecs} from './schema';\nimport {serializerTokens} from './serializer';\n\nexport {\n CheckboxAttr,\n CheckboxNode,\n checkboxType,\n checkboxLabelType,\n checkboxInputType,\n} from './const';\n\nexport type CheckboxSpecsOptions = {\n /**\n * @deprecated: use placeholder option in BehaviorPreset instead.\n */\n checkboxLabelPlaceholder?: NonNullable<NodeSpec['placeholder']>['content'];\n inputView?: ExtensionNodeSpec['view'];\n labelView?: ExtensionNodeSpec['view'];\n checkboxView?: ExtensionNodeSpec['view'];\n};\n\nexport const CheckboxSpecs: ExtensionAuto<CheckboxSpecsOptions> = (builder, opts) => {\n const schemaSpecs = getSchemaSpecs(opts, builder.context.get('placeholder'));\n\n builder\n .configureMd((md) => md.use(checkboxPlugin, {idPrefix, divClass: b()}))\n .addNode(CheckboxNode.Checkbox, () => ({\n spec: schemaSpecs[CheckboxNode.Checkbox],\n toMd: serializerTokens[CheckboxNode.Checkbox],\n fromMd: {\n tokenSpec: parserTokens[CheckboxNode.Checkbox],\n },\n view: opts.checkboxView,\n }))\n .addNode(CheckboxNode.Input, () => ({\n spec: schemaSpecs[CheckboxNode.Input],\n toMd: serializerTokens[CheckboxNode.Input],\n fromMd: {\n tokenSpec: parserTokens[CheckboxNode.Input],\n },\n view: opts.inputView,\n }))\n .addNode(CheckboxNode.Label, () => ({\n spec: schemaSpecs[CheckboxNode.Label],\n toMd: serializerTokens[CheckboxNode.Label],\n fromMd: {\n tokenSpec: parserTokens[CheckboxNode.Label],\n tokenName: 'checkbox_label',\n },\n view: opts.labelView,\n }));\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/Checkbox/CheckboxSpecs/index.ts"],"names":[],"mappings":";;;;AAAA,yGAA+E;AAK/E,sCAAkD;AAClD,wCAAsC;AACtC,wCAAwC;AACxC,gDAA8C;AAE9C,oCAMiB;AALb,qGAAA,YAAY,OAAA;AACZ,qGAAA,YAAY,OAAA;AACZ,qGAAA,YAAY,OAAA;AACZ,0GAAA,iBAAiB,OAAA;AACjB,0GAAA,iBAAiB,OAAA;AAad,MAAM,aAAa,GAAwC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IAChF,MAAM,WAAW,GAAG,IAAA,uBAAc,EAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IAE7E,OAAO;SACF,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,kBAAc,EAAE,EAAC,QAAQ,EAAR,gBAAQ,EAAE,QAAQ,EAAE,IAAA,SAAC,GAAE,EAAC,CAAC,CAAC;SACtE,OAAO,CAAC,oBAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,IAAI,EAAE,WAAW,CAAC,oBAAY,CAAC,QAAQ,CAAC;QACxC,IAAI,EAAE,6BAAgB,CAAC,oBAAY,CAAC,QAAQ,CAAC;QAC7C,MAAM,EAAE;YACJ,SAAS,EAAE,qBAAY,CAAC,oBAAY,CAAC,QAAQ,CAAC;SACjD;QACD,IAAI,EAAE,IAAI,CAAC,YAAY;KAC1B,CAAC,CAAC;SACF,OAAO,CAAC,oBAAY,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAChC,IAAI,EAAE,WAAW,CAAC,oBAAY,CAAC,KAAK,CAAC;QACrC,IAAI,EAAE,6BAAgB,CAAC,oBAAY,CAAC,KAAK,CAAC;QAC1C,MAAM,EAAE;YACJ,SAAS,EAAE,qBAAY,CAAC,oBAAY,CAAC,KAAK,CAAC;SAC9C;QACD,IAAI,EAAE,IAAI,CAAC,SAAS;KACvB,CAAC,CAAC;SACF,OAAO,CAAC,oBAAY,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAChC,IAAI,EAAE,WAAW,CAAC,oBAAY,CAAC,KAAK,CAAC;QACrC,IAAI,EAAE,6BAAgB,CAAC,oBAAY,CAAC,KAAK,CAAC;QAC1C,MAAM,EAAE;YACJ,SAAS,EAAE,qBAAY,CAAC,oBAAY,CAAC,KAAK,CAAC;YAC3C,SAAS,EAAE,gBAAgB;SAC9B;QACD,IAAI,EAAE,IAAI,CAAC,SAAS;KACvB,CAAC,CAAC,CAAC;AACZ,CAAC,CAAC;AA9BW,QAAA,aAAa,iBA8BxB","sourcesContent":["import checkboxPlugin from '@diplodoc/transform/lib/plugins/checkbox/index.js';\nimport type {NodeSpec} from 'prosemirror-model';\n\nimport type {ExtensionAuto, ExtensionNodeSpec} from '../../../../core';\n\nimport {CheckboxNode, b, idPrefix} from './const';\nimport {parserTokens} from './parser';\nimport {getSchemaSpecs} from './schema';\nimport {serializerTokens} from './serializer';\n\nexport {\n CheckboxAttr,\n CheckboxNode,\n checkboxType,\n checkboxLabelType,\n checkboxInputType,\n} from './const';\n\nexport type CheckboxSpecsOptions = {\n /**\n * @deprecated: use placeholder option in BehaviorPreset instead.\n */\n checkboxLabelPlaceholder?: NonNullable<NodeSpec['placeholder']>['content'];\n inputView?: ExtensionNodeSpec['view'];\n labelView?: ExtensionNodeSpec['view'];\n checkboxView?: ExtensionNodeSpec['view'];\n};\n\nexport const CheckboxSpecs: ExtensionAuto<CheckboxSpecsOptions> = (builder, opts) => {\n const schemaSpecs = getSchemaSpecs(opts, builder.context.get('placeholder'));\n\n builder\n .configureMd((md) => md.use(checkboxPlugin, {idPrefix, divClass: b()}))\n .addNode(CheckboxNode.Checkbox, () => ({\n spec: schemaSpecs[CheckboxNode.Checkbox],\n toMd: serializerTokens[CheckboxNode.Checkbox],\n fromMd: {\n tokenSpec: parserTokens[CheckboxNode.Checkbox],\n },\n view: opts.checkboxView,\n }))\n .addNode(CheckboxNode.Input, () => ({\n spec: schemaSpecs[CheckboxNode.Input],\n toMd: serializerTokens[CheckboxNode.Input],\n fromMd: {\n tokenSpec: parserTokens[CheckboxNode.Input],\n },\n view: opts.inputView,\n }))\n .addNode(CheckboxNode.Label, () => ({\n spec: schemaSpecs[CheckboxNode.Label],\n toMd: serializerTokens[CheckboxNode.Label],\n fromMd: {\n tokenSpec: parserTokens[CheckboxNode.Label],\n tokenName: 'checkbox_label',\n },\n view: opts.labelView,\n }));\n};\n"]}
@@ -2,12 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EmojiSpecs = exports.EmojiConsts = void 0;
4
4
  const tslib_1 = require("tslib");
5
- const bare_1 = tslib_1.__importDefault(require("markdown-it-emoji/bare"));
5
+ const bare_js_1 = tslib_1.__importDefault(require("markdown-it-emoji/bare.js"));
6
6
  const const_1 = require("./const.js");
7
7
  var const_2 = require("./const.js");
8
8
  Object.defineProperty(exports, "EmojiConsts", { enumerable: true, get: function () { return const_2.EmojiConsts; } });
9
9
  const EmojiSpecsExtension = (builder, opts) => {
10
- builder.configureMd((md) => md.use(bare_1.default, opts));
10
+ builder.configureMd((md) => md.use(bare_js_1.default, opts));
11
11
  builder.addNode(const_1.EmojiConsts.NodeName, () => ({
12
12
  spec: {
13
13
  attrs: { [const_1.EmojiConsts.NodeAttrs.Markup]: {} },
@@ -1 +1 @@
1
- {"version":3,"file":"EmojiSpecs.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/Emoji/EmojiSpecs/EmojiSpecs.ts"],"names":[],"mappings":";;;;AACA,0EAAiD;AAIjD,sCAAyE;AAEzE,oCAAoC;AAA5B,oGAAA,WAAW,OAAA;AAOnB,MAAM,mBAAmB,GAAqC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IAC5E,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAU,cAAW,EAAE,IAAI,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,OAAO,CAAC,mBAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QACzC,IAAI,EAAE;YACF,KAAK,EAAE,EAAC,CAAC,mBAAW,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,EAAC;YAC3C,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,OAAO;YAChB,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE;gBACN;oBACI,GAAG,EAAE,QAAQ,2BAAmB,GAAG;oBACnC,QAAQ,EAAE,GAAG;oBACb,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;wBACf,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;4BAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,2BAAmB,CAAC,CAAC;4BACtD,IAAI,MAAM,EAAE,CAAC;gCACT,OAAO,EAAC,CAAC,mBAAW,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAC,CAAC;4BACpD,CAAC;wBACL,CAAC;wBACD,OAAO,KAAK,CAAC;oBACjB,CAAC;iBACJ;aACJ;YACD,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;gBACZ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACxD,OAAO,CAAC,MAAM,EAAE,EAAC,eAAe,EAAE,KAAK,EAAE,CAAC,2BAAmB,CAAC,EAAE,MAAM,EAAC,EAAE,CAAC,CAAC,CAAC;YAChF,CAAC;SACJ;QACD,MAAM,EAAE;YACJ,SAAS,EAAE,sBAAc;YACzB,SAAS,EAAE;gBACP,IAAI,EAAE,mBAAW,CAAC,QAAQ;gBAC1B,IAAI,EAAE,OAAO;gBACb,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAClB,CAAC,mBAAW,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM;iBAC/C,CAAC;aACL;SACJ;QACD,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAClB,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,mBAAW,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACvE,CAAC;KACJ,CAAC,CAAC,CAAC;AACR,CAAC,CAAC;AAEW,QAAA,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,mBAAW,CAAC,CAAC","sourcesContent":["import type {Options} from 'markdown-it-emoji';\nimport emojiPlugin from 'markdown-it-emoji/bare';\n\nimport type {ExtensionAuto} from '../../../../core';\n\nimport {EmojiConsts, emojiTokenName, markupDataAttribute} from './const';\n\nexport {EmojiConsts} from './const';\n\nexport type EmojiSpecsOptions = {\n defs?: Record<string, string>;\n shortcuts?: Partial<Record<string, string | string[]>>;\n};\n\nconst EmojiSpecsExtension: ExtensionAuto<EmojiSpecsOptions> = (builder, opts) => {\n builder.configureMd((md) => md.use<Options>(emojiPlugin, opts));\n builder.addNode(EmojiConsts.NodeName, () => ({\n spec: {\n attrs: {[EmojiConsts.NodeAttrs.Markup]: {}},\n atom: true,\n inline: true,\n content: 'text*',\n group: 'inline',\n selectable: false,\n parseDOM: [\n {\n tag: `span[${markupDataAttribute}]`,\n priority: 100,\n getAttrs: (node) => {\n if (node instanceof HTMLElement) {\n const markup = node.getAttribute(markupDataAttribute);\n if (markup) {\n return {[EmojiConsts.NodeAttrs.Markup]: markup};\n }\n }\n return false;\n },\n },\n ],\n toDOM: (node) => {\n const markup = node.attrs[EmojiConsts.NodeAttrs.Markup];\n return ['span', {contentEditable: false, [markupDataAttribute]: markup}, 0];\n },\n },\n fromMd: {\n tokenName: emojiTokenName,\n tokenSpec: {\n name: EmojiConsts.NodeName,\n type: 'block',\n noCloseToken: true,\n getAttrs: (token) => ({\n [EmojiConsts.NodeAttrs.Markup]: token.markup,\n }),\n },\n },\n toMd: (state, node) => {\n state.text(`:${node.attrs[EmojiConsts.NodeAttrs.Markup]}:`, false);\n },\n }));\n};\n\nexport const EmojiSpecs = Object.assign(EmojiSpecsExtension, EmojiConsts);\n"]}
1
+ {"version":3,"file":"EmojiSpecs.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/Emoji/EmojiSpecs/EmojiSpecs.ts"],"names":[],"mappings":";;;;AACA,gFAAoD;AAIpD,sCAAyE;AAEzE,oCAAoC;AAA5B,oGAAA,WAAW,OAAA;AAOnB,MAAM,mBAAmB,GAAqC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IAC5E,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAU,iBAAW,EAAE,IAAI,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,OAAO,CAAC,mBAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QACzC,IAAI,EAAE;YACF,KAAK,EAAE,EAAC,CAAC,mBAAW,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,EAAC;YAC3C,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,OAAO;YAChB,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE;gBACN;oBACI,GAAG,EAAE,QAAQ,2BAAmB,GAAG;oBACnC,QAAQ,EAAE,GAAG;oBACb,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;wBACf,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;4BAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,2BAAmB,CAAC,CAAC;4BACtD,IAAI,MAAM,EAAE,CAAC;gCACT,OAAO,EAAC,CAAC,mBAAW,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAC,CAAC;4BACpD,CAAC;wBACL,CAAC;wBACD,OAAO,KAAK,CAAC;oBACjB,CAAC;iBACJ;aACJ;YACD,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;gBACZ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACxD,OAAO,CAAC,MAAM,EAAE,EAAC,eAAe,EAAE,KAAK,EAAE,CAAC,2BAAmB,CAAC,EAAE,MAAM,EAAC,EAAE,CAAC,CAAC,CAAC;YAChF,CAAC;SACJ;QACD,MAAM,EAAE;YACJ,SAAS,EAAE,sBAAc;YACzB,SAAS,EAAE;gBACP,IAAI,EAAE,mBAAW,CAAC,QAAQ;gBAC1B,IAAI,EAAE,OAAO;gBACb,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAClB,CAAC,mBAAW,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM;iBAC/C,CAAC;aACL;SACJ;QACD,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAClB,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,mBAAW,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACvE,CAAC;KACJ,CAAC,CAAC,CAAC;AACR,CAAC,CAAC;AAEW,QAAA,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,mBAAW,CAAC,CAAC","sourcesContent":["import type {Options} from 'markdown-it-emoji';\nimport emojiPlugin from 'markdown-it-emoji/bare.js';\n\nimport type {ExtensionAuto} from '../../../../core';\n\nimport {EmojiConsts, emojiTokenName, markupDataAttribute} from './const';\n\nexport {EmojiConsts} from './const';\n\nexport type EmojiSpecsOptions = {\n defs?: Record<string, string>;\n shortcuts?: Partial<Record<string, string | string[]>>;\n};\n\nconst EmojiSpecsExtension: ExtensionAuto<EmojiSpecsOptions> = (builder, opts) => {\n builder.configureMd((md) => md.use<Options>(emojiPlugin, opts));\n builder.addNode(EmojiConsts.NodeName, () => ({\n spec: {\n attrs: {[EmojiConsts.NodeAttrs.Markup]: {}},\n atom: true,\n inline: true,\n content: 'text*',\n group: 'inline',\n selectable: false,\n parseDOM: [\n {\n tag: `span[${markupDataAttribute}]`,\n priority: 100,\n getAttrs: (node) => {\n if (node instanceof HTMLElement) {\n const markup = node.getAttribute(markupDataAttribute);\n if (markup) {\n return {[EmojiConsts.NodeAttrs.Markup]: markup};\n }\n }\n return false;\n },\n },\n ],\n toDOM: (node) => {\n const markup = node.attrs[EmojiConsts.NodeAttrs.Markup];\n return ['span', {contentEditable: false, [markupDataAttribute]: markup}, 0];\n },\n },\n fromMd: {\n tokenName: emojiTokenName,\n tokenSpec: {\n name: EmojiConsts.NodeName,\n type: 'block',\n noCloseToken: true,\n getAttrs: (token) => ({\n [EmojiConsts.NodeAttrs.Markup]: token.markup,\n }),\n },\n },\n toMd: (state, node) => {\n state.text(`:${node.attrs[EmojiConsts.NodeAttrs.Markup]}:`, false);\n },\n }));\n};\n\nexport const EmojiSpecs = Object.assign(EmojiSpecsExtension, EmojiConsts);\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { ParseInsertedUrlAsImage } from "../../../../bundle/index.js";
2
- import type { ExtensionAuto } from "../../../../core/index.js";
2
+ import { type ExtensionAuto } from "../../../../core/index.js";
3
3
  import type { FileUploadHandler } from "../../../../utils/index.js";
4
4
  import { type CreateImageNodeOptions } from "../utils.js";
5
5
  export type ImagePasteOptions = Pick<CreateImageNodeOptions, 'needDimensions' | 'enableNewImageSizeCalculation'> & {
@@ -5,6 +5,7 @@ const base64_arraybuffer_1 = require("base64-arraybuffer");
5
5
  const prosemirror_model_1 = require("prosemirror-model");
6
6
  const prosemirror_state_1 = require("prosemirror-state");
7
7
  const prosemirror_transform_1 = require("prosemirror-transform");
8
+ const core_1 = require("../../../../core/index.js");
8
9
  const lodash_1 = require("../../../../lodash.js");
9
10
  const Clipboard_1 = require("../../../behavior/Clipboard/index.js");
10
11
  const utils_1 = require("../../../behavior/Clipboard/utils.js");
@@ -20,9 +21,14 @@ const ImagePaste = (builder, opts) => {
20
21
  props: {
21
22
  handleDOMEvents: {
22
23
  paste(view, e) {
24
+ const logger = (0, core_1.getLoggerFromState)(view.state).nested({
25
+ plugin: 'image-paste',
26
+ domEvent: 'paste',
27
+ });
23
28
  const files = getPastedImages(e.clipboardData);
24
29
  if (imageUploadHandler && files) {
25
30
  e.preventDefault();
31
+ logger.event({ event: 'paste-images' });
26
32
  new upload_1.ImagesUploadProcess(view, files, imageUploadHandler, view.state.tr.selection.from, opts).run();
27
33
  return true;
28
34
  }
@@ -38,6 +44,7 @@ const ImagePaste = (builder, opts) => {
38
44
  });
39
45
  const tr = view.state.tr.replaceSelectionWith(imageNode);
40
46
  view.dispatch(tr.scrollIntoView());
47
+ logger.event({ event: 'paste-url-as-image' });
41
48
  return true;
42
49
  }
43
50
  return false;
@@ -56,6 +63,13 @@ const ImagePaste = (builder, opts) => {
56
63
  if (dropPos === -1)
57
64
  return false;
58
65
  const posToInsert = (0, prosemirror_transform_1.dropPoint)(view.state.doc, dropPos, createFakeImageSlice(view.state.schema));
66
+ const logger = (0, core_1.getLoggerFromState)(view.state);
67
+ logger.event({
68
+ event: 'drop-image',
69
+ plugin: 'image-paste',
70
+ domEvent: 'drop',
71
+ runProcess: posToInsert !== null,
72
+ });
59
73
  if (posToInsert !== null) {
60
74
  new upload_1.ImagesUploadProcess(view, files, imageUploadHandler, posToInsert, opts).run();
61
75
  }