@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
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ // Partial realization of Facet from CodeMirror, but for ProseMirror
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Facet = void 0;
5
+ const prosemirror_state_1 = require("prosemirror-state");
6
+ const lodash_1 = require("../lodash.js");
7
+ /** @internal @unstable */
8
+ class Facet {
9
+ static define(config) {
10
+ return new this(config);
11
+ }
12
+ _combine;
13
+ _key;
14
+ constructor(config) {
15
+ this._combine = config.combine;
16
+ this._key = new prosemirror_state_1.PluginKey(`Facet${config.static ? '_static' : ''}:${config.name || ''}:${(0, lodash_1.uniqueId)()}`);
17
+ }
18
+ of(value) {
19
+ const output = this._combine([value]);
20
+ return new prosemirror_state_1.Plugin({
21
+ key: this._key,
22
+ state: {
23
+ init: () => output,
24
+ apply: () => output,
25
+ },
26
+ });
27
+ }
28
+ getState(state) {
29
+ return this._key.getState(state);
30
+ }
31
+ }
32
+ exports.Facet = Facet;
33
+ //# sourceMappingURL=facet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facet.js","sourceRoot":"../../../src","sources":["utils/facet.ts"],"names":[],"mappings":";AAAA,oEAAoE;;;AAEpE,yDAAsE;AAEtE,yCAAmC;AASnC,0BAA0B;AAC1B,MAAa,KAAK;IACd,MAAM,CAAC,MAAM,CACT,MAAkC;QAElC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAEgB,QAAQ,CAAC;IACT,IAAI,CAAoB;IAEzC,YAAoB,MAAkC;QAClD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,6BAAS,CACrB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,IAAA,iBAAQ,GAAE,EAAE,CAC9E,CAAC;IACN,CAAC;IAED,EAAE,CAAC,KAAY;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,OAAO,IAAI,0BAAM,CAAS;YACtB,GAAG,EAAE,IAAI,CAAC,IAAI;YACd,KAAK,EAAE;gBACH,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM;gBAClB,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM;aACtB;SACJ,CAAC,CAAC;IACP,CAAC;IAED,QAAQ,CAAC,KAAkB;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;CACJ;AA/BD,sBA+BC","sourcesContent":["// Partial realization of Facet from CodeMirror, but for ProseMirror\n\nimport {type EditorState, Plugin, PluginKey} from 'prosemirror-state';\n\nimport {uniqueId} from '../lodash';\n\n/** @internal @unstable */\nexport type FacetConfig<Input, Output> = {\n combine: (value: readonly Input[]) => Output;\n static: true;\n name?: string;\n};\n\n/** @internal @unstable */\nexport class Facet<Input, Output = readonly Input[]> {\n static define<Input, Output = readonly Input[]>(\n config: FacetConfig<Input, Output>,\n ): Facet<Input, Output> {\n return new this(config);\n }\n\n private readonly _combine;\n private readonly _key: PluginKey<Output>;\n\n private constructor(config: FacetConfig<Input, Output>) {\n this._combine = config.combine;\n this._key = new PluginKey(\n `Facet${config.static ? '_static' : ''}:${config.name || ''}:${uniqueId()}`,\n );\n }\n\n of(value: Input): Plugin<Output> {\n const output = this._combine([value]);\n return new Plugin<Output>({\n key: this._key,\n state: {\n init: () => output,\n apply: () => output,\n },\n });\n }\n\n getState(state: EditorState): Output | undefined {\n return this._key.getState(state);\n }\n}\n"]}
@@ -1,12 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.withLogAction = withLogAction;
4
+ const core_1 = require("../core/index.js");
4
5
  const logger_1 = require("../logger.js");
5
6
  function withLogAction(action, command) {
6
7
  return (...args) => {
7
8
  const res = command(...args);
8
- if (res)
9
- logger_1.logger.action({ action, source: 'keymap' });
9
+ if (res) {
10
+ const [state] = args;
11
+ const logger = (0, core_1.getLoggerFromState)(state);
12
+ logger.action({ action, source: 'keymap' });
13
+ logger_1.globalLogger.action({ action, source: 'keymap', mode: 'wysiwyg' });
14
+ }
10
15
  return res;
11
16
  };
12
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"keymap.js","sourceRoot":"../../../src","sources":["utils/keymap.ts"],"names":[],"mappings":";;AAIA,sCAMC;AARD,yCAAiC;AAEjC,SAAgB,aAAa,CAAC,MAAc,EAAE,OAAgB;IAC1D,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE;QACf,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7B,IAAI,GAAG;YAAE,eAAM,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC,CAAC,CAAC;QACnD,OAAO,GAAG,CAAC;IACf,CAAC,CAAC;AACN,CAAC","sourcesContent":["import type {Command} from 'prosemirror-state';\n\nimport {logger} from '../logger';\n\nexport function withLogAction(action: string, command: Command): Command {\n return (...args) => {\n const res = command(...args);\n if (res) logger.action({action, source: 'keymap'});\n return res;\n };\n}\n"]}
1
+ {"version":3,"file":"keymap.js","sourceRoot":"../../../src","sources":["utils/keymap.ts"],"names":[],"mappings":";;AAKA,sCAWC;AAdD,2CAA2C;AAC3C,yCAAuC;AAEvC,SAAgB,aAAa,CAAC,MAAc,EAAE,OAAgB;IAC1D,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE;QACf,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7B,IAAI,GAAG,EAAE,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;YACrB,MAAM,MAAM,GAAG,IAAA,yBAAkB,EAAC,KAAK,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC,CAAC,CAAC;YAC1C,qBAAY,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAC,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC,CAAC;AACN,CAAC","sourcesContent":["import type {Command} from 'prosemirror-state';\n\nimport {getLoggerFromState} from '../core';\nimport {globalLogger} from '../logger';\n\nexport function withLogAction(action: string, command: Command): Command {\n return (...args) => {\n const res = command(...args);\n if (res) {\n const [state] = args;\n const logger = getLoggerFromState(state);\n logger.action({action, source: 'keymap'});\n globalLogger.action({action, source: 'keymap', mode: 'wysiwyg'});\n }\n return res;\n };\n}\n"]}
@@ -2,5 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
4
  /** During build process, the current version will be injected here */
5
- exports.VERSION = typeof '15.1.0' !== 'undefined' ? '15.1.0' : 'unknown';
5
+ exports.VERSION = typeof '15.2.0' !== 'undefined' ? '15.2.0' : 'unknown';
6
6
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"../../src","sources":["version.ts"],"names":[],"mappings":";;;AAAA,sEAAsE;AACzD,QAAA,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["/** During build process, the current version will be injected here */\nexport const VERSION = typeof '15.1.0' !== 'undefined' ? '15.1.0' : 'unknown';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"../../src","sources":["version.ts"],"names":[],"mappings":";;;AAAA,sEAAsE;AACzD,QAAA,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["/** During build process, the current version will be injected here */\nexport const VERSION = typeof '15.2.0' !== 'undefined' ? '15.2.0' : 'unknown';\n"]}
@@ -1,6 +1,7 @@
1
1
  import type { CommonEditor } from "../common/index.js";
2
2
  import type { TransformFn } from "../core/markdown/ProseMirrorTransformer/index.js";
3
3
  import type { ReactRenderStorage } from "../extensions/index.js";
4
+ import { type Logger2 } from "../logger.js";
4
5
  import { type Receiver } from "../utils/index.js";
5
6
  import type { DirectiveSyntaxContext } from "../utils/directive.js";
6
7
  import type { MarkdownEditorMode as EditorMode, MarkdownEditorPreset as EditorPreset, MarkdownEditorOptions } from "./types.js";
@@ -27,6 +28,7 @@ export interface EventMap {
27
28
  };
28
29
  }
29
30
  export interface Editor extends Receiver<EventMap>, CommonEditor {
31
+ readonly logger: Logger2.LogReceiver;
30
32
  readonly currentMode: EditorMode;
31
33
  readonly toolbarVisible: boolean;
32
34
  setEditorMode(mode: EditorMode, opts?: SetEditorModeOptions): void;
@@ -41,6 +43,7 @@ export type ChangeEditorModeOptions = {
41
43
  emit?: boolean;
42
44
  };
43
45
  export type EditorOptions = Pick<MarkdownEditorOptions, 'md' | 'initial' | 'handlers' | 'experimental' | 'markupConfig' | 'wysiwygConfig'> & {
46
+ logger: Logger2.ILogger;
44
47
  renderStorage: ReactRenderStorage;
45
48
  preset: EditorPreset;
46
49
  directiveSyntax: DirectiveSyntaxContext;
@@ -2,7 +2,7 @@ import { EditorView as CMEditorView } from '@codemirror/view';
2
2
  import { TextSelection } from 'prosemirror-state';
3
3
  import { WysiwygEditor, } from "../core/index.js";
4
4
  import { i18n } from "../i18n/bundle/index.js";
5
- import { logger } from "../logger.js";
5
+ import { globalLogger } from "../logger.js";
6
6
  import { createCodemirror } from "../markup/index.js";
7
7
  import { getAutocompleteConfig } from "../markup/codemirror/autocomplete/index.js";
8
8
  import { Editor as MarkupEditor } from "../markup/editor.js";
@@ -11,6 +11,7 @@ import { MarkupManager } from "./MarkupManager.js";
11
11
  import { createDynamicModifiers } from "./config/dynamicModifiers.js";
12
12
  /** @internal */
13
13
  export class EditorImpl extends SafeEventEmitter {
14
+ #logger;
14
15
  #markup;
15
16
  #editorMode;
16
17
  #toolbarVisible;
@@ -39,6 +40,9 @@ export class EditorImpl extends SafeEventEmitter {
39
40
  // @ts-expect-error internal typing
40
41
  return this.#wysiwygEditor?.view;
41
42
  }
43
+ get logger() {
44
+ return this.#logger;
45
+ }
42
46
  get currentMode() {
43
47
  return this.#editorMode;
44
48
  }
@@ -118,6 +122,7 @@ export class EditorImpl extends SafeEventEmitter {
118
122
  const mdPreset = this.#preset === 'zero' || this.#preset === 'commonmark' ? this.#preset : 'default';
119
123
  this.#wysiwygEditor = new WysiwygEditor({
120
124
  mdPreset,
125
+ logger: this.logger.nested({ mode: 'wysiwyg' }),
121
126
  initialContent: this.#markup,
122
127
  extensions: this.#extensions,
123
128
  pmTransformers: this.#pmTransformers,
@@ -136,6 +141,7 @@ export class EditorImpl extends SafeEventEmitter {
136
141
  if (!this.#markupEditor) {
137
142
  this.#markupEditor = new MarkupEditor(createCodemirror({
138
143
  doc: this.#markup,
144
+ logger: this.logger.nested({ mode: 'markup' }),
139
145
  placeholder: this.#markupConfig.placeholder ?? i18n('markup_placeholder'),
140
146
  onCancel: () => this.emit('cancel', null),
141
147
  onSubmit: () => this.emit('submit', null),
@@ -180,10 +186,17 @@ export class EditorImpl extends SafeEventEmitter {
180
186
  return this.#enableNewImageSizeCalculation;
181
187
  }
182
188
  constructor(opts) {
183
- super({ onError: logger.error.bind(logger) });
189
+ const { logger } = opts;
190
+ super({
191
+ onError: (error) => {
192
+ logger.error(error);
193
+ globalLogger.error(error);
194
+ },
195
+ });
184
196
  const { md = {}, initial = {}, handlers = {}, experimental = {}, markupConfig = {}, wysiwygConfig = {}, } = opts;
197
+ this.#logger = logger;
185
198
  this.#modifiers = experimental.preserveMarkupFormatting
186
- ? createDynamicModifiers(new MarkupManager())
199
+ ? createDynamicModifiers(new MarkupManager(this.logger.nested({ module: 'markup-manager' })))
187
200
  : undefined;
188
201
  this.#editorMode = initial.mode ?? 'wysiwyg';
189
202
  this.#toolbarVisible = initial.toolbarVisible ?? true;
@@ -236,6 +249,12 @@ export class EditorImpl extends SafeEventEmitter {
236
249
  if (this.#beforeEditorModeChange?.({ mode: opts.mode, reason: opts.reason }) === false) {
237
250
  return;
238
251
  }
252
+ this.logger.event({
253
+ event: 'mode-change',
254
+ prevMode: this.#editorMode,
255
+ nextMode: opts.mode,
256
+ reason: opts.reason,
257
+ });
239
258
  this.currentMode = opts.mode;
240
259
  this.emit('rerender', null);
241
260
  if (emit) {
@@ -1 +1 @@
1
- {"version":3,"file":"Editor.js","sourceRoot":"../../../src","sources":["bundle/Editor.ts"],"names":[],"mappings":"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","sourcesContent":["import type {ReactNode} from 'react';\n\nimport {EditorView as CMEditorView} from '@codemirror/view';\nimport {TextSelection} from 'prosemirror-state';\nimport type {EditorView as PMEditorView} from 'prosemirror-view';\n\nimport type {CommonEditor, MarkupString} from '../common';\nimport {\n type ActionStorage,\n type EscapeConfig,\n WysiwygEditor,\n type WysiwygEditorOptions,\n} from '../core';\nimport type {TransformFn} from '../core/markdown/ProseMirrorTransformer';\nimport type {DynamicModifiers} from '../core/types/dynamicModifiers';\nimport type {ReactRenderStorage, RenderStorage} from '../extensions';\nimport {i18n} from '../i18n/bundle';\nimport {logger} from '../logger';\nimport {createCodemirror} from '../markup';\nimport {getAutocompleteConfig} from '../markup/codemirror/autocomplete';\nimport {type CodeEditor, Editor as MarkupEditor} from '../markup/editor';\nimport {type Emitter, type FileUploadHandler, type Receiver, SafeEventEmitter} from '../utils';\nimport type {DirectiveSyntaxContext} from '../utils/directive';\n\nimport {MarkupManager} from './MarkupManager';\nimport {createDynamicModifiers} from './config/dynamicModifiers';\nimport type {\n MarkdownEditorMode as EditorMode,\n MarkdownEditorPreset as EditorPreset,\n MarkdownEditorMdOptions,\n MarkdownEditorOptions,\n MarkdownEditorMarkupConfig as MarkupConfig,\n ParseInsertedUrlAsImage,\n RenderPreview,\n MarkdownEditorSplitMode as SplitMode,\n} from './types';\n\nexport type ToolbarActionData = {\n editorMode: EditorMode;\n id: string;\n attrs?: {[key: string]: any};\n};\n\nexport interface EventMap {\n change: null;\n cancel: null;\n submit: null;\n\n 'toolbar-action': ToolbarActionData;\n\n 'change-editor-mode': {mode: EditorMode};\n 'change-toolbar-visibility': {visible: boolean};\n 'change-split-mode-enabled': {splitModeEnabled: boolean};\n}\n\n// internal events\ninterface EventMapInt extends EventMap {\n rerender: null;\n 'rerender-toolbar': null;\n 'cm-scroll': {event: Event};\n}\n\nexport interface Editor extends Receiver<EventMap>, CommonEditor {\n readonly currentMode: EditorMode;\n readonly toolbarVisible: boolean;\n\n setEditorMode(mode: EditorMode, opts?: SetEditorModeOptions): void;\n\n moveCursor(position: 'start' | 'end' | {line: number}): void;\n\n /** @internal used in demo for dev-tools */\n readonly _wysiwygView?: PMEditorView;\n}\n\n/** @internal */\nexport interface EditorInt\n extends CommonEditor,\n Emitter<EventMapInt>,\n Receiver<EventMapInt>,\n ActionStorage,\n CodeEditor {\n readonly currentMode: EditorMode;\n readonly toolbarVisible: boolean;\n readonly splitModeEnabled: boolean;\n readonly splitMode: SplitMode;\n readonly preset: EditorPreset;\n readonly mdOptions: Readonly<MarkdownEditorMdOptions>;\n readonly directiveSyntax: DirectiveSyntaxContext;\n\n /** @internal used in demo for dev-tools */\n readonly _wysiwygView?: PMEditorView;\n\n readonly currentEditor: CommonEditor;\n readonly wysiwygEditor: WysiwygEditor;\n readonly markupEditor: MarkupEditor;\n\n readonly renderStorage: RenderStorage<ReactNode>;\n readonly fileUploadHandler?: FileUploadHandler;\n readonly needToSetDimensionsForUploadedImages: boolean;\n readonly disableHTMLParsingInMd?: boolean;\n\n readonly renderPreview?: RenderPreview;\n\n changeEditorMode(opts: ChangeEditorModeOptions): void;\n\n setEditorMode(mode: EditorMode, opts?: SetEditorModeOptions): void;\n\n moveCursor(position: 'start' | 'end' | {line: number}): void;\n\n changeToolbarVisibility(opts: {visible: boolean}): void;\n\n changeSplitModeEnabled(opts: {splitModeEnabled: boolean}): void;\n\n destroy(): void;\n}\n\ntype SetEditorModeOptions = Pick<ChangeEditorModeOptions, 'emit'>;\n\nexport type ChangeEditorModeOptions = {\n mode: EditorMode;\n reason: 'error-boundary' | 'settings' | 'manually';\n emit?: boolean;\n};\n\nexport type EditorOptions = Pick<\n MarkdownEditorOptions,\n 'md' | 'initial' | 'handlers' | 'experimental' | 'markupConfig' | 'wysiwygConfig'\n> & {\n renderStorage: ReactRenderStorage;\n preset: EditorPreset;\n directiveSyntax: DirectiveSyntaxContext;\n pmTransformers: TransformFn[];\n};\n\n/** @internal */\nexport class EditorImpl extends SafeEventEmitter<EventMapInt> implements EditorInt {\n #markup: MarkupString;\n #editorMode: EditorMode;\n #toolbarVisible: boolean;\n #splitModeEnabled: boolean;\n #splitMode: SplitMode;\n #renderPreview?: RenderPreview;\n #wysiwygEditor?: WysiwygEditor;\n #markupEditor?: MarkupEditor;\n #markupConfig: MarkupConfig;\n #escapeConfig?: EscapeConfig;\n #mdOptions: Readonly<MarkdownEditorMdOptions>;\n #pmTransformers: TransformFn[] = [];\n #preserveEmptyRows: boolean;\n #modifiers?: DynamicModifiers[];\n\n readonly #preset: EditorPreset;\n #extensions?: WysiwygEditorOptions['extensions'];\n #renderStorage: ReactRenderStorage;\n #fileUploadHandler?: FileUploadHandler;\n #parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n #needToSetDimensionsForUploadedImages: boolean;\n #enableNewImageSizeCalculation: boolean;\n #directiveSyntax: DirectiveSyntaxContext;\n #prepareRawMarkup?: (value: MarkupString) => MarkupString;\n #beforeEditorModeChange?: (\n options: Pick<ChangeEditorModeOptions, 'mode' | 'reason'>,\n ) => boolean | undefined;\n\n get _wysiwygView(): PMEditorView {\n // @ts-expect-error internal typing\n return this.#wysiwygEditor?.view;\n }\n\n get currentMode(): EditorMode {\n return this.#editorMode;\n }\n\n private set currentMode(newMode: EditorMode) {\n switch (newMode) {\n case 'markup': {\n this.#editorMode = newMode;\n if (this.#wysiwygEditor) {\n const markupEditorValue = this.#markupEditor?.getValue();\n const wysiwygEditorValue = this.#wysiwygEditor.getValue();\n if (\n !markupEditorValue ||\n this.shouldReplaceMarkupEditorValue(markupEditorValue, wysiwygEditorValue)\n ) {\n this.#markup = wysiwygEditorValue;\n } else {\n this.#markup = markupEditorValue;\n }\n }\n if (this.#markupEditor) this.#markupEditor.replace(this.#markup);\n break;\n }\n case 'wysiwyg': {\n this.#editorMode = newMode;\n if (this.#markupEditor) {\n const value = this.#markupEditor.getValue();\n this.#markup = this.#prepareRawMarkup?.(value) ?? value;\n } else if (this.#prepareRawMarkup) {\n this.#markup = this.#prepareRawMarkup(this.#markup);\n }\n if (this.#wysiwygEditor) this.#wysiwygEditor.replace(this.#markup);\n break;\n }\n default:\n throw new Error('Unknown editor mode: ' + newMode);\n }\n setTimeout(() => {\n this.currentEditor.focus();\n }, 30);\n }\n\n get toolbarVisible(): boolean {\n return this.#toolbarVisible;\n }\n\n get splitModeEnabled(): boolean {\n return this.#splitModeEnabled;\n }\n\n get splitMode(): SplitMode {\n return this.#splitMode;\n }\n\n get preset(): EditorPreset {\n return this.#preset;\n }\n\n get mdOptions(): Readonly<MarkdownEditorMdOptions> {\n return this.#mdOptions;\n }\n\n get directiveSyntax(): DirectiveSyntaxContext {\n return this.#directiveSyntax;\n }\n\n get renderPreview(): RenderPreview | undefined {\n return this.#renderPreview;\n }\n\n get currentEditor(): CommonEditor {\n const mode = this.currentMode;\n switch (mode) {\n case 'markup':\n return this.markupEditor;\n case 'wysiwyg':\n return this.wysiwygEditor;\n default:\n throw new Error('Unknown editor mode: ' + mode);\n }\n }\n\n get wysiwygEditor(): WysiwygEditor {\n if (!this.#wysiwygEditor) {\n const mdPreset: NonNullable<WysiwygEditorOptions['mdPreset']> =\n this.#preset === 'zero' || this.#preset === 'commonmark' ? this.#preset : 'default';\n this.#wysiwygEditor = new WysiwygEditor({\n mdPreset,\n initialContent: this.#markup,\n extensions: this.#extensions,\n pmTransformers: this.#pmTransformers,\n modifiers: this.#modifiers,\n allowHTML: this.#mdOptions.html,\n linkify: this.#mdOptions.linkify,\n linkifyTlds: this.#mdOptions.linkifyTlds,\n escapeConfig: this.#escapeConfig,\n onChange: () => this.emit('rerender-toolbar', null),\n onDocChange: () => this.emit('change', null),\n });\n }\n return this.#wysiwygEditor;\n }\n\n get markupEditor(): MarkupEditor {\n if (!this.#markupEditor) {\n this.#markupEditor = new MarkupEditor(\n createCodemirror({\n doc: this.#markup,\n placeholder: this.#markupConfig.placeholder ?? i18n('markup_placeholder'),\n onCancel: () => this.emit('cancel', null),\n onSubmit: () => this.emit('submit', null),\n onChange: () => this.emit('rerender-toolbar', null),\n onDocChange: () => this.emit('change', null),\n onScroll: (event) => this.emit('cm-scroll', {event}),\n reactRenderer: this.#renderStorage,\n uploadHandler: this.fileUploadHandler,\n parseInsertedUrlAsImage: this.parseInsertedUrlAsImage,\n needImageDimensions: this.needToSetDimensionsForUploadedImages,\n parseHtmlOnPaste: this.#markupConfig.parseHtmlOnPaste,\n enableNewImageSizeCalculation: this.enableNewImageSizeCalculation,\n extensions: this.#markupConfig.extensions,\n disabledExtensions: this.#markupConfig.disabledExtensions,\n keymaps: this.#markupConfig.keymaps,\n preserveEmptyRows: this.#preserveEmptyRows,\n yfmLangOptions: {\n languageData: getAutocompleteConfig({\n preserveEmptyRows: this.#preserveEmptyRows,\n }).concat(this.#markupConfig?.languageData || []),\n },\n autocompletion: this.#markupConfig.autocompletion,\n directiveSyntax: this.directiveSyntax,\n receiver: this,\n }),\n );\n }\n return this.#markupEditor;\n }\n\n get renderStorage(): RenderStorage<ReactNode> {\n return this.#renderStorage;\n }\n\n get fileUploadHandler(): FileUploadHandler | undefined {\n return this.#fileUploadHandler;\n }\n\n get parseInsertedUrlAsImage() {\n return this.#parseInsertedUrlAsImage;\n }\n\n get needToSetDimensionsForUploadedImages(): boolean {\n return this.#needToSetDimensionsForUploadedImages;\n }\n\n get enableNewImageSizeCalculation(): boolean {\n return this.#enableNewImageSizeCalculation;\n }\n\n constructor(opts: EditorOptions) {\n super({onError: logger.error.bind(logger)});\n\n const {\n md = {},\n initial = {},\n handlers = {},\n experimental = {},\n markupConfig = {},\n wysiwygConfig = {},\n } = opts;\n\n this.#modifiers = experimental.preserveMarkupFormatting\n ? createDynamicModifiers(new MarkupManager())\n : undefined;\n\n this.#editorMode = initial.mode ?? 'wysiwyg';\n this.#toolbarVisible = initial.toolbarVisible ?? true;\n this.#splitMode = (markupConfig.renderPreview && markupConfig.splitMode) ?? false;\n this.#splitModeEnabled = (this.#splitMode && initial.splitModeEnabled) ?? false;\n this.#renderPreview = markupConfig.renderPreview;\n\n this.#markup = initial.markup ?? '';\n\n this.#preset = opts.preset ?? 'full';\n this.#pmTransformers = opts.pmTransformers;\n this.#mdOptions = md;\n this.#extensions = wysiwygConfig.extensions;\n this.#markupConfig = {...opts.markupConfig};\n\n this.#renderStorage = opts.renderStorage;\n this.#fileUploadHandler = handlers.uploadFile;\n this.#parseInsertedUrlAsImage = markupConfig.parseInsertedUrlAsImage;\n this.#needToSetDimensionsForUploadedImages = Boolean(\n experimental.needToSetDimensionsForUploadedImages,\n );\n this.#directiveSyntax = opts.directiveSyntax;\n this.#enableNewImageSizeCalculation = Boolean(experimental.enableNewImageSizeCalculation);\n this.#preserveEmptyRows = experimental.preserveEmptyRows || false;\n this.#prepareRawMarkup = experimental.prepareRawMarkup;\n this.#escapeConfig = wysiwygConfig.escapeConfig;\n this.#beforeEditorModeChange = experimental.beforeEditorModeChange;\n }\n\n // ---> implements CodeEditor\n\n get cm() {\n return this.markupEditor.cm;\n }\n\n // <--- implements CodeEditor\n\n // ---> implements ActionStorage\n get actions(): WysiwygEditor.Actions {\n return this.wysiwygEditor.actions;\n }\n\n action<T extends keyof WysiwygEditor.Actions>(actionName: T): WysiwygEditor.Actions[T] {\n return this.wysiwygEditor.action(actionName);\n }\n\n // <--- implements ActionStorage\n\n destroy() {\n this.#wysiwygEditor?.destroy();\n this.#markupEditor?.codemirror.destroy();\n\n this.#markupEditor = undefined;\n this.#markupEditor = undefined;\n this.#wysiwygEditor = undefined;\n }\n\n setEditorMode(mode: EditorMode, opts?: SetEditorModeOptions): void {\n this.changeEditorMode({mode, reason: 'manually', emit: opts?.emit});\n }\n\n changeEditorMode({emit = true, ...opts}: ChangeEditorModeOptions): void {\n if (this.#editorMode === opts.mode) return;\n\n if (this.#beforeEditorModeChange?.({mode: opts.mode, reason: opts.reason}) === false) {\n return;\n }\n\n this.currentMode = opts.mode;\n this.emit('rerender', null);\n\n if (emit) {\n this.emit('change-editor-mode', opts);\n }\n }\n\n changeToolbarVisibility(opts: {visible: boolean}): void {\n this.#toolbarVisible = opts.visible;\n this.emit('rerender', null);\n this.emit('change-toolbar-visibility', opts);\n }\n\n changeSplitModeEnabled(opts: {splitModeEnabled: boolean}): void {\n if (this.#splitModeEnabled === opts.splitModeEnabled) return;\n this.#splitModeEnabled = opts.splitModeEnabled;\n this.emit('rerender', null);\n this.emit('change-split-mode-enabled', opts);\n }\n\n focus(): void {\n return this.currentEditor.focus();\n }\n\n hasFocus(): boolean {\n return this.currentEditor.hasFocus();\n }\n\n getValue: () => MarkupString = () => this.currentEditor.getValue();\n\n isEmpty(): boolean {\n return this.currentEditor.isEmpty();\n }\n\n clear(): void {\n return this.currentEditor.clear();\n }\n\n replace(newMarkup: MarkupString): void {\n return this.currentEditor.replace(newMarkup);\n }\n\n prepend(markup: MarkupString): void {\n return this.currentEditor.prepend(markup);\n }\n\n append(markup: MarkupString): void {\n return this.currentEditor.append(markup);\n }\n\n moveCursor(\n position:\n | 'start'\n | 'end'\n | {\n /** 0-based line number */\n line: number;\n },\n ): void {\n if (typeof position === 'object') {\n return this.moveCursorToLine(position.line);\n }\n\n return this.currentEditor.moveCursor(position);\n }\n\n private moveCursorToLine(/** 0-based line number */ line: number): void {\n const mode = this.currentMode;\n\n switch (mode) {\n case 'markup': {\n const view = this.markupEditor.cm;\n\n let cmLine = line + 1; // lines in codemirror is 1-based\n cmLine = Math.max(cmLine, 1);\n cmLine = Math.min(cmLine, view.state.doc.lines);\n\n const yMargin = getTopOffset(view.dom);\n const anchor = view.state.doc.line(cmLine).from;\n view.dispatch({\n scrollIntoView: true,\n selection: {anchor},\n effects: [\n CMEditorView.scrollIntoView(anchor, {y: 'start', x: 'start', yMargin}),\n ],\n });\n\n break;\n\n // eslint-disable-next-line no-inner-declarations\n }\n case 'wysiwyg': {\n const elem = this.wysiwygEditor.dom.querySelector(`[data-line=\"${line}\"]`);\n\n if (elem) {\n const elemTop = elem.getBoundingClientRect().top;\n const topOffset = getTopOffset(this.wysiwygEditor.dom);\n window.scrollTo({top: elemTop + window.scrollY - topOffset});\n\n const position = this._wysiwygView.posAtDOM(elem, 0);\n const {tr} = this._wysiwygView.state;\n this._wysiwygView.dispatch(\n tr.setSelection(TextSelection.create(tr.doc, position)),\n );\n }\n\n break;\n }\n default:\n throw new Error('Unknown editor mode: ' + mode);\n }\n }\n\n private shouldReplaceMarkupEditorValue(markupValue: string, wysiwygValue: string) {\n const serializedEditorMarkup = this.#wysiwygEditor?.serializer.serialize(\n this.#wysiwygEditor.parser.parse(markupValue),\n this.#escapeConfig,\n );\n return serializedEditorMarkup?.trim() !== wysiwygValue.trim();\n }\n}\n\nfunction getTopOffset(elem: Element) {\n const TOOLBAR_HEIGHT = 36; //px\n const TOOLBAR_BOTTOM_OFFSET = 8; // px\n const TOOLBAR_TOP_ADDITIONAL_OFFSET = 8; // px\n const TOOLBAR_TOP_OFFSET_VAR = '--g-md-toolbar-sticky-offset';\n\n const topOffsetValue = window.getComputedStyle(elem).getPropertyValue(TOOLBAR_TOP_OFFSET_VAR);\n const toolbarTopOffset =\n calculateCSSNumberValue(topOffsetValue) + TOOLBAR_TOP_ADDITIONAL_OFFSET;\n\n return toolbarTopOffset + TOOLBAR_HEIGHT + TOOLBAR_BOTTOM_OFFSET;\n}\n\nfunction calculateCSSNumberValue(cssValue: string): number {\n const tmp = document.createElement('div');\n tmp.style.position = 'absolute';\n tmp.style.top = '-99999px';\n tmp.style.left = '-99999px';\n tmp.style.width = `calc(${cssValue})`;\n\n document.body.appendChild(tmp);\n const value = tmp.getBoundingClientRect().width;\n tmp.remove();\n\n return value;\n}\n"]}
1
+ {"version":3,"file":"Editor.js","sourceRoot":"../../../src","sources":["bundle/Editor.ts"],"names":[],"mappings":"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","sourcesContent":["import type {ReactNode} from 'react';\n\nimport {EditorView as CMEditorView} from '@codemirror/view';\nimport {TextSelection} from 'prosemirror-state';\nimport type {EditorView as PMEditorView} from 'prosemirror-view';\n\nimport type {CommonEditor, MarkupString} from '../common';\nimport {\n type ActionStorage,\n type EscapeConfig,\n WysiwygEditor,\n type WysiwygEditorOptions,\n} from '../core';\nimport type {TransformFn} from '../core/markdown/ProseMirrorTransformer';\nimport type {DynamicModifiers} from '../core/types/dynamicModifiers';\nimport type {ReactRenderStorage, RenderStorage} from '../extensions';\nimport {i18n} from '../i18n/bundle';\nimport {type Logger2, globalLogger} from '../logger';\nimport {createCodemirror} from '../markup';\nimport {getAutocompleteConfig} from '../markup/codemirror/autocomplete';\nimport {type CodeEditor, Editor as MarkupEditor} from '../markup/editor';\nimport {type Emitter, type FileUploadHandler, type Receiver, SafeEventEmitter} from '../utils';\nimport type {DirectiveSyntaxContext} from '../utils/directive';\n\nimport {MarkupManager} from './MarkupManager';\nimport {createDynamicModifiers} from './config/dynamicModifiers';\nimport type {\n MarkdownEditorMode as EditorMode,\n MarkdownEditorPreset as EditorPreset,\n MarkdownEditorMdOptions,\n MarkdownEditorOptions,\n MarkdownEditorMarkupConfig as MarkupConfig,\n ParseInsertedUrlAsImage,\n RenderPreview,\n MarkdownEditorSplitMode as SplitMode,\n} from './types';\n\nexport type ToolbarActionData = {\n editorMode: EditorMode;\n id: string;\n attrs?: {[key: string]: any};\n};\n\nexport interface EventMap {\n change: null;\n cancel: null;\n submit: null;\n\n 'toolbar-action': ToolbarActionData;\n\n 'change-editor-mode': {mode: EditorMode};\n 'change-toolbar-visibility': {visible: boolean};\n 'change-split-mode-enabled': {splitModeEnabled: boolean};\n}\n\n// internal events\ninterface EventMapInt extends EventMap {\n rerender: null;\n 'rerender-toolbar': null;\n 'cm-scroll': {event: Event};\n}\n\nexport interface Editor extends Receiver<EventMap>, CommonEditor {\n readonly logger: Logger2.LogReceiver;\n readonly currentMode: EditorMode;\n readonly toolbarVisible: boolean;\n\n setEditorMode(mode: EditorMode, opts?: SetEditorModeOptions): void;\n\n moveCursor(position: 'start' | 'end' | {line: number}): void;\n\n /** @internal used in demo for dev-tools */\n readonly _wysiwygView?: PMEditorView;\n}\n\n/** @internal */\nexport interface EditorInt\n extends CommonEditor,\n Emitter<EventMapInt>,\n Receiver<EventMapInt>,\n ActionStorage,\n CodeEditor {\n readonly logger: Logger2.ILogger;\n readonly currentMode: EditorMode;\n readonly toolbarVisible: boolean;\n readonly splitModeEnabled: boolean;\n readonly splitMode: SplitMode;\n readonly preset: EditorPreset;\n readonly mdOptions: Readonly<MarkdownEditorMdOptions>;\n readonly directiveSyntax: DirectiveSyntaxContext;\n\n /** @internal used in demo for dev-tools */\n readonly _wysiwygView?: PMEditorView;\n\n readonly currentEditor: CommonEditor;\n readonly wysiwygEditor: WysiwygEditor;\n readonly markupEditor: MarkupEditor;\n\n readonly renderStorage: RenderStorage<ReactNode>;\n readonly fileUploadHandler?: FileUploadHandler;\n readonly needToSetDimensionsForUploadedImages: boolean;\n readonly disableHTMLParsingInMd?: boolean;\n\n readonly renderPreview?: RenderPreview;\n\n changeEditorMode(opts: ChangeEditorModeOptions): void;\n\n setEditorMode(mode: EditorMode, opts?: SetEditorModeOptions): void;\n\n moveCursor(position: 'start' | 'end' | {line: number}): void;\n\n changeToolbarVisibility(opts: {visible: boolean}): void;\n\n changeSplitModeEnabled(opts: {splitModeEnabled: boolean}): void;\n\n destroy(): void;\n}\n\ntype SetEditorModeOptions = Pick<ChangeEditorModeOptions, 'emit'>;\n\nexport type ChangeEditorModeOptions = {\n mode: EditorMode;\n reason: 'error-boundary' | 'settings' | 'manually';\n emit?: boolean;\n};\n\nexport type EditorOptions = Pick<\n MarkdownEditorOptions,\n 'md' | 'initial' | 'handlers' | 'experimental' | 'markupConfig' | 'wysiwygConfig'\n> & {\n logger: Logger2.ILogger;\n renderStorage: ReactRenderStorage;\n preset: EditorPreset;\n directiveSyntax: DirectiveSyntaxContext;\n pmTransformers: TransformFn[];\n};\n\n/** @internal */\nexport class EditorImpl extends SafeEventEmitter<EventMapInt> implements EditorInt {\n #logger: Logger2.ILogger;\n #markup: MarkupString;\n #editorMode: EditorMode;\n #toolbarVisible: boolean;\n #splitModeEnabled: boolean;\n #splitMode: SplitMode;\n #renderPreview?: RenderPreview;\n #wysiwygEditor?: WysiwygEditor;\n #markupEditor?: MarkupEditor;\n #markupConfig: MarkupConfig;\n #escapeConfig?: EscapeConfig;\n #mdOptions: Readonly<MarkdownEditorMdOptions>;\n #pmTransformers: TransformFn[] = [];\n #preserveEmptyRows: boolean;\n #modifiers?: DynamicModifiers[];\n\n readonly #preset: EditorPreset;\n #extensions?: WysiwygEditorOptions['extensions'];\n #renderStorage: ReactRenderStorage;\n #fileUploadHandler?: FileUploadHandler;\n #parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n #needToSetDimensionsForUploadedImages: boolean;\n #enableNewImageSizeCalculation: boolean;\n #directiveSyntax: DirectiveSyntaxContext;\n #prepareRawMarkup?: (value: MarkupString) => MarkupString;\n #beforeEditorModeChange?: (\n options: Pick<ChangeEditorModeOptions, 'mode' | 'reason'>,\n ) => boolean | undefined;\n\n get _wysiwygView(): PMEditorView {\n // @ts-expect-error internal typing\n return this.#wysiwygEditor?.view;\n }\n\n get logger(): Logger2.ILogger {\n return this.#logger;\n }\n\n get currentMode(): EditorMode {\n return this.#editorMode;\n }\n\n private set currentMode(newMode: EditorMode) {\n switch (newMode) {\n case 'markup': {\n this.#editorMode = newMode;\n if (this.#wysiwygEditor) {\n const markupEditorValue = this.#markupEditor?.getValue();\n const wysiwygEditorValue = this.#wysiwygEditor.getValue();\n if (\n !markupEditorValue ||\n this.shouldReplaceMarkupEditorValue(markupEditorValue, wysiwygEditorValue)\n ) {\n this.#markup = wysiwygEditorValue;\n } else {\n this.#markup = markupEditorValue;\n }\n }\n if (this.#markupEditor) this.#markupEditor.replace(this.#markup);\n break;\n }\n case 'wysiwyg': {\n this.#editorMode = newMode;\n if (this.#markupEditor) {\n const value = this.#markupEditor.getValue();\n this.#markup = this.#prepareRawMarkup?.(value) ?? value;\n } else if (this.#prepareRawMarkup) {\n this.#markup = this.#prepareRawMarkup(this.#markup);\n }\n if (this.#wysiwygEditor) this.#wysiwygEditor.replace(this.#markup);\n break;\n }\n default:\n throw new Error('Unknown editor mode: ' + newMode);\n }\n setTimeout(() => {\n this.currentEditor.focus();\n }, 30);\n }\n\n get toolbarVisible(): boolean {\n return this.#toolbarVisible;\n }\n\n get splitModeEnabled(): boolean {\n return this.#splitModeEnabled;\n }\n\n get splitMode(): SplitMode {\n return this.#splitMode;\n }\n\n get preset(): EditorPreset {\n return this.#preset;\n }\n\n get mdOptions(): Readonly<MarkdownEditorMdOptions> {\n return this.#mdOptions;\n }\n\n get directiveSyntax(): DirectiveSyntaxContext {\n return this.#directiveSyntax;\n }\n\n get renderPreview(): RenderPreview | undefined {\n return this.#renderPreview;\n }\n\n get currentEditor(): CommonEditor {\n const mode = this.currentMode;\n switch (mode) {\n case 'markup':\n return this.markupEditor;\n case 'wysiwyg':\n return this.wysiwygEditor;\n default:\n throw new Error('Unknown editor mode: ' + mode);\n }\n }\n\n get wysiwygEditor(): WysiwygEditor {\n if (!this.#wysiwygEditor) {\n const mdPreset: NonNullable<WysiwygEditorOptions['mdPreset']> =\n this.#preset === 'zero' || this.#preset === 'commonmark' ? this.#preset : 'default';\n this.#wysiwygEditor = new WysiwygEditor({\n mdPreset,\n logger: this.logger.nested({mode: 'wysiwyg'}),\n initialContent: this.#markup,\n extensions: this.#extensions,\n pmTransformers: this.#pmTransformers,\n modifiers: this.#modifiers,\n allowHTML: this.#mdOptions.html,\n linkify: this.#mdOptions.linkify,\n linkifyTlds: this.#mdOptions.linkifyTlds,\n escapeConfig: this.#escapeConfig,\n onChange: () => this.emit('rerender-toolbar', null),\n onDocChange: () => this.emit('change', null),\n });\n }\n return this.#wysiwygEditor;\n }\n\n get markupEditor(): MarkupEditor {\n if (!this.#markupEditor) {\n this.#markupEditor = new MarkupEditor(\n createCodemirror({\n doc: this.#markup,\n logger: this.logger.nested({mode: 'markup'}),\n placeholder: this.#markupConfig.placeholder ?? i18n('markup_placeholder'),\n onCancel: () => this.emit('cancel', null),\n onSubmit: () => this.emit('submit', null),\n onChange: () => this.emit('rerender-toolbar', null),\n onDocChange: () => this.emit('change', null),\n onScroll: (event) => this.emit('cm-scroll', {event}),\n reactRenderer: this.#renderStorage,\n uploadHandler: this.fileUploadHandler,\n parseInsertedUrlAsImage: this.parseInsertedUrlAsImage,\n needImageDimensions: this.needToSetDimensionsForUploadedImages,\n parseHtmlOnPaste: this.#markupConfig.parseHtmlOnPaste,\n enableNewImageSizeCalculation: this.enableNewImageSizeCalculation,\n extensions: this.#markupConfig.extensions,\n disabledExtensions: this.#markupConfig.disabledExtensions,\n keymaps: this.#markupConfig.keymaps,\n preserveEmptyRows: this.#preserveEmptyRows,\n yfmLangOptions: {\n languageData: getAutocompleteConfig({\n preserveEmptyRows: this.#preserveEmptyRows,\n }).concat(this.#markupConfig?.languageData || []),\n },\n autocompletion: this.#markupConfig.autocompletion,\n directiveSyntax: this.directiveSyntax,\n receiver: this,\n }),\n );\n }\n return this.#markupEditor;\n }\n\n get renderStorage(): RenderStorage<ReactNode> {\n return this.#renderStorage;\n }\n\n get fileUploadHandler(): FileUploadHandler | undefined {\n return this.#fileUploadHandler;\n }\n\n get parseInsertedUrlAsImage() {\n return this.#parseInsertedUrlAsImage;\n }\n\n get needToSetDimensionsForUploadedImages(): boolean {\n return this.#needToSetDimensionsForUploadedImages;\n }\n\n get enableNewImageSizeCalculation(): boolean {\n return this.#enableNewImageSizeCalculation;\n }\n\n constructor(opts: EditorOptions) {\n const {logger} = opts;\n\n super({\n onError: (error) => {\n logger.error(error);\n globalLogger.error(error);\n },\n });\n\n const {\n md = {},\n initial = {},\n handlers = {},\n experimental = {},\n markupConfig = {},\n wysiwygConfig = {},\n } = opts;\n\n this.#logger = logger;\n this.#modifiers = experimental.preserveMarkupFormatting\n ? createDynamicModifiers(\n new MarkupManager(this.logger.nested({module: 'markup-manager'})),\n )\n : undefined;\n\n this.#editorMode = initial.mode ?? 'wysiwyg';\n this.#toolbarVisible = initial.toolbarVisible ?? true;\n this.#splitMode = (markupConfig.renderPreview && markupConfig.splitMode) ?? false;\n this.#splitModeEnabled = (this.#splitMode && initial.splitModeEnabled) ?? false;\n this.#renderPreview = markupConfig.renderPreview;\n\n this.#markup = initial.markup ?? '';\n\n this.#preset = opts.preset ?? 'full';\n this.#pmTransformers = opts.pmTransformers;\n this.#mdOptions = md;\n this.#extensions = wysiwygConfig.extensions;\n this.#markupConfig = {...opts.markupConfig};\n\n this.#renderStorage = opts.renderStorage;\n this.#fileUploadHandler = handlers.uploadFile;\n this.#parseInsertedUrlAsImage = markupConfig.parseInsertedUrlAsImage;\n this.#needToSetDimensionsForUploadedImages = Boolean(\n experimental.needToSetDimensionsForUploadedImages,\n );\n this.#directiveSyntax = opts.directiveSyntax;\n this.#enableNewImageSizeCalculation = Boolean(experimental.enableNewImageSizeCalculation);\n this.#preserveEmptyRows = experimental.preserveEmptyRows || false;\n this.#prepareRawMarkup = experimental.prepareRawMarkup;\n this.#escapeConfig = wysiwygConfig.escapeConfig;\n this.#beforeEditorModeChange = experimental.beforeEditorModeChange;\n }\n\n // ---> implements CodeEditor\n\n get cm() {\n return this.markupEditor.cm;\n }\n\n // <--- implements CodeEditor\n\n // ---> implements ActionStorage\n get actions(): WysiwygEditor.Actions {\n return this.wysiwygEditor.actions;\n }\n\n action<T extends keyof WysiwygEditor.Actions>(actionName: T): WysiwygEditor.Actions[T] {\n return this.wysiwygEditor.action(actionName);\n }\n\n // <--- implements ActionStorage\n\n destroy() {\n this.#wysiwygEditor?.destroy();\n this.#markupEditor?.codemirror.destroy();\n\n this.#markupEditor = undefined;\n this.#markupEditor = undefined;\n this.#wysiwygEditor = undefined;\n }\n\n setEditorMode(mode: EditorMode, opts?: SetEditorModeOptions): void {\n this.changeEditorMode({mode, reason: 'manually', emit: opts?.emit});\n }\n\n changeEditorMode({emit = true, ...opts}: ChangeEditorModeOptions): void {\n if (this.#editorMode === opts.mode) return;\n\n if (this.#beforeEditorModeChange?.({mode: opts.mode, reason: opts.reason}) === false) {\n return;\n }\n\n this.logger.event({\n event: 'mode-change',\n prevMode: this.#editorMode,\n nextMode: opts.mode,\n reason: opts.reason,\n });\n\n this.currentMode = opts.mode;\n this.emit('rerender', null);\n\n if (emit) {\n this.emit('change-editor-mode', opts);\n }\n }\n\n changeToolbarVisibility(opts: {visible: boolean}): void {\n this.#toolbarVisible = opts.visible;\n this.emit('rerender', null);\n this.emit('change-toolbar-visibility', opts);\n }\n\n changeSplitModeEnabled(opts: {splitModeEnabled: boolean}): void {\n if (this.#splitModeEnabled === opts.splitModeEnabled) return;\n this.#splitModeEnabled = opts.splitModeEnabled;\n this.emit('rerender', null);\n this.emit('change-split-mode-enabled', opts);\n }\n\n focus(): void {\n return this.currentEditor.focus();\n }\n\n hasFocus(): boolean {\n return this.currentEditor.hasFocus();\n }\n\n getValue: () => MarkupString = () => this.currentEditor.getValue();\n\n isEmpty(): boolean {\n return this.currentEditor.isEmpty();\n }\n\n clear(): void {\n return this.currentEditor.clear();\n }\n\n replace(newMarkup: MarkupString): void {\n return this.currentEditor.replace(newMarkup);\n }\n\n prepend(markup: MarkupString): void {\n return this.currentEditor.prepend(markup);\n }\n\n append(markup: MarkupString): void {\n return this.currentEditor.append(markup);\n }\n\n moveCursor(\n position:\n | 'start'\n | 'end'\n | {\n /** 0-based line number */\n line: number;\n },\n ): void {\n if (typeof position === 'object') {\n return this.moveCursorToLine(position.line);\n }\n\n return this.currentEditor.moveCursor(position);\n }\n\n private moveCursorToLine(/** 0-based line number */ line: number): void {\n const mode = this.currentMode;\n\n switch (mode) {\n case 'markup': {\n const view = this.markupEditor.cm;\n\n let cmLine = line + 1; // lines in codemirror is 1-based\n cmLine = Math.max(cmLine, 1);\n cmLine = Math.min(cmLine, view.state.doc.lines);\n\n const yMargin = getTopOffset(view.dom);\n const anchor = view.state.doc.line(cmLine).from;\n view.dispatch({\n scrollIntoView: true,\n selection: {anchor},\n effects: [\n CMEditorView.scrollIntoView(anchor, {y: 'start', x: 'start', yMargin}),\n ],\n });\n\n break;\n\n // eslint-disable-next-line no-inner-declarations\n }\n case 'wysiwyg': {\n const elem = this.wysiwygEditor.dom.querySelector(`[data-line=\"${line}\"]`);\n\n if (elem) {\n const elemTop = elem.getBoundingClientRect().top;\n const topOffset = getTopOffset(this.wysiwygEditor.dom);\n window.scrollTo({top: elemTop + window.scrollY - topOffset});\n\n const position = this._wysiwygView.posAtDOM(elem, 0);\n const {tr} = this._wysiwygView.state;\n this._wysiwygView.dispatch(\n tr.setSelection(TextSelection.create(tr.doc, position)),\n );\n }\n\n break;\n }\n default:\n throw new Error('Unknown editor mode: ' + mode);\n }\n }\n\n private shouldReplaceMarkupEditorValue(markupValue: string, wysiwygValue: string) {\n const serializedEditorMarkup = this.#wysiwygEditor?.serializer.serialize(\n this.#wysiwygEditor.parser.parse(markupValue),\n this.#escapeConfig,\n );\n return serializedEditorMarkup?.trim() !== wysiwygValue.trim();\n }\n}\n\nfunction getTopOffset(elem: Element) {\n const TOOLBAR_HEIGHT = 36; //px\n const TOOLBAR_BOTTOM_OFFSET = 8; // px\n const TOOLBAR_TOP_ADDITIONAL_OFFSET = 8; // px\n const TOOLBAR_TOP_OFFSET_VAR = '--g-md-toolbar-sticky-offset';\n\n const topOffsetValue = window.getComputedStyle(elem).getPropertyValue(TOOLBAR_TOP_OFFSET_VAR);\n const toolbarTopOffset =\n calculateCSSNumberValue(topOffsetValue) + TOOLBAR_TOP_ADDITIONAL_OFFSET;\n\n return toolbarTopOffset + TOOLBAR_HEIGHT + TOOLBAR_BOTTOM_OFFSET;\n}\n\nfunction calculateCSSNumberValue(cssValue: string): number {\n const tmp = document.createElement('div');\n tmp.style.position = 'absolute';\n tmp.style.top = '-99999px';\n tmp.style.left = '-99999px';\n tmp.style.width = `calc(${cssValue})`;\n\n document.body.appendChild(tmp);\n const value = tmp.getBoundingClientRect().width;\n tmp.remove();\n\n return value;\n}\n"]}
@@ -5,7 +5,7 @@ import { ErrorBoundary } from 'react-error-boundary';
5
5
  import { useEnsuredForwardedRef, useKey, useUpdate } from 'react-use';
6
6
  import { cn } from "../classname.js";
7
7
  import { i18n } from "../i18n/bundle/index.js";
8
- import { logger } from "../logger.js";
8
+ import { globalLogger } from "../logger.js";
9
9
  import { useBooleanState, useSticky } from "../react-utils/index.js";
10
10
  import { isMac } from "../utils/index.js";
11
11
  import { HorizontalDrag } from "./HorizontalDrag.js";
@@ -111,7 +111,8 @@ export const MarkdownEditorView = forwardRef((props, ref) => {
111
111
  ]);
112
112
  const toaster = useToaster();
113
113
  return (_jsx(ErrorBoundary, { onError: (e) => {
114
- logger.error(e);
114
+ globalLogger.error(e);
115
+ editor.logger.error(e);
115
116
  }, fallbackRender: ({ error, resetErrorBoundary }) => {
116
117
  toaster.add({
117
118
  theme: 'danger',
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownEditorView.js","sourceRoot":"../../../src","sources":["bundle/MarkdownEditorView.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport {useToaster} from '@gravity-ui/uikit';\nimport {ErrorBoundary} from 'react-error-boundary';\nimport {useEnsuredForwardedRef, useKey, useUpdate} from 'react-use';\n\nimport {type ClassNameProps, cn} from '../classname';\nimport {i18n} from '../i18n/bundle';\nimport {logger} from '../logger';\nimport type {ToolbarsPreset} from '../modules/toolbars/types';\nimport {useBooleanState, useSticky} from '../react-utils';\nimport {isMac} from '../utils';\n\nimport type {Editor, EditorInt} from './Editor';\nimport {HorizontalDrag} from './HorizontalDrag';\nimport {MarkupEditorView} from './MarkupEditorView';\nimport {SplitModeView} from './SplitModeView';\nimport {WysiwygEditorView} from './WysiwygEditorView';\nimport {useMarkdownEditorContext} from './context';\nimport {EditorSettings, type EditorSettingsProps} from './settings';\nimport {stickyCn} from './sticky';\nimport type {MToolbarData, MToolbarItemData, WToolbarData, WToolbarItemData} from './toolbar/types';\nimport {getToolbarsConfigs} from './toolbar/utils/toolbarsConfigs';\nimport type {MarkdownEditorMode} from './types';\n\nimport '../styles/styles.scss';\nimport './MarkdownEditorView.scss'; // eslint-disable-line import/order\n\nexport const cnEditorComponent = cn('editor-component');\nconst b = cnEditorComponent;\n\nexport type MarkdownEditorViewProps = ClassNameProps & {\n editor?: Editor;\n autofocus?: boolean;\n toolbarsPreset?: ToolbarsPreset;\n /**\n * @deprecated use `toolbarsPreset` instead\n */\n markupToolbarConfig?: MToolbarData;\n /**\n * @deprecated use `toolbarsPreset` instead\n */\n wysiwygToolbarConfig?: WToolbarData;\n /**\n * @deprecated use `toolbarsPreset` instead\n */\n markupHiddenActionsConfig?: MToolbarItemData[];\n /**\n * @deprecated use `toolbarsPreset` instead\n */\n wysiwygHiddenActionsConfig?: WToolbarItemData[];\n /** @default true */\n settingsVisible?: boolean;\n stickyToolbar: boolean;\n enableSubmitInPreview?: boolean;\n hidePreviewAfterSubmit?: boolean;\n};\n\nexport const MarkdownEditorView = forwardRef<HTMLDivElement, MarkdownEditorViewProps>(\n (props, ref) => {\n const divRef = useEnsuredForwardedRef(ref as React.MutableRefObject<HTMLDivElement>);\n\n const [isMounted, setIsMounted] = useState(false);\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n const [showPreview, , unsetShowPreview, toggleShowPreview] = useBooleanState(false);\n\n const context = useMarkdownEditorContext();\n const editor = (props.editor ?? context) as EditorInt;\n if (!editor)\n throw new Error(\n '[MarkdownEditorView]: an instance of the editor must be passed through the props or context',\n );\n\n const {\n autofocus,\n className,\n settingsVisible = true,\n toolbarsPreset,\n stickyToolbar,\n wysiwygToolbarConfig: initialWysiwygToolbarConfig,\n markupToolbarConfig: initialMarkupToolbarConfig,\n wysiwygHiddenActionsConfig: initialWysiwygHiddenActionsConfig,\n markupHiddenActionsConfig: initialMarkupHiddenActionsConfig,\n enableSubmitInPreview = true,\n hidePreviewAfterSubmit = false,\n } = props;\n\n const {\n wysiwygToolbarConfig,\n markupToolbarConfig,\n wysiwygHiddenActionsConfig,\n markupHiddenActionsConfig,\n } = useMemo(\n () =>\n getToolbarsConfigs({\n toolbarsPreset,\n props: {\n wysiwygToolbarConfig: initialWysiwygToolbarConfig,\n markupToolbarConfig: initialMarkupToolbarConfig,\n wysiwygHiddenActionsConfig: initialWysiwygHiddenActionsConfig,\n markupHiddenActionsConfig: initialMarkupHiddenActionsConfig,\n },\n preset: editor.preset,\n }),\n [\n toolbarsPreset,\n initialWysiwygToolbarConfig,\n initialMarkupToolbarConfig,\n initialWysiwygHiddenActionsConfig,\n initialMarkupHiddenActionsConfig,\n editor.preset,\n ],\n );\n\n const rerender = useUpdate();\n useLayoutEffect(() => {\n editor.on('rerender', rerender);\n return () => {\n editor.off('rerender', rerender);\n };\n }, [editor, rerender]);\n\n const onModeChange = useCallback(\n (type: MarkdownEditorMode) => {\n editor.changeEditorMode({mode: type, reason: 'settings'});\n unsetShowPreview();\n },\n [editor, unsetShowPreview],\n );\n const onToolbarVisibilityChange = useCallback(\n (visible: boolean) => {\n editor.changeToolbarVisibility({visible});\n },\n [editor],\n );\n const onSplitModeChange = useCallback(\n (splitModeEnabled: boolean) => {\n unsetShowPreview();\n editor.changeSplitModeEnabled({splitModeEnabled});\n },\n [editor, unsetShowPreview],\n );\n\n const onShowPreviewChange = useCallback(\n (showPreviewValue: boolean) => {\n editor.changeSplitModeEnabled({splitModeEnabled: false});\n if (showPreviewValue !== showPreview) toggleShowPreview();\n },\n [editor, showPreview, toggleShowPreview],\n );\n\n const editorMode = editor.currentMode;\n const markupSplitMode =\n editor.splitModeEnabled && editor.splitMode && editorMode === 'markup';\n const canRenderPreview = Boolean(\n editor.renderPreview && editorMode === 'markup' && !editor.splitModeEnabled,\n );\n\n useKey(\n (e) => canRenderPreview && isPreviewKeyDown(e),\n (e) => {\n e.preventDefault();\n onShowPreviewChange(!showPreview);\n },\n {event: 'keydown'},\n [showPreview, editorMode, onShowPreviewChange, canRenderPreview],\n );\n\n const editorWrapperRef = useRef(null);\n const splitModeViewWrapperRef = useRef(null);\n\n useEffect(() => {\n if (showPreview) {\n divRef.current.focus();\n }\n }, [divRef, showPreview]);\n\n useKey(\n (e) =>\n enableSubmitInPreview &&\n showPreview &&\n isWrapperFocused(divRef) &&\n isSubmitKeyDown(e),\n () => {\n editor.emit('submit', null);\n\n if (hidePreviewAfterSubmit) {\n onShowPreviewChange(false);\n }\n },\n {event: 'keydown'},\n [hidePreviewAfterSubmit, enableSubmitInPreview, showPreview, showPreview],\n );\n\n const settings = useMemo(\n () => (\n <Settings\n mode={editorMode}\n settingsVisible={settingsVisible}\n onModeChange={onModeChange}\n toolbarVisibility={editor.toolbarVisible && !showPreview}\n onToolbarVisibilityChange={onToolbarVisibilityChange}\n onSplitModeChange={onSplitModeChange}\n splitModeEnabled={editor.splitModeEnabled}\n splitMode={editor.splitMode}\n stickyToolbar={stickyToolbar}\n onShowPreviewChange={onShowPreviewChange}\n showPreview={showPreview}\n renderPreviewButton={canRenderPreview}\n />\n ),\n [\n editorMode,\n settingsVisible,\n editor.toolbarVisible,\n editor.splitModeEnabled,\n editor.splitMode,\n onModeChange,\n showPreview,\n onToolbarVisibilityChange,\n onSplitModeChange,\n stickyToolbar,\n onShowPreviewChange,\n canRenderPreview,\n ],\n );\n\n const toaster = useToaster();\n\n return (\n <ErrorBoundary\n onError={(e) => {\n logger.error(e);\n }}\n fallbackRender={({error, resetErrorBoundary}) => {\n toaster.add({\n theme: 'danger',\n name: 'g-md-editor-error',\n title: i18n('error-title'),\n content: error.message,\n });\n setTimeout(() => {\n resetErrorBoundary();\n editor.changeEditorMode({\n mode: 'markup',\n reason: 'error-boundary',\n emit: false,\n });\n });\n return null;\n }}\n >\n <div\n ref={divRef}\n className={b(\n {\n settings: settingsVisible,\n split: markupSplitMode && editor.splitMode,\n },\n [className],\n )}\n role=\"button\"\n tabIndex={0}\n >\n <div className={b('editor-wrapper')} ref={editorWrapperRef}>\n {showPreview ? (\n <>\n <div className={b('preview-wrapper')}>\n {editor.renderPreview?.({\n getValue: editor.getValue,\n mode: 'preview',\n md: editor.mdOptions,\n directiveSyntax: editor.directiveSyntax,\n })}\n </div>\n {settings}\n </>\n ) : (\n <>\n {editorMode === 'wysiwyg' && (\n <WysiwygEditorView\n editor={editor}\n autofocus={autofocus}\n settingsVisible={settingsVisible}\n toolbarConfig={wysiwygToolbarConfig}\n toolbarVisible={editor.toolbarVisible}\n hiddenActionsConfig={wysiwygHiddenActionsConfig}\n className={b('editor', {mode: editorMode})}\n toolbarClassName={b('toolbar')}\n stickyToolbar={stickyToolbar}\n >\n {editor.toolbarVisible && settingsVisible && settings}\n </WysiwygEditorView>\n )}\n {editorMode === 'markup' && (\n <MarkupEditorView\n editor={editor}\n autofocus={autofocus}\n settingsVisible={settingsVisible}\n toolbarConfig={markupToolbarConfig}\n toolbarVisible={editor.toolbarVisible}\n splitMode={editor.splitMode}\n splitModeEnabled={editor.splitModeEnabled}\n hiddenActionsConfig={markupHiddenActionsConfig}\n className={b('editor', {mode: editorMode})}\n toolbarClassName={b('toolbar')}\n stickyToolbar={stickyToolbar}\n >\n {editor.toolbarVisible && settings}\n </MarkupEditorView>\n )}\n {!editor.toolbarVisible && settings}\n </>\n )}\n </div>\n\n {markupSplitMode && (\n <>\n {editor.splitMode === 'horizontal' ? (\n <HorizontalDrag\n editor={editor}\n isMounted={isMounted}\n leftElRef={editorWrapperRef}\n rightElRef={splitModeViewWrapperRef}\n wrapperRef={divRef}\n />\n ) : (\n <div className={b('resizer')} />\n )}\n <SplitModeView editor={editor} ref={splitModeViewWrapperRef} />\n </>\n )}\n </div>\n </ErrorBoundary>\n );\n },\n);\nMarkdownEditorView.displayName = 'MarkdownEditorView';\n\ninterface MarkupSearchAnchorProps extends Pick<EditorSettingsProps, 'mode'> {}\n\nconst MarkupSearchAnchor: React.FC<MarkupSearchAnchorProps> = ({mode}) => (\n <>{mode === 'markup' && <div className=\"g-md-search-anchor\"></div>}</>\n);\n\nfunction Settings(props: EditorSettingsProps & {stickyToolbar: boolean}) {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const isSticky = useSticky(wrapperRef) && props.toolbarVisibility && props.stickyToolbar;\n\n return (\n <>\n {(props.renderPreviewButton || props.settingsVisible) && (\n <div className={b('settings-wrapper')}>\n <div\n ref={wrapperRef}\n className={stickyCn.settings({\n withToolbar: props.toolbarVisibility,\n stickyActive: isSticky,\n })}\n >\n <EditorSettings {...props} />\n <MarkupSearchAnchor {...props} />\n </div>\n </div>\n )}\n </>\n );\n}\n\nfunction isPreviewKeyDown(e: KeyboardEvent) {\n const modKey = isMac() ? e.metaKey : e.ctrlKey;\n return modKey && e.shiftKey && e.code === 'KeyP';\n}\n\nfunction isWrapperFocused(divRef: React.RefObject<HTMLDivElement>) {\n return document.activeElement === divRef.current;\n}\n\nfunction isSubmitKeyDown(e: KeyboardEvent) {\n const modKey = isMac() ? e.metaKey : e.ctrlKey;\n return modKey && e.code === 'Enter';\n}\n"]}
1
+ {"version":3,"file":"MarkdownEditorView.js","sourceRoot":"../../../src","sources":["bundle/MarkdownEditorView.tsx"],"names":[],"mappings":";AAAA,OAAO,EACH,UAAU,EACV,WAAW,EACX,SAAS,EACT,eAAe,EACf,OAAO,EACP,MAAM,EACN,QAAQ,GACX,MAAM,OAAO,CAAC;AAEf,OAAO,EAAC,UAAU,EAAC,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAC,sBAAsB,EAAE,MAAM,EAAE,SAAS,EAAC,MAAM,WAAW,CAAC;AAEpE,OAAO,EAAsB,EAAE,EAAC,wBAAqB;AACrD,OAAO,EAAC,IAAI,EAAC,gCAAuB;AACpC,OAAO,EAAC,YAAY,EAAC,qBAAkB;AAEvC,OAAO,EAAC,eAAe,EAAE,SAAS,EAAC,gCAAuB;AAC1D,OAAO,EAAC,KAAK,EAAC,0BAAiB;AAG/B,OAAO,EAAC,cAAc,EAAC,4BAAyB;AAChD,OAAO,EAAC,gBAAgB,EAAC,8BAA2B;AACpD,OAAO,EAAC,aAAa,EAAC,2BAAwB;AAC9C,OAAO,EAAC,iBAAiB,EAAC,+BAA4B;AACtD,OAAO,EAAC,wBAAwB,EAAC,qBAAkB;AACnD,OAAO,EAAC,cAAc,EAA2B,4BAAmB;AACpE,OAAO,EAAC,QAAQ,EAAC,0BAAiB;AAElC,OAAO,EAAC,kBAAkB,EAAC,2CAAwC;AAGnE,8BAA+B;AAC/B,kCAAmC,CAAC,mCAAmC;AAEvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC,kBAAkB,CAAC,CAAC;AACxD,MAAM,CAAC,GAAG,iBAAiB,CAAC;AA6B5B,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CACxC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACX,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAA6C,CAAC,CAAC;IAErF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,SAAS,CAAC,GAAG,EAAE;QACX,YAAY,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,CAAC,WAAW,EAAE,AAAD,EAAG,gBAAgB,EAAE,iBAAiB,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAEpF,MAAM,OAAO,GAAG,wBAAwB,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,CAAc,CAAC;IACtD,IAAI,CAAC,MAAM;QACP,MAAM,IAAI,KAAK,CACX,6FAA6F,CAChG,CAAC;IAEN,MAAM,EACF,SAAS,EACT,SAAS,EACT,eAAe,GAAG,IAAI,EACtB,cAAc,EACd,aAAa,EACb,oBAAoB,EAAE,2BAA2B,EACjD,mBAAmB,EAAE,0BAA0B,EAC/C,0BAA0B,EAAE,iCAAiC,EAC7D,yBAAyB,EAAE,gCAAgC,EAC3D,qBAAqB,GAAG,IAAI,EAC5B,sBAAsB,GAAG,KAAK,GACjC,GAAG,KAAK,CAAC;IAEV,MAAM,EACF,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,yBAAyB,GAC5B,GAAG,OAAO,CACP,GAAG,EAAE,CACD,kBAAkB,CAAC;QACf,cAAc;QACd,KAAK,EAAE;YACH,oBAAoB,EAAE,2BAA2B;YACjD,mBAAmB,EAAE,0BAA0B;YAC/C,0BAA0B,EAAE,iCAAiC;YAC7D,yBAAyB,EAAE,gCAAgC;SAC9D;QACD,MAAM,EAAE,MAAM,CAAC,MAAM;KACxB,CAAC,EACN;QACI,cAAc;QACd,2BAA2B;QAC3B,0BAA0B;QAC1B,iCAAiC;QACjC,gCAAgC;QAChC,MAAM,CAAC,MAAM;KAChB,CACJ,CAAC;IAEF,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC;IAC7B,eAAe,CAAC,GAAG,EAAE;QACjB,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAChC,OAAO,GAAG,EAAE;YACR,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEvB,MAAM,YAAY,GAAG,WAAW,CAC5B,CAAC,IAAwB,EAAE,EAAE;QACzB,MAAM,CAAC,gBAAgB,CAAC,EAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAC,CAAC,CAAC;QAC1D,gBAAgB,EAAE,CAAC;IACvB,CAAC,EACD,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAC7B,CAAC;IACF,MAAM,yBAAyB,GAAG,WAAW,CACzC,CAAC,OAAgB,EAAE,EAAE;QACjB,MAAM,CAAC,uBAAuB,CAAC,EAAC,OAAO,EAAC,CAAC,CAAC;IAC9C,CAAC,EACD,CAAC,MAAM,CAAC,CACX,CAAC;IACF,MAAM,iBAAiB,GAAG,WAAW,CACjC,CAAC,gBAAyB,EAAE,EAAE;QAC1B,gBAAgB,EAAE,CAAC;QACnB,MAAM,CAAC,sBAAsB,CAAC,EAAC,gBAAgB,EAAC,CAAC,CAAC;IACtD,CAAC,EACD,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAC7B,CAAC;IAEF,MAAM,mBAAmB,GAAG,WAAW,CACnC,CAAC,gBAAyB,EAAE,EAAE;QAC1B,MAAM,CAAC,sBAAsB,CAAC,EAAC,gBAAgB,EAAE,KAAK,EAAC,CAAC,CAAC;QACzD,IAAI,gBAAgB,KAAK,WAAW;YAAE,iBAAiB,EAAE,CAAC;IAC9D,CAAC,EACD,CAAC,MAAM,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAC3C,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;IACtC,MAAM,eAAe,GACjB,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,SAAS,IAAI,UAAU,KAAK,QAAQ,CAAC;IAC3E,MAAM,gBAAgB,GAAG,OAAO,CAC5B,MAAM,CAAC,aAAa,IAAI,UAAU,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAC9E,CAAC;IAEF,MAAM,CACF,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAC9C,CAAC,CAAC,EAAE,EAAE;QACF,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,mBAAmB,CAAC,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC,EACD,EAAC,KAAK,EAAE,SAAS,EAAC,EAClB,CAAC,WAAW,EAAE,UAAU,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,CACnE,CAAC;IAEF,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,uBAAuB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAE7C,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,WAAW,EAAE,CAAC;YACd,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;IACL,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IAE1B,MAAM,CACF,CAAC,CAAC,EAAE,EAAE,CACF,qBAAqB;QACrB,WAAW;QACX,gBAAgB,CAAC,MAAM,CAAC;QACxB,eAAe,CAAC,CAAC,CAAC,EACtB,GAAG,EAAE;QACD,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAE5B,IAAI,sBAAsB,EAAE,CAAC;YACzB,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC,EACD,EAAC,KAAK,EAAE,SAAS,EAAC,EAClB,CAAC,sBAAsB,EAAE,qBAAqB,EAAE,WAAW,EAAE,WAAW,CAAC,CAC5E,CAAC;IAEF,MAAM,QAAQ,GAAG,OAAO,CACpB,GAAG,EAAE,CAAC,CACF,KAAC,QAAQ,IACL,IAAI,EAAE,UAAU,EAChB,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,MAAM,CAAC,cAAc,IAAI,CAAC,WAAW,EACxD,yBAAyB,EAAE,yBAAyB,EACpD,iBAAiB,EAAE,iBAAiB,EACpC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EACzC,SAAS,EAAE,MAAM,CAAC,SAAS,EAC3B,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,mBAAmB,EACxC,WAAW,EAAE,WAAW,EACxB,mBAAmB,EAAE,gBAAgB,GACvC,CACL,EACD;QACI,UAAU;QACV,eAAe;QACf,MAAM,CAAC,cAAc;QACrB,MAAM,CAAC,gBAAgB;QACvB,MAAM,CAAC,SAAS;QAChB,YAAY;QACZ,WAAW;QACX,yBAAyB;QACzB,iBAAiB;QACjB,aAAa;QACb,mBAAmB;QACnB,gBAAgB;KACnB,CACJ,CAAC;IAEF,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,OAAO,CACH,KAAC,aAAa,IACV,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACX,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC,EACD,cAAc,EAAE,CAAC,EAAC,KAAK,EAAE,kBAAkB,EAAC,EAAE,EAAE;YAC5C,OAAO,CAAC,GAAG,CAAC;gBACR,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,mBAAmB;gBACzB,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC;gBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;aACzB,CAAC,CAAC;YACH,UAAU,CAAC,GAAG,EAAE;gBACZ,kBAAkB,EAAE,CAAC;gBACrB,MAAM,CAAC,gBAAgB,CAAC;oBACpB,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,gBAAgB;oBACxB,IAAI,EAAE,KAAK;iBACd,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QAChB,CAAC,YAED,eACI,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,CAAC,CACR;gBACI,QAAQ,EAAE,eAAe;gBACzB,KAAK,EAAE,eAAe,IAAI,MAAM,CAAC,SAAS;aAC7C,EACD,CAAC,SAAS,CAAC,CACd,EACD,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,aAEX,cAAK,SAAS,EAAE,CAAC,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,gBAAgB,YACrD,WAAW,CAAC,CAAC,CAAC,CACX,8BACI,cAAK,SAAS,EAAE,CAAC,CAAC,iBAAiB,CAAC,YAC/B,MAAM,CAAC,aAAa,EAAE,CAAC;oCACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oCACzB,IAAI,EAAE,SAAS;oCACf,EAAE,EAAE,MAAM,CAAC,SAAS;oCACpB,eAAe,EAAE,MAAM,CAAC,eAAe;iCAC1C,CAAC,GACA,EACL,QAAQ,IACV,CACN,CAAC,CAAC,CAAC,CACA,8BACK,UAAU,KAAK,SAAS,IAAI,CACzB,KAAC,iBAAiB,IACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,oBAAoB,EACnC,cAAc,EAAE,MAAM,CAAC,cAAc,EACrC,mBAAmB,EAAE,0BAA0B,EAC/C,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,UAAU,EAAC,CAAC,EAC1C,gBAAgB,EAAE,CAAC,CAAC,SAAS,CAAC,EAC9B,aAAa,EAAE,aAAa,YAE3B,MAAM,CAAC,cAAc,IAAI,eAAe,IAAI,QAAQ,GACrC,CACvB,EACA,UAAU,KAAK,QAAQ,IAAI,CACxB,KAAC,gBAAgB,IACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,mBAAmB,EAClC,cAAc,EAAE,MAAM,CAAC,cAAc,EACrC,SAAS,EAAE,MAAM,CAAC,SAAS,EAC3B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EACzC,mBAAmB,EAAE,yBAAyB,EAC9C,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,UAAU,EAAC,CAAC,EAC1C,gBAAgB,EAAE,CAAC,CAAC,SAAS,CAAC,EAC9B,aAAa,EAAE,aAAa,YAE3B,MAAM,CAAC,cAAc,IAAI,QAAQ,GACnB,CACtB,EACA,CAAC,MAAM,CAAC,cAAc,IAAI,QAAQ,IACpC,CACN,GACC,EAEL,eAAe,IAAI,CAChB,8BACK,MAAM,CAAC,SAAS,KAAK,YAAY,CAAC,CAAC,CAAC,CACjC,KAAC,cAAc,IACX,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,gBAAgB,EAC3B,UAAU,EAAE,uBAAuB,EACnC,UAAU,EAAE,MAAM,GACpB,CACL,CAAC,CAAC,CAAC,CACA,cAAK,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,GAAI,CACnC,EACD,KAAC,aAAa,IAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,uBAAuB,GAAI,IAChE,CACN,IACC,GACM,CACnB,CAAC;AACN,CAAC,CACJ,CAAC;AACF,kBAAkB,CAAC,WAAW,GAAG,oBAAoB,CAAC;AAItD,MAAM,kBAAkB,GAAsC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE,CAAC,CACtE,4BAAG,IAAI,KAAK,QAAQ,IAAI,cAAK,SAAS,EAAC,oBAAoB,GAAO,GAAI,CACzE,CAAC;AAEF,SAAS,QAAQ,CAAC,KAAqD;IACnE,MAAM,UAAU,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,aAAa,CAAC;IAEzF,OAAO,CACH,4BACK,CAAC,KAAK,CAAC,mBAAmB,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CACrD,cAAK,SAAS,EAAE,CAAC,CAAC,kBAAkB,CAAC,YACjC,eACI,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC;oBACzB,WAAW,EAAE,KAAK,CAAC,iBAAiB;oBACpC,YAAY,EAAE,QAAQ;iBACzB,CAAC,aAEF,KAAC,cAAc,OAAK,KAAK,GAAI,EAC7B,KAAC,kBAAkB,OAAK,KAAK,GAAI,IAC/B,GACJ,CACT,GACF,CACN,CAAC;AACN,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAgB;IACtC,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC/C,OAAO,MAAM,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;AACrD,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAuC;IAC7D,OAAO,QAAQ,CAAC,aAAa,KAAK,MAAM,CAAC,OAAO,CAAC;AACrD,CAAC;AAED,SAAS,eAAe,CAAC,CAAgB;IACrC,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC/C,OAAO,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;AACxC,CAAC","sourcesContent":["import {\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport {useToaster} from '@gravity-ui/uikit';\nimport {ErrorBoundary} from 'react-error-boundary';\nimport {useEnsuredForwardedRef, useKey, useUpdate} from 'react-use';\n\nimport {type ClassNameProps, cn} from '../classname';\nimport {i18n} from '../i18n/bundle';\nimport {globalLogger} from '../logger';\nimport type {ToolbarsPreset} from '../modules/toolbars/types';\nimport {useBooleanState, useSticky} from '../react-utils';\nimport {isMac} from '../utils';\n\nimport type {Editor, EditorInt} from './Editor';\nimport {HorizontalDrag} from './HorizontalDrag';\nimport {MarkupEditorView} from './MarkupEditorView';\nimport {SplitModeView} from './SplitModeView';\nimport {WysiwygEditorView} from './WysiwygEditorView';\nimport {useMarkdownEditorContext} from './context';\nimport {EditorSettings, type EditorSettingsProps} from './settings';\nimport {stickyCn} from './sticky';\nimport type {MToolbarData, MToolbarItemData, WToolbarData, WToolbarItemData} from './toolbar/types';\nimport {getToolbarsConfigs} from './toolbar/utils/toolbarsConfigs';\nimport type {MarkdownEditorMode} from './types';\n\nimport '../styles/styles.scss';\nimport './MarkdownEditorView.scss'; // eslint-disable-line import/order\n\nexport const cnEditorComponent = cn('editor-component');\nconst b = cnEditorComponent;\n\nexport type MarkdownEditorViewProps = ClassNameProps & {\n editor?: Editor;\n autofocus?: boolean;\n toolbarsPreset?: ToolbarsPreset;\n /**\n * @deprecated use `toolbarsPreset` instead\n */\n markupToolbarConfig?: MToolbarData;\n /**\n * @deprecated use `toolbarsPreset` instead\n */\n wysiwygToolbarConfig?: WToolbarData;\n /**\n * @deprecated use `toolbarsPreset` instead\n */\n markupHiddenActionsConfig?: MToolbarItemData[];\n /**\n * @deprecated use `toolbarsPreset` instead\n */\n wysiwygHiddenActionsConfig?: WToolbarItemData[];\n /** @default true */\n settingsVisible?: boolean;\n stickyToolbar: boolean;\n enableSubmitInPreview?: boolean;\n hidePreviewAfterSubmit?: boolean;\n};\n\nexport const MarkdownEditorView = forwardRef<HTMLDivElement, MarkdownEditorViewProps>(\n (props, ref) => {\n const divRef = useEnsuredForwardedRef(ref as React.MutableRefObject<HTMLDivElement>);\n\n const [isMounted, setIsMounted] = useState(false);\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n const [showPreview, , unsetShowPreview, toggleShowPreview] = useBooleanState(false);\n\n const context = useMarkdownEditorContext();\n const editor = (props.editor ?? context) as EditorInt;\n if (!editor)\n throw new Error(\n '[MarkdownEditorView]: an instance of the editor must be passed through the props or context',\n );\n\n const {\n autofocus,\n className,\n settingsVisible = true,\n toolbarsPreset,\n stickyToolbar,\n wysiwygToolbarConfig: initialWysiwygToolbarConfig,\n markupToolbarConfig: initialMarkupToolbarConfig,\n wysiwygHiddenActionsConfig: initialWysiwygHiddenActionsConfig,\n markupHiddenActionsConfig: initialMarkupHiddenActionsConfig,\n enableSubmitInPreview = true,\n hidePreviewAfterSubmit = false,\n } = props;\n\n const {\n wysiwygToolbarConfig,\n markupToolbarConfig,\n wysiwygHiddenActionsConfig,\n markupHiddenActionsConfig,\n } = useMemo(\n () =>\n getToolbarsConfigs({\n toolbarsPreset,\n props: {\n wysiwygToolbarConfig: initialWysiwygToolbarConfig,\n markupToolbarConfig: initialMarkupToolbarConfig,\n wysiwygHiddenActionsConfig: initialWysiwygHiddenActionsConfig,\n markupHiddenActionsConfig: initialMarkupHiddenActionsConfig,\n },\n preset: editor.preset,\n }),\n [\n toolbarsPreset,\n initialWysiwygToolbarConfig,\n initialMarkupToolbarConfig,\n initialWysiwygHiddenActionsConfig,\n initialMarkupHiddenActionsConfig,\n editor.preset,\n ],\n );\n\n const rerender = useUpdate();\n useLayoutEffect(() => {\n editor.on('rerender', rerender);\n return () => {\n editor.off('rerender', rerender);\n };\n }, [editor, rerender]);\n\n const onModeChange = useCallback(\n (type: MarkdownEditorMode) => {\n editor.changeEditorMode({mode: type, reason: 'settings'});\n unsetShowPreview();\n },\n [editor, unsetShowPreview],\n );\n const onToolbarVisibilityChange = useCallback(\n (visible: boolean) => {\n editor.changeToolbarVisibility({visible});\n },\n [editor],\n );\n const onSplitModeChange = useCallback(\n (splitModeEnabled: boolean) => {\n unsetShowPreview();\n editor.changeSplitModeEnabled({splitModeEnabled});\n },\n [editor, unsetShowPreview],\n );\n\n const onShowPreviewChange = useCallback(\n (showPreviewValue: boolean) => {\n editor.changeSplitModeEnabled({splitModeEnabled: false});\n if (showPreviewValue !== showPreview) toggleShowPreview();\n },\n [editor, showPreview, toggleShowPreview],\n );\n\n const editorMode = editor.currentMode;\n const markupSplitMode =\n editor.splitModeEnabled && editor.splitMode && editorMode === 'markup';\n const canRenderPreview = Boolean(\n editor.renderPreview && editorMode === 'markup' && !editor.splitModeEnabled,\n );\n\n useKey(\n (e) => canRenderPreview && isPreviewKeyDown(e),\n (e) => {\n e.preventDefault();\n onShowPreviewChange(!showPreview);\n },\n {event: 'keydown'},\n [showPreview, editorMode, onShowPreviewChange, canRenderPreview],\n );\n\n const editorWrapperRef = useRef(null);\n const splitModeViewWrapperRef = useRef(null);\n\n useEffect(() => {\n if (showPreview) {\n divRef.current.focus();\n }\n }, [divRef, showPreview]);\n\n useKey(\n (e) =>\n enableSubmitInPreview &&\n showPreview &&\n isWrapperFocused(divRef) &&\n isSubmitKeyDown(e),\n () => {\n editor.emit('submit', null);\n\n if (hidePreviewAfterSubmit) {\n onShowPreviewChange(false);\n }\n },\n {event: 'keydown'},\n [hidePreviewAfterSubmit, enableSubmitInPreview, showPreview, showPreview],\n );\n\n const settings = useMemo(\n () => (\n <Settings\n mode={editorMode}\n settingsVisible={settingsVisible}\n onModeChange={onModeChange}\n toolbarVisibility={editor.toolbarVisible && !showPreview}\n onToolbarVisibilityChange={onToolbarVisibilityChange}\n onSplitModeChange={onSplitModeChange}\n splitModeEnabled={editor.splitModeEnabled}\n splitMode={editor.splitMode}\n stickyToolbar={stickyToolbar}\n onShowPreviewChange={onShowPreviewChange}\n showPreview={showPreview}\n renderPreviewButton={canRenderPreview}\n />\n ),\n [\n editorMode,\n settingsVisible,\n editor.toolbarVisible,\n editor.splitModeEnabled,\n editor.splitMode,\n onModeChange,\n showPreview,\n onToolbarVisibilityChange,\n onSplitModeChange,\n stickyToolbar,\n onShowPreviewChange,\n canRenderPreview,\n ],\n );\n\n const toaster = useToaster();\n\n return (\n <ErrorBoundary\n onError={(e) => {\n globalLogger.error(e);\n editor.logger.error(e);\n }}\n fallbackRender={({error, resetErrorBoundary}) => {\n toaster.add({\n theme: 'danger',\n name: 'g-md-editor-error',\n title: i18n('error-title'),\n content: error.message,\n });\n setTimeout(() => {\n resetErrorBoundary();\n editor.changeEditorMode({\n mode: 'markup',\n reason: 'error-boundary',\n emit: false,\n });\n });\n return null;\n }}\n >\n <div\n ref={divRef}\n className={b(\n {\n settings: settingsVisible,\n split: markupSplitMode && editor.splitMode,\n },\n [className],\n )}\n role=\"button\"\n tabIndex={0}\n >\n <div className={b('editor-wrapper')} ref={editorWrapperRef}>\n {showPreview ? (\n <>\n <div className={b('preview-wrapper')}>\n {editor.renderPreview?.({\n getValue: editor.getValue,\n mode: 'preview',\n md: editor.mdOptions,\n directiveSyntax: editor.directiveSyntax,\n })}\n </div>\n {settings}\n </>\n ) : (\n <>\n {editorMode === 'wysiwyg' && (\n <WysiwygEditorView\n editor={editor}\n autofocus={autofocus}\n settingsVisible={settingsVisible}\n toolbarConfig={wysiwygToolbarConfig}\n toolbarVisible={editor.toolbarVisible}\n hiddenActionsConfig={wysiwygHiddenActionsConfig}\n className={b('editor', {mode: editorMode})}\n toolbarClassName={b('toolbar')}\n stickyToolbar={stickyToolbar}\n >\n {editor.toolbarVisible && settingsVisible && settings}\n </WysiwygEditorView>\n )}\n {editorMode === 'markup' && (\n <MarkupEditorView\n editor={editor}\n autofocus={autofocus}\n settingsVisible={settingsVisible}\n toolbarConfig={markupToolbarConfig}\n toolbarVisible={editor.toolbarVisible}\n splitMode={editor.splitMode}\n splitModeEnabled={editor.splitModeEnabled}\n hiddenActionsConfig={markupHiddenActionsConfig}\n className={b('editor', {mode: editorMode})}\n toolbarClassName={b('toolbar')}\n stickyToolbar={stickyToolbar}\n >\n {editor.toolbarVisible && settings}\n </MarkupEditorView>\n )}\n {!editor.toolbarVisible && settings}\n </>\n )}\n </div>\n\n {markupSplitMode && (\n <>\n {editor.splitMode === 'horizontal' ? (\n <HorizontalDrag\n editor={editor}\n isMounted={isMounted}\n leftElRef={editorWrapperRef}\n rightElRef={splitModeViewWrapperRef}\n wrapperRef={divRef}\n />\n ) : (\n <div className={b('resizer')} />\n )}\n <SplitModeView editor={editor} ref={splitModeViewWrapperRef} />\n </>\n )}\n </div>\n </ErrorBoundary>\n );\n },\n);\nMarkdownEditorView.displayName = 'MarkdownEditorView';\n\ninterface MarkupSearchAnchorProps extends Pick<EditorSettingsProps, 'mode'> {}\n\nconst MarkupSearchAnchor: React.FC<MarkupSearchAnchorProps> = ({mode}) => (\n <>{mode === 'markup' && <div className=\"g-md-search-anchor\"></div>}</>\n);\n\nfunction Settings(props: EditorSettingsProps & {stickyToolbar: boolean}) {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const isSticky = useSticky(wrapperRef) && props.toolbarVisibility && props.stickyToolbar;\n\n return (\n <>\n {(props.renderPreviewButton || props.settingsVisible) && (\n <div className={b('settings-wrapper')}>\n <div\n ref={wrapperRef}\n className={stickyCn.settings({\n withToolbar: props.toolbarVisibility,\n stickyActive: isSticky,\n })}\n >\n <EditorSettings {...props} />\n <MarkupSearchAnchor {...props} />\n </div>\n </div>\n )}\n </>\n );\n}\n\nfunction isPreviewKeyDown(e: KeyboardEvent) {\n const modKey = isMac() ? e.metaKey : e.ctrlKey;\n return modKey && e.shiftKey && e.code === 'KeyP';\n}\n\nfunction isWrapperFocused(divRef: React.RefObject<HTMLDivElement>) {\n return document.activeElement === divRef.current;\n}\n\nfunction isSubmitKeyDown(e: KeyboardEvent) {\n const modKey = isMac() ? e.metaKey : e.ctrlKey;\n return modKey && e.code === 'Enter';\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 { MarkupEditorComponent } from "./MarkupEditorComponent.js";
8
8
  import { ToolbarView } from "./ToolbarView.js";
@@ -12,7 +12,12 @@ const b = cn('markup-editor');
12
12
  export const MarkupEditorView = memo((props) => {
13
13
  const { editor, autofocus, settingsVisible, toolbarVisible, toolbarConfig, hiddenActionsConfig, className, toolbarClassName, children, stickyToolbar = true, } = props;
14
14
  useRenderTime((time) => {
15
- logger.metrics({
15
+ globalLogger.metrics({
16
+ component: 'markup-editor',
17
+ event: 'render',
18
+ duration: time,
19
+ });
20
+ editor.logger.metrics({
16
21
  component: 'markup-editor',
17
22
  event: 'render',
18
23
  duration: time,
@@ -1 +1 @@
1
- {"version":3,"file":"MarkupEditorView.js","sourceRoot":"../../../src","sources":["bundle/MarkupEditorView.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,qBAAqB,EAAC,mCAAgC;AAC9D,OAAO,EAAC,WAAW,EAAC,yBAAsB;AAC1C,OAAO,EAAC,4BAA4B,EAAC,oCAAiC;AAItE,gCAAiC;AAEjC,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;AAgB9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAwB,CAAC,KAAK,EAAE,EAAE;IAClE,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,eAAe;YAC1B,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,OAAO,CACH,eAAK,SAAS,EAAE,CAAC,CAAC,EAAC,OAAO,EAAE,cAAc,EAAC,EAAE,CAAC,SAAS,CAAC,CAAC,aACpD,cAAc,CAAC,CAAC,CAAC,CACd,KAAC,4BAA4B,IACzB,KAAK,EAAE;oBACH,aAAa,EAAE,MAAM,CAAC,iBAAiB;oBACvC,oCAAoC,EAChC,MAAM,CAAC,oCAAoC;iBAClD,YAED,KAAC,WAAW,IACR,MAAM,EAAE,MAAM,EACd,UAAU,EAAC,QAAQ,EACnB,aAAa,EAAE,MAAM,EACrB,mBAAmB,EAAE,mBAAmB,EACxC,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAClC,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,gBAAgB,CAAC,CAAC,YAE1C,QAAQ,GACC,GACa,CAClC,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,qBAAqB,IAClB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAC,iBAAiB,EAAE,cAAc,EAAC,CAAC,YAE3D,KAAC,sBAAsB,IAAC,OAAO,EAAE,MAAM,CAAC,aAAa,GAAI,GACrC,IACtB,CACT,CAAC;AACN,CAAC,CAAC,CAAC;AACH,gBAAgB,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 {MarkupEditorComponent} from './MarkupEditorComponent';\nimport {ToolbarView} from './ToolbarView';\nimport {MarkupToolbarContextProvider} from './toolbar/markup/context';\nimport type {MToolbarData, MToolbarItemData} from './toolbar/types';\nimport type {MarkdownEditorSplitMode} from './types';\n\nimport './MarkupEditorView.scss';\n\nconst b = cn('markup-editor');\n\nexport type MarkupEditorViewProps = ClassNameProps & {\n editor: EditorInt;\n autofocus?: boolean;\n toolbarConfig: MToolbarData;\n settingsVisible?: boolean;\n toolbarVisible?: boolean;\n stickyToolbar?: boolean;\n toolbarClassName?: string;\n splitMode?: MarkdownEditorSplitMode;\n splitModeEnabled: boolean;\n hiddenActionsConfig?: MToolbarItemData[];\n children?: React.ReactNode;\n};\n\nexport const MarkupEditorView = memo<MarkupEditorViewProps>((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: 'markup-editor',\n event: 'render',\n duration: time,\n });\n });\n\n return (\n <div className={b({toolbar: toolbarVisible}, [className])}>\n {toolbarVisible ? (\n <MarkupToolbarContextProvider\n value={{\n uploadHandler: editor.fileUploadHandler,\n needToSetDimensionsForUploadedImages:\n editor.needToSetDimensionsForUploadedImages,\n }}\n >\n <ToolbarView\n editor={editor}\n editorMode=\"markup\"\n toolbarEditor={editor}\n hiddenActionsConfig={hiddenActionsConfig}\n stickyToolbar={stickyToolbar}\n toolbarConfig={toolbarConfig}\n toolbarFocus={() => editor.focus()}\n settingsVisible={settingsVisible}\n className={b('toolbar', [toolbarClassName])}\n >\n {children}\n </ToolbarView>\n </MarkupToolbarContextProvider>\n ) : null}\n <MarkupEditorComponent\n autofocus={autofocus}\n editor={editor}\n className={b('editor', {'toolbar-visible': toolbarVisible})}\n >\n <ReactRendererComponent storage={editor.renderStorage} />\n </MarkupEditorComponent>\n </div>\n );\n});\nMarkupEditorView.displayName = 'MarkdownMarkupEditorView';\n"]}
1
+ {"version":3,"file":"MarkupEditorView.js","sourceRoot":"../../../src","sources":["bundle/MarkupEditorView.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,qBAAqB,EAAC,mCAAgC;AAC9D,OAAO,EAAC,WAAW,EAAC,yBAAsB;AAC1C,OAAO,EAAC,4BAA4B,EAAC,oCAAiC;AAItE,gCAAiC;AAEjC,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;AAgB9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAwB,CAAC,KAAK,EAAE,EAAE;IAClE,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,eAAe;YAC1B,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YAClB,SAAS,EAAE,eAAe;YAC1B,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,OAAO,CACH,eAAK,SAAS,EAAE,CAAC,CAAC,EAAC,OAAO,EAAE,cAAc,EAAC,EAAE,CAAC,SAAS,CAAC,CAAC,aACpD,cAAc,CAAC,CAAC,CAAC,CACd,KAAC,4BAA4B,IACzB,KAAK,EAAE;oBACH,aAAa,EAAE,MAAM,CAAC,iBAAiB;oBACvC,oCAAoC,EAChC,MAAM,CAAC,oCAAoC;iBAClD,YAED,KAAC,WAAW,IACR,MAAM,EAAE,MAAM,EACd,UAAU,EAAC,QAAQ,EACnB,aAAa,EAAE,MAAM,EACrB,mBAAmB,EAAE,mBAAmB,EACxC,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAClC,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,gBAAgB,CAAC,CAAC,YAE1C,QAAQ,GACC,GACa,CAClC,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,qBAAqB,IAClB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAC,iBAAiB,EAAE,cAAc,EAAC,CAAC,YAE3D,KAAC,sBAAsB,IAAC,OAAO,EAAE,MAAM,CAAC,aAAa,GAAI,GACrC,IACtB,CACT,CAAC;AACN,CAAC,CAAC,CAAC;AACH,gBAAgB,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 {MarkupEditorComponent} from './MarkupEditorComponent';\nimport {ToolbarView} from './ToolbarView';\nimport {MarkupToolbarContextProvider} from './toolbar/markup/context';\nimport type {MToolbarData, MToolbarItemData} from './toolbar/types';\nimport type {MarkdownEditorSplitMode} from './types';\n\nimport './MarkupEditorView.scss';\n\nconst b = cn('markup-editor');\n\nexport type MarkupEditorViewProps = ClassNameProps & {\n editor: EditorInt;\n autofocus?: boolean;\n toolbarConfig: MToolbarData;\n settingsVisible?: boolean;\n toolbarVisible?: boolean;\n stickyToolbar?: boolean;\n toolbarClassName?: string;\n splitMode?: MarkdownEditorSplitMode;\n splitModeEnabled: boolean;\n hiddenActionsConfig?: MToolbarItemData[];\n children?: React.ReactNode;\n};\n\nexport const MarkupEditorView = memo<MarkupEditorViewProps>((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: 'markup-editor',\n event: 'render',\n duration: time,\n });\n editor.logger.metrics({\n component: 'markup-editor',\n event: 'render',\n duration: time,\n });\n });\n\n return (\n <div className={b({toolbar: toolbarVisible}, [className])}>\n {toolbarVisible ? (\n <MarkupToolbarContextProvider\n value={{\n uploadHandler: editor.fileUploadHandler,\n needToSetDimensionsForUploadedImages:\n editor.needToSetDimensionsForUploadedImages,\n }}\n >\n <ToolbarView\n editor={editor}\n editorMode=\"markup\"\n toolbarEditor={editor}\n hiddenActionsConfig={hiddenActionsConfig}\n stickyToolbar={stickyToolbar}\n toolbarConfig={toolbarConfig}\n toolbarFocus={() => editor.focus()}\n settingsVisible={settingsVisible}\n className={b('toolbar', [toolbarClassName])}\n >\n {children}\n </ToolbarView>\n </MarkupToolbarContextProvider>\n ) : null}\n <MarkupEditorComponent\n autofocus={autofocus}\n editor={editor}\n className={b('editor', {'toolbar-visible': toolbarVisible})}\n >\n <ReactRendererComponent storage={editor.renderStorage} />\n </MarkupEditorComponent>\n </div>\n );\n});\nMarkupEditorView.displayName = 'MarkdownMarkupEditorView';\n"]}
@@ -1,4 +1,5 @@
1
1
  import type { Node } from 'prosemirror-model';
2
+ import type { Logger2 } from "../logger.js";
2
3
  import { SafeEventEmitter } from "../utils/index.js";
3
4
  export interface IMarkupManager {
4
5
  setMarkup(id: string, rawMarkup: string): void;
@@ -8,10 +9,6 @@ export interface IMarkupManager {
8
9
  reset(): void;
9
10
  on<K extends keyof Events>(event: K, listener: (value: Events[K]) => void): void;
10
11
  }
11
- export interface Logger {
12
- log(message: string): void;
13
- error(message: string): void;
14
- }
15
12
  interface Events {
16
13
  markupChanged: {
17
14
  id: string;
@@ -27,8 +24,8 @@ export declare class MarkupManager extends SafeEventEmitter<Events> implements I
27
24
  private _markups;
28
25
  private _nodes;
29
26
  private _namespace;
30
- private readonly logger?;
31
- constructor(logger?: Logger);
27
+ private readonly logger;
28
+ constructor(logger: Logger2.ILogger);
32
29
  /**
33
30
  * Set raw markup for a specific id
34
31
  */
@@ -15,24 +15,24 @@ export class MarkupManager extends SafeEventEmitter {
15
15
  */
16
16
  setMarkup(id, rawMarkup) {
17
17
  if (typeof rawMarkup !== 'string') {
18
- this.logger?.error('[MarkupManager] rawMarkup must be a string');
18
+ this.logger.warn('[MarkupManager] rawMarkup must be a string');
19
19
  return;
20
20
  }
21
21
  this._markups.set(id, rawMarkup);
22
22
  this.emit('markupChanged', { id, rawMarkup });
23
- this.logger?.log(`[MarkupManager] Raw markup for ID ${id} set successfully`);
23
+ this.logger.log(`[MarkupManager] Raw markup for ID ${id} set successfully`);
24
24
  }
25
25
  /**
26
26
  * Set a node for a specific id
27
27
  */
28
28
  setNode(id, node) {
29
29
  if (!node) {
30
- this.logger?.error('[MarkupManager] Node must be a valid ProseMirror Node');
30
+ this.logger.warn('[MarkupManager] Node must be a valid ProseMirror Node');
31
31
  return;
32
32
  }
33
33
  this._nodes.set(id, node);
34
34
  this.emit('nodeChanged', { id, node });
35
- this.logger?.log(`[MarkupManager] Node for ID ${id} set successfully`);
35
+ this.logger.log(`[MarkupManager] Node for ID ${id} set successfully`);
36
36
  }
37
37
  /**
38
38
  * Get raw markup for a specific id
@@ -56,7 +56,7 @@ export class MarkupManager extends SafeEventEmitter {
56
56
  this._markups.clear();
57
57
  this._nodes.clear();
58
58
  this.emit('reset', {});
59
- this.logger?.log('[MarkupManager] MarkupManager has been reset');
59
+ this.logger.log('[MarkupManager] MarkupManager has been reset');
60
60
  }
61
61
  }
62
62
  //# sourceMappingURL=MarkupManager.js.map