@gravity-ui/markdown-editor 15.1.0 → 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 (221) 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/utils.d.ts +2 -1
  84. package/build/cjs/extensions/yfm/ImgSize/utils.js +3 -2
  85. package/build/cjs/extensions/yfm/ImgSize/utils.js.map +1 -1
  86. package/build/cjs/extensions/yfm/YfmFile/YfmFilePaste/index.d.ts +1 -1
  87. package/build/cjs/extensions/yfm/YfmFile/YfmFilePaste/index.js +15 -1
  88. package/build/cjs/extensions/yfm/YfmFile/YfmFilePaste/index.js.map +1 -1
  89. package/build/cjs/i18n/yfm-note/index.d.ts +1 -1
  90. package/build/cjs/logger.d.ts +75 -0
  91. package/build/cjs/logger.js +89 -1
  92. package/build/cjs/logger.js.map +1 -1
  93. package/build/cjs/markup/codemirror/create.d.ts +2 -0
  94. package/build/cjs/markup/codemirror/create.js +15 -4
  95. package/build/cjs/markup/codemirror/create.js.map +1 -1
  96. package/build/cjs/markup/codemirror/files-upload-plugin/plugin.js +13 -0
  97. package/build/cjs/markup/codemirror/files-upload-plugin/plugin.js.map +1 -1
  98. package/build/cjs/markup/codemirror/logger-facet.d.ts +3 -0
  99. package/build/cjs/markup/codemirror/logger-facet.js +9 -0
  100. package/build/cjs/markup/codemirror/logger-facet.js.map +1 -0
  101. package/build/cjs/utils/event-emitter.d.ts +1 -0
  102. package/build/cjs/utils/event-emitter.js +3 -0
  103. package/build/cjs/utils/event-emitter.js.map +1 -1
  104. package/build/cjs/utils/facet.d.ts +1 -0
  105. package/build/cjs/utils/facet.js +33 -0
  106. package/build/cjs/utils/facet.js.map +1 -0
  107. package/build/cjs/utils/keymap.js +7 -2
  108. package/build/cjs/utils/keymap.js.map +1 -1
  109. package/build/cjs/version.js +1 -1
  110. package/build/cjs/version.js.map +1 -1
  111. package/build/esm/bundle/Editor.d.ts +3 -0
  112. package/build/esm/bundle/Editor.js +22 -3
  113. package/build/esm/bundle/Editor.js.map +1 -1
  114. package/build/esm/bundle/MarkdownEditorView.js +3 -2
  115. package/build/esm/bundle/MarkdownEditorView.js.map +1 -1
  116. package/build/esm/bundle/MarkupEditorView.js +7 -2
  117. package/build/esm/bundle/MarkupEditorView.js.map +1 -1
  118. package/build/esm/bundle/MarkupManager.d.ts +3 -6
  119. package/build/esm/bundle/MarkupManager.js +5 -5
  120. package/build/esm/bundle/MarkupManager.js.map +1 -1
  121. package/build/esm/bundle/WysiwygEditorView.js +7 -2
  122. package/build/esm/bundle/WysiwygEditorView.js.map +1 -1
  123. package/build/esm/bundle/types.d.ts +2 -0
  124. package/build/esm/bundle/types.js.map +1 -1
  125. package/build/esm/bundle/useMarkdownEditor.js +5 -3
  126. package/build/esm/bundle/useMarkdownEditor.js.map +1 -1
  127. package/build/esm/core/Editor.d.ts +3 -1
  128. package/build/esm/core/Editor.js +6 -3
  129. package/build/esm/core/Editor.js.map +1 -1
  130. package/build/esm/core/ExtensionBuilder.d.ts +3 -1
  131. package/build/esm/core/ExtensionBuilder.js +6 -1
  132. package/build/esm/core/ExtensionBuilder.js.map +1 -1
  133. package/build/esm/core/ExtensionsManager.d.ts +4 -2
  134. package/build/esm/core/ExtensionsManager.js +6 -5
  135. package/build/esm/core/ExtensionsManager.js.map +1 -1
  136. package/build/esm/core/ParserTokensRegistry.d.ts +6 -0
  137. package/build/esm/core/ParserTokensRegistry.js +9 -1
  138. package/build/esm/core/ParserTokensRegistry.js.map +1 -1
  139. package/build/esm/core/index.d.ts +1 -0
  140. package/build/esm/core/index.js +1 -0
  141. package/build/esm/core/index.js.map +1 -1
  142. package/build/esm/core/markdown/MarkdownParser.d.ts +9 -1
  143. package/build/esm/core/markdown/MarkdownParser.js +7 -3
  144. package/build/esm/core/markdown/MarkdownParser.js.map +1 -1
  145. package/build/esm/core/utils/logger.d.ts +3 -0
  146. package/build/esm/core/utils/logger.js +8 -0
  147. package/build/esm/core/utils/logger.js.map +1 -0
  148. package/build/esm/core/utils/metrics.d.ts +2 -1
  149. package/build/esm/core/utils/metrics.js +8 -2
  150. package/build/esm/core/utils/metrics.js.map +1 -1
  151. package/build/esm/extensions/behavior/Autocomplete/handler.d.ts +3 -1
  152. package/build/esm/extensions/behavior/Autocomplete/handler.js +15 -9
  153. package/build/esm/extensions/behavior/Autocomplete/handler.js.map +1 -1
  154. package/build/esm/extensions/behavior/Autocomplete/index.js +1 -1
  155. package/build/esm/extensions/behavior/Autocomplete/index.js.map +1 -1
  156. package/build/esm/extensions/behavior/Clipboard/clipboard.d.ts +3 -1
  157. package/build/esm/extensions/behavior/Clipboard/clipboard.js +32 -4
  158. package/build/esm/extensions/behavior/Clipboard/clipboard.js.map +1 -1
  159. package/build/esm/extensions/behavior/Clipboard/index.js +4 -0
  160. package/build/esm/extensions/behavior/Clipboard/index.js.map +1 -1
  161. package/build/esm/extensions/behavior/CommandMenu/handler.d.ts +3 -1
  162. package/build/esm/extensions/behavior/CommandMenu/handler.js +7 -4
  163. package/build/esm/extensions/behavior/CommandMenu/handler.js.map +1 -1
  164. package/build/esm/extensions/behavior/CommandMenu/index.js +6 -4
  165. package/build/esm/extensions/behavior/CommandMenu/index.js.map +1 -1
  166. package/build/esm/extensions/behavior/EditorModeKeymap/index.js +13 -2
  167. package/build/esm/extensions/behavior/EditorModeKeymap/index.js.map +1 -1
  168. package/build/esm/extensions/behavior/FilePaste/index.d.ts +1 -1
  169. package/build/esm/extensions/behavior/FilePaste/index.js +12 -0
  170. package/build/esm/extensions/behavior/FilePaste/index.js.map +1 -1
  171. package/build/esm/extensions/behavior/SelectionContext/index.js +3 -3
  172. package/build/esm/extensions/behavior/SelectionContext/index.js.map +1 -1
  173. package/build/esm/extensions/behavior/SelectionContext/tooltip.d.ts +3 -1
  174. package/build/esm/extensions/behavior/SelectionContext/tooltip.js +8 -3
  175. package/build/esm/extensions/behavior/SelectionContext/tooltip.js.map +1 -1
  176. package/build/esm/extensions/behavior/utils/upload.d.ts +2 -0
  177. package/build/esm/extensions/behavior/utils/upload.js +3 -0
  178. package/build/esm/extensions/behavior/utils/upload.js.map +1 -1
  179. package/build/esm/extensions/markdown/Breaks/index.js +3 -2
  180. package/build/esm/extensions/markdown/Breaks/index.js.map +1 -1
  181. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +3 -2
  182. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
  183. package/build/esm/extensions/markdown/Html/index.js +3 -2
  184. package/build/esm/extensions/markdown/Html/index.js.map +1 -1
  185. package/build/esm/extensions/markdown/Link/paste-plugin.d.ts +1 -1
  186. package/build/esm/extensions/markdown/Link/paste-plugin.js +11 -0
  187. package/build/esm/extensions/markdown/Link/paste-plugin.js.map +1 -1
  188. package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.d.ts +1 -1
  189. package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.js +14 -0
  190. package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.js.map +1 -1
  191. package/build/esm/extensions/yfm/ImgSize/ImagePaste/upload.js +7 -6
  192. package/build/esm/extensions/yfm/ImgSize/ImagePaste/upload.js.map +1 -1
  193. package/build/esm/extensions/yfm/ImgSize/utils.d.ts +2 -1
  194. package/build/esm/extensions/yfm/ImgSize/utils.js +4 -3
  195. package/build/esm/extensions/yfm/ImgSize/utils.js.map +1 -1
  196. package/build/esm/extensions/yfm/YfmFile/YfmFilePaste/index.d.ts +1 -1
  197. package/build/esm/extensions/yfm/YfmFile/YfmFilePaste/index.js +15 -1
  198. package/build/esm/extensions/yfm/YfmFile/YfmFilePaste/index.js.map +1 -1
  199. package/build/esm/i18n/yfm-note/index.d.ts +1 -1
  200. package/build/esm/logger.d.ts +75 -0
  201. package/build/esm/logger.js +87 -0
  202. package/build/esm/logger.js.map +1 -1
  203. package/build/esm/markup/codemirror/create.d.ts +2 -0
  204. package/build/esm/markup/codemirror/create.js +16 -5
  205. package/build/esm/markup/codemirror/create.js.map +1 -1
  206. package/build/esm/markup/codemirror/files-upload-plugin/plugin.js +13 -0
  207. package/build/esm/markup/codemirror/files-upload-plugin/plugin.js.map +1 -1
  208. package/build/esm/markup/codemirror/logger-facet.d.ts +3 -0
  209. package/build/esm/markup/codemirror/logger-facet.js +6 -0
  210. package/build/esm/markup/codemirror/logger-facet.js.map +1 -0
  211. package/build/esm/utils/event-emitter.d.ts +1 -0
  212. package/build/esm/utils/event-emitter.js +3 -0
  213. package/build/esm/utils/event-emitter.js.map +1 -1
  214. package/build/esm/utils/facet.d.ts +1 -0
  215. package/build/esm/utils/facet.js +29 -0
  216. package/build/esm/utils/facet.js.map +1 -0
  217. package/build/esm/utils/keymap.js +7 -2
  218. package/build/esm/utils/keymap.js.map +1 -1
  219. package/build/esm/version.js +1 -1
  220. package/build/esm/version.js.map +1 -1
  221. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"MarkupManager.js","sourceRoot":"../../../src","sources":["bundle/MarkupManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAC,MAAM,MAAM,CAAC;AAExB,OAAO,EAAC,gBAAgB,EAAC,0BAAiB;AAsB1C,MAAM,OAAO,aAAc,SAAQ,gBAAwB;IAC/C,QAAQ,GAAwB,IAAI,GAAG,EAAE,CAAC;IAC1C,MAAM,GAAsB,IAAI,GAAG,EAAE,CAAC;IACtC,UAAU,CAAS;IAEV,MAAM,CAAU;IAEjC,YAAY,MAAe;QACvB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,EAAU,EAAE,SAAiB;QACnC,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,4CAA4C,CAAC,CAAC;YACjE,OAAO;QACX,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAEjC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAC,EAAE,EAAE,SAAS,EAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,qCAAqC,EAAE,mBAAmB,CAAC,CAAC;IACjF,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,EAAU,EAAE,IAAU;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,uDAAuD,CAAC,CAAC;YAC5E,OAAO;QACX,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAE1B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAC,EAAE,EAAE,IAAI,EAAC,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,+BAA+B,EAAE,mBAAmB,CAAC,CAAC;IAC3E,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,EAAU;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACvC,CAAC;IAED,YAAY;QACR,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAEpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACvB,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,8CAA8C,CAAC,CAAC;IACrE,CAAC;CACJ","sourcesContent":["import type {Node} from 'prosemirror-model';\nimport {v4} from 'uuid';\n\nimport {SafeEventEmitter} from '../utils';\n\nexport interface IMarkupManager {\n setMarkup(id: string, rawMarkup: string): void;\n setNode(id: string, node: Node): void;\n getMarkup(id: string): string | null;\n getNode(id: string): Node | null;\n reset(): void;\n on<K extends keyof Events>(event: K, listener: (value: Events[K]) => void): void;\n}\n\nexport interface Logger {\n log(message: string): void;\n error(message: string): void;\n}\n\ninterface Events {\n markupChanged: {id: string; rawMarkup: string};\n nodeChanged: {id: string; node: Node};\n reset: {};\n}\n\nexport class MarkupManager extends SafeEventEmitter<Events> implements IMarkupManager {\n private _markups: Map<string, string> = new Map();\n private _nodes: Map<string, Node> = new Map();\n private _namespace: string;\n\n private readonly logger?: Logger;\n\n constructor(logger?: Logger) {\n super();\n this.logger = logger;\n this._namespace = v4();\n }\n\n /**\n * Set raw markup for a specific id\n */\n setMarkup(id: string, rawMarkup: string): void {\n if (typeof rawMarkup !== 'string') {\n this.logger?.error('[MarkupManager] rawMarkup must be a string');\n return;\n }\n this._markups.set(id, rawMarkup);\n\n this.emit('markupChanged', {id, rawMarkup});\n this.logger?.log(`[MarkupManager] Raw markup for ID ${id} set successfully`);\n }\n\n /**\n * Set a node for a specific id\n */\n setNode(id: string, node: Node): void {\n if (!node) {\n this.logger?.error('[MarkupManager] Node must be a valid ProseMirror Node');\n return;\n }\n this._nodes.set(id, node);\n\n this.emit('nodeChanged', {id, node});\n this.logger?.log(`[MarkupManager] Node for ID ${id} set successfully`);\n }\n\n /**\n * Get raw markup for a specific id\n */\n getMarkup(id: string): string | null {\n return this._markups.get(id) ?? null;\n }\n\n /**\n * Get a node for a specific id\n */\n getNode(id: string): Node | null {\n return this._nodes.get(id) ?? null;\n }\n\n getNamespace(): string {\n return this._namespace;\n }\n\n /**\n * Reset the stored markups and nodes\n */\n reset(): void {\n this._markups.clear();\n this._nodes.clear();\n\n this.emit('reset', {});\n this.logger?.log('[MarkupManager] MarkupManager has been reset');\n }\n}\n"]}
1
+ {"version":3,"file":"MarkupManager.js","sourceRoot":"../../../src","sources":["bundle/MarkupManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAC,MAAM,MAAM,CAAC;AAGxB,OAAO,EAAC,gBAAgB,EAAC,0BAAiB;AAiB1C,MAAM,OAAO,aAAc,SAAQ,gBAAwB;IAC/C,QAAQ,GAAwB,IAAI,GAAG,EAAE,CAAC;IAC1C,MAAM,GAAsB,IAAI,GAAG,EAAE,CAAC;IACtC,UAAU,CAAS;IAEV,MAAM,CAAkB;IAEzC,YAAY,MAAuB;QAC/B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,EAAU,EAAE,SAAiB;QACnC,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;YAC/D,OAAO;QACX,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAEjC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAC,EAAE,EAAE,SAAS,EAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,qCAAqC,EAAE,mBAAmB,CAAC,CAAC;IAChF,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,EAAU,EAAE,IAAU;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;YAC1E,OAAO;QACX,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAE1B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAC,EAAE,EAAE,IAAI,EAAC,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,+BAA+B,EAAE,mBAAmB,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,EAAU;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACvC,CAAC;IAED,YAAY;QACR,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAEpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IACpE,CAAC;CACJ","sourcesContent":["import type {Node} from 'prosemirror-model';\nimport {v4} from 'uuid';\n\nimport type {Logger2} from '../logger';\nimport {SafeEventEmitter} from '../utils';\n\nexport interface IMarkupManager {\n setMarkup(id: string, rawMarkup: string): void;\n setNode(id: string, node: Node): void;\n getMarkup(id: string): string | null;\n getNode(id: string): Node | null;\n reset(): void;\n on<K extends keyof Events>(event: K, listener: (value: Events[K]) => void): void;\n}\n\ninterface Events {\n markupChanged: {id: string; rawMarkup: string};\n nodeChanged: {id: string; node: Node};\n reset: {};\n}\n\nexport class MarkupManager extends SafeEventEmitter<Events> implements IMarkupManager {\n private _markups: Map<string, string> = new Map();\n private _nodes: Map<string, Node> = new Map();\n private _namespace: string;\n\n private readonly logger: Logger2.ILogger;\n\n constructor(logger: Logger2.ILogger) {\n super();\n this.logger = logger;\n this._namespace = v4();\n }\n\n /**\n * Set raw markup for a specific id\n */\n setMarkup(id: string, rawMarkup: string): void {\n if (typeof rawMarkup !== 'string') {\n this.logger.warn('[MarkupManager] rawMarkup must be a string');\n return;\n }\n this._markups.set(id, rawMarkup);\n\n this.emit('markupChanged', {id, rawMarkup});\n this.logger.log(`[MarkupManager] Raw markup for ID ${id} set successfully`);\n }\n\n /**\n * Set a node for a specific id\n */\n setNode(id: string, node: Node): void {\n if (!node) {\n this.logger.warn('[MarkupManager] Node must be a valid ProseMirror Node');\n return;\n }\n this._nodes.set(id, node);\n\n this.emit('nodeChanged', {id, node});\n this.logger.log(`[MarkupManager] Node for ID ${id} set successfully`);\n }\n\n /**\n * Get raw markup for a specific id\n */\n getMarkup(id: string): string | null {\n return this._markups.get(id) ?? null;\n }\n\n /**\n * Get a node for a specific id\n */\n getNode(id: string): Node | null {\n return this._nodes.get(id) ?? null;\n }\n\n getNamespace(): string {\n return this._namespace;\n }\n\n /**\n * Reset the stored markups and nodes\n */\n reset(): void {\n this._markups.clear();\n this._nodes.clear();\n\n this.emit('reset', {});\n this.logger.log('[MarkupManager] MarkupManager has been reset');\n }\n}\n"]}
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { memo } from 'react';
3
3
  import { cn } from "../classname.js";
4
4
  import { ReactRendererComponent } from "../extensions/index.js";
5
- import { logger } from "../logger.js";
5
+ import { globalLogger } from "../logger.js";
6
6
  import { useRenderTime } from "../react-utils/hooks.js";
7
7
  import { ToolbarView } from "./ToolbarView.js";
8
8
  import { WysiwygEditorComponent } from "./WysiwygEditorComponent.js";
@@ -11,7 +11,12 @@ const b = cn('wysiwyg-editor');
11
11
  export const WysiwygEditorView = memo((props) => {
12
12
  const { editor, autofocus, settingsVisible, toolbarVisible, toolbarConfig, hiddenActionsConfig, className, toolbarClassName, children, stickyToolbar = true, } = props;
13
13
  useRenderTime((time) => {
14
- logger.metrics({
14
+ globalLogger.metrics({
15
+ component: 'wysiwyg-editor',
16
+ event: 'render',
17
+ duration: time,
18
+ });
19
+ editor.logger.metrics({
15
20
  component: 'wysiwyg-editor',
16
21
  event: 'render',
17
22
  duration: time,
@@ -1 +1 @@
1
- {"version":3,"file":"WysiwygEditorView.js","sourceRoot":"../../../src","sources":["bundle/WysiwygEditorView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,OAAO,CAAC;AAE3B,OAAO,EAAsB,EAAE,EAAC,wBAAqB;AACrD,OAAO,EAAC,sBAAsB,EAAC,+BAAsB;AACrD,OAAO,EAAC,MAAM,EAAC,qBAAkB;AACjC,OAAO,EAAC,aAAa,EAAC,gCAA6B;AAGnD,OAAO,EAAC,WAAW,EAAC,yBAAsB;AAC1C,OAAO,EAAC,sBAAsB,EAAC,oCAAiC;AAGhE,iCAAkC;AAElC,MAAM,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC;AAc/B,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAyB,CAAC,KAAK,EAAE,EAAE;IACpE,MAAM,EACF,MAAM,EACN,SAAS,EACT,eAAe,EACf,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,aAAa,GAAG,IAAI,GACvB,GAAG,KAAK,CAAC;IACV,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE;QACnB,MAAM,CAAC,OAAO,CAAC;YACX,SAAS,EAAE,gBAAgB;YAC3B,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,OAAO,CACH,eAAK,SAAS,EAAE,CAAC,CAAC,EAAC,OAAO,EAAE,cAAc,EAAC,EAAE,CAAC,SAAS,CAAC,CAAC,aACpD,cAAc,CAAC,CAAC,CAAC,CACd,KAAC,WAAW,IACR,MAAM,EAAE,MAAM,EACd,UAAU,EAAC,SAAS,EACpB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAClC,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,gBAAgB,CAAC,CAAC,YAE1C,QAAQ,GACC,CACjB,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,sBAAsB,IAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,YAChF,KAAC,sBAAsB,IAAC,OAAO,EAAE,MAAM,CAAC,aAAa,GAAI,GACpC,IACvB,CACT,CAAC;AACN,CAAC,CAAC,CAAC;AACH,iBAAiB,CAAC,WAAW,GAAG,0BAA0B,CAAC","sourcesContent":["import {memo} from 'react';\n\nimport {type ClassNameProps, cn} from '../classname';\nimport {ReactRendererComponent} from '../extensions';\nimport {logger} from '../logger';\nimport {useRenderTime} from '../react-utils/hooks';\n\nimport type {EditorInt} from './Editor';\nimport {ToolbarView} from './ToolbarView';\nimport {WysiwygEditorComponent} from './WysiwygEditorComponent';\nimport type {WToolbarData, WToolbarItemData} from './toolbar/types';\n\nimport './WysiwygEditorView.scss';\n\nconst b = cn('wysiwyg-editor');\n\nexport type WysiwygEditorViewProps = ClassNameProps & {\n editor: EditorInt;\n autofocus?: boolean;\n settingsVisible?: boolean;\n toolbarConfig: WToolbarData;\n toolbarVisible?: boolean;\n stickyToolbar?: boolean;\n toolbarClassName?: string;\n hiddenActionsConfig?: WToolbarItemData[];\n children?: React.ReactNode;\n};\n\nexport const WysiwygEditorView = memo<WysiwygEditorViewProps>((props) => {\n const {\n editor,\n autofocus,\n settingsVisible,\n toolbarVisible,\n toolbarConfig,\n hiddenActionsConfig,\n className,\n toolbarClassName,\n children,\n stickyToolbar = true,\n } = props;\n useRenderTime((time) => {\n logger.metrics({\n component: 'wysiwyg-editor',\n event: 'render',\n duration: time,\n });\n });\n return (\n <div className={b({toolbar: toolbarVisible}, [className])}>\n {toolbarVisible ? (\n <ToolbarView\n editor={editor}\n editorMode=\"wysiwyg\"\n toolbarEditor={editor}\n stickyToolbar={stickyToolbar}\n toolbarConfig={toolbarConfig}\n toolbarFocus={() => editor.focus()}\n hiddenActionsConfig={hiddenActionsConfig}\n settingsVisible={settingsVisible}\n className={b('toolbar', [toolbarClassName])}\n >\n {children}\n </ToolbarView>\n ) : null}\n <WysiwygEditorComponent autofocus={autofocus} editor={editor} className={b('editor')}>\n <ReactRendererComponent storage={editor.renderStorage} />\n </WysiwygEditorComponent>\n </div>\n );\n});\nWysiwygEditorView.displayName = 'MarkdownWysiwgEditorView';\n"]}
1
+ {"version":3,"file":"WysiwygEditorView.js","sourceRoot":"../../../src","sources":["bundle/WysiwygEditorView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,OAAO,CAAC;AAE3B,OAAO,EAAsB,EAAE,EAAC,wBAAqB;AACrD,OAAO,EAAC,sBAAsB,EAAC,+BAAsB;AACrD,OAAO,EAAC,YAAY,EAAC,qBAAkB;AACvC,OAAO,EAAC,aAAa,EAAC,gCAA6B;AAGnD,OAAO,EAAC,WAAW,EAAC,yBAAsB;AAC1C,OAAO,EAAC,sBAAsB,EAAC,oCAAiC;AAGhE,iCAAkC;AAElC,MAAM,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC;AAc/B,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAyB,CAAC,KAAK,EAAE,EAAE;IACpE,MAAM,EACF,MAAM,EACN,SAAS,EACT,eAAe,EACf,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,aAAa,GAAG,IAAI,GACvB,GAAG,KAAK,CAAC;IACV,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE;QACnB,YAAY,CAAC,OAAO,CAAC;YACjB,SAAS,EAAE,gBAAgB;YAC3B,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YAClB,SAAS,EAAE,gBAAgB;YAC3B,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,OAAO,CACH,eAAK,SAAS,EAAE,CAAC,CAAC,EAAC,OAAO,EAAE,cAAc,EAAC,EAAE,CAAC,SAAS,CAAC,CAAC,aACpD,cAAc,CAAC,CAAC,CAAC,CACd,KAAC,WAAW,IACR,MAAM,EAAE,MAAM,EACd,UAAU,EAAC,SAAS,EACpB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAClC,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,gBAAgB,CAAC,CAAC,YAE1C,QAAQ,GACC,CACjB,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,sBAAsB,IAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,YAChF,KAAC,sBAAsB,IAAC,OAAO,EAAE,MAAM,CAAC,aAAa,GAAI,GACpC,IACvB,CACT,CAAC;AACN,CAAC,CAAC,CAAC;AACH,iBAAiB,CAAC,WAAW,GAAG,0BAA0B,CAAC","sourcesContent":["import {memo} from 'react';\n\nimport {type ClassNameProps, cn} from '../classname';\nimport {ReactRendererComponent} from '../extensions';\nimport {globalLogger} from '../logger';\nimport {useRenderTime} from '../react-utils/hooks';\n\nimport type {EditorInt} from './Editor';\nimport {ToolbarView} from './ToolbarView';\nimport {WysiwygEditorComponent} from './WysiwygEditorComponent';\nimport type {WToolbarData, WToolbarItemData} from './toolbar/types';\n\nimport './WysiwygEditorView.scss';\n\nconst b = cn('wysiwyg-editor');\n\nexport type WysiwygEditorViewProps = ClassNameProps & {\n editor: EditorInt;\n autofocus?: boolean;\n settingsVisible?: boolean;\n toolbarConfig: WToolbarData;\n toolbarVisible?: boolean;\n stickyToolbar?: boolean;\n toolbarClassName?: string;\n hiddenActionsConfig?: WToolbarItemData[];\n children?: React.ReactNode;\n};\n\nexport const WysiwygEditorView = memo<WysiwygEditorViewProps>((props) => {\n const {\n editor,\n autofocus,\n settingsVisible,\n toolbarVisible,\n toolbarConfig,\n hiddenActionsConfig,\n className,\n toolbarClassName,\n children,\n stickyToolbar = true,\n } = props;\n useRenderTime((time) => {\n globalLogger.metrics({\n component: 'wysiwyg-editor',\n event: 'render',\n duration: time,\n });\n editor.logger.metrics({\n component: 'wysiwyg-editor',\n event: 'render',\n duration: time,\n });\n });\n return (\n <div className={b({toolbar: toolbarVisible}, [className])}>\n {toolbarVisible ? (\n <ToolbarView\n editor={editor}\n editorMode=\"wysiwyg\"\n toolbarEditor={editor}\n stickyToolbar={stickyToolbar}\n toolbarConfig={toolbarConfig}\n toolbarFocus={() => editor.focus()}\n hiddenActionsConfig={hiddenActionsConfig}\n settingsVisible={settingsVisible}\n className={b('toolbar', [toolbarClassName])}\n >\n {children}\n </ToolbarView>\n ) : null}\n <WysiwygEditorComponent autofocus={autofocus} editor={editor} className={b('editor')}>\n <ReactRendererComponent storage={editor.renderStorage} />\n </WysiwygEditorComponent>\n </div>\n );\n});\nWysiwygEditorView.displayName = 'MarkdownWysiwgEditorView';\n"]}
@@ -1,6 +1,7 @@
1
1
  import type { ReactNode } from 'react';
2
2
  import type { MarkupString } from "../common/index.js";
3
3
  import type { EscapeConfig, Extension } from "../core/index.js";
4
+ import type { Logger2 } from "../logger.js";
4
5
  import type { CreateCodemirrorParams, YfmLangOptions } from "../markup/index.js";
5
6
  import type { FileUploadHandler } from "../utils/index.js";
6
7
  import type { DirectiveSyntaxContext, DirectiveSyntaxOption } from "../utils/directive.js";
@@ -176,4 +177,5 @@ export type MarkdownEditorOptions = {
176
177
  markupConfig?: MarkdownEditorMarkupConfig;
177
178
  /** Options for wysiwyg mode */
178
179
  wysiwygConfig?: MarkdownEditorWysiwygConfig;
180
+ logger?: Logger2.ILogger;
179
181
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"../../../src","sources":["bundle/types.ts"],"names":[],"mappings":"AAAA,mDAAmD","sourcesContent":["// public types, re-exported in src/bundle/index.ts\n\nimport type {ReactNode} from 'react';\n\nimport type {MarkupString} from '../common';\nimport type {EscapeConfig, Extension} from '../core';\nimport type {CreateCodemirrorParams, YfmLangOptions} from '../markup';\nimport type {FileUploadHandler} from '../utils';\nimport type {DirectiveSyntaxContext, DirectiveSyntaxOption} from '../utils/directive';\n\nimport type {ChangeEditorModeOptions} from './Editor';\nimport type {ExtensionsOptions as WysiwygPresetExtensionsOptions} from './wysiwyg-preset';\n\nexport type {Editor as MarkdownEditorInstance} from './Editor';\nexport type MarkdownEditorMode = 'wysiwyg' | 'markup';\nexport type MarkdownEditorPreset = 'zero' | 'commonmark' | 'default' | 'yfm' | 'full';\nexport type MarkdownEditorSplitMode = false | 'horizontal' | 'vertical';\n\nexport type RenderPreviewParams = {\n getValue: () => MarkupString;\n mode: 'preview' | 'split';\n md: Readonly<MarkdownEditorMdOptions>;\n directiveSyntax: Pick<DirectiveSyntaxContext, 'option' | 'valueFor' | 'mdPluginValueFor'>;\n};\nexport type RenderPreview = (params: RenderPreviewParams) => ReactNode;\n\nexport type ParseInsertedUrlAsImage = (text: string) => {imageUrl: string; title?: string} | null;\n\nexport type WysiwygPlaceholderOptions = {\n value?: string | (() => string);\n /** Default – empty-doc\n Values:\n - 'empty-doc' – The placeholder will only be shown when the document is completely empty;\n - 'empty-row-top-level' – The placeholder will be displayed in an empty line that is at the top level of the document structure;\n - 'empty-row' – The placeholder will be shown in any empty line within the document, regardless of its nesting level.\n */\n behavior?: 'empty-doc' | 'empty-row-top-level' | 'empty-row';\n};\n\nexport type MarkdownEditorMdOptions = {\n html?: boolean;\n breaks?: boolean;\n linkify?: boolean;\n linkifyTlds?: string | string[];\n};\n\nexport type MarkdownEditorInitialOptions = {\n markup?: MarkupString;\n /** Default – wysiwyg */\n mode?: MarkdownEditorMode;\n /** Default – true */\n toolbarVisible?: boolean;\n /**\n * Default – false\n *\n * Note: has no effect if `MarkdownEditorMarkupConfig.splitMode` is set to false or is not set.\n */\n splitModeEnabled?: boolean;\n};\n\nexport type MarkdownEditorHandlers = {\n /** Pass this handler to allow uploading files from device. */\n uploadFile?: FileUploadHandler;\n};\n\nexport type MarkdownEditorExperimentalOptions = {\n /**\n * If we need to set dimensions for uploaded images\n *\n * @default false\n */\n needToSetDimensionsForUploadedImages?: boolean;\n /**\n * If we need to enable new image size calculations\n *\n * @default false\n */\n enableNewImageSizeCalculation?: boolean;\n /**\n * Called before switching from the markup editor to the wysiwyg editor.\n * You can use it to pre-process the value from the markup editor before it gets into the wysiwyg editor.\n */\n prepareRawMarkup?: (value: MarkupString) => MarkupString;\n beforeEditorModeChange?: (\n options: Pick<ChangeEditorModeOptions, 'mode' | 'reason'>,\n ) => boolean | undefined;\n /**\n * Enables support of directive syntax for diplodoc (YFM) extensions.\n *\n * **Note:** This setting affects parsing of markdown markup and serializing to markdown markup.\n * Be careful with it and use it in consistency with diplodoc/transform and diplodoc-extensions.\n *\n * Before enabling this option, make sure that appropriate versions of diplodoc/transform and diplodoc-extensions are installed.\n *\n * You can pass an object in `key:value` format to provide different behaviour for each extension individually.\n *\n * Values:\n * - 'disabled' – directive syntax is disabled;\n * - 'enabled' – directive syntax is enabled. Syntax of existing blocks is preserved. New blocks will be serialized using old syntax;\n * - 'preserve' – directive syntax is enabled. Syntax of existing blocks is preserved. New blocks will be serialized using directive syntax;\n * - 'overwrite' – existing blocks will be overwritten using directive syntax through serialization;\n * - 'only' – old syntax is disabled, only directive syntax available. Blocks in old syntax will not be parsed.\n *\n * Default value is 'disabled'.\n */\n directiveSyntax?: DirectiveSyntaxOption;\n /**\n * If we need support for empty strings\n *\n * @default false\n */\n preserveEmptyRows?: boolean;\n /**\n * Preserves the original formatting of unmodified blocks,\n * restoring their structure during serialization\n *\n * **Use case:** Maintain consistent markup when switching modes\n *\n * **Note:** Applies to tracked blocks: `yfm_table`\n *\n * @default false\n */\n preserveMarkupFormatting?: boolean;\n};\n\nexport type MarkdownEditorMarkupConfig = {\n /**\n * Pass the rendering function to preview the markdown content.\n *\n * It is also used for split view rendering.\n *\n * If false is passed, preview will be disabled.\n */\n renderPreview?: RenderPreview;\n /**\n * Pass position of split view.\n *\n * Note: for enable split view, you need to pass renderPreview function too.\n *\n * If false is passed, split view will be disabled.\n */\n splitMode?: MarkdownEditorSplitMode;\n /** Additional extensions for codemirror instance. */\n extensions?: CreateCodemirrorParams['extensions'];\n /** Can be used to disable some of the default extensions */\n disabledExtensions?: CreateCodemirrorParams['disabledExtensions'];\n /** Additional keymaps for codemirror instance */\n keymaps?: CreateCodemirrorParams['keymaps'];\n /** Overrides the default placeholder content. */\n placeholder?: CreateCodemirrorParams['placeholder'];\n /** Enable HTML parsing when pasting content. */\n parseHtmlOnPaste?: boolean;\n /**\n * Additional language data for markdown language in codemirror.\n * Can be used to configure additional autocompletions and others.\n * See more https://codemirror.net/docs/ref/#state.EditorState.languageDataAt\n */\n languageData?: YfmLangOptions['languageData'];\n /** Config for @codemirror/autocomplete https://codemirror.net/docs/ref/#autocomplete.autocompletion%5Econfig */\n autocompletion?: CreateCodemirrorParams['autocompletion'];\n /**\n * The function, used to determine if the pasted text is the image url and should be inserted as an image\n */\n parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n};\n\n// do not export this type\ntype ExtensionsOptions<T extends object = {}> = Omit<\n WysiwygPresetExtensionsOptions,\n 'reactRenderer'\n> &\n T;\n\nexport type MarkdownEditorWysiwygConfig = {\n /** Additional extensions */\n extensions?: Extension;\n extensionOptions?: ExtensionsOptions;\n escapeConfig?: EscapeConfig;\n placeholderOptions?: WysiwygPlaceholderOptions;\n};\n\nexport type MarkdownEditorOptions = {\n /**\n * A set of plug-in extensions.\n *\n * @default 'full'\n */\n preset?: MarkdownEditorPreset;\n /** Markdown parser options */\n md?: MarkdownEditorMdOptions;\n /** Initial values */\n initial?: MarkdownEditorInitialOptions;\n handlers?: MarkdownEditorHandlers;\n experimental?: MarkdownEditorExperimentalOptions;\n /** Options for markup mode */\n markupConfig?: MarkdownEditorMarkupConfig;\n /** Options for wysiwyg mode */\n wysiwygConfig?: MarkdownEditorWysiwygConfig;\n};\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"../../../src","sources":["bundle/types.ts"],"names":[],"mappings":"AAAA,mDAAmD","sourcesContent":["// public types, re-exported in src/bundle/index.ts\n\nimport type {ReactNode} from 'react';\n\nimport type {MarkupString} from '../common';\nimport type {EscapeConfig, Extension} from '../core';\nimport type {Logger2} from '../logger';\nimport type {CreateCodemirrorParams, YfmLangOptions} from '../markup';\nimport type {FileUploadHandler} from '../utils';\nimport type {DirectiveSyntaxContext, DirectiveSyntaxOption} from '../utils/directive';\n\nimport type {ChangeEditorModeOptions} from './Editor';\nimport type {ExtensionsOptions as WysiwygPresetExtensionsOptions} from './wysiwyg-preset';\n\nexport type {Editor as MarkdownEditorInstance} from './Editor';\nexport type MarkdownEditorMode = 'wysiwyg' | 'markup';\nexport type MarkdownEditorPreset = 'zero' | 'commonmark' | 'default' | 'yfm' | 'full';\nexport type MarkdownEditorSplitMode = false | 'horizontal' | 'vertical';\n\nexport type RenderPreviewParams = {\n getValue: () => MarkupString;\n mode: 'preview' | 'split';\n md: Readonly<MarkdownEditorMdOptions>;\n directiveSyntax: Pick<DirectiveSyntaxContext, 'option' | 'valueFor' | 'mdPluginValueFor'>;\n};\nexport type RenderPreview = (params: RenderPreviewParams) => ReactNode;\n\nexport type ParseInsertedUrlAsImage = (text: string) => {imageUrl: string; title?: string} | null;\n\nexport type WysiwygPlaceholderOptions = {\n value?: string | (() => string);\n /** Default – empty-doc\n Values:\n - 'empty-doc' – The placeholder will only be shown when the document is completely empty;\n - 'empty-row-top-level' – The placeholder will be displayed in an empty line that is at the top level of the document structure;\n - 'empty-row' – The placeholder will be shown in any empty line within the document, regardless of its nesting level.\n */\n behavior?: 'empty-doc' | 'empty-row-top-level' | 'empty-row';\n};\n\nexport type MarkdownEditorMdOptions = {\n html?: boolean;\n breaks?: boolean;\n linkify?: boolean;\n linkifyTlds?: string | string[];\n};\n\nexport type MarkdownEditorInitialOptions = {\n markup?: MarkupString;\n /** Default – wysiwyg */\n mode?: MarkdownEditorMode;\n /** Default – true */\n toolbarVisible?: boolean;\n /**\n * Default – false\n *\n * Note: has no effect if `MarkdownEditorMarkupConfig.splitMode` is set to false or is not set.\n */\n splitModeEnabled?: boolean;\n};\n\nexport type MarkdownEditorHandlers = {\n /** Pass this handler to allow uploading files from device. */\n uploadFile?: FileUploadHandler;\n};\n\nexport type MarkdownEditorExperimentalOptions = {\n /**\n * If we need to set dimensions for uploaded images\n *\n * @default false\n */\n needToSetDimensionsForUploadedImages?: boolean;\n /**\n * If we need to enable new image size calculations\n *\n * @default false\n */\n enableNewImageSizeCalculation?: boolean;\n /**\n * Called before switching from the markup editor to the wysiwyg editor.\n * You can use it to pre-process the value from the markup editor before it gets into the wysiwyg editor.\n */\n prepareRawMarkup?: (value: MarkupString) => MarkupString;\n beforeEditorModeChange?: (\n options: Pick<ChangeEditorModeOptions, 'mode' | 'reason'>,\n ) => boolean | undefined;\n /**\n * Enables support of directive syntax for diplodoc (YFM) extensions.\n *\n * **Note:** This setting affects parsing of markdown markup and serializing to markdown markup.\n * Be careful with it and use it in consistency with diplodoc/transform and diplodoc-extensions.\n *\n * Before enabling this option, make sure that appropriate versions of diplodoc/transform and diplodoc-extensions are installed.\n *\n * You can pass an object in `key:value` format to provide different behaviour for each extension individually.\n *\n * Values:\n * - 'disabled' – directive syntax is disabled;\n * - 'enabled' – directive syntax is enabled. Syntax of existing blocks is preserved. New blocks will be serialized using old syntax;\n * - 'preserve' – directive syntax is enabled. Syntax of existing blocks is preserved. New blocks will be serialized using directive syntax;\n * - 'overwrite' – existing blocks will be overwritten using directive syntax through serialization;\n * - 'only' – old syntax is disabled, only directive syntax available. Blocks in old syntax will not be parsed.\n *\n * Default value is 'disabled'.\n */\n directiveSyntax?: DirectiveSyntaxOption;\n /**\n * If we need support for empty strings\n *\n * @default false\n */\n preserveEmptyRows?: boolean;\n /**\n * Preserves the original formatting of unmodified blocks,\n * restoring their structure during serialization\n *\n * **Use case:** Maintain consistent markup when switching modes\n *\n * **Note:** Applies to tracked blocks: `yfm_table`\n *\n * @default false\n */\n preserveMarkupFormatting?: boolean;\n};\n\nexport type MarkdownEditorMarkupConfig = {\n /**\n * Pass the rendering function to preview the markdown content.\n *\n * It is also used for split view rendering.\n *\n * If false is passed, preview will be disabled.\n */\n renderPreview?: RenderPreview;\n /**\n * Pass position of split view.\n *\n * Note: for enable split view, you need to pass renderPreview function too.\n *\n * If false is passed, split view will be disabled.\n */\n splitMode?: MarkdownEditorSplitMode;\n /** Additional extensions for codemirror instance. */\n extensions?: CreateCodemirrorParams['extensions'];\n /** Can be used to disable some of the default extensions */\n disabledExtensions?: CreateCodemirrorParams['disabledExtensions'];\n /** Additional keymaps for codemirror instance */\n keymaps?: CreateCodemirrorParams['keymaps'];\n /** Overrides the default placeholder content. */\n placeholder?: CreateCodemirrorParams['placeholder'];\n /** Enable HTML parsing when pasting content. */\n parseHtmlOnPaste?: boolean;\n /**\n * Additional language data for markdown language in codemirror.\n * Can be used to configure additional autocompletions and others.\n * See more https://codemirror.net/docs/ref/#state.EditorState.languageDataAt\n */\n languageData?: YfmLangOptions['languageData'];\n /** Config for @codemirror/autocomplete https://codemirror.net/docs/ref/#autocomplete.autocompletion%5Econfig */\n autocompletion?: CreateCodemirrorParams['autocompletion'];\n /**\n * The function, used to determine if the pasted text is the image url and should be inserted as an image\n */\n parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n};\n\n// do not export this type\ntype ExtensionsOptions<T extends object = {}> = Omit<\n WysiwygPresetExtensionsOptions,\n 'reactRenderer'\n> &\n T;\n\nexport type MarkdownEditorWysiwygConfig = {\n /** Additional extensions */\n extensions?: Extension;\n extensionOptions?: ExtensionsOptions;\n escapeConfig?: EscapeConfig;\n placeholderOptions?: WysiwygPlaceholderOptions;\n};\n\nexport type MarkdownEditorOptions = {\n /**\n * A set of plug-in extensions.\n *\n * @default 'full'\n */\n preset?: MarkdownEditorPreset;\n /** Markdown parser options */\n md?: MarkdownEditorMdOptions;\n /** Initial values */\n initial?: MarkdownEditorInitialOptions;\n handlers?: MarkdownEditorHandlers;\n experimental?: MarkdownEditorExperimentalOptions;\n /** Options for markup mode */\n markupConfig?: MarkdownEditorMarkupConfig;\n /** Options for wysiwyg mode */\n wysiwygConfig?: MarkdownEditorWysiwygConfig;\n logger?: Logger2.ILogger;\n};\n"]}
@@ -1,13 +1,13 @@
1
1
  import { useLayoutEffect, useMemo } from 'react';
2
2
  import { getPMTransformers } from "../core/markdown/ProseMirrorTransformer/getTransformers.js";
3
3
  import { ReactRenderStorage } from "../extensions/index.js";
4
- import { logger } from "../logger.js";
4
+ import { Logger2, globalLogger } from "../logger.js";
5
5
  import { DirectiveSyntaxContext } from "../utils/directive.js";
6
6
  import { EditorImpl } from "./Editor.js";
7
7
  import { BundlePreset } from "./wysiwyg-preset.js";
8
8
  export function useMarkdownEditor(props, deps = []) {
9
9
  const editor = useMemo(() => {
10
- const { md = {}, initial = {}, handlers = {}, experimental = {}, markupConfig = {}, wysiwygConfig = {}, } = props;
10
+ const { md = {}, initial = {}, handlers = {}, experimental = {}, markupConfig = {}, wysiwygConfig = {}, logger = new Logger2(), } = props;
11
11
  const preset = props.preset ?? 'full';
12
12
  const renderStorage = new ReactRenderStorage();
13
13
  const pmTransformers = getPMTransformers({
@@ -45,6 +45,7 @@ export function useMarkdownEditor(props, deps = []) {
45
45
  };
46
46
  return new EditorImpl({
47
47
  ...props,
48
+ logger,
48
49
  preset,
49
50
  renderStorage,
50
51
  directiveSyntax,
@@ -62,7 +63,8 @@ export function useMarkdownEditor(props, deps = []) {
62
63
  }, deps);
63
64
  useLayoutEffect(() => {
64
65
  function onToolbarAction({ editorMode, id }) {
65
- logger.action({ mode: editorMode, source: 'toolbar', action: id });
66
+ globalLogger.action({ mode: editorMode, source: 'toolbar', action: id });
67
+ editor.logger.action({ mode: editorMode, source: 'toolbar', action: id });
66
68
  }
67
69
  editor.on('toolbar-action', onToolbarAction);
68
70
  return () => {
@@ -1 +1 @@
1
- {"version":3,"file":"useMarkdownEditor.js","sourceRoot":"../../../src","sources":["bundle/useMarkdownEditor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;AAG/C,OAAO,EAAC,iBAAiB,EAAC,mEAAgE;AAC1F,OAAO,EAAC,kBAAkB,EAAC,+BAAsB;AACjD,OAAO,EAAC,MAAM,EAAC,qBAAkB;AACjC,OAAO,EAAC,sBAAsB,EAAC,8BAA2B;AAE1D,OAAO,EAAC,UAAU,EAAiB,oBAAiB;AAOpD,OAAO,EAAC,YAAY,EAAC,4BAAyB;AAI9C,MAAM,UAAU,iBAAiB,CAC7B,KAA6B,EAC7B,OAA6B,EAAE;IAE/B,MAAM,MAAM,GAAG,OAAO,CAAY,GAAG,EAAE;QACnC,MAAM,EACF,EAAE,GAAG,EAAE,EACP,OAAO,GAAG,EAAE,EACZ,QAAQ,GAAG,EAAE,EACb,YAAY,GAAG,EAAE,EACjB,YAAY,GAAG,EAAE,EACjB,aAAa,GAAG,EAAE,GACrB,GAAG,KAAK,CAAC;QAEV,MAAM,MAAM,GAAyB,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC;QAC5D,MAAM,aAAa,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAE/C,MAAM,cAAc,GAAG,iBAAiB,CAAC;YACrC,mBAAmB,EAAE,YAAY,CAAC,iBAAiB;SACtD,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,IAAI,sBAAsB,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;QAEjF,MAAM,UAAU,GAAc,CAAC,OAAO,EAAE,EAAE;YACtC,MAAM,gBAAgB,GAAG,aAAa,CAAC,gBAAgB,CAAC;YAExD,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE;gBACtB,GAAG,gBAAgB;gBACnB,eAAe;gBACf,MAAM;gBACN,aAAa,EAAE,aAAa;gBAC5B,QAAQ,EAAE,GAAG,EAAE;oBACX,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBAC5B,OAAO,IAAI,CAAC;gBAChB,CAAC;gBACD,QAAQ,EAAE,GAAG,EAAE;oBACX,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBAC5B,OAAO,IAAI,CAAC;gBAChB,CAAC;gBACD,iBAAiB,EAAE,YAAY,CAAC,iBAAiB;gBACjD,kBAAkB,EAAE,aAAa,CAAC,kBAAkB;gBACpD,QAAQ,EAAE,EAAE,CAAC,MAAM;gBACnB,iBAAiB,EAAE,QAAQ,CAAC,UAAU;gBACtC,oCAAoC,EAChC,YAAY,CAAC,oCAAoC;gBACrD,6BAA6B,EAAE,YAAY,CAAC,6BAA6B;aAC5E,CAAC,CAAC;YACH,CAAC;gBACG,MAAM,eAAe,GAAG,aAAa,CAAC,UAAU,CAAC;gBACjD,IAAI,eAAe,EAAE,CAAC;oBAClB,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;gBACxE,CAAC;YACL,CAAC;QACL,CAAC,CAAC;QAEF,OAAO,IAAI,UAAU,CAAC;YAClB,GAAG,KAAK;YACR,MAAM;YACN,aAAa;YACb,eAAe;YACf,cAAc;YACd,EAAE;YACF,OAAO;YACP,QAAQ;YACR,YAAY;YACZ,YAAY;YACZ,aAAa,EAAE;gBACX,GAAG,aAAa;gBAChB,UAAU;aACb;SACJ,CAAC,CAAC;IACP,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,eAAe,CAAC,GAAG,EAAE;QACjB,SAAS,eAAe,CAAC,EAAC,UAAU,EAAE,EAAE,EAA+C;YACnF,MAAM,CAAC,MAAM,CAAC,EAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAC,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;QAC7C,OAAO,GAAG,EAAE;YACR,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;YAC9C,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACb,OAAO,MAAM,CAAC;AAClB,CAAC","sourcesContent":["import {useLayoutEffect, useMemo} from 'react';\n\nimport type {Extension} from '../core';\nimport {getPMTransformers} from '../core/markdown/ProseMirrorTransformer/getTransformers';\nimport {ReactRenderStorage} from '../extensions';\nimport {logger} from '../logger';\nimport {DirectiveSyntaxContext} from '../utils/directive';\n\nimport {EditorImpl, type EditorInt} from './Editor';\nimport type {\n MarkdownEditorInstance,\n MarkdownEditorMode,\n MarkdownEditorOptions,\n MarkdownEditorPreset,\n} from './types';\nimport {BundlePreset} from './wysiwyg-preset';\n\nexport type UseMarkdownEditorProps = MarkdownEditorOptions;\n\nexport function useMarkdownEditor(\n props: UseMarkdownEditorProps,\n deps: React.DependencyList = [],\n): MarkdownEditorInstance {\n const editor = useMemo<EditorInt>(() => {\n const {\n md = {},\n initial = {},\n handlers = {},\n experimental = {},\n markupConfig = {},\n wysiwygConfig = {},\n } = props;\n\n const preset: MarkdownEditorPreset = props.preset ?? 'full';\n const renderStorage = new ReactRenderStorage();\n\n const pmTransformers = getPMTransformers({\n emptyRowTransformer: experimental.preserveEmptyRows,\n });\n\n const directiveSyntax = new DirectiveSyntaxContext(experimental.directiveSyntax);\n\n const extensions: Extension = (builder) => {\n const extensionOptions = wysiwygConfig.extensionOptions;\n\n builder.use(BundlePreset, {\n ...extensionOptions,\n directiveSyntax,\n preset,\n reactRenderer: renderStorage,\n onCancel: () => {\n editor.emit('cancel', null);\n return true;\n },\n onSubmit: () => {\n editor.emit('submit', null);\n return true;\n },\n preserveEmptyRows: experimental.preserveEmptyRows,\n placeholderOptions: wysiwygConfig.placeholderOptions,\n mdBreaks: md.breaks,\n fileUploadHandler: handlers.uploadFile,\n needToSetDimensionsForUploadedImages:\n experimental.needToSetDimensionsForUploadedImages,\n enableNewImageSizeCalculation: experimental.enableNewImageSizeCalculation,\n });\n {\n const extraExtensions = wysiwygConfig.extensions;\n if (extraExtensions) {\n builder.use(extraExtensions, props.wysiwygConfig?.extensionOptions);\n }\n }\n };\n\n return new EditorImpl({\n ...props,\n preset,\n renderStorage,\n directiveSyntax,\n pmTransformers,\n md,\n initial,\n handlers,\n experimental,\n markupConfig,\n wysiwygConfig: {\n ...wysiwygConfig,\n extensions,\n },\n });\n }, deps);\n\n useLayoutEffect(() => {\n function onToolbarAction({editorMode, id}: {editorMode: MarkdownEditorMode; id: string}) {\n logger.action({mode: editorMode, source: 'toolbar', action: id});\n }\n\n editor.on('toolbar-action', onToolbarAction);\n return () => {\n editor.off('toolbar-action', onToolbarAction);\n editor.destroy();\n };\n }, [editor]);\n return editor;\n}\n"]}
1
+ {"version":3,"file":"useMarkdownEditor.js","sourceRoot":"../../../src","sources":["bundle/useMarkdownEditor.ts"],"names":[],"mappings":"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","sourcesContent":["import {useLayoutEffect, useMemo} from 'react';\n\nimport type {Extension} from '../core';\nimport {getPMTransformers} from '../core/markdown/ProseMirrorTransformer/getTransformers';\nimport {ReactRenderStorage} from '../extensions';\nimport {Logger2, globalLogger} from '../logger';\nimport {DirectiveSyntaxContext} from '../utils/directive';\n\nimport {EditorImpl, type EditorInt} from './Editor';\nimport type {\n MarkdownEditorInstance,\n MarkdownEditorMode,\n MarkdownEditorOptions,\n MarkdownEditorPreset,\n} from './types';\nimport {BundlePreset} from './wysiwyg-preset';\n\nexport type UseMarkdownEditorProps = MarkdownEditorOptions;\n\nexport function useMarkdownEditor(\n props: UseMarkdownEditorProps,\n deps: React.DependencyList = [],\n): MarkdownEditorInstance {\n const editor = useMemo<EditorInt>(() => {\n const {\n md = {},\n initial = {},\n handlers = {},\n experimental = {},\n markupConfig = {},\n wysiwygConfig = {},\n logger = new Logger2(),\n } = props;\n\n const preset: MarkdownEditorPreset = props.preset ?? 'full';\n const renderStorage = new ReactRenderStorage();\n\n const pmTransformers = getPMTransformers({\n emptyRowTransformer: experimental.preserveEmptyRows,\n });\n\n const directiveSyntax = new DirectiveSyntaxContext(experimental.directiveSyntax);\n\n const extensions: Extension = (builder) => {\n const extensionOptions = wysiwygConfig.extensionOptions;\n\n builder.use(BundlePreset, {\n ...extensionOptions,\n directiveSyntax,\n preset,\n reactRenderer: renderStorage,\n onCancel: () => {\n editor.emit('cancel', null);\n return true;\n },\n onSubmit: () => {\n editor.emit('submit', null);\n return true;\n },\n preserveEmptyRows: experimental.preserveEmptyRows,\n placeholderOptions: wysiwygConfig.placeholderOptions,\n mdBreaks: md.breaks,\n fileUploadHandler: handlers.uploadFile,\n needToSetDimensionsForUploadedImages:\n experimental.needToSetDimensionsForUploadedImages,\n enableNewImageSizeCalculation: experimental.enableNewImageSizeCalculation,\n });\n {\n const extraExtensions = wysiwygConfig.extensions;\n if (extraExtensions) {\n builder.use(extraExtensions, props.wysiwygConfig?.extensionOptions);\n }\n }\n };\n\n return new EditorImpl({\n ...props,\n logger,\n preset,\n renderStorage,\n directiveSyntax,\n pmTransformers,\n md,\n initial,\n handlers,\n experimental,\n markupConfig,\n wysiwygConfig: {\n ...wysiwygConfig,\n extensions,\n },\n });\n }, deps);\n\n useLayoutEffect(() => {\n function onToolbarAction({editorMode, id}: {editorMode: MarkdownEditorMode; id: string}) {\n globalLogger.action({mode: editorMode, source: 'toolbar', action: id});\n editor.logger.action({mode: editorMode, source: 'toolbar', action: id});\n }\n\n editor.on('toolbar-action', onToolbarAction);\n return () => {\n editor.off('toolbar-action', onToolbarAction);\n editor.destroy();\n };\n }, [editor]);\n return editor;\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import type { PresetName } from 'markdown-it';
2
2
  import type { CommonEditor, MarkupString } from "../common/index.js";
3
+ import { Logger2 } from "../logger.js";
3
4
  import type { TransformFn } from "./markdown/ProseMirrorTransformer/index.js";
4
5
  import type { ActionStorage } from "./types/actions.js";
5
6
  import type { Extension } from "./types/extension.js";
@@ -26,6 +27,7 @@ export type WysiwygEditorOptions = {
26
27
  onChange?: OnChange;
27
28
  /** Call only if document change */
28
29
  onDocChange?: OnChange;
30
+ logger?: Logger2.ILogger;
29
31
  };
30
32
  export declare class WysiwygEditor implements CommonEditor, ActionStorage {
31
33
  #private;
@@ -33,7 +35,7 @@ export declare class WysiwygEditor implements CommonEditor, ActionStorage {
33
35
  get serializer(): Serializer;
34
36
  get parser(): Parser;
35
37
  get actions(): WysiwygEditor.Actions;
36
- constructor({ domElem, initialContent, extensions, allowHTML, mdPreset, linkify, pmTransformers, linkifyTlds, escapeConfig, onChange, onDocChange, modifiers, }: WysiwygEditorOptions);
38
+ constructor({ domElem, initialContent, extensions, allowHTML, mdPreset, linkify, pmTransformers, linkifyTlds, escapeConfig, onChange, onDocChange, modifiers, logger, }: WysiwygEditorOptions);
37
39
  action<T extends keyof WysiwygEditor.Actions>(actionName: T): WysiwygEditor.Actions[T];
38
40
  focus(): void;
39
41
  hasFocus(): boolean;
@@ -1,5 +1,6 @@
1
1
  import { EditorState } from 'prosemirror-state';
2
2
  import { EditorView } from 'prosemirror-view';
3
+ import { Logger2 } from "../logger.js";
3
4
  import { WysiwygContentHandler } from "./ContentHandler.js";
4
5
  import { ExtensionsManager } from "./ExtensionsManager.js";
5
6
  import { SchemaDynamicModifier } from "./SchemaDynamicModifier.js";
@@ -7,6 +8,7 @@ import { MarkdownParserDynamicModifier } from "./markdown/MarkdownParser.js";
7
8
  import { MarkdownSerializerDynamicModifier } from "./markdown/MarkdownSerializerDynamicModifier.js";
8
9
  import { bindActions } from "./utils/actions.js";
9
10
  import { convertDynamicModifiersConfigs } from "./utils/dynamicModifiers.js";
11
+ import { LoggerFacet } from "./utils/logger.js";
10
12
  import { logTransactionMetrics } from "./utils/metrics.js";
11
13
  export class WysiwygEditor {
12
14
  #view;
@@ -31,7 +33,7 @@ export class WysiwygEditor {
31
33
  get view() {
32
34
  return this.#view;
33
35
  }
34
- constructor({ domElem, initialContent = '', extensions = () => { }, allowHTML, mdPreset, linkify, pmTransformers, linkifyTlds, escapeConfig, onChange, onDocChange, modifiers, }) {
36
+ constructor({ domElem, initialContent = '', extensions = () => { }, allowHTML, mdPreset, linkify, pmTransformers, linkifyTlds, escapeConfig, onChange, onDocChange, modifiers, logger = new Logger2(), }) {
35
37
  const dynamicModifiersConfig = modifiers
36
38
  ? convertDynamicModifiersConfigs(modifiers)
37
39
  : undefined;
@@ -48,7 +50,8 @@ export class WysiwygEditor {
48
50
  linkifyTlds,
49
51
  pmTransformers,
50
52
  dynamicModifiers,
51
- });
53
+ }, logger);
54
+ plugins.unshift(LoggerFacet.of(logger));
52
55
  const state = EditorState.create({
53
56
  schema,
54
57
  doc: parser.parse(initialContent),
@@ -68,7 +71,7 @@ export class WysiwygEditor {
68
71
  if (tr.docChanged) {
69
72
  thisOnDocChange();
70
73
  }
71
- logTransactionMetrics(tr);
74
+ logTransactionMetrics(tr, logger);
72
75
  },
73
76
  });
74
77
  this.#actions = actions.setActions(bindActions(rawActions)(this.#view));
@@ -1 +1 @@
1
- {"version":3,"file":"Editor.js","sourceRoot":"../../../src","sources":["core/Editor.ts"],"names":[],"mappings":"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","sourcesContent":["import type {PresetName} from 'markdown-it';\nimport {EditorState} from 'prosemirror-state';\nimport {EditorView} from 'prosemirror-view';\n\nimport type {CommonEditor, ContentHandler, MarkupString} from '../common';\n\nimport type {ActionsManager} from './ActionsManager';\nimport {WysiwygContentHandler} from './ContentHandler';\nimport {ExtensionsManager} from './ExtensionsManager';\nimport {SchemaDynamicModifier} from './SchemaDynamicModifier';\nimport {MarkdownParserDynamicModifier} from './markdown/MarkdownParser';\nimport {MarkdownSerializerDynamicModifier} from './markdown/MarkdownSerializerDynamicModifier';\nimport type {TransformFn} from './markdown/ProseMirrorTransformer';\nimport type {ActionStorage} from './types/actions';\nimport type {DynamicModifiers} from './types/dynamicModifiers';\nimport type {Extension} from './types/extension';\nimport type {Parser} from './types/parser';\nimport type {Serializer} from './types/serializer';\nimport {bindActions} from './utils/actions';\nimport {convertDynamicModifiersConfigs} from './utils/dynamicModifiers';\nimport {logTransactionMetrics} from './utils/metrics';\n\ntype OnChange = (editor: WysiwygEditor) => void;\n\nexport type EscapeConfig = {\n commonEscape?: RegExp;\n startOfLineEscape?: RegExp;\n};\n\nexport type WysiwygEditorOptions = {\n domElem?: Element;\n /** markdown markup */\n initialContent?: string;\n extensions?: Extension;\n /** @default 'default' */\n mdPreset?: PresetName;\n allowHTML?: boolean;\n linkify?: boolean;\n pmTransformers?: TransformFn[];\n linkifyTlds?: string | string[];\n escapeConfig?: EscapeConfig;\n /** Call on any state change (move cursor, change selection, etc...) */\n onChange?: OnChange;\n /** Call only if document change */\n onDocChange?: OnChange;\n /** @internal Modifiers adjust the parser and serializer */\n modifiers?: DynamicModifiers[];\n};\n\nexport class WysiwygEditor implements CommonEditor, ActionStorage {\n #view: EditorView;\n #serializer: Serializer;\n #parser: Parser;\n #actions: ActionsManager;\n #contentHandler: ContentHandler;\n #escapeConfig?: EscapeConfig;\n\n get dom() {\n return this.#view.dom;\n }\n\n get serializer() {\n return this.#serializer;\n }\n\n get parser() {\n return this.#parser;\n }\n\n get actions() {\n return this.#actions.actions;\n }\n\n /** @internal used for prosemirror-dev-tools in demo */\n get view() {\n return this.#view;\n }\n\n constructor({\n domElem,\n initialContent = '',\n extensions = () => {},\n allowHTML,\n mdPreset,\n linkify,\n pmTransformers,\n linkifyTlds,\n escapeConfig,\n onChange,\n onDocChange,\n modifiers,\n }: WysiwygEditorOptions) {\n const dynamicModifiersConfig = modifiers\n ? convertDynamicModifiersConfigs(modifiers)\n : undefined;\n const dynamicModifiers = dynamicModifiersConfig\n ? {\n schema: new SchemaDynamicModifier(dynamicModifiersConfig.schema),\n parser: new MarkdownParserDynamicModifier(dynamicModifiersConfig.parser),\n serializer: new MarkdownSerializerDynamicModifier(\n dynamicModifiersConfig.serializer,\n ),\n }\n : undefined;\n\n const {\n schema,\n markupParser: parser,\n serializer,\n nodeViews,\n markViews,\n plugins,\n rawActions,\n actions,\n } = ExtensionsManager.process(extensions, {\n // \"breaks\" option only affects the renderer, but not the parser\n mdOpts: {html: allowHTML, linkify, breaks: true, preset: mdPreset},\n linkifyTlds,\n pmTransformers,\n dynamicModifiers,\n });\n\n const state = EditorState.create({\n schema,\n doc: parser.parse(initialContent),\n plugins,\n });\n\n const thisOnChange = () => this.tryOnChange(onChange);\n const thisOnDocChange = () => this.tryOnChange(onDocChange);\n\n this.#view = new EditorView(domElem ?? null, {\n state,\n nodeViews,\n markViews,\n dispatchTransaction(tr) {\n const newState = this.state.apply(tr);\n // @ts-expect-error\n this.updateState(newState);\n thisOnChange();\n if (tr.docChanged) {\n thisOnDocChange();\n }\n logTransactionMetrics(tr);\n },\n });\n this.#actions = actions.setActions(\n bindActions<keyof WysiwygEditor.Actions>(rawActions)(\n this.#view,\n ) as WysiwygEditor.Actions,\n );\n this.#serializer = serializer;\n this.#parser = parser;\n this.#contentHandler = new WysiwygContentHandler(this.#view, parser);\n this.#escapeConfig = escapeConfig;\n }\n\n action<T extends keyof WysiwygEditor.Actions>(actionName: T): WysiwygEditor.Actions[T] {\n return this.#actions.action(actionName);\n }\n\n focus() {\n return this.#view.focus();\n }\n\n hasFocus() {\n return this.#view.hasFocus();\n }\n\n getValue(): MarkupString {\n return this.#serializer.serialize(this.#view.state.doc, this.#escapeConfig);\n }\n\n isEmpty(): boolean {\n const {doc} = this.#view.state;\n return (\n doc.childCount === 1 &&\n doc.firstChild?.type.name === 'paragraph' &&\n doc.firstChild.childCount === 0\n );\n }\n\n clear(): void {\n return this.#contentHandler.clear();\n }\n\n replace(newMarkup: MarkupString): void {\n return this.#contentHandler.replace(newMarkup);\n }\n\n prepend(markup: MarkupString): void {\n return this.#contentHandler.prepend(markup);\n }\n\n append(markup: MarkupString): void {\n return this.#contentHandler.append(markup);\n }\n\n moveCursor(position: 'start' | 'end'): void {\n return this.#contentHandler.moveCursor(position);\n }\n\n destroy() {\n this.#view.destroy();\n }\n\n private tryOnChange(cb?: OnChange) {\n if (cb) {\n try {\n cb(this);\n } catch (err) {\n console.error(err);\n }\n }\n }\n}\n\ndeclare global {\n namespace WysiwygEditor {\n // eslint-disable-next-line @typescript-eslint/no-empty-interface\n interface Actions {}\n }\n}\n"]}
1
+ {"version":3,"file":"Editor.js","sourceRoot":"../../../src","sources":["core/Editor.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAG5C,OAAO,EAAC,OAAO,EAAC,qBAAkB;AAGlC,OAAO,EAAC,qBAAqB,EAAC,4BAAyB;AACvD,OAAO,EAAC,iBAAiB,EAAC,+BAA4B;AACtD,OAAO,EAAC,qBAAqB,EAAC,mCAAgC;AAC9D,OAAO,EAAC,6BAA6B,EAAC,qCAAkC;AACxE,OAAO,EAAC,iCAAiC,EAAC,wDAAqD;AAO/F,OAAO,EAAC,WAAW,EAAC,2BAAwB;AAC5C,OAAO,EAAC,8BAA8B,EAAC,oCAAiC;AACxE,OAAO,EAAC,WAAW,EAAC,0BAAuB;AAC3C,OAAO,EAAC,qBAAqB,EAAC,2BAAwB;AA8BtD,MAAM,OAAO,aAAa;IACtB,KAAK,CAAa;IAClB,WAAW,CAAa;IACxB,OAAO,CAAS;IAChB,QAAQ,CAAiB;IACzB,eAAe,CAAiB;IAChC,aAAa,CAAgB;IAE7B,IAAI,GAAG;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IAC1B,CAAC;IAED,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IACjC,CAAC;IAED,uDAAuD;IACvD,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,YAAY,EACR,OAAO,EACP,cAAc,GAAG,EAAE,EACnB,UAAU,GAAG,GAAG,EAAE,GAAE,CAAC,EACrB,SAAS,EACT,QAAQ,EACR,OAAO,EACP,cAAc,EACd,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,SAAS,EACT,MAAM,GAAG,IAAI,OAAO,EAAE,GACH;QACnB,MAAM,sBAAsB,GAAG,SAAS;YACpC,CAAC,CAAC,8BAA8B,CAAC,SAAS,CAAC;YAC3C,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,gBAAgB,GAAG,sBAAsB;YAC3C,CAAC,CAAC;gBACI,MAAM,EAAE,IAAI,qBAAqB,CAAC,sBAAsB,CAAC,MAAM,CAAC;gBAChE,MAAM,EAAE,IAAI,6BAA6B,CAAC,sBAAsB,CAAC,MAAM,CAAC;gBACxE,UAAU,EAAE,IAAI,iCAAiC,CAC7C,sBAAsB,CAAC,UAAU,CACpC;aACJ;YACH,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,EACF,MAAM,EACN,YAAY,EAAE,MAAM,EACpB,UAAU,EACV,SAAS,EACT,SAAS,EACT,OAAO,EACP,UAAU,EACV,OAAO,GACV,GAAG,iBAAiB,CAAC,OAAO,CACzB,UAAU,EACV;YACI,gEAAgE;YAChE,MAAM,EAAE,EAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAC;YAClE,WAAW;YACX,cAAc;YACd,gBAAgB;SACnB,EACD,MAAM,CACT,CAAC;QAEF,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAExC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC;YAC7B,MAAM;YACN,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC;YACjC,OAAO;SACV,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAE5D,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,IAAI,IAAI,EAAE;YACzC,KAAK;YACL,SAAS;YACT,SAAS;YACT,mBAAmB,CAAC,EAAE;gBAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACtC,mBAAmB;gBACnB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAC3B,YAAY,EAAE,CAAC;gBACf,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;oBAChB,eAAe,EAAE,CAAC;gBACtB,CAAC;gBACD,qBAAqB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACtC,CAAC;SACJ,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,UAAU,CAC9B,WAAW,CAA8B,UAAU,CAAC,CAChD,IAAI,CAAC,KAAK,CACY,CAC7B,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrE,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACtC,CAAC;IAED,MAAM,CAAwC,UAAa;QACvD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAChF,CAAC;IAED,OAAO;QACH,MAAM,EAAC,GAAG,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/B,OAAO,CACH,GAAG,CAAC,UAAU,KAAK,CAAC;YACpB,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,KAAK,WAAW;YACzC,GAAG,CAAC,UAAU,CAAC,UAAU,KAAK,CAAC,CAClC,CAAC;IACN,CAAC;IAED,KAAK;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IACxC,CAAC;IAED,OAAO,CAAC,SAAuB;QAC3B,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,CAAC,MAAoB;QACxB,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,MAAoB;QACvB,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,UAAU,CAAC,QAAyB;QAChC,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,OAAO;QACH,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;IAEO,WAAW,CAAC,EAAa;QAC7B,IAAI,EAAE,EAAE,CAAC;YACL,IAAI,CAAC;gBACD,EAAE,CAAC,IAAI,CAAC,CAAC;YACb,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC;QACL,CAAC;IACL,CAAC;CACJ","sourcesContent":["import type {PresetName} from 'markdown-it';\nimport {EditorState} from 'prosemirror-state';\nimport {EditorView} from 'prosemirror-view';\n\nimport type {CommonEditor, ContentHandler, MarkupString} from '../common';\nimport {Logger2} from '../logger';\n\nimport type {ActionsManager} from './ActionsManager';\nimport {WysiwygContentHandler} from './ContentHandler';\nimport {ExtensionsManager} from './ExtensionsManager';\nimport {SchemaDynamicModifier} from './SchemaDynamicModifier';\nimport {MarkdownParserDynamicModifier} from './markdown/MarkdownParser';\nimport {MarkdownSerializerDynamicModifier} from './markdown/MarkdownSerializerDynamicModifier';\nimport type {TransformFn} from './markdown/ProseMirrorTransformer';\nimport type {ActionStorage} from './types/actions';\nimport type {DynamicModifiers} from './types/dynamicModifiers';\nimport type {Extension} from './types/extension';\nimport type {Parser} from './types/parser';\nimport type {Serializer} from './types/serializer';\nimport {bindActions} from './utils/actions';\nimport {convertDynamicModifiersConfigs} from './utils/dynamicModifiers';\nimport {LoggerFacet} from './utils/logger';\nimport {logTransactionMetrics} from './utils/metrics';\n\ntype OnChange = (editor: WysiwygEditor) => void;\n\nexport type EscapeConfig = {\n commonEscape?: RegExp;\n startOfLineEscape?: RegExp;\n};\n\nexport type WysiwygEditorOptions = {\n domElem?: Element;\n /** markdown markup */\n initialContent?: string;\n extensions?: Extension;\n /** @default 'default' */\n mdPreset?: PresetName;\n allowHTML?: boolean;\n linkify?: boolean;\n pmTransformers?: TransformFn[];\n linkifyTlds?: string | string[];\n escapeConfig?: EscapeConfig;\n /** Call on any state change (move cursor, change selection, etc...) */\n onChange?: OnChange;\n /** Call only if document change */\n onDocChange?: OnChange;\n /** @internal Modifiers adjust the parser and serializer */\n modifiers?: DynamicModifiers[];\n logger?: Logger2.ILogger;\n};\n\nexport class WysiwygEditor implements CommonEditor, ActionStorage {\n #view: EditorView;\n #serializer: Serializer;\n #parser: Parser;\n #actions: ActionsManager;\n #contentHandler: ContentHandler;\n #escapeConfig?: EscapeConfig;\n\n get dom() {\n return this.#view.dom;\n }\n\n get serializer() {\n return this.#serializer;\n }\n\n get parser() {\n return this.#parser;\n }\n\n get actions() {\n return this.#actions.actions;\n }\n\n /** @internal used for prosemirror-dev-tools in demo */\n get view() {\n return this.#view;\n }\n\n constructor({\n domElem,\n initialContent = '',\n extensions = () => {},\n allowHTML,\n mdPreset,\n linkify,\n pmTransformers,\n linkifyTlds,\n escapeConfig,\n onChange,\n onDocChange,\n modifiers,\n logger = new Logger2(),\n }: WysiwygEditorOptions) {\n const dynamicModifiersConfig = modifiers\n ? convertDynamicModifiersConfigs(modifiers)\n : undefined;\n const dynamicModifiers = dynamicModifiersConfig\n ? {\n schema: new SchemaDynamicModifier(dynamicModifiersConfig.schema),\n parser: new MarkdownParserDynamicModifier(dynamicModifiersConfig.parser),\n serializer: new MarkdownSerializerDynamicModifier(\n dynamicModifiersConfig.serializer,\n ),\n }\n : undefined;\n\n const {\n schema,\n markupParser: parser,\n serializer,\n nodeViews,\n markViews,\n plugins,\n rawActions,\n actions,\n } = ExtensionsManager.process(\n extensions,\n {\n // \"breaks\" option only affects the renderer, but not the parser\n mdOpts: {html: allowHTML, linkify, breaks: true, preset: mdPreset},\n linkifyTlds,\n pmTransformers,\n dynamicModifiers,\n },\n logger,\n );\n\n plugins.unshift(LoggerFacet.of(logger));\n\n const state = EditorState.create({\n schema,\n doc: parser.parse(initialContent),\n plugins,\n });\n\n const thisOnChange = () => this.tryOnChange(onChange);\n const thisOnDocChange = () => this.tryOnChange(onDocChange);\n\n this.#view = new EditorView(domElem ?? null, {\n state,\n nodeViews,\n markViews,\n dispatchTransaction(tr) {\n const newState = this.state.apply(tr);\n // @ts-expect-error\n this.updateState(newState);\n thisOnChange();\n if (tr.docChanged) {\n thisOnDocChange();\n }\n logTransactionMetrics(tr, logger);\n },\n });\n this.#actions = actions.setActions(\n bindActions<keyof WysiwygEditor.Actions>(rawActions)(\n this.#view,\n ) as WysiwygEditor.Actions,\n );\n this.#serializer = serializer;\n this.#parser = parser;\n this.#contentHandler = new WysiwygContentHandler(this.#view, parser);\n this.#escapeConfig = escapeConfig;\n }\n\n action<T extends keyof WysiwygEditor.Actions>(actionName: T): WysiwygEditor.Actions[T] {\n return this.#actions.action(actionName);\n }\n\n focus() {\n return this.#view.focus();\n }\n\n hasFocus() {\n return this.#view.hasFocus();\n }\n\n getValue(): MarkupString {\n return this.#serializer.serialize(this.#view.state.doc, this.#escapeConfig);\n }\n\n isEmpty(): boolean {\n const {doc} = this.#view.state;\n return (\n doc.childCount === 1 &&\n doc.firstChild?.type.name === 'paragraph' &&\n doc.firstChild.childCount === 0\n );\n }\n\n clear(): void {\n return this.#contentHandler.clear();\n }\n\n replace(newMarkup: MarkupString): void {\n return this.#contentHandler.replace(newMarkup);\n }\n\n prepend(markup: MarkupString): void {\n return this.#contentHandler.prepend(markup);\n }\n\n append(markup: MarkupString): void {\n return this.#contentHandler.append(markup);\n }\n\n moveCursor(position: 'start' | 'end'): void {\n return this.#contentHandler.moveCursor(position);\n }\n\n destroy() {\n this.#view.destroy();\n }\n\n private tryOnChange(cb?: OnChange) {\n if (cb) {\n try {\n cb(this);\n } catch (err) {\n console.error(err);\n }\n }\n }\n}\n\ndeclare global {\n namespace WysiwygEditor {\n // eslint-disable-next-line @typescript-eslint/no-empty-interface\n interface Actions {}\n }\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  import type MarkdownIt from 'markdown-it';
2
2
  import { inputRules } from 'prosemirror-inputrules';
3
3
  import type { Plugin } from 'prosemirror-state';
4
+ import type { Logger2 } from "../logger.js";
4
5
  import type { ActionSpec } from "./types/actions.js";
5
6
  import type { Extension, ExtensionDeps, ExtensionMarkSpec, ExtensionNodeSpec, ExtensionSpec, ExtensionWithOptions } from "./types/extension.js";
6
7
  import type { Keymap } from "./types/keymap.js";
@@ -52,7 +53,8 @@ export declare class ExtensionBuilder {
52
53
  static readonly Priority: typeof Priority;
53
54
  readonly Priority: typeof Priority;
54
55
  readonly context: BuilderContext<WysiwygEditor.Context>;
55
- constructor(context?: BuilderContext<WysiwygEditor.Context>);
56
+ constructor(logger: Logger2.ILogger, context?: BuilderContext<WysiwygEditor.Context>);
57
+ get logger(): Logger2.ILogger;
56
58
  use(extension: Extension): this;
57
59
  use<T>(extension: ExtensionWithOptions<T>, options: T): this;
58
60
  configureMd(cb: ConfigureMdCallback, params?: ConfigureMdParams): this;
@@ -20,15 +20,20 @@ export class ExtensionBuilder {
20
20
  static Priority = Priority;
21
21
  Priority = ExtensionBuilder.Priority;
22
22
  /* eslint-enable @typescript-eslint/member-ordering */
23
+ #logger;
23
24
  #confMdCbs = [];
24
25
  #nodeSpecs = {};
25
26
  #markSpecs = {};
26
27
  #plugins = [];
27
28
  #actions = [];
28
29
  context;
29
- constructor(context) {
30
+ constructor(logger, context) {
31
+ this.#logger = logger;
30
32
  this.context = context ?? ExtensionBuilder.createContext();
31
33
  }
34
+ get logger() {
35
+ return this.#logger;
36
+ }
32
37
  use(extension, ...params) {
33
38
  extension(this, ...params);
34
39
  return this;
@@ -1 +1 @@
1
- {"version":3,"file":"ExtensionBuilder.js","sourceRoot":"../../../src","sources":["core/ExtensionBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import type MarkdownIt from 'markdown-it';\nimport OrderedMap from 'orderedmap'; // eslint-disable-line import/no-extraneous-dependencies\nimport {inputRules} from 'prosemirror-inputrules';\nimport {keymap} from 'prosemirror-keymap';\nimport type {Plugin} from 'prosemirror-state';\n\nimport type {ActionSpec} from './types/actions';\nimport type {\n Extension,\n ExtensionDeps,\n ExtensionMarkSpec,\n ExtensionNodeSpec,\n ExtensionSpec,\n ExtensionWithOptions,\n} from './types/extension';\nimport type {Keymap} from './types/keymap';\n\ntype InputRulesConfig = Parameters<typeof inputRules>[0];\ntype ExtensionWithParams = (builder: ExtensionBuilder, ...params: any[]) => void;\ntype ConfigureMdParams = {\n /**\n * Apply this configurtion to text parser\n *\n * @default true\n */\n text?: boolean;\n /**\n * Apply this configurtion to markup parser\n *\n * @default true\n */\n markup?: boolean;\n};\n\ntype ConfigureMdCallback = (md: MarkdownIt) => MarkdownIt;\ntype AddPmNodeCallback = () => ExtensionNodeSpec;\ntype AddPmMarkCallback = () => ExtensionMarkSpec;\ntype AddPmPluginCallback = (deps: ExtensionDeps) => Plugin | Plugin[];\ntype AddPmKeymapCallback = (deps: ExtensionDeps) => Keymap;\ntype AddPmInputRulesCallback = (deps: ExtensionDeps) => InputRulesConfig;\ntype AddActionCallback = (deps: ExtensionDeps) => ActionSpec;\n\nenum Priority {\n Highest = 1_000_000,\n VeryHigh = 100_000,\n High = 10_000,\n Medium = 1_000,\n Low = 100,\n VeryLow = 10,\n Lowest = 0,\n}\n\nconst DEFAULT_PRIORITY = Priority.Medium;\n\ntype BuilderContext<T extends object> = {\n has(key: keyof T): boolean;\n get<K extends keyof T>(key: K): T[K] | undefined;\n set<K extends keyof T>(key: K, value: T[K]): BuilderContext<T>;\n};\n\ndeclare global {\n namespace WysiwygEditor {\n interface Context {}\n }\n}\n\nexport class ExtensionBuilder {\n static createContext(): BuilderContext<WysiwygEditor.Context> {\n return new Map();\n }\n\n /* eslint-disable @typescript-eslint/member-ordering */\n static readonly Priority = Priority;\n readonly Priority = ExtensionBuilder.Priority;\n /* eslint-enable @typescript-eslint/member-ordering */\n\n #confMdCbs: {cb: ConfigureMdCallback; params: Required<ConfigureMdParams>}[] = [];\n #nodeSpecs: Record<string, {name: string; cb: AddPmNodeCallback}> = {};\n #markSpecs: Record<string, {name: string; cb: AddPmMarkCallback; priority: number}> = {};\n #plugins: {cb: AddPmPluginCallback; priority: number}[] = [];\n #actions: [string, AddActionCallback][] = [];\n\n readonly context: BuilderContext<WysiwygEditor.Context>;\n\n constructor(context?: BuilderContext<WysiwygEditor.Context>) {\n this.context = context ?? ExtensionBuilder.createContext();\n }\n\n use(extension: Extension): this;\n use<T>(extension: ExtensionWithOptions<T>, options: T): this;\n use(extension: ExtensionWithParams, ...params: any[]): this {\n extension(this, ...params);\n return this;\n }\n\n configureMd(cb: ConfigureMdCallback, params: ConfigureMdParams = {}): this {\n this.#confMdCbs.push({\n cb,\n params: {\n text: params.text ?? true,\n markup: params.markup ?? true,\n },\n });\n return this;\n }\n\n addNode(name: string, cb: AddPmNodeCallback): this {\n if (this.#nodeSpecs[name]) {\n throw new Error(`ProseMirror node with this name \"${name}\" already exist`);\n }\n this.#nodeSpecs[name] = {name, cb};\n return this;\n }\n\n addMark(name: string, cb: AddPmMarkCallback, priority = DEFAULT_PRIORITY): this {\n if (this.#markSpecs[name]) {\n throw new Error(`ProseMirror mark with this name \"${name}\" already exist`);\n }\n this.#markSpecs[name] = {name, cb, priority};\n return this;\n }\n\n addPlugin(cb: AddPmPluginCallback, priority = DEFAULT_PRIORITY): this {\n this.#plugins.push({cb, priority});\n return this;\n }\n\n addKeymap(cb: AddPmKeymapCallback, priority = DEFAULT_PRIORITY): this {\n this.#plugins.push({cb: (...args) => keymap(cb(...args)), priority});\n return this;\n }\n\n addInputRules(cb: AddPmInputRulesCallback, priority = DEFAULT_PRIORITY): this {\n this.#plugins.push({cb: (...args) => inputRules(cb(...args)), priority});\n return this;\n }\n\n addAction(name: string, cb: AddActionCallback): this {\n if (this.#actions.some(([actionName]) => actionName === name)) {\n throw new Error(\n `[Markdown Wysiwyg Editor] action with this name \"${name}\" already exist`,\n );\n }\n this.#actions.push([name, cb]);\n return this;\n }\n\n build(): ExtensionSpec {\n const confMd = this.#confMdCbs.slice();\n const nodes = {...this.#nodeSpecs};\n const marks = {...this.#markSpecs};\n const plugins = this.#plugins.slice();\n const actions = this.#actions.slice();\n\n return {\n configureMd: (md, parserType) =>\n confMd.reduce((pMd, {cb, params}) => {\n if (parserType === 'text' && params.text) {\n return cb(pMd);\n }\n if (parserType === 'markup' && params.markup) {\n return cb(pMd);\n }\n return pMd;\n }, md),\n nodes: () => {\n let map = OrderedMap.from<ExtensionNodeSpec>({});\n for (const {name, cb} of Object.values(nodes)) {\n map = map.addToEnd(name, cb());\n }\n return map;\n },\n marks: () => {\n // The order of marks in schema is important when serializing pm-document to DOM or markup\n // https://discuss.prosemirror.net/t/marks-priority/4463\n const sortedMarks = Object.values(marks).sort((a, b) => b.priority - a.priority);\n let map = OrderedMap.from<ExtensionMarkSpec>({});\n for (const {name, cb} of sortedMarks) {\n map = map.addToEnd(name, cb());\n }\n return map;\n },\n plugins: (deps) => {\n return plugins\n .sort((a, b) => b.priority - a.priority)\n .reduce<Plugin[]>((acc, {cb}) => {\n const res = cb(deps);\n if (Array.isArray(res)) acc.push(...res);\n else acc.push(res);\n return acc;\n }, []);\n },\n actions: (deps) =>\n actions.reduce(\n (obj, [name, cb]) => {\n obj[name] = cb(deps);\n return obj;\n },\n {} as Record<string, ActionSpec>,\n ),\n };\n }\n}\n"]}
1
+ {"version":3,"file":"ExtensionBuilder.js","sourceRoot":"../../../src","sources":["core/ExtensionBuilder.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,YAAY,CAAC,CAAC,wDAAwD;AAC7F,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAyC1C,IAAK,QAQJ;AARD,WAAK,QAAQ;IACT,mDAAmB,CAAA;IACnB,oDAAkB,CAAA;IAClB,2CAAa,CAAA;IACb,8CAAc,CAAA;IACd,uCAAS,CAAA;IACT,8CAAY,CAAA;IACZ,2CAAU,CAAA;AACd,CAAC,EARI,QAAQ,KAAR,QAAQ,QAQZ;AAED,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC;AAczC,MAAM,OAAO,gBAAgB;IACzB,MAAM,CAAC,aAAa;QAChB,OAAO,IAAI,GAAG,EAAE,CAAC;IACrB,CAAC;IAED,uDAAuD;IACvD,MAAM,CAAU,QAAQ,GAAG,QAAQ,CAAC;IAC3B,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC;IAC9C,sDAAsD;IAE7C,OAAO,CAAkB;IAClC,UAAU,GAAqE,EAAE,CAAC;IAClF,UAAU,GAA0D,EAAE,CAAC;IACvE,UAAU,GAA4E,EAAE,CAAC;IACzF,QAAQ,GAAkD,EAAE,CAAC;IAC7D,QAAQ,GAAkC,EAAE,CAAC;IAEpC,OAAO,CAAwC;IAExD,YAAY,MAAuB,EAAE,OAA+C;QAChF,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,gBAAgB,CAAC,aAAa,EAAE,CAAC;IAC/D,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAID,GAAG,CAAC,SAA8B,EAAE,GAAG,MAAa;QAChD,SAAS,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,WAAW,CAAC,EAAuB,EAAE,SAA4B,EAAE;QAC/D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACjB,EAAE;YACF,MAAM,EAAE;gBACJ,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;gBACzB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;aAChC;SACJ,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,IAAY,EAAE,EAAqB;QACvC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,iBAAiB,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAC,IAAI,EAAE,EAAE,EAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,IAAY,EAAE,EAAqB,EAAE,QAAQ,GAAG,gBAAgB;QACpE,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,iBAAiB,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,EAAuB,EAAE,QAAQ,GAAG,gBAAgB;QAC1D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,QAAQ,EAAC,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,EAAuB,EAAE,QAAQ,GAAG,gBAAgB;QAC1D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAC,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,aAAa,CAAC,EAA2B,EAAE,QAAQ,GAAG,gBAAgB;QAClE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAC,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,EAAqB;QACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CACX,oDAAoD,IAAI,iBAAiB,CAC5E,CAAC;QACN,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,EAAC,GAAG,IAAI,CAAC,UAAU,EAAC,CAAC;QACnC,MAAM,KAAK,GAAG,EAAC,GAAG,IAAI,CAAC,UAAU,EAAC,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEtC,OAAO;YACH,WAAW,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,CAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAC,EAAE,EAAE,MAAM,EAAC,EAAE,EAAE;gBAChC,IAAI,UAAU,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBACvC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;gBACnB,CAAC;gBACD,IAAI,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC3C,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;gBACnB,CAAC;gBACD,OAAO,GAAG,CAAC;YACf,CAAC,EAAE,EAAE,CAAC;YACV,KAAK,EAAE,GAAG,EAAE;gBACR,IAAI,GAAG,GAAG,UAAU,CAAC,IAAI,CAAoB,EAAE,CAAC,CAAC;gBACjD,KAAK,MAAM,EAAC,IAAI,EAAE,EAAE,EAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC5C,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBACnC,CAAC;gBACD,OAAO,GAAG,CAAC;YACf,CAAC;YACD,KAAK,EAAE,GAAG,EAAE;gBACR,0FAA0F;gBAC1F,wDAAwD;gBACxD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACjF,IAAI,GAAG,GAAG,UAAU,CAAC,IAAI,CAAoB,EAAE,CAAC,CAAC;gBACjD,KAAK,MAAM,EAAC,IAAI,EAAE,EAAE,EAAC,IAAI,WAAW,EAAE,CAAC;oBACnC,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBACnC,CAAC;gBACD,OAAO,GAAG,CAAC;YACf,CAAC;YACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACd,OAAO,OAAO;qBACT,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;qBACvC,MAAM,CAAW,CAAC,GAAG,EAAE,EAAC,EAAE,EAAC,EAAE,EAAE;oBAC5B,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;oBACrB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;wBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;;wBACpC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACnB,OAAO,GAAG,CAAC;gBACf,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC;YACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CACd,OAAO,CAAC,MAAM,CACV,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;gBAChB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBACrB,OAAO,GAAG,CAAC;YACf,CAAC,EACD,EAAgC,CACnC;SACR,CAAC;IACN,CAAC","sourcesContent":["import type MarkdownIt from 'markdown-it';\nimport OrderedMap from 'orderedmap'; // eslint-disable-line import/no-extraneous-dependencies\nimport {inputRules} from 'prosemirror-inputrules';\nimport {keymap} from 'prosemirror-keymap';\nimport type {Plugin} from 'prosemirror-state';\n\nimport type {Logger2} from '../logger';\n\nimport type {ActionSpec} from './types/actions';\nimport type {\n Extension,\n ExtensionDeps,\n ExtensionMarkSpec,\n ExtensionNodeSpec,\n ExtensionSpec,\n ExtensionWithOptions,\n} from './types/extension';\nimport type {Keymap} from './types/keymap';\n\ntype InputRulesConfig = Parameters<typeof inputRules>[0];\ntype ExtensionWithParams = (builder: ExtensionBuilder, ...params: any[]) => void;\ntype ConfigureMdParams = {\n /**\n * Apply this configurtion to text parser\n *\n * @default true\n */\n text?: boolean;\n /**\n * Apply this configurtion to markup parser\n *\n * @default true\n */\n markup?: boolean;\n};\n\ntype ConfigureMdCallback = (md: MarkdownIt) => MarkdownIt;\ntype AddPmNodeCallback = () => ExtensionNodeSpec;\ntype AddPmMarkCallback = () => ExtensionMarkSpec;\ntype AddPmPluginCallback = (deps: ExtensionDeps) => Plugin | Plugin[];\ntype AddPmKeymapCallback = (deps: ExtensionDeps) => Keymap;\ntype AddPmInputRulesCallback = (deps: ExtensionDeps) => InputRulesConfig;\ntype AddActionCallback = (deps: ExtensionDeps) => ActionSpec;\n\nenum Priority {\n Highest = 1_000_000,\n VeryHigh = 100_000,\n High = 10_000,\n Medium = 1_000,\n Low = 100,\n VeryLow = 10,\n Lowest = 0,\n}\n\nconst DEFAULT_PRIORITY = Priority.Medium;\n\ntype BuilderContext<T extends object> = {\n has(key: keyof T): boolean;\n get<K extends keyof T>(key: K): T[K] | undefined;\n set<K extends keyof T>(key: K, value: T[K]): BuilderContext<T>;\n};\n\ndeclare global {\n namespace WysiwygEditor {\n interface Context {}\n }\n}\n\nexport class ExtensionBuilder {\n static createContext(): BuilderContext<WysiwygEditor.Context> {\n return new Map();\n }\n\n /* eslint-disable @typescript-eslint/member-ordering */\n static readonly Priority = Priority;\n readonly Priority = ExtensionBuilder.Priority;\n /* eslint-enable @typescript-eslint/member-ordering */\n\n readonly #logger: Logger2.ILogger;\n #confMdCbs: {cb: ConfigureMdCallback; params: Required<ConfigureMdParams>}[] = [];\n #nodeSpecs: Record<string, {name: string; cb: AddPmNodeCallback}> = {};\n #markSpecs: Record<string, {name: string; cb: AddPmMarkCallback; priority: number}> = {};\n #plugins: {cb: AddPmPluginCallback; priority: number}[] = [];\n #actions: [string, AddActionCallback][] = [];\n\n readonly context: BuilderContext<WysiwygEditor.Context>;\n\n constructor(logger: Logger2.ILogger, context?: BuilderContext<WysiwygEditor.Context>) {\n this.#logger = logger;\n this.context = context ?? ExtensionBuilder.createContext();\n }\n\n get logger(): Logger2.ILogger {\n return this.#logger;\n }\n\n use(extension: Extension): this;\n use<T>(extension: ExtensionWithOptions<T>, options: T): this;\n use(extension: ExtensionWithParams, ...params: any[]): this {\n extension(this, ...params);\n return this;\n }\n\n configureMd(cb: ConfigureMdCallback, params: ConfigureMdParams = {}): this {\n this.#confMdCbs.push({\n cb,\n params: {\n text: params.text ?? true,\n markup: params.markup ?? true,\n },\n });\n return this;\n }\n\n addNode(name: string, cb: AddPmNodeCallback): this {\n if (this.#nodeSpecs[name]) {\n throw new Error(`ProseMirror node with this name \"${name}\" already exist`);\n }\n this.#nodeSpecs[name] = {name, cb};\n return this;\n }\n\n addMark(name: string, cb: AddPmMarkCallback, priority = DEFAULT_PRIORITY): this {\n if (this.#markSpecs[name]) {\n throw new Error(`ProseMirror mark with this name \"${name}\" already exist`);\n }\n this.#markSpecs[name] = {name, cb, priority};\n return this;\n }\n\n addPlugin(cb: AddPmPluginCallback, priority = DEFAULT_PRIORITY): this {\n this.#plugins.push({cb, priority});\n return this;\n }\n\n addKeymap(cb: AddPmKeymapCallback, priority = DEFAULT_PRIORITY): this {\n this.#plugins.push({cb: (...args) => keymap(cb(...args)), priority});\n return this;\n }\n\n addInputRules(cb: AddPmInputRulesCallback, priority = DEFAULT_PRIORITY): this {\n this.#plugins.push({cb: (...args) => inputRules(cb(...args)), priority});\n return this;\n }\n\n addAction(name: string, cb: AddActionCallback): this {\n if (this.#actions.some(([actionName]) => actionName === name)) {\n throw new Error(\n `[Markdown Wysiwyg Editor] action with this name \"${name}\" already exist`,\n );\n }\n this.#actions.push([name, cb]);\n return this;\n }\n\n build(): ExtensionSpec {\n const confMd = this.#confMdCbs.slice();\n const nodes = {...this.#nodeSpecs};\n const marks = {...this.#markSpecs};\n const plugins = this.#plugins.slice();\n const actions = this.#actions.slice();\n\n return {\n configureMd: (md, parserType) =>\n confMd.reduce((pMd, {cb, params}) => {\n if (parserType === 'text' && params.text) {\n return cb(pMd);\n }\n if (parserType === 'markup' && params.markup) {\n return cb(pMd);\n }\n return pMd;\n }, md),\n nodes: () => {\n let map = OrderedMap.from<ExtensionNodeSpec>({});\n for (const {name, cb} of Object.values(nodes)) {\n map = map.addToEnd(name, cb());\n }\n return map;\n },\n marks: () => {\n // The order of marks in schema is important when serializing pm-document to DOM or markup\n // https://discuss.prosemirror.net/t/marks-priority/4463\n const sortedMarks = Object.values(marks).sort((a, b) => b.priority - a.priority);\n let map = OrderedMap.from<ExtensionMarkSpec>({});\n for (const {name, cb} of sortedMarks) {\n map = map.addToEnd(name, cb());\n }\n return map;\n },\n plugins: (deps) => {\n return plugins\n .sort((a, b) => b.priority - a.priority)\n .reduce<Plugin[]>((acc, {cb}) => {\n const res = cb(deps);\n if (Array.isArray(res)) acc.push(...res);\n else acc.push(res);\n return acc;\n }, []);\n },\n actions: (deps) =>\n actions.reduce(\n (obj, [name, cb]) => {\n obj[name] = cb(deps);\n return obj;\n },\n {} as Record<string, ActionSpec>,\n ),\n };\n }\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  import MarkdownIt, { type PresetName } from 'markdown-it';
2
2
  import type { Schema } from 'prosemirror-model';
3
3
  import type { Plugin } from 'prosemirror-state';
4
+ import { Logger2 } from "../logger.js";
4
5
  import { ActionsManager } from "./ActionsManager.js";
5
6
  import type { SchemaDynamicModifier } from "./SchemaDynamicModifier.js";
6
7
  import type { MarkdownParserDynamicModifier } from "./markdown/MarkdownParser.js";
@@ -10,6 +11,7 @@ import type { ActionSpec } from "./types/actions.js";
10
11
  import type { Extension, ExtensionDeps } from "./types/extension.js";
11
12
  import type { MarkViewConstructor, NodeViewConstructor } from "./types/node-views.js";
12
13
  type ExtensionsManagerParams = {
14
+ logger?: Logger2.ILogger;
13
15
  extensions: Extension;
14
16
  options?: ExtensionsManagerOptions;
15
17
  };
@@ -27,7 +29,7 @@ type ExtensionsManagerOptions = {
27
29
  };
28
30
  export declare class ExtensionsManager {
29
31
  #private;
30
- static process(extensions: Extension, options: ExtensionsManagerOptions): {
32
+ static process(extensions: Extension, options: ExtensionsManagerOptions, logger?: Logger2.ILogger): {
31
33
  actions: ActionsManager;
32
34
  rawActions: Record<string, ActionSpec>;
33
35
  plugins: Plugin<any>[];
@@ -38,7 +40,7 @@ export declare class ExtensionsManager {
38
40
  markupParser: import("./index.js").Parser;
39
41
  serializer: import("./index.js").Serializer;
40
42
  };
41
- constructor({ extensions, options }: ExtensionsManagerParams);
43
+ constructor({ extensions, options, logger }: ExtensionsManagerParams);
42
44
  build(): {
43
45
  actions: ActionsManager;
44
46
  rawActions: Record<string, ActionSpec>;
@@ -1,12 +1,13 @@
1
1
  import MarkdownIt, {} from 'markdown-it';
2
+ import { Logger2 } from "../logger.js";
2
3
  import { ActionsManager } from "./ActionsManager.js";
3
4
  import { ExtensionBuilder } from "./ExtensionBuilder.js";
4
5
  import { ParserTokensRegistry } from "./ParserTokensRegistry.js";
5
6
  import { SchemaSpecRegistry } from "./SchemaSpecRegistry.js";
6
7
  import { SerializerTokensRegistry } from "./SerializerTokensRegistry.js";
7
8
  export class ExtensionsManager {
8
- static process(extensions, options) {
9
- return new this({ extensions, options }).build();
9
+ static process(extensions, options, logger) {
10
+ return new this({ extensions, options, logger }).build();
10
11
  }
11
12
  #schemaRegistry;
12
13
  #parserRegistry;
@@ -26,9 +27,9 @@ export class ExtensionsManager {
26
27
  #markViews = {};
27
28
  #serializerDynamicModifier;
28
29
  #parserDynamicModifier;
29
- constructor({ extensions, options = {} }) {
30
+ constructor({ extensions, options = {}, logger = new Logger2() }) {
30
31
  this.#schemaRegistry = new SchemaSpecRegistry(undefined, options.dynamicModifiers?.schema);
31
- this.#parserRegistry = new ParserTokensRegistry();
32
+ this.#parserRegistry = new ParserTokensRegistry({ logger });
32
33
  this.#serializerRegistry = new SerializerTokensRegistry();
33
34
  if (options.dynamicModifiers) {
34
35
  this.#parserDynamicModifier = options.dynamicModifiers?.parser;
@@ -46,7 +47,7 @@ export class ExtensionsManager {
46
47
  this.#pmTransformers = options.pmTransformers;
47
48
  }
48
49
  // TODO: add prefilled context
49
- this.#builder = new ExtensionBuilder();
50
+ this.#builder = new ExtensionBuilder(logger);
50
51
  }
51
52
  build() {
52
53
  this.processExtensions();
@@ -1 +1 @@
1
- {"version":3,"file":"ExtensionsManager.js","sourceRoot":"../../../src","sources":["core/ExtensionsManager.ts"],"names":[],"mappings":"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","sourcesContent":["import MarkdownIt, {type PresetName} from 'markdown-it';\nimport type {Schema} from 'prosemirror-model';\nimport type {Plugin} from 'prosemirror-state';\n\nimport {ActionsManager} from './ActionsManager';\nimport {ExtensionBuilder} from './ExtensionBuilder';\nimport {ParserTokensRegistry} from './ParserTokensRegistry';\nimport type {SchemaDynamicModifier} from './SchemaDynamicModifier';\nimport {SchemaSpecRegistry} from './SchemaSpecRegistry';\nimport {SerializerTokensRegistry} from './SerializerTokensRegistry';\nimport type {MarkdownParserDynamicModifier} from './markdown/MarkdownParser';\nimport type {MarkdownSerializerDynamicModifier} from './markdown/MarkdownSerializerDynamicModifier';\nimport type {TransformFn} from './markdown/ProseMirrorTransformer';\nimport type {ActionSpec} from './types/actions';\nimport type {\n Extension,\n ExtensionDeps,\n ExtensionMarkSpec,\n ExtensionNodeSpec,\n ExtensionSpec,\n} from './types/extension';\nimport type {MarkViewConstructor, NodeViewConstructor} from './types/node-views';\n\ntype ExtensionsManagerParams = {\n extensions: Extension;\n options?: ExtensionsManagerOptions;\n};\n\ntype ExtensionsManagerOptions = {\n mdOpts?: MarkdownIt.Options & {preset?: PresetName};\n linkifyTlds?: string | string[];\n pmTransformers?: TransformFn[];\n dynamicModifiers?: {\n parser?: MarkdownParserDynamicModifier;\n serializer?: MarkdownSerializerDynamicModifier;\n schema?: SchemaDynamicModifier;\n };\n};\n\nexport class ExtensionsManager {\n static process(extensions: Extension, options: ExtensionsManagerOptions) {\n return new this({extensions, options}).build();\n }\n\n #schemaRegistry;\n #parserRegistry;\n #serializerRegistry;\n\n #nodeViewCreators = new Map<string, (deps: ExtensionDeps) => NodeViewConstructor>();\n #markViewCreators = new Map<string, (deps: ExtensionDeps) => MarkViewConstructor>();\n\n #pmTransformers: TransformFn[] = [];\n\n #mdForMarkup: MarkdownIt;\n #mdForText: MarkdownIt;\n #extensions: Extension;\n #builder: ExtensionBuilder;\n\n #spec!: ExtensionSpec;\n #deps!: ExtensionDeps;\n #plugins: Plugin[] = [];\n #actions: Record<string, ActionSpec> = {};\n #nodeViews: Record<string, NodeViewConstructor> = {};\n #markViews: Record<string, MarkViewConstructor> = {};\n #serializerDynamicModifier?: MarkdownSerializerDynamicModifier;\n #parserDynamicModifier?: MarkdownParserDynamicModifier;\n\n constructor({extensions, options = {}}: ExtensionsManagerParams) {\n this.#schemaRegistry = new SchemaSpecRegistry(undefined, options.dynamicModifiers?.schema);\n this.#parserRegistry = new ParserTokensRegistry();\n this.#serializerRegistry = new SerializerTokensRegistry();\n if (options.dynamicModifiers) {\n this.#parserDynamicModifier = options.dynamicModifiers?.parser;\n this.#serializerDynamicModifier = options.dynamicModifiers?.serializer;\n }\n\n this.#extensions = extensions;\n\n const mdPreset: PresetName = options.mdOpts?.preset ?? 'default';\n this.#mdForMarkup = new MarkdownIt(mdPreset, options.mdOpts ?? {});\n this.#mdForText = new MarkdownIt(mdPreset, options.mdOpts ?? {});\n\n if (options.linkifyTlds) {\n this.#mdForMarkup.linkify.tlds(options.linkifyTlds, true);\n this.#mdForText.linkify.tlds(options.linkifyTlds, true);\n }\n\n if (options.pmTransformers) {\n this.#pmTransformers = options.pmTransformers;\n }\n\n // TODO: add prefilled context\n this.#builder = new ExtensionBuilder();\n }\n\n build() {\n this.processExtensions();\n this.createDeps();\n this.createDerived();\n\n return {\n ...this.#deps,\n actions: this.#deps.actions as ActionsManager,\n rawActions: this.#actions,\n plugins: this.#plugins,\n nodeViews: this.#nodeViews,\n markViews: this.#markViews,\n };\n }\n\n buildDeps() {\n this.processExtensions();\n this.createDeps();\n return this.#deps;\n }\n\n private processExtensions() {\n this.#spec = this.#builder.use(this.#extensions).build();\n this.#mdForMarkup = this.#spec.configureMd(this.#mdForMarkup, 'markup');\n this.#mdForText = this.#spec.configureMd(this.#mdForText, 'text');\n this.#spec.nodes().forEach(this.processNode);\n this.#spec.marks().forEach(this.processMark);\n }\n\n private processNode = (name: string, {spec, fromMd, toMd: toMd, view}: ExtensionNodeSpec) => {\n this.#schemaRegistry.addNode(name, spec);\n\n this.#parserRegistry.addToken(fromMd.tokenName || name, fromMd.tokenSpec);\n this.#serializerRegistry.addNode(name, toMd);\n if (view) {\n this.#nodeViewCreators.set(name, view);\n }\n };\n\n private processMark = (name: string, {spec, fromMd, toMd, view}: ExtensionMarkSpec) => {\n this.#schemaRegistry.addMark(name, spec);\n this.#parserRegistry.addToken(fromMd.tokenName || name, fromMd.tokenSpec);\n this.#serializerRegistry.addMark(name, toMd);\n if (view) {\n this.#markViewCreators.set(name, view);\n }\n };\n\n private createParser(schema: Schema, mdInstance: MarkdownIt) {\n return this.#parserRegistry.createParser(\n schema,\n mdInstance,\n this.#pmTransformers,\n this.#parserDynamicModifier,\n );\n }\n\n private createDeps() {\n const actions = new ActionsManager();\n\n const schema = this.#schemaRegistry.createSchema();\n const markupParser = this.createParser(schema, this.#mdForMarkup);\n const textParser = this.createParser(schema, this.#mdForText);\n const serializer = this.#serializerRegistry.createSerializer(\n this.#serializerDynamicModifier,\n );\n\n this.#deps = {\n schema,\n actions,\n markupParser,\n textParser,\n serializer,\n };\n }\n\n private createDerived() {\n this.#plugins = this.#spec.plugins(this.#deps);\n Object.assign(this.#actions, this.#spec.actions(this.#deps));\n\n for (const [name, view] of this.#nodeViewCreators) {\n this.#nodeViews[name] = view(this.#deps);\n }\n\n for (const [name, view] of this.#markViewCreators) {\n this.#markViews[name] = view(this.#deps);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"ExtensionsManager.js","sourceRoot":"../../../src","sources":["core/ExtensionsManager.ts"],"names":[],"mappings":"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","sourcesContent":["import MarkdownIt, {type PresetName} from 'markdown-it';\nimport type {Schema} from 'prosemirror-model';\nimport type {Plugin} from 'prosemirror-state';\n\nimport {Logger2} from '../logger';\n\nimport {ActionsManager} from './ActionsManager';\nimport {ExtensionBuilder} from './ExtensionBuilder';\nimport {ParserTokensRegistry} from './ParserTokensRegistry';\nimport type {SchemaDynamicModifier} from './SchemaDynamicModifier';\nimport {SchemaSpecRegistry} from './SchemaSpecRegistry';\nimport {SerializerTokensRegistry} from './SerializerTokensRegistry';\nimport type {MarkdownParserDynamicModifier} from './markdown/MarkdownParser';\nimport type {MarkdownSerializerDynamicModifier} from './markdown/MarkdownSerializerDynamicModifier';\nimport type {TransformFn} from './markdown/ProseMirrorTransformer';\nimport type {ActionSpec} from './types/actions';\nimport type {\n Extension,\n ExtensionDeps,\n ExtensionMarkSpec,\n ExtensionNodeSpec,\n ExtensionSpec,\n} from './types/extension';\nimport type {MarkViewConstructor, NodeViewConstructor} from './types/node-views';\n\ntype ExtensionsManagerParams = {\n logger?: Logger2.ILogger;\n extensions: Extension;\n options?: ExtensionsManagerOptions;\n};\n\ntype ExtensionsManagerOptions = {\n mdOpts?: MarkdownIt.Options & {preset?: PresetName};\n linkifyTlds?: string | string[];\n pmTransformers?: TransformFn[];\n dynamicModifiers?: {\n parser?: MarkdownParserDynamicModifier;\n serializer?: MarkdownSerializerDynamicModifier;\n schema?: SchemaDynamicModifier;\n };\n};\n\nexport class ExtensionsManager {\n static process(\n extensions: Extension,\n options: ExtensionsManagerOptions,\n logger?: Logger2.ILogger,\n ) {\n return new this({extensions, options, logger}).build();\n }\n\n #schemaRegistry;\n #parserRegistry;\n #serializerRegistry;\n\n #nodeViewCreators = new Map<string, (deps: ExtensionDeps) => NodeViewConstructor>();\n #markViewCreators = new Map<string, (deps: ExtensionDeps) => MarkViewConstructor>();\n\n #pmTransformers: TransformFn[] = [];\n\n #mdForMarkup: MarkdownIt;\n #mdForText: MarkdownIt;\n #extensions: Extension;\n #builder: ExtensionBuilder;\n\n #spec!: ExtensionSpec;\n #deps!: ExtensionDeps;\n #plugins: Plugin[] = [];\n #actions: Record<string, ActionSpec> = {};\n #nodeViews: Record<string, NodeViewConstructor> = {};\n #markViews: Record<string, MarkViewConstructor> = {};\n #serializerDynamicModifier?: MarkdownSerializerDynamicModifier;\n #parserDynamicModifier?: MarkdownParserDynamicModifier;\n\n constructor({extensions, options = {}, logger = new Logger2()}: ExtensionsManagerParams) {\n this.#schemaRegistry = new SchemaSpecRegistry(undefined, options.dynamicModifiers?.schema);\n this.#parserRegistry = new ParserTokensRegistry({logger});\n this.#serializerRegistry = new SerializerTokensRegistry();\n if (options.dynamicModifiers) {\n this.#parserDynamicModifier = options.dynamicModifiers?.parser;\n this.#serializerDynamicModifier = options.dynamicModifiers?.serializer;\n }\n\n this.#extensions = extensions;\n\n const mdPreset: PresetName = options.mdOpts?.preset ?? 'default';\n this.#mdForMarkup = new MarkdownIt(mdPreset, options.mdOpts ?? {});\n this.#mdForText = new MarkdownIt(mdPreset, options.mdOpts ?? {});\n\n if (options.linkifyTlds) {\n this.#mdForMarkup.linkify.tlds(options.linkifyTlds, true);\n this.#mdForText.linkify.tlds(options.linkifyTlds, true);\n }\n\n if (options.pmTransformers) {\n this.#pmTransformers = options.pmTransformers;\n }\n\n // TODO: add prefilled context\n this.#builder = new ExtensionBuilder(logger);\n }\n\n build() {\n this.processExtensions();\n this.createDeps();\n this.createDerived();\n\n return {\n ...this.#deps,\n actions: this.#deps.actions as ActionsManager,\n rawActions: this.#actions,\n plugins: this.#plugins,\n nodeViews: this.#nodeViews,\n markViews: this.#markViews,\n };\n }\n\n buildDeps() {\n this.processExtensions();\n this.createDeps();\n return this.#deps;\n }\n\n private processExtensions() {\n this.#spec = this.#builder.use(this.#extensions).build();\n this.#mdForMarkup = this.#spec.configureMd(this.#mdForMarkup, 'markup');\n this.#mdForText = this.#spec.configureMd(this.#mdForText, 'text');\n this.#spec.nodes().forEach(this.processNode);\n this.#spec.marks().forEach(this.processMark);\n }\n\n private processNode = (name: string, {spec, fromMd, toMd: toMd, view}: ExtensionNodeSpec) => {\n this.#schemaRegistry.addNode(name, spec);\n\n this.#parserRegistry.addToken(fromMd.tokenName || name, fromMd.tokenSpec);\n this.#serializerRegistry.addNode(name, toMd);\n if (view) {\n this.#nodeViewCreators.set(name, view);\n }\n };\n\n private processMark = (name: string, {spec, fromMd, toMd, view}: ExtensionMarkSpec) => {\n this.#schemaRegistry.addMark(name, spec);\n this.#parserRegistry.addToken(fromMd.tokenName || name, fromMd.tokenSpec);\n this.#serializerRegistry.addMark(name, toMd);\n if (view) {\n this.#markViewCreators.set(name, view);\n }\n };\n\n private createParser(schema: Schema, mdInstance: MarkdownIt) {\n return this.#parserRegistry.createParser(\n schema,\n mdInstance,\n this.#pmTransformers,\n this.#parserDynamicModifier,\n );\n }\n\n private createDeps() {\n const actions = new ActionsManager();\n\n const schema = this.#schemaRegistry.createSchema();\n const markupParser = this.createParser(schema, this.#mdForMarkup);\n const textParser = this.createParser(schema, this.#mdForText);\n const serializer = this.#serializerRegistry.createSerializer(\n this.#serializerDynamicModifier,\n );\n\n this.#deps = {\n schema,\n actions,\n markupParser,\n textParser,\n serializer,\n };\n }\n\n private createDerived() {\n this.#plugins = this.#spec.plugins(this.#deps);\n Object.assign(this.#actions, this.#spec.actions(this.#deps));\n\n for (const [name, view] of this.#nodeViewCreators) {\n this.#nodeViews[name] = view(this.#deps);\n }\n\n for (const [name, view] of this.#markViewCreators) {\n this.#markViews[name] = view(this.#deps);\n }\n }\n}\n"]}
@@ -1,10 +1,16 @@
1
1
  import type MarkdownIt from 'markdown-it';
2
2
  import type { Schema } from 'prosemirror-model';
3
+ import type { Logger2 } from "../logger.js";
3
4
  import { type MarkdownParserDynamicModifier } from "./markdown/MarkdownParser.js";
4
5
  import type { TransformFn } from "./markdown/ProseMirrorTransformer/index.js";
5
6
  import type { Parser, ParserToken } from "./types/parser.js";
7
+ type ParserTokensRegistryOptions = {
8
+ logger: Logger2.ILogger;
9
+ };
6
10
  export declare class ParserTokensRegistry {
7
11
  #private;
12
+ constructor(opts: ParserTokensRegistryOptions);
8
13
  addToken(name: string, token: ParserToken): this;
9
14
  createParser(schema: Schema, tokenizer: MarkdownIt, pmTransformers: TransformFn[], dynamicModifier?: MarkdownParserDynamicModifier): Parser;
10
15
  }
16
+ export {};
@@ -1,12 +1,20 @@
1
1
  import { MarkdownParser } from "./markdown/MarkdownParser.js";
2
2
  export class ParserTokensRegistry {
3
3
  #tokens = {};
4
+ #logger;
5
+ constructor(opts) {
6
+ this.#logger = opts.logger;
7
+ }
4
8
  addToken(name, token) {
5
9
  this.#tokens[name] = token;
6
10
  return this;
7
11
  }
8
12
  createParser(schema, tokenizer, pmTransformers, dynamicModifier) {
9
- return new MarkdownParser(schema, tokenizer, this.#tokens, pmTransformers, dynamicModifier);
13
+ return new MarkdownParser(schema, tokenizer, this.#tokens, {
14
+ logger: this.#logger,
15
+ pmTransformers,
16
+ dynamicModifier,
17
+ });
10
18
  }
11
19
  }
12
20
  //# sourceMappingURL=ParserTokensRegistry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ParserTokensRegistry.js","sourceRoot":"../../../src","sources":["core/ParserTokensRegistry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,cAAc,EAAqC,qCAAkC;AAI7F,MAAM,OAAO,oBAAoB;IAC7B,OAAO,GAAgC,EAAE,CAAC;IAE1C,QAAQ,CAAC,IAAY,EAAE,KAAkB;QACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,YAAY,CACR,MAAc,EACd,SAAqB,EACrB,cAA6B,EAC7B,eAA+C;QAE/C,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;IAChG,CAAC;CACJ","sourcesContent":["import type MarkdownIt from 'markdown-it';\nimport type {Schema} from 'prosemirror-model';\n\nimport {MarkdownParser, type MarkdownParserDynamicModifier} from './markdown/MarkdownParser';\nimport type {TransformFn} from './markdown/ProseMirrorTransformer';\nimport type {Parser, ParserToken} from './types/parser';\n\nexport class ParserTokensRegistry {\n #tokens: Record<string, ParserToken> = {};\n\n addToken(name: string, token: ParserToken) {\n this.#tokens[name] = token;\n return this;\n }\n\n createParser(\n schema: Schema,\n tokenizer: MarkdownIt,\n pmTransformers: TransformFn[],\n dynamicModifier?: MarkdownParserDynamicModifier,\n ): Parser {\n return new MarkdownParser(schema, tokenizer, this.#tokens, pmTransformers, dynamicModifier);\n }\n}\n"]}
1
+ {"version":3,"file":"ParserTokensRegistry.js","sourceRoot":"../../../src","sources":["core/ParserTokensRegistry.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,cAAc,EAAqC,qCAAkC;AAQ7F,MAAM,OAAO,oBAAoB;IAC7B,OAAO,GAAgC,EAAE,CAAC;IAC1C,OAAO,CAAkB;IAEzB,YAAY,IAAiC;QACzC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,KAAkB;QACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,YAAY,CACR,MAAc,EACd,SAAqB,EACrB,cAA6B,EAC7B,eAA+C;QAE/C,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE;YACvD,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,cAAc;YACd,eAAe;SAClB,CAAC,CAAC;IACP,CAAC;CACJ","sourcesContent":["import type MarkdownIt from 'markdown-it';\nimport type {Schema} from 'prosemirror-model';\n\nimport type {Logger2} from '../logger';\n\nimport {MarkdownParser, type MarkdownParserDynamicModifier} from './markdown/MarkdownParser';\nimport type {TransformFn} from './markdown/ProseMirrorTransformer';\nimport type {Parser, ParserToken} from './types/parser';\n\ntype ParserTokensRegistryOptions = {\n logger: Logger2.ILogger;\n};\n\nexport class ParserTokensRegistry {\n #tokens: Record<string, ParserToken> = {};\n #logger: Logger2.ILogger;\n\n constructor(opts: ParserTokensRegistryOptions) {\n this.#logger = opts.logger;\n }\n\n addToken(name: string, token: ParserToken) {\n this.#tokens[name] = token;\n return this;\n }\n\n createParser(\n schema: Schema,\n tokenizer: MarkdownIt,\n pmTransformers: TransformFn[],\n dynamicModifier?: MarkdownParserDynamicModifier,\n ): Parser {\n return new MarkdownParser(schema, tokenizer, this.#tokens, {\n logger: this.#logger,\n pmTransformers,\n dynamicModifier,\n });\n }\n}\n"]}