@gravity-ui/markdown-editor 15.0.2 → 15.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) 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/behavior/Autocomplete/handler.d.ts +3 -1
  42. package/build/cjs/extensions/behavior/Autocomplete/handler.js +16 -10
  43. package/build/cjs/extensions/behavior/Autocomplete/handler.js.map +1 -1
  44. package/build/cjs/extensions/behavior/Autocomplete/index.js +1 -1
  45. package/build/cjs/extensions/behavior/Autocomplete/index.js.map +1 -1
  46. package/build/cjs/extensions/behavior/Clipboard/clipboard.d.ts +3 -1
  47. package/build/cjs/extensions/behavior/Clipboard/clipboard.js +31 -3
  48. package/build/cjs/extensions/behavior/Clipboard/clipboard.js.map +1 -1
  49. package/build/cjs/extensions/behavior/Clipboard/index.js +4 -0
  50. package/build/cjs/extensions/behavior/Clipboard/index.js.map +1 -1
  51. package/build/cjs/extensions/behavior/CommandMenu/handler.d.ts +3 -1
  52. package/build/cjs/extensions/behavior/CommandMenu/handler.js +6 -3
  53. package/build/cjs/extensions/behavior/CommandMenu/handler.js.map +1 -1
  54. package/build/cjs/extensions/behavior/CommandMenu/index.js +5 -3
  55. package/build/cjs/extensions/behavior/CommandMenu/index.js.map +1 -1
  56. package/build/cjs/extensions/behavior/EditorModeKeymap/index.js +13 -2
  57. package/build/cjs/extensions/behavior/EditorModeKeymap/index.js.map +1 -1
  58. package/build/cjs/extensions/behavior/FilePaste/index.d.ts +1 -1
  59. package/build/cjs/extensions/behavior/FilePaste/index.js +12 -0
  60. package/build/cjs/extensions/behavior/FilePaste/index.js.map +1 -1
  61. package/build/cjs/extensions/behavior/SelectionContext/index.js +3 -3
  62. package/build/cjs/extensions/behavior/SelectionContext/index.js.map +1 -1
  63. package/build/cjs/extensions/behavior/SelectionContext/tooltip.d.ts +3 -1
  64. package/build/cjs/extensions/behavior/SelectionContext/tooltip.js +7 -2
  65. package/build/cjs/extensions/behavior/SelectionContext/tooltip.js.map +1 -1
  66. package/build/cjs/extensions/behavior/utils/upload.d.ts +2 -0
  67. package/build/cjs/extensions/behavior/utils/upload.js +3 -0
  68. package/build/cjs/extensions/behavior/utils/upload.js.map +1 -1
  69. package/build/cjs/extensions/markdown/Breaks/index.js +2 -1
  70. package/build/cjs/extensions/markdown/Breaks/index.js.map +1 -1
  71. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +2 -1
  72. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
  73. package/build/cjs/extensions/markdown/Html/index.js +2 -1
  74. package/build/cjs/extensions/markdown/Html/index.js.map +1 -1
  75. package/build/cjs/extensions/markdown/Link/paste-plugin.d.ts +1 -1
  76. package/build/cjs/extensions/markdown/Link/paste-plugin.js +11 -0
  77. package/build/cjs/extensions/markdown/Link/paste-plugin.js.map +1 -1
  78. package/build/cjs/extensions/yfm/ImgSize/ImagePaste/index.d.ts +1 -1
  79. package/build/cjs/extensions/yfm/ImgSize/ImagePaste/index.js +14 -0
  80. package/build/cjs/extensions/yfm/ImgSize/ImagePaste/index.js.map +1 -1
  81. package/build/cjs/extensions/yfm/ImgSize/ImagePaste/upload.js +6 -5
  82. package/build/cjs/extensions/yfm/ImgSize/ImagePaste/upload.js.map +1 -1
  83. package/build/cjs/extensions/yfm/ImgSize/ImageWidget/index.d.ts +3 -1
  84. package/build/cjs/extensions/yfm/ImgSize/ImageWidget/index.js +2 -0
  85. package/build/cjs/extensions/yfm/ImgSize/ImageWidget/index.js.map +1 -1
  86. package/build/cjs/extensions/yfm/ImgSize/ImageWidget/view.d.ts +15 -3
  87. package/build/cjs/extensions/yfm/ImgSize/ImageWidget/view.js +16 -8
  88. package/build/cjs/extensions/yfm/ImgSize/ImageWidget/view.js.map +1 -1
  89. package/build/cjs/extensions/yfm/ImgSize/ImageWidget/widget.d.ts +3 -0
  90. package/build/cjs/extensions/yfm/ImgSize/ImageWidget/widget.js +13 -2
  91. package/build/cjs/extensions/yfm/ImgSize/ImageWidget/widget.js.map +1 -1
  92. package/build/cjs/extensions/yfm/ImgSize/index.d.ts +2 -1
  93. package/build/cjs/extensions/yfm/ImgSize/index.js +2 -0
  94. package/build/cjs/extensions/yfm/ImgSize/index.js.map +1 -1
  95. package/build/cjs/extensions/yfm/ImgSize/utils.d.ts +2 -1
  96. package/build/cjs/extensions/yfm/ImgSize/utils.js +3 -2
  97. package/build/cjs/extensions/yfm/ImgSize/utils.js.map +1 -1
  98. package/build/cjs/extensions/yfm/YfmCut/index.css +1 -1
  99. package/build/cjs/extensions/yfm/YfmFile/YfmFilePaste/index.d.ts +1 -1
  100. package/build/cjs/extensions/yfm/YfmFile/YfmFilePaste/index.js +15 -1
  101. package/build/cjs/extensions/yfm/YfmFile/YfmFilePaste/index.js.map +1 -1
  102. package/build/cjs/i18n/yfm-note/index.d.ts +1 -1
  103. package/build/cjs/logger.d.ts +75 -0
  104. package/build/cjs/logger.js +89 -1
  105. package/build/cjs/logger.js.map +1 -1
  106. package/build/cjs/markup/codemirror/create.d.ts +2 -0
  107. package/build/cjs/markup/codemirror/create.js +15 -4
  108. package/build/cjs/markup/codemirror/create.js.map +1 -1
  109. package/build/cjs/markup/codemirror/files-upload-plugin/plugin.js +13 -0
  110. package/build/cjs/markup/codemirror/files-upload-plugin/plugin.js.map +1 -1
  111. package/build/cjs/markup/codemirror/logger-facet.d.ts +3 -0
  112. package/build/cjs/markup/codemirror/logger-facet.js +9 -0
  113. package/build/cjs/markup/codemirror/logger-facet.js.map +1 -0
  114. package/build/cjs/utils/event-emitter.d.ts +1 -0
  115. package/build/cjs/utils/event-emitter.js +3 -0
  116. package/build/cjs/utils/event-emitter.js.map +1 -1
  117. package/build/cjs/utils/facet.d.ts +1 -0
  118. package/build/cjs/utils/facet.js +33 -0
  119. package/build/cjs/utils/facet.js.map +1 -0
  120. package/build/cjs/utils/keymap.js +7 -2
  121. package/build/cjs/utils/keymap.js.map +1 -1
  122. package/build/cjs/version.js +1 -1
  123. package/build/cjs/version.js.map +1 -1
  124. package/build/esm/bundle/Editor.d.ts +3 -0
  125. package/build/esm/bundle/Editor.js +22 -3
  126. package/build/esm/bundle/Editor.js.map +1 -1
  127. package/build/esm/bundle/MarkdownEditorView.js +3 -2
  128. package/build/esm/bundle/MarkdownEditorView.js.map +1 -1
  129. package/build/esm/bundle/MarkupEditorView.js +7 -2
  130. package/build/esm/bundle/MarkupEditorView.js.map +1 -1
  131. package/build/esm/bundle/MarkupManager.d.ts +3 -6
  132. package/build/esm/bundle/MarkupManager.js +5 -5
  133. package/build/esm/bundle/MarkupManager.js.map +1 -1
  134. package/build/esm/bundle/WysiwygEditorView.js +7 -2
  135. package/build/esm/bundle/WysiwygEditorView.js.map +1 -1
  136. package/build/esm/bundle/types.d.ts +2 -0
  137. package/build/esm/bundle/types.js.map +1 -1
  138. package/build/esm/bundle/useMarkdownEditor.js +5 -3
  139. package/build/esm/bundle/useMarkdownEditor.js.map +1 -1
  140. package/build/esm/core/Editor.d.ts +3 -1
  141. package/build/esm/core/Editor.js +6 -3
  142. package/build/esm/core/Editor.js.map +1 -1
  143. package/build/esm/core/ExtensionBuilder.d.ts +3 -1
  144. package/build/esm/core/ExtensionBuilder.js +6 -1
  145. package/build/esm/core/ExtensionBuilder.js.map +1 -1
  146. package/build/esm/core/ExtensionsManager.d.ts +4 -2
  147. package/build/esm/core/ExtensionsManager.js +6 -5
  148. package/build/esm/core/ExtensionsManager.js.map +1 -1
  149. package/build/esm/core/ParserTokensRegistry.d.ts +6 -0
  150. package/build/esm/core/ParserTokensRegistry.js +9 -1
  151. package/build/esm/core/ParserTokensRegistry.js.map +1 -1
  152. package/build/esm/core/index.d.ts +1 -0
  153. package/build/esm/core/index.js +1 -0
  154. package/build/esm/core/index.js.map +1 -1
  155. package/build/esm/core/markdown/MarkdownParser.d.ts +9 -1
  156. package/build/esm/core/markdown/MarkdownParser.js +7 -3
  157. package/build/esm/core/markdown/MarkdownParser.js.map +1 -1
  158. package/build/esm/core/utils/logger.d.ts +3 -0
  159. package/build/esm/core/utils/logger.js +8 -0
  160. package/build/esm/core/utils/logger.js.map +1 -0
  161. package/build/esm/core/utils/metrics.d.ts +2 -1
  162. package/build/esm/core/utils/metrics.js +8 -2
  163. package/build/esm/core/utils/metrics.js.map +1 -1
  164. package/build/esm/extensions/behavior/Autocomplete/handler.d.ts +3 -1
  165. package/build/esm/extensions/behavior/Autocomplete/handler.js +15 -9
  166. package/build/esm/extensions/behavior/Autocomplete/handler.js.map +1 -1
  167. package/build/esm/extensions/behavior/Autocomplete/index.js +1 -1
  168. package/build/esm/extensions/behavior/Autocomplete/index.js.map +1 -1
  169. package/build/esm/extensions/behavior/Clipboard/clipboard.d.ts +3 -1
  170. package/build/esm/extensions/behavior/Clipboard/clipboard.js +32 -4
  171. package/build/esm/extensions/behavior/Clipboard/clipboard.js.map +1 -1
  172. package/build/esm/extensions/behavior/Clipboard/index.js +4 -0
  173. package/build/esm/extensions/behavior/Clipboard/index.js.map +1 -1
  174. package/build/esm/extensions/behavior/CommandMenu/handler.d.ts +3 -1
  175. package/build/esm/extensions/behavior/CommandMenu/handler.js +7 -4
  176. package/build/esm/extensions/behavior/CommandMenu/handler.js.map +1 -1
  177. package/build/esm/extensions/behavior/CommandMenu/index.js +6 -4
  178. package/build/esm/extensions/behavior/CommandMenu/index.js.map +1 -1
  179. package/build/esm/extensions/behavior/EditorModeKeymap/index.js +13 -2
  180. package/build/esm/extensions/behavior/EditorModeKeymap/index.js.map +1 -1
  181. package/build/esm/extensions/behavior/FilePaste/index.d.ts +1 -1
  182. package/build/esm/extensions/behavior/FilePaste/index.js +12 -0
  183. package/build/esm/extensions/behavior/FilePaste/index.js.map +1 -1
  184. package/build/esm/extensions/behavior/SelectionContext/index.js +3 -3
  185. package/build/esm/extensions/behavior/SelectionContext/index.js.map +1 -1
  186. package/build/esm/extensions/behavior/SelectionContext/tooltip.d.ts +3 -1
  187. package/build/esm/extensions/behavior/SelectionContext/tooltip.js +8 -3
  188. package/build/esm/extensions/behavior/SelectionContext/tooltip.js.map +1 -1
  189. package/build/esm/extensions/behavior/utils/upload.d.ts +2 -0
  190. package/build/esm/extensions/behavior/utils/upload.js +3 -0
  191. package/build/esm/extensions/behavior/utils/upload.js.map +1 -1
  192. package/build/esm/extensions/markdown/Breaks/index.js +3 -2
  193. package/build/esm/extensions/markdown/Breaks/index.js.map +1 -1
  194. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +3 -2
  195. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
  196. package/build/esm/extensions/markdown/Html/index.js +3 -2
  197. package/build/esm/extensions/markdown/Html/index.js.map +1 -1
  198. package/build/esm/extensions/markdown/Link/paste-plugin.d.ts +1 -1
  199. package/build/esm/extensions/markdown/Link/paste-plugin.js +11 -0
  200. package/build/esm/extensions/markdown/Link/paste-plugin.js.map +1 -1
  201. package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.d.ts +1 -1
  202. package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.js +14 -0
  203. package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.js.map +1 -1
  204. package/build/esm/extensions/yfm/ImgSize/ImagePaste/upload.js +7 -6
  205. package/build/esm/extensions/yfm/ImgSize/ImagePaste/upload.js.map +1 -1
  206. package/build/esm/extensions/yfm/ImgSize/ImageWidget/index.d.ts +3 -1
  207. package/build/esm/extensions/yfm/ImgSize/ImageWidget/index.js +2 -0
  208. package/build/esm/extensions/yfm/ImgSize/ImageWidget/index.js.map +1 -1
  209. package/build/esm/extensions/yfm/ImgSize/ImageWidget/view.d.ts +15 -3
  210. package/build/esm/extensions/yfm/ImgSize/ImageWidget/view.js +15 -7
  211. package/build/esm/extensions/yfm/ImgSize/ImageWidget/view.js.map +1 -1
  212. package/build/esm/extensions/yfm/ImgSize/ImageWidget/widget.d.ts +3 -0
  213. package/build/esm/extensions/yfm/ImgSize/ImageWidget/widget.js +14 -3
  214. package/build/esm/extensions/yfm/ImgSize/ImageWidget/widget.js.map +1 -1
  215. package/build/esm/extensions/yfm/ImgSize/index.d.ts +2 -1
  216. package/build/esm/extensions/yfm/ImgSize/index.js +2 -0
  217. package/build/esm/extensions/yfm/ImgSize/index.js.map +1 -1
  218. package/build/esm/extensions/yfm/ImgSize/utils.d.ts +2 -1
  219. package/build/esm/extensions/yfm/ImgSize/utils.js +4 -3
  220. package/build/esm/extensions/yfm/ImgSize/utils.js.map +1 -1
  221. package/build/esm/extensions/yfm/YfmCut/index.css +1 -1
  222. package/build/esm/extensions/yfm/YfmFile/YfmFilePaste/index.d.ts +1 -1
  223. package/build/esm/extensions/yfm/YfmFile/YfmFilePaste/index.js +15 -1
  224. package/build/esm/extensions/yfm/YfmFile/YfmFilePaste/index.js.map +1 -1
  225. package/build/esm/i18n/yfm-note/index.d.ts +1 -1
  226. package/build/esm/logger.d.ts +75 -0
  227. package/build/esm/logger.js +87 -0
  228. package/build/esm/logger.js.map +1 -1
  229. package/build/esm/markup/codemirror/create.d.ts +2 -0
  230. package/build/esm/markup/codemirror/create.js +16 -5
  231. package/build/esm/markup/codemirror/create.js.map +1 -1
  232. package/build/esm/markup/codemirror/files-upload-plugin/plugin.js +13 -0
  233. package/build/esm/markup/codemirror/files-upload-plugin/plugin.js.map +1 -1
  234. package/build/esm/markup/codemirror/logger-facet.d.ts +3 -0
  235. package/build/esm/markup/codemirror/logger-facet.js +6 -0
  236. package/build/esm/markup/codemirror/logger-facet.js.map +1 -0
  237. package/build/esm/utils/event-emitter.d.ts +1 -0
  238. package/build/esm/utils/event-emitter.js +3 -0
  239. package/build/esm/utils/event-emitter.js.map +1 -1
  240. package/build/esm/utils/facet.d.ts +1 -0
  241. package/build/esm/utils/facet.js +29 -0
  242. package/build/esm/utils/facet.js.map +1 -0
  243. package/build/esm/utils/keymap.js +7 -2
  244. package/build/esm/utils/keymap.js.map +1 -1
  245. package/build/esm/version.js +1 -1
  246. package/build/esm/version.js.map +1 -1
  247. package/build/styles.css +1 -1
  248. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"../../../../src","sources":["markup/codemirror/create.ts"],"names":[],"mappings":"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","sourcesContent":["import {autocompletion} from '@codemirror/autocomplete';\nimport {\n defaultKeymap,\n history,\n historyKeymap,\n indentWithTab,\n insertNewlineKeepIndent,\n insertTab,\n} from '@codemirror/commands';\nimport {syntaxHighlighting} from '@codemirror/language';\nimport type {Extension, StateCommand} from '@codemirror/state';\nimport {\n EditorView,\n type EditorViewConfig,\n type KeyBinding,\n keymap,\n placeholder,\n} from '@codemirror/view';\n\nimport type {ParseInsertedUrlAsImage} from '../../bundle';\nimport type {EventMap} from '../../bundle/Editor';\nimport {ActionName} from '../../bundle/config/action-names';\nimport type {ReactRenderStorage} from '../../extensions';\nimport {logger} from '../../logger';\nimport {Action as A, formatter as f} from '../../shortcuts';\nimport type {Receiver} from '../../utils';\nimport {DataTransferType, shouldSkipHtmlConversion} from '../../utils/clipboard';\nimport type {DirectiveSyntaxContext} from '../../utils/directive';\nimport {\n insertEmptyRow,\n insertImages,\n insertLink,\n toH1,\n toH2,\n toH3,\n toH4,\n toH5,\n toH6,\n toggleBold,\n toggleItalic,\n toggleStrikethrough,\n toggleUnderline,\n wrapToCodeBlock,\n wrapToInlineCode,\n wrapToYfmCut,\n wrapToYfmNote,\n} from '../commands';\n\nimport {DirectiveSyntaxFacet} from './directive-facet';\nimport {type FileUploadHandler, FileUploadHandlerFacet} from './files-upload-facet';\nimport {gravityHighlightStyle, gravityTheme} from './gravity';\nimport {MarkdownConverter} from './html-to-markdown/converters';\nimport {PairingCharactersExtension} from './pairing-chars';\nimport {ReactRendererFacet} from './react-facet';\nimport {SearchPanelPlugin} from './search-plugin/plugin';\nimport {smartReindent} from './smart-reindent';\nimport {type YfmLangOptions, yfmLang} from './yfm';\n\nexport type {YfmLangOptions};\n\ntype Autocompletion = Parameters<typeof autocompletion>[0];\n\nexport type CreateCodemirrorParams = {\n doc: EditorViewConfig['doc'];\n placeholder: Parameters<typeof placeholder>[0];\n onCancel: () => void;\n onSubmit: () => void;\n onChange: () => void;\n onDocChange: () => void;\n onScroll: (event: Event) => void;\n reactRenderer: ReactRenderStorage;\n uploadHandler?: FileUploadHandler;\n parseHtmlOnPaste?: boolean;\n parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n needImageDimensions?: boolean;\n enableNewImageSizeCalculation?: boolean;\n extensions?: Extension[];\n disabledExtensions?: {\n history?: boolean;\n };\n keymaps?: readonly KeyBinding[];\n receiver?: Receiver<EventMap>;\n yfmLangOptions?: YfmLangOptions;\n autocompletion?: Autocompletion;\n directiveSyntax: DirectiveSyntaxContext;\n preserveEmptyRows: boolean;\n};\n\nexport function createCodemirror(params: CreateCodemirrorParams) {\n const {\n doc,\n reactRenderer,\n onCancel,\n onScroll,\n onSubmit,\n onChange,\n onDocChange,\n disabledExtensions = {},\n keymaps = [],\n receiver,\n yfmLangOptions,\n extensions: extraExtensions,\n placeholder: placeholderContent,\n autocompletion: autocompletionConfig,\n parseHtmlOnPaste,\n parseInsertedUrlAsImage,\n directiveSyntax,\n preserveEmptyRows,\n } = params;\n\n const extensions: Extension[] = [gravityTheme, placeholder(placeholderContent)];\n\n if (!disabledExtensions.history) {\n extensions.push(history());\n }\n\n extensions.push(\n syntaxHighlighting(gravityHighlightStyle),\n keymap.of([\n {key: f.toCM(A.Bold)!, run: withLogger(ActionName.bold, toggleBold)},\n {key: f.toCM(A.Italic)!, run: withLogger(ActionName.italic, toggleItalic)},\n {key: f.toCM(A.Strike)!, run: withLogger(ActionName.strike, toggleStrikethrough)},\n {key: f.toCM(A.Underline)!, run: withLogger(ActionName.underline, toggleUnderline)},\n {key: f.toCM(A.Link)!, run: withLogger(ActionName.link, insertLink)},\n {key: f.toCM(A.Heading1)!, run: withLogger(ActionName.heading1, toH1)},\n {key: f.toCM(A.Heading2)!, run: withLogger(ActionName.heading2, toH2)},\n {key: f.toCM(A.Heading3)!, run: withLogger(ActionName.heading3, toH3)},\n {key: f.toCM(A.Heading4)!, run: withLogger(ActionName.heading4, toH4)},\n {key: f.toCM(A.Heading5)!, run: withLogger(ActionName.heading5, toH5)},\n {key: f.toCM(A.Heading6)!, run: withLogger(ActionName.heading6, toH6)},\n {key: f.toCM(A.Code)!, run: withLogger(ActionName.code_inline, wrapToInlineCode)},\n {key: f.toCM(A.CodeBlock)!, run: withLogger(ActionName.code_block, wrapToCodeBlock)},\n {key: f.toCM(A.Cut)!, run: withLogger(ActionName.yfm_cut, wrapToYfmCut)},\n {key: f.toCM(A.Note)!, run: withLogger(ActionName.yfm_note, wrapToYfmNote)},\n {\n key: f.toCM(A.Cancel)!,\n preventDefault: true,\n run: () => {\n onCancel();\n return true;\n },\n },\n {\n key: f.toCM(A.Submit)!,\n preventDefault: true,\n run: () => {\n onSubmit();\n return true;\n },\n },\n {key: 'Tab', preventDefault: true, run: insertTab},\n {\n key: 'Enter',\n shift: insertNewlineKeepIndent,\n },\n indentWithTab,\n ...defaultKeymap,\n ...(disabledExtensions.history ? [] : historyKeymap),\n ...keymaps,\n ]),\n autocompletion(autocompletionConfig),\n yfmLang(yfmLangOptions),\n ReactRendererFacet.of(reactRenderer),\n DirectiveSyntaxFacet.of(directiveSyntax),\n PairingCharactersExtension,\n EditorView.lineWrapping,\n EditorView.contentAttributes.of({spellcheck: 'true'}),\n EditorView.domEventHandlers({\n scroll(event) {\n onScroll(event);\n },\n paste(event, editor) {\n if (!event.clipboardData) return;\n\n const {from} = editor.state.selection.main;\n const line = editor.state.doc.lineAt(from);\n const currentLine = line.text;\n\n // if clipboard contains YFM content - avoid any meddling with pasted content\n // since text/yfm will contain valid markdown\n const yfmContent = event.clipboardData.getData(DataTransferType.Yfm);\n if (yfmContent) {\n event.preventDefault();\n const reindentedYfmContent = smartReindent(yfmContent, currentLine);\n editor.dispatch(editor.state.replaceSelection(reindentedYfmContent));\n return;\n }\n\n // checking if a copy buffer content is suitable for convertion\n const shouldSkipHtml = shouldSkipHtmlConversion(event.clipboardData);\n\n // if we have text/html inside copy/paste buffer\n const htmlContent = event.clipboardData.getData(DataTransferType.Html);\n // if we pasting markdown from VsCode we need skip html transformation\n if (htmlContent && parseHtmlOnPaste && !shouldSkipHtml) {\n let parsedMarkdownMarkup: string | undefined;\n try {\n const parser = new DOMParser();\n const htmlDoc = parser.parseFromString(htmlContent, 'text/html');\n\n const converter = new MarkdownConverter();\n parsedMarkdownMarkup = converter.processNode(htmlDoc.body).trim();\n } catch (e) {\n // The code is pretty new and there might be random issues we haven't caught yet,\n // especially with invalid HTML or weird DOM parsing errors.\n // If something goes wrong, I just want to fall back to the \"default pasting\"\n // rather than break the entire experience for the user.\n logger.error(e);\n }\n\n if (parsedMarkdownMarkup !== undefined) {\n event.preventDefault();\n const reindentedHtmlContent = smartReindent(\n parsedMarkdownMarkup,\n currentLine,\n );\n editor.dispatch(editor.state.replaceSelection(reindentedHtmlContent));\n return;\n }\n }\n\n if (parseInsertedUrlAsImage) {\n const {imageUrl, title} =\n parseInsertedUrlAsImage(\n event.clipboardData.getData(DataTransferType.Text) ?? '',\n ) || {};\n\n if (imageUrl) {\n event.preventDefault();\n\n insertImages([\n {\n url: imageUrl,\n alt: title,\n title,\n },\n ])(editor);\n }\n }\n\n // Reindenting pasted plain text\n const pastedText = event.clipboardData.getData(DataTransferType.Text);\n const reindentedText = smartReindent(pastedText, currentLine);\n // but only if there is a need for reindentation\n if (pastedText !== reindentedText) {\n editor.dispatch(editor.state.replaceSelection(reindentedText));\n event.preventDefault();\n }\n },\n }),\n SearchPanelPlugin({\n anchorSelector: '.g-md-search-anchor',\n receiver,\n }),\n );\n\n if (preserveEmptyRows) {\n extensions.push(\n keymap.of([\n {key: f.toCM(A.EmptyRow)!, run: withLogger(ActionName.emptyRow, insertEmptyRow)},\n ]),\n );\n }\n\n if (params.uploadHandler) {\n extensions.push(\n FileUploadHandlerFacet.of({\n fn: params.uploadHandler,\n imageWithDimensions: params.needImageDimensions,\n enableNewImageSizeCalculation: params.enableNewImageSizeCalculation,\n }),\n );\n }\n\n if (extraExtensions) {\n extensions.push(...extraExtensions);\n }\n\n return new EditorView({\n doc,\n extensions,\n dispatchTransactions: (trs, view) => {\n view.update(trs);\n onChange();\n if (trs.some((tr) => tr.docChanged)) {\n onDocChange();\n }\n },\n });\n}\n\nexport function withLogger(action: string, command: StateCommand): StateCommand {\n return (...args) => {\n logger.action({mode: 'markup', source: 'keymap', action});\n return command(...args);\n };\n}\n"]}
1
+ {"version":3,"file":"create.js","sourceRoot":"../../../../src","sources":["markup/codemirror/create.ts"],"names":[],"mappings":"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","sourcesContent":["import {autocompletion} from '@codemirror/autocomplete';\nimport {\n defaultKeymap,\n history,\n historyKeymap,\n indentWithTab,\n insertNewlineKeepIndent,\n insertTab,\n} from '@codemirror/commands';\nimport {syntaxHighlighting} from '@codemirror/language';\nimport type {Extension, StateCommand} from '@codemirror/state';\nimport {\n EditorView,\n type EditorViewConfig,\n type KeyBinding,\n keymap,\n placeholder,\n} from '@codemirror/view';\n\nimport type {ParseInsertedUrlAsImage} from '../../bundle';\nimport type {EventMap} from '../../bundle/Editor';\nimport {ActionName} from '../../bundle/config/action-names';\nimport type {ReactRenderStorage} from '../../extensions';\nimport {type Logger2, globalLogger} from '../../logger';\nimport {Action as A, formatter as f} from '../../shortcuts';\nimport type {Receiver} from '../../utils';\nimport {DataTransferType, shouldSkipHtmlConversion} from '../../utils/clipboard';\nimport type {DirectiveSyntaxContext} from '../../utils/directive';\nimport {\n insertEmptyRow,\n insertImages,\n insertLink,\n toH1,\n toH2,\n toH3,\n toH4,\n toH5,\n toH6,\n toggleBold,\n toggleItalic,\n toggleStrikethrough,\n toggleUnderline,\n wrapToCodeBlock,\n wrapToInlineCode,\n wrapToYfmCut,\n wrapToYfmNote,\n} from '../commands';\n\nimport {DirectiveSyntaxFacet} from './directive-facet';\nimport {type FileUploadHandler, FileUploadHandlerFacet} from './files-upload-facet';\nimport {gravityHighlightStyle, gravityTheme} from './gravity';\nimport {MarkdownConverter} from './html-to-markdown/converters';\nimport {LoggerFacet} from './logger-facet';\nimport {PairingCharactersExtension} from './pairing-chars';\nimport {ReactRendererFacet} from './react-facet';\nimport {SearchPanelPlugin} from './search-plugin/plugin';\nimport {smartReindent} from './smart-reindent';\nimport {type YfmLangOptions, yfmLang} from './yfm';\n\nexport type {YfmLangOptions};\n\ntype Autocompletion = Parameters<typeof autocompletion>[0];\n\nexport type CreateCodemirrorParams = {\n doc: EditorViewConfig['doc'];\n placeholder: Parameters<typeof placeholder>[0];\n logger: Logger2.ILogger;\n onCancel: () => void;\n onSubmit: () => void;\n onChange: () => void;\n onDocChange: () => void;\n onScroll: (event: Event) => void;\n reactRenderer: ReactRenderStorage;\n uploadHandler?: FileUploadHandler;\n parseHtmlOnPaste?: boolean;\n parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n needImageDimensions?: boolean;\n enableNewImageSizeCalculation?: boolean;\n extensions?: Extension[];\n disabledExtensions?: {\n history?: boolean;\n };\n keymaps?: readonly KeyBinding[];\n receiver?: Receiver<EventMap>;\n yfmLangOptions?: YfmLangOptions;\n autocompletion?: Autocompletion;\n directiveSyntax: DirectiveSyntaxContext;\n preserveEmptyRows: boolean;\n};\n\nexport function createCodemirror(params: CreateCodemirrorParams) {\n const {\n logger,\n doc,\n reactRenderer,\n onCancel,\n onScroll,\n onSubmit,\n onChange,\n onDocChange,\n disabledExtensions = {},\n keymaps = [],\n receiver,\n yfmLangOptions,\n extensions: extraExtensions,\n placeholder: placeholderContent,\n autocompletion: autocompletionConfig,\n parseHtmlOnPaste,\n parseInsertedUrlAsImage,\n directiveSyntax,\n preserveEmptyRows,\n } = params;\n\n const extensions: Extension[] = [gravityTheme, placeholder(placeholderContent)];\n\n if (!disabledExtensions.history) {\n extensions.push(history());\n }\n\n extensions.push(\n syntaxHighlighting(gravityHighlightStyle),\n LoggerFacet.of(logger),\n keymap.of([\n {key: f.toCM(A.Bold)!, run: withLogger(ActionName.bold, toggleBold)},\n {key: f.toCM(A.Italic)!, run: withLogger(ActionName.italic, toggleItalic)},\n {key: f.toCM(A.Strike)!, run: withLogger(ActionName.strike, toggleStrikethrough)},\n {key: f.toCM(A.Underline)!, run: withLogger(ActionName.underline, toggleUnderline)},\n {key: f.toCM(A.Link)!, run: withLogger(ActionName.link, insertLink)},\n {key: f.toCM(A.Heading1)!, run: withLogger(ActionName.heading1, toH1)},\n {key: f.toCM(A.Heading2)!, run: withLogger(ActionName.heading2, toH2)},\n {key: f.toCM(A.Heading3)!, run: withLogger(ActionName.heading3, toH3)},\n {key: f.toCM(A.Heading4)!, run: withLogger(ActionName.heading4, toH4)},\n {key: f.toCM(A.Heading5)!, run: withLogger(ActionName.heading5, toH5)},\n {key: f.toCM(A.Heading6)!, run: withLogger(ActionName.heading6, toH6)},\n {key: f.toCM(A.Code)!, run: withLogger(ActionName.code_inline, wrapToInlineCode)},\n {key: f.toCM(A.CodeBlock)!, run: withLogger(ActionName.code_block, wrapToCodeBlock)},\n {key: f.toCM(A.Cut)!, run: withLogger(ActionName.yfm_cut, wrapToYfmCut)},\n {key: f.toCM(A.Note)!, run: withLogger(ActionName.yfm_note, wrapToYfmNote)},\n {\n key: f.toCM(A.Cancel)!,\n preventDefault: true,\n run: () => {\n onCancel();\n return true;\n },\n },\n {\n key: f.toCM(A.Submit)!,\n preventDefault: true,\n run: () => {\n onSubmit();\n return true;\n },\n },\n {key: 'Tab', preventDefault: true, run: insertTab},\n {\n key: 'Enter',\n shift: insertNewlineKeepIndent,\n },\n indentWithTab,\n ...defaultKeymap,\n ...(disabledExtensions.history ? [] : historyKeymap),\n ...keymaps,\n ]),\n autocompletion(autocompletionConfig),\n yfmLang(yfmLangOptions),\n ReactRendererFacet.of(reactRenderer),\n DirectiveSyntaxFacet.of(directiveSyntax),\n PairingCharactersExtension,\n EditorView.lineWrapping,\n EditorView.contentAttributes.of({spellcheck: 'true'}),\n EditorView.domEventHandlers({\n scroll(event) {\n onScroll(event);\n },\n paste(event, editor) {\n if (!event.clipboardData) return;\n\n const pasteLogger = logger.nested({\n domEvent: 'paste',\n dataTypes: event.clipboardData.types,\n });\n\n const {from} = editor.state.selection.main;\n const line = editor.state.doc.lineAt(from);\n const currentLine = line.text;\n\n // if clipboard contains YFM content - avoid any meddling with pasted content\n // since text/yfm will contain valid markdown\n const yfmContent = event.clipboardData.getData(DataTransferType.Yfm);\n if (yfmContent) {\n event.preventDefault();\n logger.event({event: 'paste-markup'});\n const reindentedYfmContent = smartReindent(yfmContent, currentLine);\n editor.dispatch(editor.state.replaceSelection(reindentedYfmContent));\n return;\n }\n\n // checking if a copy buffer content is suitable for convertion\n const shouldSkipHtml = shouldSkipHtmlConversion(event.clipboardData);\n\n // if we have text/html inside copy/paste buffer\n const htmlContent = event.clipboardData.getData(DataTransferType.Html);\n // if we pasting markdown from VsCode we need skip html transformation\n if (htmlContent && parseHtmlOnPaste && !shouldSkipHtml) {\n let parsedMarkdownMarkup: string | undefined;\n try {\n const parser = new DOMParser();\n const htmlDoc = parser.parseFromString(htmlContent, 'text/html');\n\n const converter = new MarkdownConverter();\n parsedMarkdownMarkup = converter.processNode(htmlDoc.body).trim();\n } catch (e) {\n // The code is pretty new and there might be random issues we haven't caught yet,\n // especially with invalid HTML or weird DOM parsing errors.\n // If something goes wrong, I just want to fall back to the \"default pasting\"\n // rather than break the entire experience for the user.\n pasteLogger.error(e, {event: 'parse-html-to-md'});\n globalLogger.error(e);\n }\n\n if (parsedMarkdownMarkup !== undefined) {\n event.preventDefault();\n logger.event({event: 'paste-parsed-html'});\n const reindentedHtmlContent = smartReindent(\n parsedMarkdownMarkup,\n currentLine,\n );\n editor.dispatch(editor.state.replaceSelection(reindentedHtmlContent));\n return;\n }\n }\n\n if (parseInsertedUrlAsImage) {\n const {imageUrl, title} =\n parseInsertedUrlAsImage(\n event.clipboardData.getData(DataTransferType.Text) ?? '',\n ) || {};\n\n if (imageUrl) {\n event.preventDefault();\n logger.event({event: 'paste-url-as-image'});\n insertImages([\n {\n url: imageUrl,\n alt: title,\n title,\n },\n ])(editor);\n }\n }\n\n // Reindenting pasted plain text\n const pastedText = event.clipboardData.getData(DataTransferType.Text);\n const reindentedText = smartReindent(pastedText, currentLine);\n // but only if there is a need for reindentation\n if (pastedText !== reindentedText) {\n editor.dispatch(editor.state.replaceSelection(reindentedText));\n event.preventDefault();\n }\n },\n }),\n SearchPanelPlugin({\n anchorSelector: '.g-md-search-anchor',\n receiver,\n }),\n );\n\n if (preserveEmptyRows) {\n extensions.push(\n keymap.of([\n {key: f.toCM(A.EmptyRow)!, run: withLogger(ActionName.emptyRow, insertEmptyRow)},\n ]),\n );\n }\n\n if (params.uploadHandler) {\n extensions.push(\n FileUploadHandlerFacet.of({\n fn: params.uploadHandler,\n imageWithDimensions: params.needImageDimensions,\n enableNewImageSizeCalculation: params.enableNewImageSizeCalculation,\n }),\n );\n }\n\n if (extraExtensions) {\n extensions.push(...extraExtensions);\n }\n\n return new EditorView({\n doc,\n extensions,\n dispatchTransactions: (trs, view) => {\n view.update(trs);\n onChange();\n if (trs.some((tr) => tr.docChanged)) {\n onDocChange();\n }\n },\n });\n}\n\nexport function withLogger(action: string, command: StateCommand): StateCommand {\n return (...args) => {\n const {state} = args[0];\n state.facet(LoggerFacet).action({source: 'keymap', action});\n globalLogger.action({mode: 'markup', source: 'keymap', action});\n return command(...args);\n };\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  import { Decoration, ViewPlugin, WidgetType, } from '@codemirror/view';
2
2
  import { getProportionalSize } from "../../../utils/index.js";
3
3
  import { FileUploadHandlerFacet } from "../files-upload-facet.js";
4
+ import { LoggerFacet } from "../logger-facet.js";
4
5
  import { ReactRendererFacet } from "../react-facet.js";
5
6
  import { IMG_MAX_HEIGHT, SUCCESS_UPLOAD_REMOVE_TIMEOUT } from "./const.js";
6
7
  import { AddUploadWidgetEffect, RemoveUploadWidgetEffect } from "./effects.js";
@@ -206,6 +207,12 @@ export const FilesUploadPlugin = ViewPlugin.fromClass(class {
206
207
  if (!files)
207
208
  return false;
208
209
  const { from, to } = view.state.selection.main;
210
+ view.state.facet(LoggerFacet).event({
211
+ domEvent: 'paste',
212
+ event: 'paste-files',
213
+ plugin: 'files-upload',
214
+ dataTypes: event.clipboardData.types,
215
+ });
209
216
  view.dispatch({
210
217
  selection: { anchor: from },
211
218
  effects: AddUploadWidgetEffect.of({ files, pos: from }),
@@ -220,6 +227,12 @@ export const FilesUploadPlugin = ViewPlugin.fromClass(class {
220
227
  const files = getTransferFiles(event.dataTransfer);
221
228
  if (!files)
222
229
  return false;
230
+ view.state.facet(LoggerFacet).event({
231
+ domEvent: 'drop',
232
+ event: 'drop-files',
233
+ plugin: 'files-upload',
234
+ dataTypes: event.dataTransfer.types,
235
+ });
223
236
  const pos = this.view.posAtCoords(event, false);
224
237
  view.dispatch({
225
238
  selection: { anchor: pos },
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"../../../../../src","sources":["markup/codemirror/files-upload-plugin/plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import type {ChangeSpec} from '@codemirror/state';\nimport {\n Decoration,\n type DecorationSet,\n type EditorView,\n type PluginValue,\n ViewPlugin,\n type ViewUpdate,\n WidgetType,\n} from '@codemirror/view';\n\nimport type {RendererItem} from '../../../extensions';\nimport {type FileUploadHandler, type FileUploadResult, getProportionalSize} from '../../../utils';\nimport {FileUploadHandlerFacet} from '../files-upload-facet';\nimport {ReactRendererFacet} from '../react-facet';\n\nimport {IMG_MAX_HEIGHT, SUCCESS_UPLOAD_REMOVE_TIMEOUT} from './const';\nimport {AddUploadWidgetEffect, RemoveUploadWidgetEffect} from './effects';\nimport {getImageDimensions, getTransferFiles, isImageFile, uniqueId} from './utils';\nimport {renderWidget} from './widget';\n\nclass FileUploadWidget extends WidgetType {\n readonly selfId: string;\n\n private presenter?: FileUploadPresenter;\n\n private renderer: RendererItem | null = null;\n private props: object = {};\n\n constructor(id: string) {\n super();\n this.selfId = id;\n }\n\n toDOM(view: EditorView): HTMLElement {\n const dom = document.createElement('div');\n dom.className = 'cm-file-upload-widget';\n dom.style.display = 'inline-block';\n this.renderer?.remove();\n this.createRenderItem(dom, view);\n return dom;\n }\n\n updateDOM(dom: HTMLElement, view: EditorView): boolean {\n this.renderer?.remove();\n this.createRenderItem(dom, view);\n return true;\n }\n\n destroy(dom: HTMLElement): void {\n super.destroy(dom);\n this.renderer?.remove();\n this.presenter?.cancel();\n this.presenter = undefined;\n }\n\n setPresenter(presenter: FileUploadPresenter) {\n this.presenter = presenter;\n }\n\n render(props: object) {\n Object.assign(this.props, props);\n this.renderer?.rerender();\n }\n\n private createRenderItem(dom: HTMLElement, view: EditorView) {\n this.renderer = view.state\n .facet(ReactRendererFacet)\n .createItem('cm-file-upload-widget', () => renderWidget(dom, {...(this.props as any)}));\n }\n}\n\nclass FileUploadPresenter {\n readonly widget: FileUploadWidget;\n\n private readonly file: File;\n private readonly view: EditorView;\n private readonly uploader: FileUploadHandler;\n private readonly needDimensionsForImages: boolean;\n private readonly enableNewImageSizeCalculation: boolean;\n\n private state: 'initial' | 'uploading' | 'success' | 'error' | 'canceled' = 'initial';\n\n constructor(params: {\n file: File;\n widget: FileUploadWidget;\n uploader: FileUploadHandler;\n view: EditorView;\n needDimensionsForImages: boolean;\n enableNewImageSizeCalculation: boolean;\n }) {\n this.file = params.file;\n this.view = params.view;\n this.widget = params.widget;\n this.uploader = params.uploader;\n this.needDimensionsForImages = params.needDimensionsForImages;\n this.enableNewImageSizeCalculation = params.enableNewImageSizeCalculation;\n this.widget.setPresenter(this);\n this.run();\n }\n\n cancel() {\n this.state = 'canceled';\n }\n\n private run() {\n this.state = 'uploading';\n this.widget.render({\n status: 'uploading',\n fileName: this.file.name,\n fileType: isImageFile(this.file) ? 'image' : 'file',\n });\n this.uploader(this.file).then(this.onUploadSuccess, this.onUploadError);\n }\n\n private onUploadSuccess = (res: FileUploadResult) => {\n if (this.state === 'canceled') return;\n this.state = 'success';\n this.widget.render({\n status: 'success',\n fileName: this.file.name,\n fileType: isImageFile(this.file) ? 'image' : 'file',\n });\n setTimeout(async () => {\n const markup = await this.formatFileMarkup(res);\n if (this.state === 'canceled') return;\n\n this.view.dispatch({\n effects: RemoveUploadWidgetEffect.of({\n id: this.widget.selfId,\n markup,\n }),\n });\n }, SUCCESS_UPLOAD_REMOVE_TIMEOUT);\n };\n\n private onUploadError = (err: unknown) => {\n if (this.state === 'canceled') return;\n this.state = 'error';\n this.widget.render({\n status: 'error',\n fileName: this.file.name,\n fileType: isImageFile(this.file) ? 'image' : 'file',\n errorText: String(err),\n onReUploadClick: () => {\n if (this.state === 'error') this.run();\n },\n });\n };\n\n private async formatFileMarkup(res: FileUploadResult) {\n const fileName = res.name ?? this.file.name ?? '';\n\n let markup = `![${fileName}](${res.url}`;\n\n if (isImageFile(this.file)) {\n if (this.needDimensionsForImages) {\n try {\n const fileSize = await getImageDimensions(this.file);\n\n if (this.enableNewImageSizeCalculation) {\n const {width, height} = getProportionalSize({\n width: fileSize.width,\n height: fileSize.height,\n imgMaxHeight: IMG_MAX_HEIGHT,\n });\n\n markup += ` =${width}x${height}`;\n } else {\n const height = Math.min(fileSize.height, IMG_MAX_HEIGHT);\n markup += ` =x${height}`;\n }\n } catch (err) {\n console.error(err);\n }\n }\n\n markup += `)`;\n } else {\n markup = `{% file src=\"${res.url}\" name=\"${fileName.replace('\"', '')}\" %}`;\n }\n\n return markup;\n }\n}\n\nexport const FilesUploadPlugin = ViewPlugin.fromClass(\n class implements PluginValue {\n decos: DecorationSet = Decoration.none;\n readonly view: EditorView;\n\n constructor(view: EditorView) {\n this.view = view;\n }\n\n update(update: ViewUpdate): void {\n this.decos = this.decos.map(update.changes);\n const uploadFacet = this.view.state.facet(FileUploadHandlerFacet);\n\n const changes: ChangeSpec[] = [];\n\n for (const tr of update.transactions) {\n for (const eff of tr.effects) {\n if (eff.is(AddUploadWidgetEffect)) {\n this.decos = this.decos.update({\n add: Array.from(eff.value.files).map((file, index) => {\n const {widget} = new FileUploadPresenter({\n file,\n view: this.view,\n uploader: uploadFacet.fn,\n needDimensionsForImages: Boolean(\n uploadFacet.imageWithDimensions,\n ),\n enableNewImageSizeCalculation: Boolean(\n uploadFacet.enableNewImageSizeCalculation,\n ),\n widget: new FileUploadWidget(uniqueId('__file_widget_id')),\n });\n return Decoration.widget({\n widget,\n side: 1,\n __file_widget_id: widget.selfId,\n }).range(eff.value.pos + index);\n }),\n });\n }\n if (eff.is(RemoveUploadWidgetEffect)) {\n this.decos = this.decos.update({\n filter: (from, to, deco) => {\n if (deco.spec.__file_widget_id !== eff.value.id) return true;\n if (eff.value.markup) {\n changes.push({from, to, insert: eff.value.markup});\n }\n return false;\n },\n });\n }\n }\n }\n\n if (changes.length) {\n setTimeout(() => {\n this.view.dispatch({changes});\n });\n }\n }\n },\n {\n decorations: (v) => v.decos,\n eventHandlers: {\n paste(event, view) {\n if (!event.clipboardData) return false;\n\n const files = getTransferFiles(event.clipboardData);\n if (!files) return false;\n\n const {from, to} = view.state.selection.main;\n\n view.dispatch({\n selection: {anchor: from},\n effects: AddUploadWidgetEffect.of({files, pos: from}),\n changes: {from, to, insert: ' '.repeat(files.length)},\n });\n event.preventDefault();\n return true;\n },\n drop(event, view) {\n if (!event.dataTransfer) return false;\n\n const files = getTransferFiles(event.dataTransfer);\n if (!files) return false;\n\n const pos = this.view.posAtCoords(event, false);\n view.dispatch({\n selection: {anchor: pos},\n effects: AddUploadWidgetEffect.of({files, pos}),\n changes: {from: pos, insert: ' '.repeat(files.length)},\n });\n event.preventDefault();\n return true;\n },\n },\n },\n);\n"]}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"../../../../../src","sources":["markup/codemirror/files-upload-plugin/plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import type {ChangeSpec} from '@codemirror/state';\nimport {\n Decoration,\n type DecorationSet,\n type EditorView,\n type PluginValue,\n ViewPlugin,\n type ViewUpdate,\n WidgetType,\n} from '@codemirror/view';\n\nimport type {RendererItem} from '../../../extensions';\nimport {type FileUploadHandler, type FileUploadResult, getProportionalSize} from '../../../utils';\nimport {FileUploadHandlerFacet} from '../files-upload-facet';\nimport {LoggerFacet} from '../logger-facet';\nimport {ReactRendererFacet} from '../react-facet';\n\nimport {IMG_MAX_HEIGHT, SUCCESS_UPLOAD_REMOVE_TIMEOUT} from './const';\nimport {AddUploadWidgetEffect, RemoveUploadWidgetEffect} from './effects';\nimport {getImageDimensions, getTransferFiles, isImageFile, uniqueId} from './utils';\nimport {renderWidget} from './widget';\n\nclass FileUploadWidget extends WidgetType {\n readonly selfId: string;\n\n private presenter?: FileUploadPresenter;\n\n private renderer: RendererItem | null = null;\n private props: object = {};\n\n constructor(id: string) {\n super();\n this.selfId = id;\n }\n\n toDOM(view: EditorView): HTMLElement {\n const dom = document.createElement('div');\n dom.className = 'cm-file-upload-widget';\n dom.style.display = 'inline-block';\n this.renderer?.remove();\n this.createRenderItem(dom, view);\n return dom;\n }\n\n updateDOM(dom: HTMLElement, view: EditorView): boolean {\n this.renderer?.remove();\n this.createRenderItem(dom, view);\n return true;\n }\n\n destroy(dom: HTMLElement): void {\n super.destroy(dom);\n this.renderer?.remove();\n this.presenter?.cancel();\n this.presenter = undefined;\n }\n\n setPresenter(presenter: FileUploadPresenter) {\n this.presenter = presenter;\n }\n\n render(props: object) {\n Object.assign(this.props, props);\n this.renderer?.rerender();\n }\n\n private createRenderItem(dom: HTMLElement, view: EditorView) {\n this.renderer = view.state\n .facet(ReactRendererFacet)\n .createItem('cm-file-upload-widget', () => renderWidget(dom, {...(this.props as any)}));\n }\n}\n\nclass FileUploadPresenter {\n readonly widget: FileUploadWidget;\n\n private readonly file: File;\n private readonly view: EditorView;\n private readonly uploader: FileUploadHandler;\n private readonly needDimensionsForImages: boolean;\n private readonly enableNewImageSizeCalculation: boolean;\n\n private state: 'initial' | 'uploading' | 'success' | 'error' | 'canceled' = 'initial';\n\n constructor(params: {\n file: File;\n widget: FileUploadWidget;\n uploader: FileUploadHandler;\n view: EditorView;\n needDimensionsForImages: boolean;\n enableNewImageSizeCalculation: boolean;\n }) {\n this.file = params.file;\n this.view = params.view;\n this.widget = params.widget;\n this.uploader = params.uploader;\n this.needDimensionsForImages = params.needDimensionsForImages;\n this.enableNewImageSizeCalculation = params.enableNewImageSizeCalculation;\n this.widget.setPresenter(this);\n this.run();\n }\n\n cancel() {\n this.state = 'canceled';\n }\n\n private run() {\n this.state = 'uploading';\n this.widget.render({\n status: 'uploading',\n fileName: this.file.name,\n fileType: isImageFile(this.file) ? 'image' : 'file',\n });\n this.uploader(this.file).then(this.onUploadSuccess, this.onUploadError);\n }\n\n private onUploadSuccess = (res: FileUploadResult) => {\n if (this.state === 'canceled') return;\n this.state = 'success';\n this.widget.render({\n status: 'success',\n fileName: this.file.name,\n fileType: isImageFile(this.file) ? 'image' : 'file',\n });\n setTimeout(async () => {\n const markup = await this.formatFileMarkup(res);\n if (this.state === 'canceled') return;\n\n this.view.dispatch({\n effects: RemoveUploadWidgetEffect.of({\n id: this.widget.selfId,\n markup,\n }),\n });\n }, SUCCESS_UPLOAD_REMOVE_TIMEOUT);\n };\n\n private onUploadError = (err: unknown) => {\n if (this.state === 'canceled') return;\n this.state = 'error';\n this.widget.render({\n status: 'error',\n fileName: this.file.name,\n fileType: isImageFile(this.file) ? 'image' : 'file',\n errorText: String(err),\n onReUploadClick: () => {\n if (this.state === 'error') this.run();\n },\n });\n };\n\n private async formatFileMarkup(res: FileUploadResult) {\n const fileName = res.name ?? this.file.name ?? '';\n\n let markup = `![${fileName}](${res.url}`;\n\n if (isImageFile(this.file)) {\n if (this.needDimensionsForImages) {\n try {\n const fileSize = await getImageDimensions(this.file);\n\n if (this.enableNewImageSizeCalculation) {\n const {width, height} = getProportionalSize({\n width: fileSize.width,\n height: fileSize.height,\n imgMaxHeight: IMG_MAX_HEIGHT,\n });\n\n markup += ` =${width}x${height}`;\n } else {\n const height = Math.min(fileSize.height, IMG_MAX_HEIGHT);\n markup += ` =x${height}`;\n }\n } catch (err) {\n console.error(err);\n }\n }\n\n markup += `)`;\n } else {\n markup = `{% file src=\"${res.url}\" name=\"${fileName.replace('\"', '')}\" %}`;\n }\n\n return markup;\n }\n}\n\nexport const FilesUploadPlugin = ViewPlugin.fromClass(\n class implements PluginValue {\n decos: DecorationSet = Decoration.none;\n readonly view: EditorView;\n\n constructor(view: EditorView) {\n this.view = view;\n }\n\n update(update: ViewUpdate): void {\n this.decos = this.decos.map(update.changes);\n const uploadFacet = this.view.state.facet(FileUploadHandlerFacet);\n\n const changes: ChangeSpec[] = [];\n\n for (const tr of update.transactions) {\n for (const eff of tr.effects) {\n if (eff.is(AddUploadWidgetEffect)) {\n this.decos = this.decos.update({\n add: Array.from(eff.value.files).map((file, index) => {\n const {widget} = new FileUploadPresenter({\n file,\n view: this.view,\n uploader: uploadFacet.fn,\n needDimensionsForImages: Boolean(\n uploadFacet.imageWithDimensions,\n ),\n enableNewImageSizeCalculation: Boolean(\n uploadFacet.enableNewImageSizeCalculation,\n ),\n widget: new FileUploadWidget(uniqueId('__file_widget_id')),\n });\n return Decoration.widget({\n widget,\n side: 1,\n __file_widget_id: widget.selfId,\n }).range(eff.value.pos + index);\n }),\n });\n }\n if (eff.is(RemoveUploadWidgetEffect)) {\n this.decos = this.decos.update({\n filter: (from, to, deco) => {\n if (deco.spec.__file_widget_id !== eff.value.id) return true;\n if (eff.value.markup) {\n changes.push({from, to, insert: eff.value.markup});\n }\n return false;\n },\n });\n }\n }\n }\n\n if (changes.length) {\n setTimeout(() => {\n this.view.dispatch({changes});\n });\n }\n }\n },\n {\n decorations: (v) => v.decos,\n eventHandlers: {\n paste(event, view) {\n if (!event.clipboardData) return false;\n\n const files = getTransferFiles(event.clipboardData);\n if (!files) return false;\n\n const {from, to} = view.state.selection.main;\n\n view.state.facet(LoggerFacet).event({\n domEvent: 'paste',\n event: 'paste-files',\n plugin: 'files-upload',\n dataTypes: event.clipboardData.types,\n });\n\n view.dispatch({\n selection: {anchor: from},\n effects: AddUploadWidgetEffect.of({files, pos: from}),\n changes: {from, to, insert: ' '.repeat(files.length)},\n });\n event.preventDefault();\n return true;\n },\n drop(event, view) {\n if (!event.dataTransfer) return false;\n\n const files = getTransferFiles(event.dataTransfer);\n if (!files) return false;\n\n view.state.facet(LoggerFacet).event({\n domEvent: 'drop',\n event: 'drop-files',\n plugin: 'files-upload',\n dataTypes: event.dataTransfer.types,\n });\n\n const pos = this.view.posAtCoords(event, false);\n view.dispatch({\n selection: {anchor: pos},\n effects: AddUploadWidgetEffect.of({files, pos}),\n changes: {from: pos, insert: ' '.repeat(files.length)},\n });\n event.preventDefault();\n return true;\n },\n },\n },\n);\n"]}
@@ -0,0 +1,3 @@
1
+ import { Facet } from '@codemirror/state';
2
+ import type { Logger2 } from "../../logger.js";
3
+ export declare const LoggerFacet: Facet<Logger2.ILogger, Logger2.ILogger>;
@@ -0,0 +1,6 @@
1
+ import { Facet } from '@codemirror/state';
2
+ export const LoggerFacet = Facet.define({
3
+ combine: (value) => value[0],
4
+ static: true,
5
+ });
6
+ //# sourceMappingURL=logger-facet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger-facet.js","sourceRoot":"../../../../src","sources":["markup/codemirror/logger-facet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAIxC,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAmC;IACtE,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,IAAI;CACf,CAAC,CAAC","sourcesContent":["import {Facet} from '@codemirror/state';\n\nimport type {Logger2} from '../../logger';\n\nexport const LoggerFacet = Facet.define<Logger2.ILogger, Logger2.ILogger>({\n combine: (value) => value[0],\n static: true,\n});\n"]}
@@ -14,6 +14,7 @@ export declare class EventEmitter<T extends object = UnkObj> implements Emitter<
14
14
  on<K extends keyof T>(type: K, listener: Listener<T[K]>): void;
15
15
  off<K extends keyof T>(type: K, listener: Listener<T[K]>): void;
16
16
  emit<K extends keyof T>(type: K, value: T[K]): void;
17
+ countOf<K extends keyof T>(type: K): number;
17
18
  }
18
19
  export declare class SafeEventEmitter<T extends object = UnkObj> extends EventEmitter<T> {
19
20
  private onError;
@@ -14,6 +14,9 @@ export class EventEmitter {
14
14
  emit(type, value) {
15
15
  this._listeners.get(type)?.forEach((listener) => listener(value));
16
16
  }
17
+ countOf(type) {
18
+ return this._listeners.get(type)?.length || 0;
19
+ }
17
20
  }
18
21
  export class SafeEventEmitter extends EventEmitter {
19
22
  onError;
@@ -1 +1 @@
1
- {"version":3,"file":"event-emitter.js","sourceRoot":"../../../src","sources":["utils/event-emitter.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,YAAY;IACX,UAAU,GAAG,IAAI,GAAG,EAA4B,CAAC;IAE3D,EAAE,CAAoB,IAAO,EAAE,QAAwB;QACnD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,GAAG,CAAoB,IAAO,EAAE,QAAwB;QACpD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CACf,IAAI,EACJ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,CAC/D,CAAC;QACN,CAAC;IACL,CAAC;IAED,IAAI,CAAoB,IAAO,EAAE,KAAW;QACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,CAAC;CACJ;AAED,MAAM,OAAO,gBAA4C,SAAQ,YAAe;IACpE,OAAO,CAA2B;IAE1C,YAAY,OAA8C;QACtD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;IACrD,CAAC;IAED,IAAI,CAAoB,IAAO,EAAE,KAAW;QACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3F,CAAC;IAEO,QAAQ,CAAC,EAAc;QAC3B,IAAI,CAAC;YACD,EAAE,EAAE,CAAC;QACT,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;CACJ","sourcesContent":["type UnkObj = {[key: string]: unknown};\n\nexport type Listener<T> = (value: T) => void;\n\nexport interface Emitter<T extends object = UnkObj> {\n emit<K extends keyof T>(type: K, data: T[K]): void;\n}\n\nexport interface Receiver<T extends object = UnkObj> {\n on<K extends keyof T>(type: K, listener: Listener<T[K]>): void;\n off<K extends keyof T>(type: K, listener: Listener<T[K]>): void;\n}\n\nexport class EventEmitter<T extends object = UnkObj> implements Emitter<T>, Receiver<T> {\n protected _listeners = new Map<keyof T, Listener<any>[]>();\n\n on<K extends keyof T>(type: K, listener: Listener<T[K]>): void {\n if (!this._listeners.has(type)) {\n this._listeners.set(type, []);\n }\n this._listeners.get(type)!.push(listener);\n }\n\n off<K extends keyof T>(type: K, listener: Listener<T[K]>): void {\n if (this._listeners.has(type)) {\n this._listeners.set(\n type,\n this._listeners.get(type)!.filter((val) => val !== listener),\n );\n }\n }\n\n emit<K extends keyof T>(type: K, value: T[K]): void {\n this._listeners.get(type)?.forEach((listener) => listener(value));\n }\n}\n\nexport class SafeEventEmitter<T extends object = UnkObj> extends EventEmitter<T> {\n private onError: (error: unknown) => void;\n\n constructor(options?: {onError?: (error: unknown) => void}) {\n super();\n this.onError = options?.onError ?? console.error;\n }\n\n emit<K extends keyof T>(type: K, value: T[K]): void {\n this._listeners.get(type)?.forEach((listener) => this.safeExec(() => listener(value)));\n }\n\n private safeExec(fn: () => void): void {\n try {\n fn();\n } catch (e) {\n this.onError(e);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"event-emitter.js","sourceRoot":"../../../src","sources":["utils/event-emitter.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,YAAY;IACX,UAAU,GAAG,IAAI,GAAG,EAA4B,CAAC;IAE3D,EAAE,CAAoB,IAAO,EAAE,QAAwB;QACnD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,GAAG,CAAoB,IAAO,EAAE,QAAwB;QACpD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CACf,IAAI,EACJ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,CAC/D,CAAC;QACN,CAAC;IACL,CAAC;IAED,IAAI,CAAoB,IAAO,EAAE,KAAW;QACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,CAAoB,IAAO;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IAClD,CAAC;CACJ;AAED,MAAM,OAAO,gBAA4C,SAAQ,YAAe;IACpE,OAAO,CAA2B;IAE1C,YAAY,OAA8C;QACtD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;IACrD,CAAC;IAED,IAAI,CAAoB,IAAO,EAAE,KAAW;QACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3F,CAAC;IAEO,QAAQ,CAAC,EAAc;QAC3B,IAAI,CAAC;YACD,EAAE,EAAE,CAAC;QACT,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;CACJ","sourcesContent":["type UnkObj = {[key: string]: unknown};\n\nexport type Listener<T> = (value: T) => void;\n\nexport interface Emitter<T extends object = UnkObj> {\n emit<K extends keyof T>(type: K, data: T[K]): void;\n}\n\nexport interface Receiver<T extends object = UnkObj> {\n on<K extends keyof T>(type: K, listener: Listener<T[K]>): void;\n off<K extends keyof T>(type: K, listener: Listener<T[K]>): void;\n}\n\nexport class EventEmitter<T extends object = UnkObj> implements Emitter<T>, Receiver<T> {\n protected _listeners = new Map<keyof T, Listener<any>[]>();\n\n on<K extends keyof T>(type: K, listener: Listener<T[K]>): void {\n if (!this._listeners.has(type)) {\n this._listeners.set(type, []);\n }\n this._listeners.get(type)!.push(listener);\n }\n\n off<K extends keyof T>(type: K, listener: Listener<T[K]>): void {\n if (this._listeners.has(type)) {\n this._listeners.set(\n type,\n this._listeners.get(type)!.filter((val) => val !== listener),\n );\n }\n }\n\n emit<K extends keyof T>(type: K, value: T[K]): void {\n this._listeners.get(type)?.forEach((listener) => listener(value));\n }\n\n countOf<K extends keyof T>(type: K): number {\n return this._listeners.get(type)?.length || 0;\n }\n}\n\nexport class SafeEventEmitter<T extends object = UnkObj> extends EventEmitter<T> {\n private onError: (error: unknown) => void;\n\n constructor(options?: {onError?: (error: unknown) => void}) {\n super();\n this.onError = options?.onError ?? console.error;\n }\n\n emit<K extends keyof T>(type: K, value: T[K]): void {\n this._listeners.get(type)?.forEach((listener) => this.safeExec(() => listener(value)));\n }\n\n private safeExec(fn: () => void): void {\n try {\n fn();\n } catch (e) {\n this.onError(e);\n }\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,29 @@
1
+ // Partial realization of Facet from CodeMirror, but for ProseMirror
2
+ import { Plugin, PluginKey } from 'prosemirror-state';
3
+ import { uniqueId } from "../lodash.js";
4
+ /** @internal @unstable */
5
+ export class Facet {
6
+ static define(config) {
7
+ return new this(config);
8
+ }
9
+ _combine;
10
+ _key;
11
+ constructor(config) {
12
+ this._combine = config.combine;
13
+ this._key = new PluginKey(`Facet${config.static ? '_static' : ''}:${config.name || ''}:${uniqueId()}`);
14
+ }
15
+ of(value) {
16
+ const output = this._combine([value]);
17
+ return new Plugin({
18
+ key: this._key,
19
+ state: {
20
+ init: () => output,
21
+ apply: () => output,
22
+ },
23
+ });
24
+ }
25
+ getState(state) {
26
+ return this._key.getState(state);
27
+ }
28
+ }
29
+ //# sourceMappingURL=facet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facet.js","sourceRoot":"../../../src","sources":["utils/facet.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,OAAO,EAAmB,MAAM,EAAE,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAEtE,OAAO,EAAC,QAAQ,EAAC,qBAAkB;AASnC,0BAA0B;AAC1B,MAAM,OAAO,KAAK;IACd,MAAM,CAAC,MAAM,CACT,MAAkC;QAElC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAEgB,QAAQ,CAAC;IACT,IAAI,CAAoB;IAEzC,YAAoB,MAAkC;QAClD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,CACrB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,QAAQ,EAAE,EAAE,CAC9E,CAAC;IACN,CAAC;IAED,EAAE,CAAC,KAAY;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,OAAO,IAAI,MAAM,CAAS;YACtB,GAAG,EAAE,IAAI,CAAC,IAAI;YACd,KAAK,EAAE;gBACH,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM;gBAClB,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM;aACtB;SACJ,CAAC,CAAC;IACP,CAAC;IAED,QAAQ,CAAC,KAAkB;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;CACJ","sourcesContent":["// Partial realization of Facet from CodeMirror, but for ProseMirror\n\nimport {type EditorState, Plugin, PluginKey} from 'prosemirror-state';\n\nimport {uniqueId} from '../lodash';\n\n/** @internal @unstable */\nexport type FacetConfig<Input, Output> = {\n combine: (value: readonly Input[]) => Output;\n static: true;\n name?: string;\n};\n\n/** @internal @unstable */\nexport class Facet<Input, Output = readonly Input[]> {\n static define<Input, Output = readonly Input[]>(\n config: FacetConfig<Input, Output>,\n ): Facet<Input, Output> {\n return new this(config);\n }\n\n private readonly _combine;\n private readonly _key: PluginKey<Output>;\n\n private constructor(config: FacetConfig<Input, Output>) {\n this._combine = config.combine;\n this._key = new PluginKey(\n `Facet${config.static ? '_static' : ''}:${config.name || ''}:${uniqueId()}`,\n );\n }\n\n of(value: Input): Plugin<Output> {\n const output = this._combine([value]);\n return new Plugin<Output>({\n key: this._key,\n state: {\n init: () => output,\n apply: () => output,\n },\n });\n }\n\n getState(state: EditorState): Output | undefined {\n return this._key.getState(state);\n }\n}\n"]}
@@ -1,9 +1,14 @@
1
- import { logger } from "../logger.js";
1
+ import { getLoggerFromState } from "../core/index.js";
2
+ import { globalLogger } from "../logger.js";
2
3
  export function withLogAction(action, command) {
3
4
  return (...args) => {
4
5
  const res = command(...args);
5
- if (res)
6
+ if (res) {
7
+ const [state] = args;
8
+ const logger = getLoggerFromState(state);
6
9
  logger.action({ action, source: 'keymap' });
10
+ globalLogger.action({ action, source: 'keymap', mode: 'wysiwyg' });
11
+ }
7
12
  return res;
8
13
  };
9
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"keymap.js","sourceRoot":"../../../src","sources":["utils/keymap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,MAAM,EAAC,qBAAkB;AAEjC,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,OAAgB;IAC1D,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE;QACf,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7B,IAAI,GAAG;YAAE,MAAM,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC,CAAC,CAAC;QACnD,OAAO,GAAG,CAAC;IACf,CAAC,CAAC;AACN,CAAC","sourcesContent":["import type {Command} from 'prosemirror-state';\n\nimport {logger} from '../logger';\n\nexport function withLogAction(action: string, command: Command): Command {\n return (...args) => {\n const res = command(...args);\n if (res) logger.action({action, source: 'keymap'});\n return res;\n };\n}\n"]}
1
+ {"version":3,"file":"keymap.js","sourceRoot":"../../../src","sources":["utils/keymap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,kBAAkB,EAAC,yBAAgB;AAC3C,OAAO,EAAC,YAAY,EAAC,qBAAkB;AAEvC,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,OAAgB;IAC1D,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE;QACf,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7B,IAAI,GAAG,EAAE,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;YACrB,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC,CAAC,CAAC;YAC1C,YAAY,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAC,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC,CAAC;AACN,CAAC","sourcesContent":["import type {Command} from 'prosemirror-state';\n\nimport {getLoggerFromState} from '../core';\nimport {globalLogger} from '../logger';\n\nexport function withLogAction(action: string, command: Command): Command {\n return (...args) => {\n const res = command(...args);\n if (res) {\n const [state] = args;\n const logger = getLoggerFromState(state);\n logger.action({action, source: 'keymap'});\n globalLogger.action({action, source: 'keymap', mode: 'wysiwyg'});\n }\n return res;\n };\n}\n"]}
@@ -1,3 +1,3 @@
1
1
  /** During build process, the current version will be injected here */
2
- export const VERSION = typeof '15.0.2' !== 'undefined' ? '15.0.2' : 'unknown';
2
+ export const VERSION = typeof '15.2.0' !== 'undefined' ? '15.2.0' : 'unknown';
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"../../src","sources":["version.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["/** During build process, the current version will be injected here */\nexport const VERSION = typeof '15.0.2' !== 'undefined' ? '15.0.2' : 'unknown';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"../../src","sources":["version.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["/** During build process, the current version will be injected here */\nexport const VERSION = typeof '15.2.0' !== 'undefined' ? '15.2.0' : 'unknown';\n"]}
package/build/styles.css CHANGED
@@ -1162,7 +1162,7 @@ body :has(.g-md-resizable_resizing) {
1162
1162
  .ProseMirror.yfm .yfm-cut .yfm-cut-title:focus {
1163
1163
  outline: 0;
1164
1164
  }
1165
- .ProseMirror.yfm .yfm-cut.open .yfm-cut-title:before {
1165
+ .ProseMirror.yfm .yfm-cut.open > .yfm-cut-title:before {
1166
1166
  transform: translateY(-50%);
1167
1167
  }
1168
1168
  .yfm-editor .yfm-file {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/markdown-editor",
3
- "version": "15.0.2",
3
+ "version": "15.2.0",
4
4
  "description": "Markdown wysiwyg and markup editor",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -259,7 +259,7 @@
259
259
  "jsdom": "25.0.1",
260
260
  "lowlight": "3.0.0",
261
261
  "markdown-it-testgen": "^0.1.6",
262
- "mermaid": "10.9.3",
262
+ "mermaid": "11.4.1",
263
263
  "npm-run-all": "^4.1.5",
264
264
  "postcss": "^8.4.27",
265
265
  "prettier": "3.1.1",