@gravity-ui/markdown-editor 15.16.2 → 15.18.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 (138) hide show
  1. package/build/cjs/bundle/Editor.d.ts +1 -1
  2. package/build/cjs/bundle/Editor.js +6 -1
  3. package/build/cjs/bundle/Editor.js.map +1 -1
  4. package/build/cjs/bundle/MarkdownEditorView.js +3 -1
  5. package/build/cjs/bundle/MarkdownEditorView.js.map +1 -1
  6. package/build/cjs/bundle/MarkupEditorView.d.ts +2 -1
  7. package/build/cjs/bundle/MarkupEditorView.js +2 -2
  8. package/build/cjs/bundle/MarkupEditorView.js.map +1 -1
  9. package/build/cjs/bundle/ToolbarView.d.ts +3 -2
  10. package/build/cjs/bundle/ToolbarView.js +3 -2
  11. package/build/cjs/bundle/ToolbarView.js.map +1 -1
  12. package/build/cjs/bundle/WysiwygEditorView.d.ts +2 -1
  13. package/build/cjs/bundle/WysiwygEditorView.js +2 -2
  14. package/build/cjs/bundle/WysiwygEditorView.js.map +1 -1
  15. package/build/cjs/bundle/config/w-heading-config.js +6 -0
  16. package/build/cjs/bundle/config/w-heading-config.js.map +1 -1
  17. package/build/cjs/bundle/settings/index.d.ts +1 -0
  18. package/build/cjs/bundle/settings/index.js +3 -3
  19. package/build/cjs/bundle/settings/index.js.map +1 -1
  20. package/build/cjs/bundle/types.d.ts +2 -0
  21. package/build/cjs/bundle/types.js.map +1 -1
  22. package/build/cjs/bundle/useMarkdownEditor.js +2 -1
  23. package/build/cjs/bundle/useMarkdownEditor.js.map +1 -1
  24. package/build/cjs/bundle/wysiwyg-preset.d.ts +1 -0
  25. package/build/cjs/bundle/wysiwyg-preset.js +1 -1
  26. package/build/cjs/bundle/wysiwyg-preset.js.map +1 -1
  27. package/build/cjs/extensions/behavior/Clipboard/code.js +8 -3
  28. package/build/cjs/extensions/behavior/Clipboard/code.js.map +1 -1
  29. package/build/cjs/extensions/behavior/CommandMenu/handler.d.ts +2 -1
  30. package/build/cjs/extensions/behavior/CommandMenu/handler.js +10 -2
  31. package/build/cjs/extensions/behavior/CommandMenu/handler.js.map +1 -1
  32. package/build/cjs/extensions/behavior/Resizable/Resizable.d.ts +2 -1
  33. package/build/cjs/extensions/behavior/Resizable/Resizable.js.map +1 -1
  34. package/build/cjs/extensions/behavior/index.d.ts +1 -0
  35. package/build/cjs/extensions/behavior/index.js +6 -4
  36. package/build/cjs/extensions/behavior/index.js.map +1 -1
  37. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +13 -11
  38. package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
  39. package/build/cjs/extensions/markdown/CodeBlock/handle-paste.d.ts +1 -1
  40. package/build/cjs/extensions/markdown/CodeBlock/handle-paste.js +21 -5
  41. package/build/cjs/extensions/markdown/CodeBlock/handle-paste.js.map +1 -1
  42. package/build/cjs/extensions/markdown/Link/plugins/LinkTooltipPlugin/index.js +23 -39
  43. package/build/cjs/extensions/markdown/Link/plugins/LinkTooltipPlugin/index.js.map +1 -1
  44. package/build/cjs/i18n/placeholder/en.json +1 -0
  45. package/build/cjs/i18n/placeholder/index.d.ts +2 -1
  46. package/build/cjs/i18n/placeholder/ru.json +1 -0
  47. package/build/cjs/toolbar/FlexToolbar.js +9 -3
  48. package/build/cjs/toolbar/FlexToolbar.js.map +1 -1
  49. package/build/cjs/toolbar/PreviewTooltip.d.ts +1 -0
  50. package/build/cjs/toolbar/PreviewTooltip.js +3 -3
  51. package/build/cjs/toolbar/PreviewTooltip.js.map +1 -1
  52. package/build/cjs/toolbar/Toolbar.css +3 -0
  53. package/build/cjs/toolbar/Toolbar.d.ts +1 -1
  54. package/build/cjs/toolbar/Toolbar.js +3 -3
  55. package/build/cjs/toolbar/Toolbar.js.map +1 -1
  56. package/build/cjs/toolbar/ToolbarButton.d.ts +1 -1
  57. package/build/cjs/toolbar/ToolbarButton.js +2 -2
  58. package/build/cjs/toolbar/ToolbarButton.js.map +1 -1
  59. package/build/cjs/toolbar/ToolbarGroup.d.ts +1 -1
  60. package/build/cjs/toolbar/ToolbarGroup.js +4 -4
  61. package/build/cjs/toolbar/ToolbarGroup.js.map +1 -1
  62. package/build/cjs/toolbar/ToolbarListButton.d.ts +1 -1
  63. package/build/cjs/toolbar/ToolbarListButton.js +4 -4
  64. package/build/cjs/toolbar/ToolbarListButton.js.map +1 -1
  65. package/build/cjs/toolbar/types.d.ts +9 -0
  66. package/build/cjs/toolbar/types.js.map +1 -1
  67. package/build/cjs/version.js +1 -1
  68. package/build/cjs/version.js.map +1 -1
  69. package/build/esm/bundle/Editor.d.ts +1 -1
  70. package/build/esm/bundle/Editor.js +6 -1
  71. package/build/esm/bundle/Editor.js.map +1 -1
  72. package/build/esm/bundle/MarkdownEditorView.js +3 -1
  73. package/build/esm/bundle/MarkdownEditorView.js.map +1 -1
  74. package/build/esm/bundle/MarkupEditorView.d.ts +2 -1
  75. package/build/esm/bundle/MarkupEditorView.js +2 -2
  76. package/build/esm/bundle/MarkupEditorView.js.map +1 -1
  77. package/build/esm/bundle/ToolbarView.d.ts +3 -2
  78. package/build/esm/bundle/ToolbarView.js +3 -2
  79. package/build/esm/bundle/ToolbarView.js.map +1 -1
  80. package/build/esm/bundle/WysiwygEditorView.d.ts +2 -1
  81. package/build/esm/bundle/WysiwygEditorView.js +2 -2
  82. package/build/esm/bundle/WysiwygEditorView.js.map +1 -1
  83. package/build/esm/bundle/config/w-heading-config.js +6 -0
  84. package/build/esm/bundle/config/w-heading-config.js.map +1 -1
  85. package/build/esm/bundle/settings/index.d.ts +1 -0
  86. package/build/esm/bundle/settings/index.js +3 -3
  87. package/build/esm/bundle/settings/index.js.map +1 -1
  88. package/build/esm/bundle/types.d.ts +2 -0
  89. package/build/esm/bundle/types.js.map +1 -1
  90. package/build/esm/bundle/useMarkdownEditor.js +2 -1
  91. package/build/esm/bundle/useMarkdownEditor.js.map +1 -1
  92. package/build/esm/bundle/wysiwyg-preset.d.ts +1 -0
  93. package/build/esm/bundle/wysiwyg-preset.js +1 -1
  94. package/build/esm/bundle/wysiwyg-preset.js.map +1 -1
  95. package/build/esm/extensions/behavior/Clipboard/code.js +8 -3
  96. package/build/esm/extensions/behavior/Clipboard/code.js.map +1 -1
  97. package/build/esm/extensions/behavior/CommandMenu/handler.d.ts +2 -1
  98. package/build/esm/extensions/behavior/CommandMenu/handler.js +10 -3
  99. package/build/esm/extensions/behavior/CommandMenu/handler.js.map +1 -1
  100. package/build/esm/extensions/behavior/Resizable/Resizable.d.ts +2 -1
  101. package/build/esm/extensions/behavior/Resizable/Resizable.js.map +1 -1
  102. package/build/esm/extensions/behavior/index.d.ts +1 -0
  103. package/build/esm/extensions/behavior/index.js +6 -4
  104. package/build/esm/extensions/behavior/index.js.map +1 -1
  105. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +13 -11
  106. package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
  107. package/build/esm/extensions/markdown/CodeBlock/handle-paste.d.ts +1 -1
  108. package/build/esm/extensions/markdown/CodeBlock/handle-paste.js +20 -5
  109. package/build/esm/extensions/markdown/CodeBlock/handle-paste.js.map +1 -1
  110. package/build/esm/extensions/markdown/Link/plugins/LinkTooltipPlugin/index.js +23 -39
  111. package/build/esm/extensions/markdown/Link/plugins/LinkTooltipPlugin/index.js.map +1 -1
  112. package/build/esm/i18n/placeholder/en.json +1 -0
  113. package/build/esm/i18n/placeholder/index.d.ts +2 -1
  114. package/build/esm/i18n/placeholder/ru.json +1 -0
  115. package/build/esm/toolbar/FlexToolbar.js +9 -3
  116. package/build/esm/toolbar/FlexToolbar.js.map +1 -1
  117. package/build/esm/toolbar/PreviewTooltip.d.ts +1 -0
  118. package/build/esm/toolbar/PreviewTooltip.js +3 -3
  119. package/build/esm/toolbar/PreviewTooltip.js.map +1 -1
  120. package/build/esm/toolbar/Toolbar.css +3 -0
  121. package/build/esm/toolbar/Toolbar.d.ts +1 -1
  122. package/build/esm/toolbar/Toolbar.js +3 -3
  123. package/build/esm/toolbar/Toolbar.js.map +1 -1
  124. package/build/esm/toolbar/ToolbarButton.d.ts +1 -1
  125. package/build/esm/toolbar/ToolbarButton.js +2 -2
  126. package/build/esm/toolbar/ToolbarButton.js.map +1 -1
  127. package/build/esm/toolbar/ToolbarGroup.d.ts +1 -1
  128. package/build/esm/toolbar/ToolbarGroup.js +4 -4
  129. package/build/esm/toolbar/ToolbarGroup.js.map +1 -1
  130. package/build/esm/toolbar/ToolbarListButton.d.ts +1 -1
  131. package/build/esm/toolbar/ToolbarListButton.js +4 -4
  132. package/build/esm/toolbar/ToolbarListButton.js.map +1 -1
  133. package/build/esm/toolbar/types.d.ts +9 -0
  134. package/build/esm/toolbar/types.js.map +1 -1
  135. package/build/esm/version.js +1 -1
  136. package/build/esm/version.js.map +1 -1
  137. package/build/styles.css +3 -0
  138. package/package.json +2 -2
@@ -42,7 +42,7 @@ export type ChangeEditorModeOptions = {
42
42
  reason: 'error-boundary' | 'settings' | 'manually';
43
43
  emit?: boolean;
44
44
  };
45
- export type EditorOptions = Pick<MarkdownEditorOptions, 'md' | 'initial' | 'handlers' | 'experimental' | 'markupConfig' | 'wysiwygConfig'> & {
45
+ export type EditorOptions = Pick<MarkdownEditorOptions, 'md' | 'initial' | 'handlers' | 'experimental' | 'markupConfig' | 'wysiwygConfig' | 'mobile'> & {
46
46
  logger: Logger2.ILogger;
47
47
  renderStorage: ReactRenderStorage;
48
48
  preset: EditorPreset;
@@ -39,6 +39,7 @@ class EditorImpl extends utils_1.SafeEventEmitter {
39
39
  #directiveSyntax;
40
40
  #prepareRawMarkup;
41
41
  #beforeEditorModeChange;
42
+ #mobile;
42
43
  get _wysiwygView() {
43
44
  // @ts-expect-error internal typing
44
45
  return this.#wysiwygEditor?.view;
@@ -189,6 +190,9 @@ class EditorImpl extends utils_1.SafeEventEmitter {
189
190
  get enableNewImageSizeCalculation() {
190
191
  return this.#enableNewImageSizeCalculation;
191
192
  }
193
+ get mobile() {
194
+ return this.#mobile;
195
+ }
192
196
  constructor(opts) {
193
197
  const { logger } = opts;
194
198
  super({
@@ -197,7 +201,7 @@ class EditorImpl extends utils_1.SafeEventEmitter {
197
201
  logger_1.globalLogger.error(error);
198
202
  },
199
203
  });
200
- const { md = {}, initial = {}, handlers = {}, experimental = {}, markupConfig = {}, wysiwygConfig = {}, } = opts;
204
+ const { md = {}, initial = {}, handlers = {}, experimental = {}, markupConfig = {}, wysiwygConfig = {}, mobile = false, } = opts;
201
205
  this.#logger = logger;
202
206
  this.#modifiers = experimental.preserveMarkupFormatting
203
207
  ? (0, dynamicModifiers_1.createDynamicModifiers)(new MarkupManager_1.MarkupManager(this.logger.nested({ module: 'markup-manager' })))
@@ -223,6 +227,7 @@ class EditorImpl extends utils_1.SafeEventEmitter {
223
227
  this.#prepareRawMarkup = experimental.prepareRawMarkup;
224
228
  this.#escapeConfig = wysiwygConfig.escapeConfig;
225
229
  this.#beforeEditorModeChange = experimental.beforeEditorModeChange;
230
+ this.#mobile = mobile;
226
231
  }
227
232
  // ---> implements CodeEditor
228
233
  get cm() {
@@ -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 {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 searchPanel: this.#markupConfig.searchPanel,\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"]}
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 readonly mobile: boolean;\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' | 'mobile'\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 #mobile: boolean;\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 searchPanel: this.#markupConfig.searchPanel,\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 get mobile(): boolean {\n return this.#mobile;\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 mobile = false,\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 this.#mobile = mobile;\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"]}
@@ -80,15 +80,17 @@ const EditorWrapper = (0, react_1.forwardRef)(({ autofocus, editor, editorMode,
80
80
  splitModeEnabled: editor.splitModeEnabled,
81
81
  stickyToolbar,
82
82
  toolbarVisibility: editor.toolbarVisible && !showPreview,
83
+ disableMark: editor.mobile,
83
84
  };
84
85
  const areSettingsVisible = settingsVisibleProp === true ||
85
86
  (Array.isArray(settingsVisibleProp) && settingsVisibleProp.length > 0);
87
+ const toolbarDisplay = editor.mobile ? 'scroll' : 'shrink';
86
88
  return ((0, jsx_runtime_1.jsx)("div", { className: b('editor-wrapper'), ref: ref, "data-qa": qa, "data-mode": editor.currentMode, children: showPreview ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: b('preview-wrapper'), children: editor.renderPreview?.({
87
89
  getValue: editor.getValue,
88
90
  mode: 'preview',
89
91
  md: editor.mdOptions,
90
92
  directiveSyntax: editor.directiveSyntax,
91
- }) }), (0, jsx_runtime_1.jsx)(Settings, { ...settingsProps, settingsVisible: settingsVisibleProp })] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [editorMode === 'wysiwyg' && ((0, jsx_runtime_1.jsx)(WysiwygEditorView_1.WysiwygEditorView, { editor: editor, autofocus: autofocus, settingsVisible: areSettingsVisible, toolbarConfig: wysiwygToolbarConfig, toolbarVisible: editor.toolbarVisible, hiddenActionsConfig: wysiwygHiddenActionsConfig, className: b('editor', { mode: editorMode }), toolbarClassName: b('toolbar'), stickyToolbar: stickyToolbar, children: (0, jsx_runtime_1.jsx)(Settings, { ...settingsProps, settingsVisible: editor.toolbarVisible && settingsVisibleProp }) })), editorMode === 'markup' && ((0, jsx_runtime_1.jsx)(MarkupEditorView_1.MarkupEditorView, { editor: editor, autofocus: autofocus, settingsVisible: areSettingsVisible, toolbarConfig: markupToolbarConfig, toolbarVisible: editor.toolbarVisible, splitMode: editor.splitMode, splitModeEnabled: editor.splitModeEnabled, hiddenActionsConfig: markupHiddenActionsConfig, className: b('editor', { mode: editorMode }), toolbarClassName: b('toolbar'), stickyToolbar: stickyToolbar, children: (0, jsx_runtime_1.jsx)(Settings, { ...settingsProps, settingsVisible: editor.toolbarVisible && settingsVisibleProp }) })), (0, jsx_runtime_1.jsx)(Settings, { ...settingsProps, settingsVisible: !editor.toolbarVisible && settingsVisibleProp, renderPreviewButton: !editor.toolbarVisible && canRenderPreview })] })) }));
93
+ }) }), (0, jsx_runtime_1.jsx)(Settings, { ...settingsProps, settingsVisible: settingsVisibleProp })] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [editorMode === 'wysiwyg' && ((0, jsx_runtime_1.jsx)(WysiwygEditorView_1.WysiwygEditorView, { editor: editor, autofocus: autofocus, settingsVisible: areSettingsVisible, toolbarConfig: wysiwygToolbarConfig, toolbarVisible: editor.toolbarVisible, hiddenActionsConfig: wysiwygHiddenActionsConfig, className: b('editor', { mode: editorMode }), toolbarClassName: b('toolbar'), stickyToolbar: stickyToolbar, toolbarDisplay: toolbarDisplay, children: (0, jsx_runtime_1.jsx)(Settings, { ...settingsProps, settingsVisible: editor.toolbarVisible && settingsVisibleProp }) })), editorMode === 'markup' && ((0, jsx_runtime_1.jsx)(MarkupEditorView_1.MarkupEditorView, { editor: editor, autofocus: autofocus, settingsVisible: areSettingsVisible, toolbarConfig: markupToolbarConfig, toolbarVisible: editor.toolbarVisible, splitMode: editor.splitMode, splitModeEnabled: editor.splitModeEnabled, hiddenActionsConfig: markupHiddenActionsConfig, className: b('editor', { mode: editorMode }), toolbarClassName: b('toolbar'), stickyToolbar: stickyToolbar, toolbarDisplay: toolbarDisplay, children: (0, jsx_runtime_1.jsx)(Settings, { ...settingsProps, settingsVisible: editor.toolbarVisible && settingsVisibleProp }) })), (0, jsx_runtime_1.jsx)(Settings, { ...settingsProps, settingsVisible: !editor.toolbarVisible && settingsVisibleProp, renderPreviewButton: !editor.toolbarVisible && canRenderPreview })] })) }));
92
94
  });
93
95
  EditorWrapper.displayName = 'EditorWrapper';
94
96
  exports.MarkdownEditorView = (0, react_1.forwardRef)((props, ref) => {
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownEditorView.js","sourceRoot":"../../../src","sources":["bundle/MarkdownEditorView.tsx"],"names":[],"mappings":";;;;AAAA,iCAQe;AAEf,6CAA2D;AAC3D,+DAAmD;AACnD,yCAAoE;AAEpE,+CAAqD;AACrD,oDAAoC;AACpC,yCAAuC;AAEvC,yDAA0D;AAC1D,6CAA+B;AAG/B,wDAAgD;AAChD,4DAAoD;AACpD,sDAA8C;AAC9C,8DAAsD;AACtD,0CAAmD;AACnD,kDAAuF;AACvF,8CAAkC;AAElC,wEAAmE;AAGnE,gCAA+B;AAC/B,oCAAmC,CAAC,mCAAmC;AAE1D,QAAA,iBAAiB,GAAG,IAAA,cAAE,EAAC,kBAAkB,CAAC,CAAC;AACxD,MAAM,CAAC,GAAG,yBAAiB,CAAC;AAU5B,MAAM,aAAa,GAAG,IAAA,kBAAU,EAC5B,CACI,EACI,SAAS,EACT,MAAM,EACN,UAAU,EACV,qBAAqB,EACrB,sBAAsB,EACtB,SAAS,EACT,yBAAyB,EAAE,gCAAgC,EAC3D,mBAAmB,EAAE,0BAA0B,EAC/C,EAAE,EACF,eAAe,EAAE,mBAAmB,EACpC,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,0BAA0B,EAAE,iCAAiC,EAC7D,oBAAoB,EAAE,2BAA2B,GACpD,EACD,GAAG,EACL,EAAE;IACA,MAAM,EACF,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,yBAAyB,GAC5B,GAAG,IAAA,eAAO,EACP,GAAG,EAAE,CACD,IAAA,oCAAkB,EAAC;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;IACF,MAAM,YAAY,GAAG,IAAA,mBAAW,EAC5B,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,IAAA,mBAAW,EACzC,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,IAAA,mBAAW,EACjC,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;IACF,MAAM,mBAAmB,GAAG,IAAA,mBAAW,EACnC,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;IACF,MAAM,gBAAgB,GAAG,OAAO,CAC5B,MAAM,CAAC,aAAa,IAAI,UAAU,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAC9E,CAAC;IAEF,IAAA,kBAAM,EACF,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,IAAA,kBAAM,EACF,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,qBAAqB,IAAI,WAAW,IAAI,SAAS,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,EACvF,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,aAAa,GAAG;QAClB,IAAI,EAAE,UAAU;QAChB,YAAY;QACZ,mBAAmB;QACnB,iBAAiB;QACjB,yBAAyB;QACzB,mBAAmB,EAAE,gBAAgB;QACrC,WAAW;QACX,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,aAAa;QACb,iBAAiB,EAAE,MAAM,CAAC,cAAc,IAAI,CAAC,WAAW;KAC3D,CAAC;IAEF,MAAM,kBAAkB,GACpB,mBAAmB,KAAK,IAAI;QAC5B,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE3E,OAAO,CACH,gCACI,SAAS,EAAE,CAAC,CAAC,gBAAgB,CAAC,EAC9B,GAAG,EAAE,GAAG,aACC,EAAE,eACA,MAAM,CAAC,WAAW,YAE5B,WAAW,CAAC,CAAC,CAAC,CACX,6DACI,gCAAK,SAAS,EAAE,CAAC,CAAC,iBAAiB,CAAC,YAC/B,MAAM,CAAC,aAAa,EAAE,CAAC;wBACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,IAAI,EAAE,SAAS;wBACf,EAAE,EAAE,MAAM,CAAC,SAAS;wBACpB,eAAe,EAAE,MAAM,CAAC,eAAe;qBAC1C,CAAC,GACA,EACN,uBAAC,QAAQ,OAAK,aAAa,EAAE,eAAe,EAAE,mBAAmB,GAAI,IACtE,CACN,CAAC,CAAC,CAAC,CACA,6DACK,UAAU,KAAK,SAAS,IAAI,CACzB,uBAAC,qCAAiB,IACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,kBAAkB,EACnC,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,YAE5B,uBAAC,QAAQ,OACD,aAAa,EACjB,eAAe,EAAE,MAAM,CAAC,cAAc,IAAI,mBAAmB,GAC/D,GACc,CACvB,EACA,UAAU,KAAK,QAAQ,IAAI,CACxB,uBAAC,mCAAgB,IACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,kBAAkB,EACnC,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,YAE5B,uBAAC,QAAQ,OACD,aAAa,EACjB,eAAe,EAAE,MAAM,CAAC,cAAc,IAAI,mBAAmB,GAC/D,GACa,CACtB,EACD,uBAAC,QAAQ,OACD,aAAa,EACjB,eAAe,EAAE,CAAC,MAAM,CAAC,cAAc,IAAI,mBAAmB,EAC9D,mBAAmB,EAAE,CAAC,MAAM,CAAC,cAAc,IAAI,gBAAgB,GACjE,IACH,CACN,GACC,CACT,CAAC;AACN,CAAC,CACJ,CAAC;AAEF,aAAa,CAAC,WAAW,GAAG,eAAe,CAAC;AAmC/B,QAAA,kBAAkB,GAAG,IAAA,kBAAU,EACxC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACX,MAAM,MAAM,GAAG,IAAA,kCAAsB,EAAC,GAA6C,CAAC,CAAC;IACrF,MAAM,gBAAgB,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC;IACtC,MAAM,CAAC,WAAW,EAAE,AAAD,EAAG,gBAAgB,EAAE,iBAAiB,CAAC,GAAG,IAAA,6BAAe,EAAC,KAAK,CAAC,CAAC;IAEpF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAClD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,YAAY,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,IAAA,kCAAwB,GAAE,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,qBAAqB,GAAG,IAAI,EAC5B,sBAAsB,GAAG,KAAK,EAC9B,yBAAyB,EACzB,mBAAmB,EACnB,EAAE,EACF,eAAe,GAAG,IAAI,EACtB,aAAa,EACb,cAAc,EACd,0BAA0B,EAC1B,oBAAoB,GACvB,GAAG,KAAK,CAAC;IAEV,MAAM,QAAQ,GAAG,IAAA,qBAAS,GAAE,CAAC;IAC7B,IAAA,uBAAe,EAAC,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,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;IACtC,MAAM,eAAe,GACjB,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,SAAS,IAAI,UAAU,KAAK,QAAQ,CAAC;IAE3E,MAAM,uBAAuB,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC;IAE7C,MAAM,OAAO,GAAG,IAAA,kBAAU,GAAE,CAAC;IAE7B,IAAA,iBAAS,EAAC,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,kBAAkB,GACpB,eAAe,KAAK,IAAI;QACxB,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEnE,OAAO,CACH,uBAAC,oCAAa,IACV,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACX,qBAAY,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,IAAA,aAAI,EAAC,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,iCACI,GAAG,EAAE,MAAM,aACF,EAAE,EACX,SAAS,EAAE,CAAC,CACR;gBACI,QAAQ,EAAE,kBAAkB;gBAC5B,KAAK,EAAE,eAAe,IAAI,MAAM,CAAC,SAAS;aAC7C,EACD,CAAC,SAAS,CAAC,CACd,EACD,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,aAEX,uBAAC,aAAa,IACV,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,qBAAqB,EAAE,qBAAqB,EAC5C,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC,EACnC,yBAAyB,EAAE,yBAAyB,EACpD,mBAAmB,EAAE,mBAAmB,EACxC,EAAE,EAAC,kBAAkB,EACrB,GAAG,EAAE,gBAAgB,EACrB,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,gBAAgB,EAClC,0BAA0B,EAAE,0BAA0B,EACtD,oBAAoB,EAAE,oBAAoB,GAC5C,EAED,eAAe,IAAI,CAChB,6DACK,MAAM,CAAC,SAAS,KAAK,YAAY,CAAC,CAAC,CAAC,CACjC,uBAAC,+BAAc,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,gCAAK,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,GAAI,CACnC,EACD,uBAAC,6BAAa,IAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,uBAAuB,GAAI,IAChE,CACN,IACC,GACM,CACnB,CAAC;AACN,CAAC,CACJ,CAAC;AACF,0BAAkB,CAAC,WAAW,GAAG,oBAAoB,CAAC;AAItD,MAAM,kBAAkB,GAAsC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE,CAAC,CACtE,2DAAG,IAAI,KAAK,QAAQ,IAAI,gCAAK,SAAS,EAAC,oBAAoB,GAAO,GAAI,CACzE,CAAC;AAEF,SAAS,QAAQ,CAAC,KAAqD;IACnE,MAAM,UAAU,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,IAAA,uBAAS,EAAC,UAAU,CAAC,IAAI,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,aAAa,CAAC;IAEzF,OAAO,CACH,2DACK,CAAC,KAAK,CAAC,mBAAmB,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CACrD,gCAAK,SAAS,EAAE,CAAC,CAAC,kBAAkB,CAAC,YACjC,iCACI,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,iBAAQ,CAAC,QAAQ,CAAC;oBACzB,WAAW,EAAE,KAAK,CAAC,iBAAiB;oBACpC,YAAY,EAAE,QAAQ;iBACzB,CAAC,aAEF,uBAAC,yBAAc,OAAK,KAAK,GAAI,EAC7B,uBAAC,kBAAkB,OAAK,KAAK,GAAI,IAC/B,GACJ,CACT,GACF,CACN,CAAC;AACN,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAgB;IACtC,MAAM,MAAM,GAAG,IAAA,aAAK,GAAE,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,IAAA,aAAK,GAAE,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 {type QAProps, 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, type SettingItems} 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\ninterface EditorWrapperProps extends QAProps, ToolbarConfigs, Omit<ViewProps, 'editor'> {\n editor: EditorInt;\n editorMode: MarkdownEditorMode;\n isFocused: boolean;\n showPreview: boolean;\n toggleShowPreview: () => void;\n unsetShowPreview: () => void;\n}\nconst EditorWrapper = forwardRef<HTMLDivElement, EditorWrapperProps>(\n (\n {\n autofocus,\n editor,\n editorMode,\n enableSubmitInPreview,\n hidePreviewAfterSubmit,\n isFocused,\n markupHiddenActionsConfig: initialMarkupHiddenActionsConfig,\n markupToolbarConfig: initialMarkupToolbarConfig,\n qa,\n settingsVisible: settingsVisibleProp,\n showPreview,\n stickyToolbar,\n toggleShowPreview,\n toolbarsPreset,\n unsetShowPreview,\n wysiwygHiddenActionsConfig: initialWysiwygHiddenActionsConfig,\n wysiwygToolbarConfig: initialWysiwygToolbarConfig,\n },\n ref,\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 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 const onShowPreviewChange = useCallback(\n (showPreviewValue: boolean) => {\n editor.changeSplitModeEnabled({splitModeEnabled: false});\n if (showPreviewValue !== showPreview) toggleShowPreview();\n },\n [editor, showPreview, toggleShowPreview],\n );\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 useKey(\n (e) => Boolean(enableSubmitInPreview && showPreview && isFocused && 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 settingsProps = {\n mode: editorMode,\n onModeChange,\n onShowPreviewChange,\n onSplitModeChange,\n onToolbarVisibilityChange,\n renderPreviewButton: canRenderPreview,\n showPreview,\n splitMode: editor.splitMode,\n splitModeEnabled: editor.splitModeEnabled,\n stickyToolbar,\n toolbarVisibility: editor.toolbarVisible && !showPreview,\n };\n\n const areSettingsVisible =\n settingsVisibleProp === true ||\n (Array.isArray(settingsVisibleProp) && settingsVisibleProp.length > 0);\n\n return (\n <div\n className={b('editor-wrapper')}\n ref={ref}\n data-qa={qa}\n data-mode={editor.currentMode}\n >\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 {...settingsProps} settingsVisible={settingsVisibleProp} />\n </>\n ) : (\n <>\n {editorMode === 'wysiwyg' && (\n <WysiwygEditorView\n editor={editor}\n autofocus={autofocus}\n settingsVisible={areSettingsVisible}\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 <Settings\n {...settingsProps}\n settingsVisible={editor.toolbarVisible && settingsVisibleProp}\n />\n </WysiwygEditorView>\n )}\n {editorMode === 'markup' && (\n <MarkupEditorView\n editor={editor}\n autofocus={autofocus}\n settingsVisible={areSettingsVisible}\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 <Settings\n {...settingsProps}\n settingsVisible={editor.toolbarVisible && settingsVisibleProp}\n />\n </MarkupEditorView>\n )}\n <Settings\n {...settingsProps}\n settingsVisible={!editor.toolbarVisible && settingsVisibleProp}\n renderPreviewButton={!editor.toolbarVisible && canRenderPreview}\n />\n </>\n )}\n </div>\n );\n },\n);\n\nEditorWrapper.displayName = 'EditorWrapper';\n\ntype ToolbarConfigs = {\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};\n\ntype ViewProps = {\n editor?: Editor;\n autofocus?: boolean;\n // MAJOR: rename to settings\n /** @default true */\n settingsVisible?: boolean | SettingItems[];\n toolbarsPreset?: ToolbarsPreset;\n stickyToolbar: boolean;\n enableSubmitInPreview?: boolean;\n hidePreviewAfterSubmit?: boolean;\n};\n\nexport type MarkdownEditorViewProps = ClassNameProps & ToolbarConfigs & ViewProps & QAProps & {};\n\nexport const MarkdownEditorView = forwardRef<HTMLDivElement, MarkdownEditorViewProps>(\n (props, ref) => {\n const divRef = useEnsuredForwardedRef(ref as React.MutableRefObject<HTMLDivElement>);\n const editorWrapperRef = useRef(null);\n const [showPreview, , unsetShowPreview, toggleShowPreview] = useBooleanState(false);\n\n const [isMounted, setIsMounted] = useState(false);\n useEffect(() => {\n setIsMounted(true);\n }, []);\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 enableSubmitInPreview = true,\n hidePreviewAfterSubmit = false,\n markupHiddenActionsConfig,\n markupToolbarConfig,\n qa,\n settingsVisible = true,\n stickyToolbar,\n toolbarsPreset,\n wysiwygHiddenActionsConfig,\n wysiwygToolbarConfig,\n } = props;\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 editorMode = editor.currentMode;\n const markupSplitMode =\n editor.splitModeEnabled && editor.splitMode && editorMode === 'markup';\n\n const splitModeViewWrapperRef = useRef(null);\n\n const toaster = useToaster();\n\n useEffect(() => {\n if (showPreview) {\n divRef.current.focus();\n }\n }, [divRef, showPreview]);\n\n const areSettingsVisible =\n settingsVisible === true ||\n (Array.isArray(settingsVisible) && settingsVisible.length > 0);\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 data-qa={qa}\n className={b(\n {\n settings: areSettingsVisible,\n split: markupSplitMode && editor.splitMode,\n },\n [className],\n )}\n role=\"button\"\n tabIndex={0}\n >\n <EditorWrapper\n autofocus={autofocus}\n editor={editor}\n editorMode={editorMode}\n enableSubmitInPreview={enableSubmitInPreview}\n hidePreviewAfterSubmit={hidePreviewAfterSubmit}\n isFocused={isWrapperFocused(divRef)}\n markupHiddenActionsConfig={markupHiddenActionsConfig}\n markupToolbarConfig={markupToolbarConfig}\n qa=\"g-md-editor-mode\"\n ref={editorWrapperRef}\n settingsVisible={settingsVisible}\n showPreview={showPreview}\n stickyToolbar={stickyToolbar}\n toggleShowPreview={toggleShowPreview}\n toolbarsPreset={toolbarsPreset}\n unsetShowPreview={unsetShowPreview}\n wysiwygHiddenActionsConfig={wysiwygHiddenActionsConfig}\n wysiwygToolbarConfig={wysiwygToolbarConfig}\n />\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":"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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 {type QAProps, 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, type SettingItems} 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\ninterface EditorWrapperProps extends QAProps, ToolbarConfigs, Omit<ViewProps, 'editor'> {\n editor: EditorInt;\n editorMode: MarkdownEditorMode;\n isFocused: boolean;\n showPreview: boolean;\n toggleShowPreview: () => void;\n unsetShowPreview: () => void;\n}\nconst EditorWrapper = forwardRef<HTMLDivElement, EditorWrapperProps>(\n (\n {\n autofocus,\n editor,\n editorMode,\n enableSubmitInPreview,\n hidePreviewAfterSubmit,\n isFocused,\n markupHiddenActionsConfig: initialMarkupHiddenActionsConfig,\n markupToolbarConfig: initialMarkupToolbarConfig,\n qa,\n settingsVisible: settingsVisibleProp,\n showPreview,\n stickyToolbar,\n toggleShowPreview,\n toolbarsPreset,\n unsetShowPreview,\n wysiwygHiddenActionsConfig: initialWysiwygHiddenActionsConfig,\n wysiwygToolbarConfig: initialWysiwygToolbarConfig,\n },\n ref,\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 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 const onShowPreviewChange = useCallback(\n (showPreviewValue: boolean) => {\n editor.changeSplitModeEnabled({splitModeEnabled: false});\n if (showPreviewValue !== showPreview) toggleShowPreview();\n },\n [editor, showPreview, toggleShowPreview],\n );\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 useKey(\n (e) => Boolean(enableSubmitInPreview && showPreview && isFocused && 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 settingsProps = {\n mode: editorMode,\n onModeChange,\n onShowPreviewChange,\n onSplitModeChange,\n onToolbarVisibilityChange,\n renderPreviewButton: canRenderPreview,\n showPreview,\n splitMode: editor.splitMode,\n splitModeEnabled: editor.splitModeEnabled,\n stickyToolbar,\n toolbarVisibility: editor.toolbarVisible && !showPreview,\n disableMark: editor.mobile,\n };\n\n const areSettingsVisible =\n settingsVisibleProp === true ||\n (Array.isArray(settingsVisibleProp) && settingsVisibleProp.length > 0);\n\n const toolbarDisplay = editor.mobile ? 'scroll' : 'shrink';\n\n return (\n <div\n className={b('editor-wrapper')}\n ref={ref}\n data-qa={qa}\n data-mode={editor.currentMode}\n >\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 {...settingsProps} settingsVisible={settingsVisibleProp} />\n </>\n ) : (\n <>\n {editorMode === 'wysiwyg' && (\n <WysiwygEditorView\n editor={editor}\n autofocus={autofocus}\n settingsVisible={areSettingsVisible}\n toolbarConfig={wysiwygToolbarConfig}\n toolbarVisible={editor.toolbarVisible}\n hiddenActionsConfig={wysiwygHiddenActionsConfig}\n className={b('editor', {mode: editorMode})}\n toolbarClassName={b('toolbar')}\n stickyToolbar={stickyToolbar}\n toolbarDisplay={toolbarDisplay}\n >\n <Settings\n {...settingsProps}\n settingsVisible={editor.toolbarVisible && settingsVisibleProp}\n />\n </WysiwygEditorView>\n )}\n {editorMode === 'markup' && (\n <MarkupEditorView\n editor={editor}\n autofocus={autofocus}\n settingsVisible={areSettingsVisible}\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 toolbarDisplay={toolbarDisplay}\n >\n <Settings\n {...settingsProps}\n settingsVisible={editor.toolbarVisible && settingsVisibleProp}\n />\n </MarkupEditorView>\n )}\n <Settings\n {...settingsProps}\n settingsVisible={!editor.toolbarVisible && settingsVisibleProp}\n renderPreviewButton={!editor.toolbarVisible && canRenderPreview}\n />\n </>\n )}\n </div>\n );\n },\n);\n\nEditorWrapper.displayName = 'EditorWrapper';\n\ntype ToolbarConfigs = {\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};\n\ntype ViewProps = {\n editor?: Editor;\n autofocus?: boolean;\n // MAJOR: rename to settings\n /** @default true */\n settingsVisible?: boolean | SettingItems[];\n toolbarsPreset?: ToolbarsPreset;\n stickyToolbar: boolean;\n enableSubmitInPreview?: boolean;\n hidePreviewAfterSubmit?: boolean;\n};\n\nexport type MarkdownEditorViewProps = ClassNameProps & ToolbarConfigs & ViewProps & QAProps & {};\n\nexport const MarkdownEditorView = forwardRef<HTMLDivElement, MarkdownEditorViewProps>(\n (props, ref) => {\n const divRef = useEnsuredForwardedRef(ref as React.MutableRefObject<HTMLDivElement>);\n const editorWrapperRef = useRef(null);\n const [showPreview, , unsetShowPreview, toggleShowPreview] = useBooleanState(false);\n\n const [isMounted, setIsMounted] = useState(false);\n useEffect(() => {\n setIsMounted(true);\n }, []);\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 enableSubmitInPreview = true,\n hidePreviewAfterSubmit = false,\n markupHiddenActionsConfig,\n markupToolbarConfig,\n qa,\n settingsVisible = true,\n stickyToolbar,\n toolbarsPreset,\n wysiwygHiddenActionsConfig,\n wysiwygToolbarConfig,\n } = props;\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 editorMode = editor.currentMode;\n const markupSplitMode =\n editor.splitModeEnabled && editor.splitMode && editorMode === 'markup';\n\n const splitModeViewWrapperRef = useRef(null);\n\n const toaster = useToaster();\n\n useEffect(() => {\n if (showPreview) {\n divRef.current.focus();\n }\n }, [divRef, showPreview]);\n\n const areSettingsVisible =\n settingsVisible === true ||\n (Array.isArray(settingsVisible) && settingsVisible.length > 0);\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 data-qa={qa}\n className={b(\n {\n settings: areSettingsVisible,\n split: markupSplitMode && editor.splitMode,\n },\n [className],\n )}\n role=\"button\"\n tabIndex={0}\n >\n <EditorWrapper\n autofocus={autofocus}\n editor={editor}\n editorMode={editorMode}\n enableSubmitInPreview={enableSubmitInPreview}\n hidePreviewAfterSubmit={hidePreviewAfterSubmit}\n isFocused={isWrapperFocused(divRef)}\n markupHiddenActionsConfig={markupHiddenActionsConfig}\n markupToolbarConfig={markupToolbarConfig}\n qa=\"g-md-editor-mode\"\n ref={editorWrapperRef}\n settingsVisible={settingsVisible}\n showPreview={showPreview}\n stickyToolbar={stickyToolbar}\n toggleShowPreview={toggleShowPreview}\n toolbarsPreset={toolbarsPreset}\n unsetShowPreview={unsetShowPreview}\n wysiwygHiddenActionsConfig={wysiwygHiddenActionsConfig}\n wysiwygToolbarConfig={wysiwygToolbarConfig}\n />\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,7 +1,7 @@
1
1
  import type { QAProps } from '@gravity-ui/uikit';
2
2
  import { type ClassNameProps } from "../classname.js";
3
3
  import type { EditorInt } from "./Editor.js";
4
- import type { MToolbarData, MToolbarItemData } from "./toolbar/types.js";
4
+ import type { MToolbarData, MToolbarItemData, ToolbarDisplay } from "./toolbar/types.js";
5
5
  import type { MarkdownEditorSplitMode } from "./types.js";
6
6
  import "./MarkupEditorView.css";
7
7
  export type MarkupEditorViewProps = ClassNameProps & QAProps & {
@@ -16,5 +16,6 @@ export type MarkupEditorViewProps = ClassNameProps & QAProps & {
16
16
  splitModeEnabled: boolean;
17
17
  hiddenActionsConfig?: MToolbarItemData[];
18
18
  children?: React.ReactNode;
19
+ toolbarDisplay?: ToolbarDisplay;
19
20
  };
20
21
  export declare const MarkupEditorView: import("react").NamedExoticComponent<MarkupEditorViewProps>;
@@ -13,7 +13,7 @@ const context_1 = require("./toolbar/markup/context.js");
13
13
  require("./MarkupEditorView.css");
14
14
  const b = (0, classname_1.cn)('markup-editor');
15
15
  exports.MarkupEditorView = (0, react_1.memo)((props) => {
16
- const { editor, autofocus, settingsVisible, toolbarVisible, toolbarConfig, hiddenActionsConfig, qa, className, toolbarClassName, children, stickyToolbar = true, } = props;
16
+ const { editor, autofocus, settingsVisible, toolbarVisible, toolbarConfig, hiddenActionsConfig, qa, className, toolbarClassName, children, stickyToolbar = true, toolbarDisplay, } = props;
17
17
  (0, hooks_1.useRenderTime)((time) => {
18
18
  logger_1.globalLogger.metrics({
19
19
  component: 'markup-editor',
@@ -29,7 +29,7 @@ exports.MarkupEditorView = (0, react_1.memo)((props) => {
29
29
  return ((0, jsx_runtime_1.jsxs)("div", { className: b({ toolbar: toolbarVisible }, [className]), "data-qa": qa, children: [toolbarVisible ? ((0, jsx_runtime_1.jsx)(context_1.MarkupToolbarContextProvider, { value: {
30
30
  uploadHandler: editor.fileUploadHandler,
31
31
  needToSetDimensionsForUploadedImages: editor.needToSetDimensionsForUploadedImages,
32
- }, children: (0, jsx_runtime_1.jsx)(ToolbarView_1.ToolbarView, { qa: "g-md-toolbar-main", editor: editor, editorMode: "markup", toolbarEditor: editor, hiddenActionsConfig: hiddenActionsConfig, stickyToolbar: stickyToolbar, toolbarConfig: toolbarConfig, toolbarFocus: () => editor.focus(), settingsVisible: settingsVisible, className: b('toolbar', [toolbarClassName]), children: children }) })) : null, (0, jsx_runtime_1.jsx)(MarkupEditorComponent_1.MarkupEditorComponent, { autofocus: autofocus, editor: editor, className: b('editor', { 'toolbar-visible': toolbarVisible }), children: (0, jsx_runtime_1.jsx)(extensions_1.ReactRendererComponent, { storage: editor.renderStorage }) })] }));
32
+ }, children: (0, jsx_runtime_1.jsx)(ToolbarView_1.ToolbarView, { qa: "g-md-toolbar-main", editor: editor, editorMode: "markup", toolbarEditor: editor, hiddenActionsConfig: hiddenActionsConfig, stickyToolbar: stickyToolbar, toolbarConfig: toolbarConfig, toolbarFocus: () => editor.focus(), settingsVisible: settingsVisible, className: b('toolbar', [toolbarClassName]), toolbarDisplay: toolbarDisplay, children: children }) })) : null, (0, jsx_runtime_1.jsx)(MarkupEditorComponent_1.MarkupEditorComponent, { autofocus: autofocus, editor: editor, className: b('editor', { 'toolbar-visible': toolbarVisible }), children: (0, jsx_runtime_1.jsx)(extensions_1.ReactRendererComponent, { storage: editor.renderStorage }) })] }));
33
33
  });
34
34
  exports.MarkupEditorView.displayName = 'MarkdownMarkupEditorView';
35
35
  //# sourceMappingURL=MarkupEditorView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MarkupEditorView.js","sourceRoot":"../../../src","sources":["bundle/MarkupEditorView.tsx"],"names":[],"mappings":";;;;AAAA,iCAA2B;AAI3B,+CAAqD;AACrD,uDAAqD;AACrD,yCAAuC;AACvC,mDAAmD;AAGnD,sEAA8D;AAC9D,kDAA0C;AAC1C,yDAAsE;AAItE,kCAAiC;AAEjC,MAAM,CAAC,GAAG,IAAA,cAAE,EAAC,eAAe,CAAC,CAAC;AAiBjB,QAAA,gBAAgB,GAAG,IAAA,YAAI,EAAwB,CAAC,KAAK,EAAE,EAAE;IAClE,MAAM,EACF,MAAM,EACN,SAAS,EACT,eAAe,EACf,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,EAAE,EACF,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,aAAa,GAAG,IAAI,GACvB,GAAG,KAAK,CAAC;IACV,IAAA,qBAAa,EAAC,CAAC,IAAI,EAAE,EAAE;QACnB,qBAAY,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,iCAAK,SAAS,EAAE,CAAC,CAAC,EAAC,OAAO,EAAE,cAAc,EAAC,EAAE,CAAC,SAAS,CAAC,CAAC,aAAW,EAAE,aACjE,cAAc,CAAC,CAAC,CAAC,CACd,uBAAC,sCAA4B,IACzB,KAAK,EAAE;oBACH,aAAa,EAAE,MAAM,CAAC,iBAAiB;oBACvC,oCAAoC,EAChC,MAAM,CAAC,oCAAoC;iBAClD,YAED,uBAAC,yBAAW,IACR,EAAE,EAAC,mBAAmB,EACtB,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,uBAAC,6CAAqB,IAClB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAC,iBAAiB,EAAE,cAAc,EAAC,CAAC,YAE3D,uBAAC,mCAAsB,IAAC,OAAO,EAAE,MAAM,CAAC,aAAa,GAAI,GACrC,IACtB,CACT,CAAC;AACN,CAAC,CAAC,CAAC;AACH,wBAAgB,CAAC,WAAW,GAAG,0BAA0B,CAAC","sourcesContent":["import {memo} from 'react';\n\nimport type {QAProps} from '@gravity-ui/uikit';\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 QAProps & {\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 qa,\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])} data-qa={qa}>\n {toolbarVisible ? (\n <MarkupToolbarContextProvider\n value={{\n uploadHandler: editor.fileUploadHandler,\n needToSetDimensionsForUploadedImages:\n editor.needToSetDimensionsForUploadedImages,\n }}\n >\n <ToolbarView\n qa=\"g-md-toolbar-main\"\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,iCAA2B;AAI3B,+CAAqD;AACrD,uDAAqD;AACrD,yCAAuC;AACvC,mDAAmD;AAGnD,sEAA8D;AAC9D,kDAA0C;AAC1C,yDAAsE;AAItE,kCAAiC;AAEjC,MAAM,CAAC,GAAG,IAAA,cAAE,EAAC,eAAe,CAAC,CAAC;AAkBjB,QAAA,gBAAgB,GAAG,IAAA,YAAI,EAAwB,CAAC,KAAK,EAAE,EAAE;IAClE,MAAM,EACF,MAAM,EACN,SAAS,EACT,eAAe,EACf,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,EAAE,EACF,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,aAAa,GAAG,IAAI,EACpB,cAAc,GACjB,GAAG,KAAK,CAAC;IACV,IAAA,qBAAa,EAAC,CAAC,IAAI,EAAE,EAAE;QACnB,qBAAY,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,iCAAK,SAAS,EAAE,CAAC,CAAC,EAAC,OAAO,EAAE,cAAc,EAAC,EAAE,CAAC,SAAS,CAAC,CAAC,aAAW,EAAE,aACjE,cAAc,CAAC,CAAC,CAAC,CACd,uBAAC,sCAA4B,IACzB,KAAK,EAAE;oBACH,aAAa,EAAE,MAAM,CAAC,iBAAiB;oBACvC,oCAAoC,EAChC,MAAM,CAAC,oCAAoC;iBAClD,YAED,uBAAC,yBAAW,IACR,EAAE,EAAC,mBAAmB,EACtB,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,EAC3C,cAAc,EAAE,cAAc,YAE7B,QAAQ,GACC,GACa,CAClC,CAAC,CAAC,CAAC,IAAI,EACR,uBAAC,6CAAqB,IAClB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAC,iBAAiB,EAAE,cAAc,EAAC,CAAC,YAE3D,uBAAC,mCAAsB,IAAC,OAAO,EAAE,MAAM,CAAC,aAAa,GAAI,GACrC,IACtB,CACT,CAAC;AACN,CAAC,CAAC,CAAC;AACH,wBAAgB,CAAC,WAAW,GAAG,0BAA0B,CAAC","sourcesContent":["import {memo} from 'react';\n\nimport type {QAProps} from '@gravity-ui/uikit';\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, ToolbarDisplay} from './toolbar/types';\nimport type {MarkdownEditorSplitMode} from './types';\n\nimport './MarkupEditorView.scss';\n\nconst b = cn('markup-editor');\n\nexport type MarkupEditorViewProps = ClassNameProps &\n QAProps & {\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 toolbarDisplay?: ToolbarDisplay;\n };\n\nexport const MarkupEditorView = memo<MarkupEditorViewProps>((props) => {\n const {\n editor,\n autofocus,\n settingsVisible,\n toolbarVisible,\n toolbarConfig,\n hiddenActionsConfig,\n qa,\n className,\n toolbarClassName,\n children,\n stickyToolbar = true,\n toolbarDisplay,\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])} data-qa={qa}>\n {toolbarVisible ? (\n <MarkupToolbarContextProvider\n value={{\n uploadHandler: editor.fileUploadHandler,\n needToSetDimensionsForUploadedImages:\n editor.needToSetDimensionsForUploadedImages,\n }}\n >\n <ToolbarView\n qa=\"g-md-toolbar-main\"\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 toolbarDisplay={toolbarDisplay}\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,6 +1,6 @@
1
1
  import type { QAProps } from '@gravity-ui/uikit';
2
2
  import type { ClassNameProps } from "../classname.js";
3
- import { type ToolbarData, type ToolbarItemData } from "../toolbar/index.js";
3
+ import { type ToolbarData, type ToolbarDisplay, type ToolbarItemData } from "../toolbar/index.js";
4
4
  import type { EditorInt } from "./Editor.js";
5
5
  import type { MarkdownEditorMode } from "./types.js";
6
6
  export type ToolbarViewProps<T> = ClassNameProps & QAProps & {
@@ -13,5 +13,6 @@ export type ToolbarViewProps<T> = ClassNameProps & QAProps & {
13
13
  hiddenActionsConfig?: ToolbarItemData<T>[];
14
14
  children?: React.ReactNode;
15
15
  stickyToolbar: boolean;
16
+ toolbarDisplay?: ToolbarDisplay;
16
17
  };
17
- export declare function ToolbarView<T>({ editor, editorMode, toolbarEditor, toolbarFocus, toolbarConfig, hiddenActionsConfig, settingsVisible, className, children, stickyToolbar, qa, }: ToolbarViewProps<T>): JSX.Element;
18
+ export declare function ToolbarView<T>({ editor, editorMode, toolbarEditor, toolbarFocus, toolbarConfig, toolbarDisplay, hiddenActionsConfig, settingsVisible, className, children, stickyToolbar, qa, }: ToolbarViewProps<T>): JSX.Element;
@@ -8,7 +8,7 @@ const menubar_1 = require("../i18n/menubar/index.js");
8
8
  const useSticky_1 = require("../react-utils/useSticky.js");
9
9
  const toolbar_1 = require("../toolbar/index.js");
10
10
  const sticky_1 = require("./sticky/index.js");
11
- function ToolbarView({ editor, editorMode, toolbarEditor, toolbarFocus, toolbarConfig, hiddenActionsConfig, settingsVisible, className, children, stickyToolbar, qa, }) {
11
+ function ToolbarView({ editor, editorMode, toolbarEditor, toolbarFocus, toolbarConfig, toolbarDisplay, hiddenActionsConfig, settingsVisible, className, children, stickyToolbar, qa, }) {
12
12
  const rerender = (0, react_use_1.useUpdate)();
13
13
  (0, react_1.useLayoutEffect)(() => {
14
14
  editor.on('rerender-toolbar', rerender);
@@ -18,10 +18,11 @@ function ToolbarView({ editor, editorMode, toolbarEditor, toolbarFocus, toolbarC
18
18
  }, [editor, rerender]);
19
19
  const wrapperRef = (0, react_1.useRef)(null);
20
20
  const isStickyActive = (0, useSticky_1.useSticky)(wrapperRef) && stickyToolbar;
21
+ const mobile = editor.mobile;
21
22
  return ((0, jsx_runtime_1.jsxs)("div", { "data-qa": qa, ref: wrapperRef, className: sticky_1.stickyCn.toolbar({
22
23
  withSettings: settingsVisible,
23
24
  stickyActive: isStickyActive,
24
25
  isSticky: stickyToolbar,
25
- }, [className]), children: [(0, jsx_runtime_1.jsx)(toolbar_1.FlexToolbar, { data: toolbarConfig, hiddenActions: hiddenActionsConfig, editor: toolbarEditor, focus: toolbarFocus, dotsTitle: (0, menubar_1.i18n)('more_action'), onClick: (id, attrs) => editor.emit('toolbar-action', { id, attrs, editorMode }) }), children] }));
26
+ }, [className]), children: [(0, jsx_runtime_1.jsx)(toolbar_1.FlexToolbar, { data: toolbarConfig, hiddenActions: hiddenActionsConfig, editor: toolbarEditor, focus: toolbarFocus, dotsTitle: (0, menubar_1.i18n)('more_action'), onClick: (id, attrs) => editor.emit('toolbar-action', { id, attrs, editorMode }), display: toolbarDisplay, disableTooltip: mobile, disableHotkey: mobile, disablePreview: mobile }), children] }));
26
27
  }
27
28
  //# sourceMappingURL=ToolbarView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToolbarView.js","sourceRoot":"../../../src","sources":["bundle/ToolbarView.tsx"],"names":[],"mappings":";;AA2BA,kCAgDC;;AA3ED,iCAA8C;AAG9C,yCAAoC;AAGpC,sDAAqC;AACrC,2DAAmD;AACnD,iDAA+E;AAG/E,8CAAkC;AAgBlC,SAAgB,WAAW,CAAI,EAC3B,MAAM,EACN,UAAU,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,SAAS,EACT,QAAQ,EACR,aAAa,EACb,EAAE,GACgB;IAClB,MAAM,QAAQ,GAAG,IAAA,qBAAS,GAAE,CAAC;IAC7B,IAAA,uBAAe,EAAC,GAAG,EAAE;QACjB,MAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QACxC,OAAO,GAAG,EAAE;YACR,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEvB,MAAM,UAAU,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,IAAA,qBAAS,EAAC,UAAU,CAAC,IAAI,aAAa,CAAC;IAE9D,OAAO,CACH,4CACa,EAAE,EACX,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,iBAAQ,CAAC,OAAO,CACvB;YACI,YAAY,EAAE,eAAe;YAC7B,YAAY,EAAE,cAAc;YAC5B,QAAQ,EAAE,aAAa;SAC1B,EACD,CAAC,SAAS,CAAC,CACd,aAED,uBAAC,qBAAW,IACR,IAAI,EAAE,aAAa,EACnB,aAAa,EAAE,mBAAmB,EAClC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,IAAA,cAAI,EAAC,aAAa,CAAC,EAC9B,OAAO,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAC,CAAC,GAChF,EACD,QAAQ,IACP,CACT,CAAC;AACN,CAAC","sourcesContent":["import {useLayoutEffect, useRef} from 'react';\n\nimport type {QAProps} from '@gravity-ui/uikit';\nimport {useUpdate} from 'react-use';\n\nimport type {ClassNameProps} from '../classname';\nimport {i18n} from '../i18n/menubar';\nimport {useSticky} from '../react-utils/useSticky';\nimport {FlexToolbar, type ToolbarData, type ToolbarItemData} from '../toolbar';\n\nimport type {EditorInt} from './Editor';\nimport {stickyCn} from './sticky';\nimport type {MarkdownEditorMode} from './types';\n\nexport type ToolbarViewProps<T> = ClassNameProps &\n QAProps & {\n editor: EditorInt;\n editorMode: MarkdownEditorMode;\n toolbarEditor: T;\n toolbarFocus: () => void;\n toolbarConfig: ToolbarData<T>;\n settingsVisible?: boolean;\n hiddenActionsConfig?: ToolbarItemData<T>[];\n children?: React.ReactNode;\n stickyToolbar: boolean;\n };\n\nexport function ToolbarView<T>({\n editor,\n editorMode,\n toolbarEditor,\n toolbarFocus,\n toolbarConfig,\n hiddenActionsConfig,\n settingsVisible,\n className,\n children,\n stickyToolbar,\n qa,\n}: ToolbarViewProps<T>) {\n const rerender = useUpdate();\n useLayoutEffect(() => {\n editor.on('rerender-toolbar', rerender);\n return () => {\n editor.off('rerender-toolbar', rerender);\n };\n }, [editor, rerender]);\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const isStickyActive = useSticky(wrapperRef) && stickyToolbar;\n\n return (\n <div\n data-qa={qa}\n ref={wrapperRef}\n className={stickyCn.toolbar(\n {\n withSettings: settingsVisible,\n stickyActive: isStickyActive,\n isSticky: stickyToolbar,\n },\n [className],\n )}\n >\n <FlexToolbar\n data={toolbarConfig}\n hiddenActions={hiddenActionsConfig}\n editor={toolbarEditor}\n focus={toolbarFocus}\n dotsTitle={i18n('more_action')}\n onClick={(id, attrs) => editor.emit('toolbar-action', {id, attrs, editorMode})}\n />\n {children}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"ToolbarView.js","sourceRoot":"../../../src","sources":["bundle/ToolbarView.tsx"],"names":[],"mappings":";;AA4BA,kCAuDC;;AAnFD,iCAA8C;AAG9C,yCAAoC;AAGpC,sDAAqC;AACrC,2DAAmD;AACnD,iDAAoG;AAGpG,8CAAkC;AAiBlC,SAAgB,WAAW,CAAI,EAC3B,MAAM,EACN,UAAU,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,SAAS,EACT,QAAQ,EACR,aAAa,EACb,EAAE,GACgB;IAClB,MAAM,QAAQ,GAAG,IAAA,qBAAS,GAAE,CAAC;IAC7B,IAAA,uBAAe,EAAC,GAAG,EAAE;QACjB,MAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QACxC,OAAO,GAAG,EAAE;YACR,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEvB,MAAM,UAAU,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,IAAA,qBAAS,EAAC,UAAU,CAAC,IAAI,aAAa,CAAC;IAE9D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAE7B,OAAO,CACH,4CACa,EAAE,EACX,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,iBAAQ,CAAC,OAAO,CACvB;YACI,YAAY,EAAE,eAAe;YAC7B,YAAY,EAAE,cAAc;YAC5B,QAAQ,EAAE,aAAa;SAC1B,EACD,CAAC,SAAS,CAAC,CACd,aAED,uBAAC,qBAAW,IACR,IAAI,EAAE,aAAa,EACnB,aAAa,EAAE,mBAAmB,EAClC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,IAAA,cAAI,EAAC,aAAa,CAAC,EAC9B,OAAO,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAC,CAAC,EAC9E,OAAO,EAAE,cAAc,EACvB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACxB,EACD,QAAQ,IACP,CACT,CAAC;AACN,CAAC","sourcesContent":["import {useLayoutEffect, useRef} from 'react';\n\nimport type {QAProps} from '@gravity-ui/uikit';\nimport {useUpdate} from 'react-use';\n\nimport type {ClassNameProps} from '../classname';\nimport {i18n} from '../i18n/menubar';\nimport {useSticky} from '../react-utils/useSticky';\nimport {FlexToolbar, type ToolbarData, type ToolbarDisplay, type ToolbarItemData} from '../toolbar';\n\nimport type {EditorInt} from './Editor';\nimport {stickyCn} from './sticky';\nimport type {MarkdownEditorMode} from './types';\n\nexport type ToolbarViewProps<T> = ClassNameProps &\n QAProps & {\n editor: EditorInt;\n editorMode: MarkdownEditorMode;\n toolbarEditor: T;\n toolbarFocus: () => void;\n toolbarConfig: ToolbarData<T>;\n settingsVisible?: boolean;\n hiddenActionsConfig?: ToolbarItemData<T>[];\n children?: React.ReactNode;\n stickyToolbar: boolean;\n toolbarDisplay?: ToolbarDisplay;\n };\n\nexport function ToolbarView<T>({\n editor,\n editorMode,\n toolbarEditor,\n toolbarFocus,\n toolbarConfig,\n toolbarDisplay,\n hiddenActionsConfig,\n settingsVisible,\n className,\n children,\n stickyToolbar,\n qa,\n}: ToolbarViewProps<T>) {\n const rerender = useUpdate();\n useLayoutEffect(() => {\n editor.on('rerender-toolbar', rerender);\n return () => {\n editor.off('rerender-toolbar', rerender);\n };\n }, [editor, rerender]);\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const isStickyActive = useSticky(wrapperRef) && stickyToolbar;\n\n const mobile = editor.mobile;\n\n return (\n <div\n data-qa={qa}\n ref={wrapperRef}\n className={stickyCn.toolbar(\n {\n withSettings: settingsVisible,\n stickyActive: isStickyActive,\n isSticky: stickyToolbar,\n },\n [className],\n )}\n >\n <FlexToolbar\n data={toolbarConfig}\n hiddenActions={hiddenActionsConfig}\n editor={toolbarEditor}\n focus={toolbarFocus}\n dotsTitle={i18n('more_action')}\n onClick={(id, attrs) => editor.emit('toolbar-action', {id, attrs, editorMode})}\n display={toolbarDisplay}\n disableTooltip={mobile}\n disableHotkey={mobile}\n disablePreview={mobile}\n />\n {children}\n </div>\n );\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import type { QAProps } from '@gravity-ui/uikit';
2
2
  import { type ClassNameProps } from "../classname.js";
3
3
  import type { EditorInt } from "./Editor.js";
4
- import type { WToolbarData, WToolbarItemData } from "./toolbar/types.js";
4
+ import type { ToolbarDisplay, WToolbarData, WToolbarItemData } from "./toolbar/types.js";
5
5
  import "./WysiwygEditorView.css";
6
6
  export type WysiwygEditorViewProps = ClassNameProps & QAProps & {
7
7
  editor: EditorInt;
@@ -13,5 +13,6 @@ export type WysiwygEditorViewProps = ClassNameProps & QAProps & {
13
13
  toolbarClassName?: string;
14
14
  hiddenActionsConfig?: WToolbarItemData[];
15
15
  children?: React.ReactNode;
16
+ toolbarDisplay?: ToolbarDisplay;
16
17
  };
17
18
  export declare const WysiwygEditorView: import("react").NamedExoticComponent<WysiwygEditorViewProps>;
@@ -12,7 +12,7 @@ const WysiwygEditorComponent_1 = require("./WysiwygEditorComponent.js");
12
12
  require("./WysiwygEditorView.css");
13
13
  const b = (0, classname_1.cn)('wysiwyg-editor');
14
14
  exports.WysiwygEditorView = (0, react_1.memo)((props) => {
15
- const { editor, autofocus, settingsVisible, toolbarVisible, toolbarConfig, hiddenActionsConfig, qa, className, toolbarClassName, children, stickyToolbar = true, } = props;
15
+ const { editor, autofocus, settingsVisible, toolbarVisible, toolbarConfig, hiddenActionsConfig, qa, className, toolbarClassName, children, stickyToolbar = true, toolbarDisplay, } = props;
16
16
  (0, hooks_1.useRenderTime)((time) => {
17
17
  logger_1.globalLogger.metrics({
18
18
  component: 'wysiwyg-editor',
@@ -25,7 +25,7 @@ exports.WysiwygEditorView = (0, react_1.memo)((props) => {
25
25
  duration: time,
26
26
  });
27
27
  });
28
- return ((0, jsx_runtime_1.jsxs)("div", { className: b({ toolbar: toolbarVisible }, [className]), "data-qa": qa, children: [toolbarVisible ? ((0, jsx_runtime_1.jsx)(ToolbarView_1.ToolbarView, { qa: "g-md-toolbar-main", editor: editor, editorMode: "wysiwyg", toolbarEditor: editor, stickyToolbar: stickyToolbar, toolbarConfig: toolbarConfig, toolbarFocus: () => editor.focus(), hiddenActionsConfig: hiddenActionsConfig, settingsVisible: settingsVisible, className: b('toolbar', [toolbarClassName]), children: children })) : null, (0, jsx_runtime_1.jsx)(WysiwygEditorComponent_1.WysiwygEditorComponent, { autofocus: autofocus, editor: editor, className: b('editor'), children: (0, jsx_runtime_1.jsx)(extensions_1.ReactRendererComponent, { storage: editor.renderStorage }) })] }));
28
+ return ((0, jsx_runtime_1.jsxs)("div", { className: b({ toolbar: toolbarVisible }, [className]), "data-qa": qa, children: [toolbarVisible ? ((0, jsx_runtime_1.jsx)(ToolbarView_1.ToolbarView, { qa: "g-md-toolbar-main", editor: editor, editorMode: "wysiwyg", toolbarEditor: editor, stickyToolbar: stickyToolbar, toolbarConfig: toolbarConfig, toolbarFocus: () => editor.focus(), hiddenActionsConfig: hiddenActionsConfig, settingsVisible: settingsVisible, className: b('toolbar', [toolbarClassName]), toolbarDisplay: toolbarDisplay, children: children })) : null, (0, jsx_runtime_1.jsx)(WysiwygEditorComponent_1.WysiwygEditorComponent, { autofocus: autofocus, editor: editor, className: b('editor'), children: (0, jsx_runtime_1.jsx)(extensions_1.ReactRendererComponent, { storage: editor.renderStorage }) })] }));
29
29
  });
30
30
  exports.WysiwygEditorView.displayName = 'MarkdownWysiwgEditorView';
31
31
  //# sourceMappingURL=WysiwygEditorView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WysiwygEditorView.js","sourceRoot":"../../../src","sources":["bundle/WysiwygEditorView.tsx"],"names":[],"mappings":";;;;AAAA,iCAA2B;AAI3B,+CAAqD;AACrD,uDAAqD;AACrD,yCAAuC;AACvC,mDAAmD;AAGnD,kDAA0C;AAC1C,wEAAgE;AAGhE,mCAAkC;AAElC,MAAM,CAAC,GAAG,IAAA,cAAE,EAAC,gBAAgB,CAAC,CAAC;AAelB,QAAA,iBAAiB,GAAG,IAAA,YAAI,EAAyB,CAAC,KAAK,EAAE,EAAE;IACpE,MAAM,EACF,MAAM,EACN,SAAS,EACT,eAAe,EACf,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,EAAE,EACF,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,aAAa,GAAG,IAAI,GACvB,GAAG,KAAK,CAAC;IACV,IAAA,qBAAa,EAAC,CAAC,IAAI,EAAE,EAAE;QACnB,qBAAY,CAAC,OAAO,CAAC;YACjB,SAAS,EAAE,gBAAgB;YAC3B,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YAClB,SAAS,EAAE,gBAAgB;YAC3B,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,OAAO,CACH,iCAAK,SAAS,EAAE,CAAC,CAAC,EAAC,OAAO,EAAE,cAAc,EAAC,EAAE,CAAC,SAAS,CAAC,CAAC,aAAW,EAAE,aACjE,cAAc,CAAC,CAAC,CAAC,CACd,uBAAC,yBAAW,IACR,EAAE,EAAC,mBAAmB,EACtB,MAAM,EAAE,MAAM,EACd,UAAU,EAAC,SAAS,EACpB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAClC,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,gBAAgB,CAAC,CAAC,YAE1C,QAAQ,GACC,CACjB,CAAC,CAAC,CAAC,IAAI,EACR,uBAAC,+CAAsB,IAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,YAChF,uBAAC,mCAAsB,IAAC,OAAO,EAAE,MAAM,CAAC,aAAa,GAAI,GACpC,IACvB,CACT,CAAC;AACN,CAAC,CAAC,CAAC;AACH,yBAAiB,CAAC,WAAW,GAAG,0BAA0B,CAAC","sourcesContent":["import {memo} from 'react';\n\nimport type {QAProps} from '@gravity-ui/uikit';\n\nimport {type ClassNameProps, cn} from '../classname';\nimport {ReactRendererComponent} from '../extensions';\nimport {globalLogger} from '../logger';\nimport {useRenderTime} from '../react-utils/hooks';\n\nimport type {EditorInt} from './Editor';\nimport {ToolbarView} from './ToolbarView';\nimport {WysiwygEditorComponent} from './WysiwygEditorComponent';\nimport type {WToolbarData, WToolbarItemData} from './toolbar/types';\n\nimport './WysiwygEditorView.scss';\n\nconst b = cn('wysiwyg-editor');\n\nexport type WysiwygEditorViewProps = ClassNameProps &\n QAProps & {\n editor: EditorInt;\n autofocus?: boolean;\n settingsVisible?: boolean;\n toolbarConfig: WToolbarData;\n toolbarVisible?: boolean;\n stickyToolbar?: boolean;\n toolbarClassName?: string;\n hiddenActionsConfig?: WToolbarItemData[];\n children?: React.ReactNode;\n };\n\nexport const WysiwygEditorView = memo<WysiwygEditorViewProps>((props) => {\n const {\n editor,\n autofocus,\n settingsVisible,\n toolbarVisible,\n toolbarConfig,\n hiddenActionsConfig,\n qa,\n className,\n toolbarClassName,\n children,\n stickyToolbar = true,\n } = props;\n useRenderTime((time) => {\n globalLogger.metrics({\n component: 'wysiwyg-editor',\n event: 'render',\n duration: time,\n });\n editor.logger.metrics({\n component: 'wysiwyg-editor',\n event: 'render',\n duration: time,\n });\n });\n return (\n <div className={b({toolbar: toolbarVisible}, [className])} data-qa={qa}>\n {toolbarVisible ? (\n <ToolbarView\n qa=\"g-md-toolbar-main\"\n editor={editor}\n editorMode=\"wysiwyg\"\n toolbarEditor={editor}\n stickyToolbar={stickyToolbar}\n toolbarConfig={toolbarConfig}\n toolbarFocus={() => editor.focus()}\n hiddenActionsConfig={hiddenActionsConfig}\n settingsVisible={settingsVisible}\n className={b('toolbar', [toolbarClassName])}\n >\n {children}\n </ToolbarView>\n ) : null}\n <WysiwygEditorComponent autofocus={autofocus} editor={editor} className={b('editor')}>\n <ReactRendererComponent storage={editor.renderStorage} />\n </WysiwygEditorComponent>\n </div>\n );\n});\nWysiwygEditorView.displayName = 'MarkdownWysiwgEditorView';\n"]}
1
+ {"version":3,"file":"WysiwygEditorView.js","sourceRoot":"../../../src","sources":["bundle/WysiwygEditorView.tsx"],"names":[],"mappings":";;;;AAAA,iCAA2B;AAI3B,+CAAqD;AACrD,uDAAqD;AACrD,yCAAuC;AACvC,mDAAmD;AAGnD,kDAA0C;AAC1C,wEAAgE;AAGhE,mCAAkC;AAElC,MAAM,CAAC,GAAG,IAAA,cAAE,EAAC,gBAAgB,CAAC,CAAC;AAgBlB,QAAA,iBAAiB,GAAG,IAAA,YAAI,EAAyB,CAAC,KAAK,EAAE,EAAE;IACpE,MAAM,EACF,MAAM,EACN,SAAS,EACT,eAAe,EACf,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,EAAE,EACF,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,aAAa,GAAG,IAAI,EACpB,cAAc,GACjB,GAAG,KAAK,CAAC;IAEV,IAAA,qBAAa,EAAC,CAAC,IAAI,EAAE,EAAE;QACnB,qBAAY,CAAC,OAAO,CAAC;YACjB,SAAS,EAAE,gBAAgB;YAC3B,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YAClB,SAAS,EAAE,gBAAgB;YAC3B,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,OAAO,CACH,iCAAK,SAAS,EAAE,CAAC,CAAC,EAAC,OAAO,EAAE,cAAc,EAAC,EAAE,CAAC,SAAS,CAAC,CAAC,aAAW,EAAE,aACjE,cAAc,CAAC,CAAC,CAAC,CACd,uBAAC,yBAAW,IACR,EAAE,EAAC,mBAAmB,EACtB,MAAM,EAAE,MAAM,EACd,UAAU,EAAC,SAAS,EACpB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAClC,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAC3C,cAAc,EAAE,cAAc,YAE7B,QAAQ,GACC,CACjB,CAAC,CAAC,CAAC,IAAI,EACR,uBAAC,+CAAsB,IAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,YAChF,uBAAC,mCAAsB,IAAC,OAAO,EAAE,MAAM,CAAC,aAAa,GAAI,GACpC,IACvB,CACT,CAAC;AACN,CAAC,CAAC,CAAC;AACH,yBAAiB,CAAC,WAAW,GAAG,0BAA0B,CAAC","sourcesContent":["import {memo} from 'react';\n\nimport type {QAProps} from '@gravity-ui/uikit';\n\nimport {type ClassNameProps, cn} from '../classname';\nimport {ReactRendererComponent} from '../extensions';\nimport {globalLogger} from '../logger';\nimport {useRenderTime} from '../react-utils/hooks';\n\nimport type {EditorInt} from './Editor';\nimport {ToolbarView} from './ToolbarView';\nimport {WysiwygEditorComponent} from './WysiwygEditorComponent';\nimport type {ToolbarDisplay, WToolbarData, WToolbarItemData} from './toolbar/types';\n\nimport './WysiwygEditorView.scss';\n\nconst b = cn('wysiwyg-editor');\n\nexport type WysiwygEditorViewProps = ClassNameProps &\n QAProps & {\n editor: EditorInt;\n autofocus?: boolean;\n settingsVisible?: boolean;\n toolbarConfig: WToolbarData;\n toolbarVisible?: boolean;\n stickyToolbar?: boolean;\n toolbarClassName?: string;\n hiddenActionsConfig?: WToolbarItemData[];\n children?: React.ReactNode;\n toolbarDisplay?: ToolbarDisplay;\n };\n\nexport const WysiwygEditorView = memo<WysiwygEditorViewProps>((props) => {\n const {\n editor,\n autofocus,\n settingsVisible,\n toolbarVisible,\n toolbarConfig,\n hiddenActionsConfig,\n qa,\n className,\n toolbarClassName,\n children,\n stickyToolbar = true,\n toolbarDisplay,\n } = props;\n\n useRenderTime((time) => {\n globalLogger.metrics({\n component: 'wysiwyg-editor',\n event: 'render',\n duration: time,\n });\n editor.logger.metrics({\n component: 'wysiwyg-editor',\n event: 'render',\n duration: time,\n });\n });\n\n return (\n <div className={b({toolbar: toolbarVisible}, [className])} data-qa={qa}>\n {toolbarVisible ? (\n <ToolbarView\n qa=\"g-md-toolbar-main\"\n editor={editor}\n editorMode=\"wysiwyg\"\n toolbarEditor={editor}\n stickyToolbar={stickyToolbar}\n toolbarConfig={toolbarConfig}\n toolbarFocus={() => editor.focus()}\n hiddenActionsConfig={hiddenActionsConfig}\n settingsVisible={settingsVisible}\n className={b('toolbar', [toolbarClassName])}\n toolbarDisplay={toolbarDisplay}\n >\n {children}\n </ToolbarView>\n ) : null}\n <WysiwygEditorComponent autofocus={autofocus} editor={editor} className={b('editor')}>\n <ReactRendererComponent storage={editor.renderStorage} />\n </WysiwygEditorComponent>\n </div>\n );\n});\nWysiwygEditorView.displayName = 'MarkdownWysiwgEditorView';\n"]}