@gravity-ui/markdown-editor 15.27.2 → 15.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/build/cjs/bundle/Editor.js.map +1 -1
- package/build/cjs/bundle/HorizontalDrag.js +3 -3
- package/build/cjs/bundle/HorizontalDrag.js.map +1 -1
- package/build/cjs/bundle/settings/index.js +1 -1
- package/build/cjs/bundle/settings/index.js.map +1 -1
- package/build/cjs/bundle/toolbar/utils/toolbarsConfigs.js +8 -8
- package/build/cjs/bundle/toolbar/utils/toolbarsConfigs.js.map +1 -1
- package/build/cjs/bundle/types.d.ts +8 -11
- package/build/cjs/bundle/types.js.map +1 -1
- package/build/cjs/bundle/wysiwyg-preset.d.ts +0 -1
- package/build/cjs/bundle/wysiwyg-preset.js +1 -1
- package/build/cjs/bundle/wysiwyg-preset.js.map +1 -1
- package/build/cjs/core/Editor.js.map +1 -1
- package/build/cjs/core/ExtensionBuilder.d.ts +0 -2
- package/build/cjs/core/ExtensionBuilder.js +1 -1
- package/build/cjs/core/ExtensionBuilder.js.map +1 -1
- package/build/cjs/core/markdown/MarkdownParser.d.ts +2 -3
- package/build/cjs/core/markdown/MarkdownParser.js.map +1 -1
- package/build/cjs/core/types/extension.js.map +1 -1
- package/build/cjs/core/types/parser.d.ts +3 -2
- package/build/cjs/core/types/parser.js.map +1 -1
- package/build/cjs/extensions/additional/GPT/gptExtension/view.js +1 -3
- package/build/cjs/extensions/additional/GPT/gptExtension/view.js.map +1 -1
- package/build/cjs/extensions/additional/Mermaid/MermaidSpecs/index.js +0 -1
- package/build/cjs/extensions/additional/Mermaid/MermaidSpecs/index.js.map +1 -1
- package/build/cjs/extensions/additional/YfmHtmlBlock/YfmHtmlBlockNodeView/YfmHtmlBlockView.js +1 -1
- package/build/cjs/extensions/additional/YfmHtmlBlock/YfmHtmlBlockNodeView/YfmHtmlBlockView.js.map +1 -1
- package/build/cjs/extensions/additional/YfmHtmlBlock/YfmHtmlBlockSpecs/index.js.map +1 -1
- package/build/cjs/extensions/additional/YfmHtmlBlock/index.js.map +1 -1
- package/build/cjs/extensions/behavior/Autocomplete/types.js.map +1 -1
- package/build/cjs/extensions/behavior/SelectionContext/index.d.ts +0 -2
- package/build/cjs/extensions/behavior/SelectionContext/index.js.map +1 -1
- package/build/cjs/extensions/behavior/SelectionContext/tooltip.js.map +1 -1
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +3 -1
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
- package/build/cjs/extensions/markdown/CodeBlock/handle-paste.d.ts +20 -0
- package/build/cjs/extensions/markdown/CodeBlock/handle-paste.js +80 -23
- package/build/cjs/extensions/markdown/CodeBlock/handle-paste.js.map +1 -1
- package/build/cjs/extensions/markdown/Deflist/DeflistSpecs/index.d.ts +2 -2
- package/build/cjs/extensions/markdown/Deflist/DeflistSpecs/index.js.map +1 -1
- package/build/cjs/extensions/markdown/Heading/HeadingSpecs/index.d.ts +1 -1
- package/build/cjs/extensions/markdown/Heading/HeadingSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/Checkbox/CheckboxSpecs/index.d.ts +1 -1
- package/build/cjs/extensions/yfm/Checkbox/CheckboxSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/index.d.ts +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/index.d.ts +0 -1
- package/build/cjs/extensions/yfm/ImgSize/index.js.map +1 -1
- package/build/cjs/extensions/yfm/Video/VideoSpecs/md-video.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/schema.d.ts +2 -2
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/schema.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmNote/YfmNoteSpecs/index.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmNote/YfmNoteSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/index.d.ts +0 -2
- package/build/cjs/extensions/yfm/YfmTable/index.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.js +3 -4
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js +0 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js.map +1 -1
- package/build/cjs/i18n/bundle/en.json +2 -1
- package/build/cjs/i18n/bundle/index.d.ts +3 -2
- package/build/cjs/i18n/bundle/ru.json +2 -1
- package/build/cjs/i18n/common/en.json +2 -1
- package/build/cjs/i18n/common/index.d.ts +2 -1
- package/build/cjs/i18n/common/ru.json +2 -1
- package/build/cjs/logger.d.ts +0 -1
- package/build/cjs/logger.js +0 -1
- package/build/cjs/logger.js.map +1 -1
- package/build/cjs/shortcuts/default.js +0 -2
- package/build/cjs/shortcuts/default.js.map +1 -1
- package/build/cjs/table-utils/commands/removeRow.js +1 -2
- package/build/cjs/table-utils/commands/removeRow.js.map +1 -1
- package/build/cjs/toolbar/types.d.ts +2 -3
- package/build/cjs/toolbar/types.js.map +1 -1
- package/build/cjs/types/spec.d.ts +0 -1
- package/build/cjs/types/spec.js.map +1 -1
- package/build/cjs/utils/ecapeRegexp.d.ts +1 -2
- package/build/cjs/utils/ecapeRegexp.js +1 -2
- package/build/cjs/utils/ecapeRegexp.js.map +1 -1
- package/build/cjs/utils/inputrules.js +2 -2
- package/build/cjs/utils/inputrules.js.map +1 -1
- package/build/cjs/version.js +1 -1
- package/build/cjs/version.js.map +1 -1
- package/build/cjs/view/hooks/useFilesGallery/constants.d.ts +5 -0
- package/build/cjs/view/hooks/useFilesGallery/constants.js +10 -2
- package/build/cjs/view/hooks/useFilesGallery/constants.js.map +1 -1
- package/build/cjs/view/hooks/useFilesGallery/helpers.d.ts +8 -0
- package/build/cjs/view/hooks/useFilesGallery/helpers.js +28 -0
- package/build/cjs/view/hooks/useFilesGallery/helpers.js.map +1 -0
- package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.d.ts +0 -1
- package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.js +19 -22
- package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.js.map +1 -1
- package/build/esm/bundle/Editor.js.map +1 -1
- package/build/esm/bundle/HorizontalDrag.js +3 -3
- package/build/esm/bundle/HorizontalDrag.js.map +1 -1
- package/build/esm/bundle/settings/index.js +1 -1
- package/build/esm/bundle/settings/index.js.map +1 -1
- package/build/esm/bundle/toolbar/utils/toolbarsConfigs.js +8 -8
- package/build/esm/bundle/toolbar/utils/toolbarsConfigs.js.map +1 -1
- package/build/esm/bundle/types.d.ts +8 -11
- package/build/esm/bundle/types.js.map +1 -1
- package/build/esm/bundle/wysiwyg-preset.d.ts +0 -1
- package/build/esm/bundle/wysiwyg-preset.js +1 -1
- package/build/esm/bundle/wysiwyg-preset.js.map +1 -1
- package/build/esm/core/Editor.js.map +1 -1
- package/build/esm/core/ExtensionBuilder.d.ts +0 -2
- package/build/esm/core/ExtensionBuilder.js +1 -1
- package/build/esm/core/ExtensionBuilder.js.map +1 -1
- package/build/esm/core/markdown/MarkdownParser.d.ts +2 -3
- package/build/esm/core/markdown/MarkdownParser.js.map +1 -1
- package/build/esm/core/types/extension.js.map +1 -1
- package/build/esm/core/types/parser.d.ts +3 -2
- package/build/esm/core/types/parser.js.map +1 -1
- package/build/esm/extensions/additional/GPT/gptExtension/view.js +1 -3
- package/build/esm/extensions/additional/GPT/gptExtension/view.js.map +1 -1
- package/build/esm/extensions/additional/Mermaid/MermaidSpecs/index.js +0 -1
- package/build/esm/extensions/additional/Mermaid/MermaidSpecs/index.js.map +1 -1
- package/build/esm/extensions/additional/YfmHtmlBlock/YfmHtmlBlockNodeView/YfmHtmlBlockView.js +1 -1
- package/build/esm/extensions/additional/YfmHtmlBlock/YfmHtmlBlockNodeView/YfmHtmlBlockView.js.map +1 -1
- package/build/esm/extensions/additional/YfmHtmlBlock/YfmHtmlBlockSpecs/index.js.map +1 -1
- package/build/esm/extensions/additional/YfmHtmlBlock/index.js.map +1 -1
- package/build/esm/extensions/behavior/Autocomplete/types.js.map +1 -1
- package/build/esm/extensions/behavior/SelectionContext/index.d.ts +0 -2
- package/build/esm/extensions/behavior/SelectionContext/index.js.map +1 -1
- package/build/esm/extensions/behavior/SelectionContext/tooltip.js.map +1 -1
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +3 -1
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
- package/build/esm/extensions/markdown/CodeBlock/handle-paste.d.ts +20 -0
- package/build/esm/extensions/markdown/CodeBlock/handle-paste.js +78 -24
- package/build/esm/extensions/markdown/CodeBlock/handle-paste.js.map +1 -1
- package/build/esm/extensions/markdown/Deflist/DeflistSpecs/index.d.ts +2 -2
- package/build/esm/extensions/markdown/Deflist/DeflistSpecs/index.js.map +1 -1
- package/build/esm/extensions/markdown/Heading/HeadingSpecs/index.d.ts +1 -1
- package/build/esm/extensions/markdown/Heading/HeadingSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/Checkbox/CheckboxSpecs/index.d.ts +1 -1
- package/build/esm/extensions/yfm/Checkbox/CheckboxSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/index.d.ts +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/index.d.ts +0 -1
- package/build/esm/extensions/yfm/ImgSize/index.js.map +1 -1
- package/build/esm/extensions/yfm/Video/VideoSpecs/md-video.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/schema.d.ts +2 -2
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/schema.js.map +1 -1
- package/build/esm/extensions/yfm/YfmNote/YfmNoteSpecs/index.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmNote/YfmNoteSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/index.d.ts +0 -2
- package/build/esm/extensions/yfm/YfmTable/index.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.js +1 -2
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js +0 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js.map +1 -1
- package/build/esm/i18n/bundle/en.json +2 -1
- package/build/esm/i18n/bundle/index.d.ts +3 -2
- package/build/esm/i18n/bundle/ru.json +2 -1
- package/build/esm/i18n/common/en.json +2 -1
- package/build/esm/i18n/common/index.d.ts +2 -1
- package/build/esm/i18n/common/ru.json +2 -1
- package/build/esm/logger.d.ts +0 -1
- package/build/esm/logger.js +0 -1
- package/build/esm/logger.js.map +1 -1
- package/build/esm/shortcuts/default.js +0 -2
- package/build/esm/shortcuts/default.js.map +1 -1
- package/build/esm/table-utils/commands/removeRow.js +1 -2
- package/build/esm/table-utils/commands/removeRow.js.map +1 -1
- package/build/esm/toolbar/types.d.ts +2 -3
- package/build/esm/toolbar/types.js.map +1 -1
- package/build/esm/types/spec.d.ts +0 -1
- package/build/esm/types/spec.js.map +1 -1
- package/build/esm/utils/ecapeRegexp.d.ts +1 -2
- package/build/esm/utils/ecapeRegexp.js +1 -2
- package/build/esm/utils/ecapeRegexp.js.map +1 -1
- package/build/esm/utils/inputrules.js +2 -2
- package/build/esm/utils/inputrules.js.map +1 -1
- package/build/esm/version.js +1 -1
- package/build/esm/version.js.map +1 -1
- package/build/esm/view/hooks/useFilesGallery/constants.d.ts +5 -0
- package/build/esm/view/hooks/useFilesGallery/constants.js +9 -1
- package/build/esm/view/hooks/useFilesGallery/constants.js.map +1 -1
- package/build/esm/view/hooks/useFilesGallery/helpers.d.ts +8 -0
- package/build/esm/view/hooks/useFilesGallery/helpers.js +25 -0
- package/build/esm/view/hooks/useFilesGallery/helpers.js.map +1 -0
- package/build/esm/view/hooks/useFilesGallery/useFilesGallery.d.ts +0 -1
- package/build/esm/view/hooks/useFilesGallery/useFilesGallery.js +19 -21
- package/build/esm/view/hooks/useFilesGallery/useFilesGallery.js.map +1 -1
- package/package.json +73 -49
|
@@ -48,7 +48,7 @@ export const BundlePreset = (builder, opts) => {
|
|
|
48
48
|
return null;
|
|
49
49
|
return typeof value === 'function'
|
|
50
50
|
? value()
|
|
51
|
-
: value ?? i18nPlaceholder(opts.mobile ? 'doc_empty_mobile' : 'doc_empty');
|
|
51
|
+
: (value ?? i18nPlaceholder(opts.mobile ? 'doc_empty_mobile' : 'doc_empty'));
|
|
52
52
|
},
|
|
53
53
|
preserveEmptyRows: opts.preserveEmptyRows,
|
|
54
54
|
...opts.baseSchema,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wysiwyg-preset.js","sourceRoot":"../../../src","sources":["bundle/wysiwyg-preset.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Node} from 'prosemirror-model';\n\nimport type {ExtensionAuto} from '../core';\nimport {BehaviorPreset, type BehaviorPresetOptions} from '../extensions/behavior';\nimport {\n EditorModeKeymap,\n type EditorModeKeymapOptions,\n} from '../extensions/behavior/EditorModeKeymap';\nimport {BaseNode, YfmHeadingAttr, YfmNoteNode} from '../extensions/specs';\nimport {i18n as i18nPlaceholder} from '../i18n/placeholder';\nimport {CommonMarkPreset, type CommonMarkPresetOptions} from '../presets/commonmark';\nimport {DefaultPreset, type DefaultPresetOptions} from '../presets/default';\nimport {FullPreset, type FullPresetOptions} from '../presets/full';\nimport {YfmPreset, type YfmPresetOptions} from '../presets/yfm';\nimport {ZeroPreset, type ZeroPresetOptions} from '../presets/zero';\nimport {Action as A, formatter as f} from '../shortcuts';\nimport type {DirectiveSyntaxContext} from '../utils/directive';\nimport type {FileUploadHandler} from '../utils/upload';\n\nimport {wCommandMenuConfigByPreset, wSelectionMenuConfigByPreset} from './config/wysiwyg';\nimport {emojiDefs} from './emoji';\nimport type {MarkdownEditorPreset, WysiwygPlaceholderOptions} from './types';\n\nconst DEFAULT_IGNORED_KEYS = ['Tab', 'Shift-Tab'] as const;\n\nexport type ExtensionsOptions = BehaviorPresetOptions & FullPresetOptions;\n\nexport type BundlePresetOptions = ExtensionsOptions &\n EditorModeKeymapOptions & {\n preset: MarkdownEditorPreset;\n mdBreaks?: boolean;\n preserveEmptyRows?: boolean;\n fileUploadHandler?: FileUploadHandler;\n placeholderOptions?: WysiwygPlaceholderOptions;\n /**\n * If we need to set dimensions for uploaded images\n *\n * @default false\n */\n needToSetDimensionsForUploadedImages?: boolean;\n enableNewImageSizeCalculation?: boolean;\n directiveSyntax: DirectiveSyntaxContext;\n // MAJOR: remove markdown-it-attrs\n disableMdAttrs?: boolean;\n mobile?: boolean;\n searchPanel: boolean;\n };\n\ndeclare global {\n namespace WysiwygEditor {\n interface Context {\n directiveSyntax: DirectiveSyntaxContext;\n }\n }\n}\n\nexport const BundlePreset: ExtensionAuto<BundlePresetOptions> = (builder, opts) => {\n builder.context.set('directiveSyntax', opts.directiveSyntax);\n\n const dropCursor: NonNullable<BundlePresetOptions['cursor']>['dropOptions'] = {\n color: 'var(--g-color-line-brand)',\n width: 2,\n };\n\n const zeroOptions: BehaviorPresetOptions & ZeroPresetOptions = {\n ...opts,\n baseStyles: {\n attributes: {\n // for disable setting attrs inside pm-view from floating-ui from uikit\n // see https://github.com/floating-ui/floating-ui/discussions/3213\n // and https://github.com/floating-ui/floating-ui/pull/3202\n 'aria-live': '',\n ...opts.baseStyles?.attributes,\n },\n },\n cursor: {dropOptions: dropCursor},\n search: opts.searchPanel ? {anchorSelector: '.g-md-search-wysiwyg-anchor'} : undefined,\n clipboard: {pasteFileHandler: opts.fileUploadHandler, ...opts.clipboard},\n selectionContext: {config: wSelectionMenuConfigByPreset.zero, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.zero, ...opts.commandMenu},\n history: {undoKey: f.toPM(A.Undo), redoKey: f.toPM(A.Redo), ...opts.history},\n baseSchema: {\n paragraphKey: f.toPM(A.Text),\n paragraphPlaceholder: (node: Node, parent?: Node | null) => {\n const {value, behavior} = opts.placeholderOptions || {};\n\n const emptyEntries = {\n 'empty-row': !node.text,\n 'empty-row-top-level': !node.text && parent?.type.name === BaseNode.Doc,\n 'empty-doc':\n !node.text && parent?.type.name === BaseNode.Doc && parent.childCount === 1,\n };\n\n const showPlaceholder = emptyEntries[behavior || 'empty-doc'];\n\n if (!showPlaceholder) return null;\n\n return typeof value === 'function'\n ? value()\n : value ?? i18nPlaceholder(opts.mobile ? 'doc_empty_mobile' : 'doc_empty');\n },\n preserveEmptyRows: opts.preserveEmptyRows,\n ...opts.baseSchema,\n },\n };\n const commonMarkOptions: BehaviorPresetOptions & CommonMarkPresetOptions = {\n ...zeroOptions,\n selectionContext: {\n config: wSelectionMenuConfigByPreset.commonmark,\n ...opts.selectionContext,\n },\n commandMenu: {actions: wCommandMenuConfigByPreset.commonmark, ...opts.commandMenu},\n breaks: {\n preferredBreak: (opts.mdBreaks ? 'soft' : 'hard') as 'soft' | 'hard',\n ...opts.breaks,\n },\n bold: {boldKey: f.toPM(A.Bold), ...opts.bold},\n italic: {italicKey: f.toPM(A.Italic), ...opts.italic},\n code: {codeKey: f.toPM(A.Code), ...opts.code},\n codeBlock: {\n codeBlockKey: f.toPM(A.CodeBlock),\n ...opts.codeBlock,\n },\n blockquote: {qouteKey: f.toPM(A.Quote), ...opts.blockquote},\n link: {linkKey: f.toPM(A.Link), ...opts.link},\n lists: {\n ulKey: f.toPM(A.BulletList),\n olKey: f.toPM(A.OrderedList),\n ulInputRules: {plus: false},\n ...opts.lists,\n },\n image: {\n parseInsertedUrlAsImage: opts.imgSize?.parseInsertedUrlAsImage,\n },\n };\n const defaultOptions: BehaviorPresetOptions & DefaultPresetOptions = {\n ...commonMarkOptions,\n selectionContext: {config: wSelectionMenuConfigByPreset.default, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.default, ...opts.commandMenu},\n strike: {strikeKey: f.toPM(A.Strike), ...opts.strike},\n };\n const yfmOptions: BehaviorPresetOptions & YfmPresetOptions = {\n ...defaultOptions,\n yfmConfigs: {disableAttrs: opts.disableMdAttrs, ...opts.yfmConfigs},\n selectionContext: {config: wSelectionMenuConfigByPreset.yfm, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.yfm, ...opts.commandMenu},\n underline: {underlineKey: f.toPM(A.Underline), ...opts.underline},\n imgSize: {\n imageUploadHandler: opts.fileUploadHandler,\n needToSetDimensionsForUploadedImages: opts.needToSetDimensionsForUploadedImages,\n enableNewImageSizeCalculation: opts.enableNewImageSizeCalculation,\n ...opts.imgSize,\n },\n checkbox: {checkboxLabelPlaceholder: () => i18nPlaceholder('checkbox'), ...opts.checkbox},\n deflist: {\n deflistTermPlaceholder: () => i18nPlaceholder('deflist_term'),\n deflistDescPlaceholder: () => i18nPlaceholder('deflist_desc'),\n },\n yfmCut: {\n yfmCutKey: f.toPM(A.Cut),\n yfmCutTitlePlaceholder: () => i18nPlaceholder('cut_title'),\n yfmCutContentPlaceholder: () => i18nPlaceholder('cut_content'),\n ...opts.yfmCut,\n },\n yfmNote: {\n yfmNoteKey: f.toPM(A.Note),\n yfmNoteTitlePlaceholder: () => i18nPlaceholder('note_title'),\n ...opts.yfmNote,\n },\n yfmTable: {\n yfmTableCellPlaceholder: () => i18nPlaceholder('table_cell'),\n ...opts.yfmTable,\n controls: opts.mobile ? false : opts.yfmTable?.controls,\n },\n yfmFile: {\n fileUploadHandler: opts.fileUploadHandler,\n needToSetDimensionsForUploadedImages: opts.needToSetDimensionsForUploadedImages,\n ...opts.yfmFile,\n },\n yfmHeading: {\n h1Key: f.toPM(A.Heading1),\n h2Key: f.toPM(A.Heading2),\n h3Key: f.toPM(A.Heading3),\n h4Key: f.toPM(A.Heading4),\n h5Key: f.toPM(A.Heading5),\n h6Key: f.toPM(A.Heading6),\n headingPlaceholder: (node: Node) =>\n `${i18nPlaceholder('heading')} ${node.attrs[YfmHeadingAttr.Level]}`, // todo: remove attrs import\n ...opts.yfmHeading,\n },\n placeholder: {\n [YfmNoteNode.NoteContent]: () => i18nPlaceholder('note_content'),\n },\n };\n const fullOptions: BehaviorPresetOptions & FullPresetOptions = {\n ...yfmOptions,\n selectionContext: {config: wSelectionMenuConfigByPreset.full, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.full, ...opts.commandMenu},\n emoji: {defs: emojiDefs, ...opts.emoji},\n };\n\n const zeroIgnoreActions = [A.Undo, A.Redo];\n const commonMarkIgnoreActions = zeroIgnoreActions.concat(\n A.Bold,\n A.Italic,\n A.Code,\n A.Link,\n\n A.Text,\n A.Heading1,\n A.Heading2,\n A.Heading3,\n A.Heading4,\n A.Heading5,\n A.Heading6,\n\n A.BulletList,\n A.OrderedList,\n\n A.Quote,\n A.CodeBlock,\n );\n const defaultIgnoreActions = commonMarkIgnoreActions.concat(A.Strike);\n const yfmIgnoreActions = defaultIgnoreActions.concat(\n A.Underline,\n\n A.Note,\n A.Cut,\n );\n const fullIgnoreActions = yfmIgnoreActions.concat();\n\n let ignoreActions;\n\n switch (opts.preset) {\n case 'zero': {\n ignoreActions = zeroIgnoreActions;\n builder.use(BehaviorPreset, zeroOptions).use(ZeroPreset, zeroOptions);\n break;\n }\n case 'commonmark': {\n ignoreActions = commonMarkIgnoreActions;\n builder.use(BehaviorPreset, commonMarkOptions).use(CommonMarkPreset, commonMarkOptions);\n break;\n }\n case 'default': {\n ignoreActions = defaultIgnoreActions;\n builder.use(BehaviorPreset, defaultOptions).use(DefaultPreset, defaultOptions);\n break;\n }\n case 'yfm': {\n ignoreActions = yfmIgnoreActions;\n builder.use(BehaviorPreset, yfmOptions).use(YfmPreset, yfmOptions);\n break;\n }\n default: {\n ignoreActions = fullIgnoreActions;\n builder.use(BehaviorPreset, fullOptions).use(FullPreset, fullOptions);\n break;\n }\n }\n\n const ignoreKeysList = opts.ignoreKeysList?.slice() ?? [];\n ignoreKeysList.push(...DEFAULT_IGNORED_KEYS);\n for (const action of ignoreActions) {\n const key = f.toPM(action);\n if (key) ignoreKeysList.push(key);\n }\n\n builder.use(EditorModeKeymap, {\n onSubmit: opts.onSubmit,\n onCancel: opts.onCancel,\n ignoreKeysList,\n });\n};\n"]}
|
|
1
|
+
{"version":3,"file":"wysiwyg-preset.js","sourceRoot":"../../../src","sources":["bundle/wysiwyg-preset.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Node} from 'prosemirror-model';\n\nimport type {ExtensionAuto} from '../core';\nimport {BehaviorPreset, type BehaviorPresetOptions} from '../extensions/behavior';\nimport {\n EditorModeKeymap,\n type EditorModeKeymapOptions,\n} from '../extensions/behavior/EditorModeKeymap';\nimport {BaseNode, YfmHeadingAttr, YfmNoteNode} from '../extensions/specs';\nimport {i18n as i18nPlaceholder} from '../i18n/placeholder';\nimport {CommonMarkPreset, type CommonMarkPresetOptions} from '../presets/commonmark';\nimport {DefaultPreset, type DefaultPresetOptions} from '../presets/default';\nimport {FullPreset, type FullPresetOptions} from '../presets/full';\nimport {YfmPreset, type YfmPresetOptions} from '../presets/yfm';\nimport {ZeroPreset, type ZeroPresetOptions} from '../presets/zero';\nimport {Action as A, formatter as f} from '../shortcuts';\nimport type {DirectiveSyntaxContext} from '../utils/directive';\nimport type {FileUploadHandler} from '../utils/upload';\n\nimport {wCommandMenuConfigByPreset, wSelectionMenuConfigByPreset} from './config/wysiwyg';\nimport {emojiDefs} from './emoji';\nimport type {MarkdownEditorPreset, WysiwygPlaceholderOptions} from './types';\n\nconst DEFAULT_IGNORED_KEYS = ['Tab', 'Shift-Tab'] as const;\n\nexport type ExtensionsOptions = BehaviorPresetOptions & FullPresetOptions;\n\nexport type BundlePresetOptions = ExtensionsOptions &\n EditorModeKeymapOptions & {\n preset: MarkdownEditorPreset;\n mdBreaks?: boolean;\n preserveEmptyRows?: boolean;\n fileUploadHandler?: FileUploadHandler;\n placeholderOptions?: WysiwygPlaceholderOptions;\n /**\n * If we need to set dimensions for uploaded images\n * @default false\n */\n needToSetDimensionsForUploadedImages?: boolean;\n enableNewImageSizeCalculation?: boolean;\n directiveSyntax: DirectiveSyntaxContext;\n // MAJOR: remove markdown-it-attrs\n disableMdAttrs?: boolean;\n mobile?: boolean;\n searchPanel: boolean;\n };\n\ndeclare global {\n namespace WysiwygEditor {\n interface Context {\n directiveSyntax: DirectiveSyntaxContext;\n }\n }\n}\n\nexport const BundlePreset: ExtensionAuto<BundlePresetOptions> = (builder, opts) => {\n builder.context.set('directiveSyntax', opts.directiveSyntax);\n\n const dropCursor: NonNullable<BundlePresetOptions['cursor']>['dropOptions'] = {\n color: 'var(--g-color-line-brand)',\n width: 2,\n };\n\n const zeroOptions: BehaviorPresetOptions & ZeroPresetOptions = {\n ...opts,\n baseStyles: {\n attributes: {\n // for disable setting attrs inside pm-view from floating-ui from uikit\n // see https://github.com/floating-ui/floating-ui/discussions/3213\n // and https://github.com/floating-ui/floating-ui/pull/3202\n 'aria-live': '',\n ...opts.baseStyles?.attributes,\n },\n },\n cursor: {dropOptions: dropCursor},\n search: opts.searchPanel ? {anchorSelector: '.g-md-search-wysiwyg-anchor'} : undefined,\n clipboard: {pasteFileHandler: opts.fileUploadHandler, ...opts.clipboard},\n selectionContext: {config: wSelectionMenuConfigByPreset.zero, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.zero, ...opts.commandMenu},\n history: {undoKey: f.toPM(A.Undo), redoKey: f.toPM(A.Redo), ...opts.history},\n baseSchema: {\n paragraphKey: f.toPM(A.Text),\n paragraphPlaceholder: (node: Node, parent?: Node | null) => {\n const {value, behavior} = opts.placeholderOptions || {};\n\n const emptyEntries = {\n 'empty-row': !node.text,\n 'empty-row-top-level': !node.text && parent?.type.name === BaseNode.Doc,\n 'empty-doc':\n !node.text && parent?.type.name === BaseNode.Doc && parent.childCount === 1,\n };\n\n const showPlaceholder = emptyEntries[behavior || 'empty-doc'];\n\n if (!showPlaceholder) return null;\n\n return typeof value === 'function'\n ? value()\n : (value ?? i18nPlaceholder(opts.mobile ? 'doc_empty_mobile' : 'doc_empty'));\n },\n preserveEmptyRows: opts.preserveEmptyRows,\n ...opts.baseSchema,\n },\n };\n const commonMarkOptions: BehaviorPresetOptions & CommonMarkPresetOptions = {\n ...zeroOptions,\n selectionContext: {\n config: wSelectionMenuConfigByPreset.commonmark,\n ...opts.selectionContext,\n },\n commandMenu: {actions: wCommandMenuConfigByPreset.commonmark, ...opts.commandMenu},\n breaks: {\n preferredBreak: (opts.mdBreaks ? 'soft' : 'hard') as 'soft' | 'hard',\n ...opts.breaks,\n },\n bold: {boldKey: f.toPM(A.Bold), ...opts.bold},\n italic: {italicKey: f.toPM(A.Italic), ...opts.italic},\n code: {codeKey: f.toPM(A.Code), ...opts.code},\n codeBlock: {\n codeBlockKey: f.toPM(A.CodeBlock),\n ...opts.codeBlock,\n },\n blockquote: {qouteKey: f.toPM(A.Quote), ...opts.blockquote},\n link: {linkKey: f.toPM(A.Link), ...opts.link},\n lists: {\n ulKey: f.toPM(A.BulletList),\n olKey: f.toPM(A.OrderedList),\n ulInputRules: {plus: false},\n ...opts.lists,\n },\n image: {\n parseInsertedUrlAsImage: opts.imgSize?.parseInsertedUrlAsImage,\n },\n };\n const defaultOptions: BehaviorPresetOptions & DefaultPresetOptions = {\n ...commonMarkOptions,\n selectionContext: {config: wSelectionMenuConfigByPreset.default, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.default, ...opts.commandMenu},\n strike: {strikeKey: f.toPM(A.Strike), ...opts.strike},\n };\n const yfmOptions: BehaviorPresetOptions & YfmPresetOptions = {\n ...defaultOptions,\n yfmConfigs: {disableAttrs: opts.disableMdAttrs, ...opts.yfmConfigs},\n selectionContext: {config: wSelectionMenuConfigByPreset.yfm, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.yfm, ...opts.commandMenu},\n underline: {underlineKey: f.toPM(A.Underline), ...opts.underline},\n imgSize: {\n imageUploadHandler: opts.fileUploadHandler,\n needToSetDimensionsForUploadedImages: opts.needToSetDimensionsForUploadedImages,\n enableNewImageSizeCalculation: opts.enableNewImageSizeCalculation,\n ...opts.imgSize,\n },\n checkbox: {checkboxLabelPlaceholder: () => i18nPlaceholder('checkbox'), ...opts.checkbox},\n deflist: {\n deflistTermPlaceholder: () => i18nPlaceholder('deflist_term'),\n deflistDescPlaceholder: () => i18nPlaceholder('deflist_desc'),\n },\n yfmCut: {\n yfmCutKey: f.toPM(A.Cut),\n yfmCutTitlePlaceholder: () => i18nPlaceholder('cut_title'),\n yfmCutContentPlaceholder: () => i18nPlaceholder('cut_content'),\n ...opts.yfmCut,\n },\n yfmNote: {\n yfmNoteKey: f.toPM(A.Note),\n yfmNoteTitlePlaceholder: () => i18nPlaceholder('note_title'),\n ...opts.yfmNote,\n },\n yfmTable: {\n yfmTableCellPlaceholder: () => i18nPlaceholder('table_cell'),\n ...opts.yfmTable,\n controls: opts.mobile ? false : opts.yfmTable?.controls,\n },\n yfmFile: {\n fileUploadHandler: opts.fileUploadHandler,\n needToSetDimensionsForUploadedImages: opts.needToSetDimensionsForUploadedImages,\n ...opts.yfmFile,\n },\n yfmHeading: {\n h1Key: f.toPM(A.Heading1),\n h2Key: f.toPM(A.Heading2),\n h3Key: f.toPM(A.Heading3),\n h4Key: f.toPM(A.Heading4),\n h5Key: f.toPM(A.Heading5),\n h6Key: f.toPM(A.Heading6),\n headingPlaceholder: (node: Node) =>\n `${i18nPlaceholder('heading')} ${node.attrs[YfmHeadingAttr.Level]}`, // todo: remove attrs import\n ...opts.yfmHeading,\n },\n placeholder: {\n [YfmNoteNode.NoteContent]: () => i18nPlaceholder('note_content'),\n },\n };\n const fullOptions: BehaviorPresetOptions & FullPresetOptions = {\n ...yfmOptions,\n selectionContext: {config: wSelectionMenuConfigByPreset.full, ...opts.selectionContext},\n commandMenu: {actions: wCommandMenuConfigByPreset.full, ...opts.commandMenu},\n emoji: {defs: emojiDefs, ...opts.emoji},\n };\n\n const zeroIgnoreActions = [A.Undo, A.Redo];\n const commonMarkIgnoreActions = zeroIgnoreActions.concat(\n A.Bold,\n A.Italic,\n A.Code,\n A.Link,\n\n A.Text,\n A.Heading1,\n A.Heading2,\n A.Heading3,\n A.Heading4,\n A.Heading5,\n A.Heading6,\n\n A.BulletList,\n A.OrderedList,\n\n A.Quote,\n A.CodeBlock,\n );\n const defaultIgnoreActions = commonMarkIgnoreActions.concat(A.Strike);\n const yfmIgnoreActions = defaultIgnoreActions.concat(\n A.Underline,\n\n A.Note,\n A.Cut,\n );\n const fullIgnoreActions = yfmIgnoreActions.concat();\n\n let ignoreActions;\n\n switch (opts.preset) {\n case 'zero': {\n ignoreActions = zeroIgnoreActions;\n builder.use(BehaviorPreset, zeroOptions).use(ZeroPreset, zeroOptions);\n break;\n }\n case 'commonmark': {\n ignoreActions = commonMarkIgnoreActions;\n builder.use(BehaviorPreset, commonMarkOptions).use(CommonMarkPreset, commonMarkOptions);\n break;\n }\n case 'default': {\n ignoreActions = defaultIgnoreActions;\n builder.use(BehaviorPreset, defaultOptions).use(DefaultPreset, defaultOptions);\n break;\n }\n case 'yfm': {\n ignoreActions = yfmIgnoreActions;\n builder.use(BehaviorPreset, yfmOptions).use(YfmPreset, yfmOptions);\n break;\n }\n default: {\n ignoreActions = fullIgnoreActions;\n builder.use(BehaviorPreset, fullOptions).use(FullPreset, fullOptions);\n break;\n }\n }\n\n const ignoreKeysList = opts.ignoreKeysList?.slice() ?? [];\n ignoreKeysList.push(...DEFAULT_IGNORED_KEYS);\n for (const action of ignoreActions) {\n const key = f.toPM(action);\n if (key) ignoreKeysList.push(key);\n }\n\n builder.use(EditorModeKeymap, {\n onSubmit: opts.onSubmit,\n onCancel: opts.onCancel,\n ignoreKeysList,\n });\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Editor.js","sourceRoot":"../../../src","sources":["core/Editor.ts"],"names":[],"mappings":"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","sourcesContent":["import type {PresetName} from 'markdown-it';\nimport {EditorState} from 'prosemirror-state';\nimport {EditorView} from 'prosemirror-view';\n\nimport type {CommonEditor, ContentHandler, MarkupString} from '../common';\nimport {Logger2} from '../logger';\n\nimport type {ActionsManager} from './ActionsManager';\nimport {WysiwygContentHandler} from './ContentHandler';\nimport {ExtensionsManager} from './ExtensionsManager';\nimport {SchemaDynamicModifier} from './SchemaDynamicModifier';\nimport {MarkdownParserDynamicModifier} from './markdown/MarkdownParser';\nimport {MarkdownSerializerDynamicModifier} from './markdown/MarkdownSerializerDynamicModifier';\nimport type {TransformFn} from './markdown/ProseMirrorTransformer';\nimport type {ActionStorage} from './types/actions';\nimport type {DynamicModifiers} from './types/dynamicModifiers';\nimport type {Extension} from './types/extension';\nimport type {Parser} from './types/parser';\nimport type {Serializer} from './types/serializer';\nimport {bindActions} from './utils/actions';\nimport {convertDynamicModifiersConfigs} from './utils/dynamicModifiers';\nimport {LoggerFacet} from './utils/logger';\nimport {logTransactionMetrics} from './utils/metrics';\n\ntype OnChange = (editor: WysiwygEditor) => void;\n\nexport type EscapeConfig = {\n commonEscape?: RegExp;\n startOfLineEscape?: RegExp;\n};\n\nexport type WysiwygEditorOptions = {\n domElem?: Element;\n /** markdown markup */\n initialContent?: string;\n extensions?: Extension;\n /** @default 'default' */\n mdPreset?: PresetName;\n allowHTML?: boolean;\n linkify?: boolean;\n pmTransformers?: TransformFn[];\n linkifyTlds?: string | string[];\n escapeConfig?: EscapeConfig;\n /** Call on any state change (move cursor, change selection, etc...) */\n onChange?: OnChange;\n /** Call only if document change */\n onDocChange?: OnChange;\n /** @internal Modifiers adjust the parser and serializer */\n modifiers?: DynamicModifiers[];\n logger?: Logger2.ILogger;\n};\n\nexport class WysiwygEditor implements CommonEditor, ActionStorage {\n #view: EditorView;\n #serializer: Serializer;\n #parser: Parser;\n #actions: ActionsManager;\n #contentHandler: ContentHandler;\n #escapeConfig?: EscapeConfig;\n\n get dom() {\n return this.#view.dom;\n }\n\n get serializer() {\n return this.#serializer;\n }\n\n get parser() {\n return this.#parser;\n }\n\n get actions() {\n return this.#actions.actions;\n }\n\n /** @internal used for prosemirror-dev-tools in demo */\n get view() {\n return this.#view;\n }\n\n constructor({\n domElem,\n initialContent = '',\n extensions = () => {},\n allowHTML,\n mdPreset,\n linkify,\n pmTransformers,\n linkifyTlds,\n escapeConfig,\n onChange,\n onDocChange,\n modifiers,\n logger = new Logger2(),\n }: WysiwygEditorOptions) {\n const dynamicModifiersConfig = modifiers\n ? convertDynamicModifiersConfigs(modifiers)\n : undefined;\n const dynamicModifiers = dynamicModifiersConfig\n ? {\n schema: new SchemaDynamicModifier(dynamicModifiersConfig.schema),\n parser: new MarkdownParserDynamicModifier(dynamicModifiersConfig.parser),\n serializer: new MarkdownSerializerDynamicModifier(\n dynamicModifiersConfig.serializer,\n ),\n }\n : undefined;\n\n const {\n schema,\n markupParser: parser,\n serializer,\n nodeViews,\n markViews,\n plugins,\n rawActions,\n actions,\n } = ExtensionsManager.process(\n extensions,\n {\n // \"breaks\" option only affects the renderer, but not the parser\n mdOpts: {html: allowHTML, linkify, breaks: true, preset: mdPreset},\n linkifyTlds,\n pmTransformers,\n dynamicModifiers,\n },\n logger,\n );\n\n plugins.unshift(LoggerFacet.of(logger));\n\n const state = EditorState.create({\n schema,\n doc: parser.parse(initialContent),\n plugins,\n });\n\n const thisOnChange = () => this.tryOnChange(onChange);\n const thisOnDocChange = () => this.tryOnChange(onDocChange);\n\n this.#view = new EditorView(domElem ?? null, {\n state,\n nodeViews,\n markViews,\n dispatchTransaction(tr) {\n const newState = this.state.apply(tr);\n // @ts-expect-error\n this.updateState(newState);\n thisOnChange();\n if (tr.docChanged) {\n thisOnDocChange();\n }\n logTransactionMetrics(tr, logger);\n },\n });\n this.#actions = actions.setActions(\n bindActions<keyof WysiwygEditor.Actions>(rawActions)(\n this.#view,\n ) as WysiwygEditor.Actions,\n );\n this.#serializer = serializer;\n this.#parser = parser;\n this.#contentHandler = new WysiwygContentHandler(this.#view, parser);\n this.#escapeConfig = escapeConfig;\n }\n\n action<T extends keyof WysiwygEditor.Actions>(actionName: T): WysiwygEditor.Actions[T] {\n return this.#actions.action(actionName);\n }\n\n focus() {\n return this.#view.focus();\n }\n\n hasFocus() {\n return this.#view.hasFocus();\n }\n\n getValue(): MarkupString {\n return this.#serializer.serialize(this.#view.state.doc, this.#escapeConfig);\n }\n\n isEmpty(): boolean {\n const {doc} = this.#view.state;\n return (\n doc.childCount === 1 &&\n doc.firstChild?.type.name === 'paragraph' &&\n doc.firstChild.childCount === 0\n );\n }\n\n clear(): void {\n return this.#contentHandler.clear();\n }\n\n replace(newMarkup: MarkupString): void {\n return this.#contentHandler.replace(newMarkup);\n }\n\n prepend(markup: MarkupString): void {\n return this.#contentHandler.prepend(markup);\n }\n\n append(markup: MarkupString): void {\n return this.#contentHandler.append(markup);\n }\n\n moveCursor(position: 'start' | 'end'): void {\n return this.#contentHandler.moveCursor(position);\n }\n\n destroy() {\n this.#view.destroy();\n }\n\n private tryOnChange(cb?: OnChange) {\n if (cb) {\n try {\n cb(this);\n } catch (err) {\n console.error(err);\n }\n }\n }\n}\n\ndeclare global {\n namespace WysiwygEditor {\n // eslint-disable-next-line @typescript-eslint/no-empty-interface\n interface Actions {}\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Editor.js","sourceRoot":"../../../src","sources":["core/Editor.ts"],"names":[],"mappings":"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","sourcesContent":["import type {PresetName} from 'markdown-it';\nimport {EditorState} from 'prosemirror-state';\nimport {EditorView} from 'prosemirror-view';\n\nimport type {CommonEditor, ContentHandler, MarkupString} from '../common';\nimport {Logger2} from '../logger';\n\nimport type {ActionsManager} from './ActionsManager';\nimport {WysiwygContentHandler} from './ContentHandler';\nimport {ExtensionsManager} from './ExtensionsManager';\nimport {SchemaDynamicModifier} from './SchemaDynamicModifier';\nimport {MarkdownParserDynamicModifier} from './markdown/MarkdownParser';\nimport {MarkdownSerializerDynamicModifier} from './markdown/MarkdownSerializerDynamicModifier';\nimport type {TransformFn} from './markdown/ProseMirrorTransformer';\nimport type {ActionStorage} from './types/actions';\nimport type {DynamicModifiers} from './types/dynamicModifiers';\nimport type {Extension} from './types/extension';\nimport type {Parser} from './types/parser';\nimport type {Serializer} from './types/serializer';\nimport {bindActions} from './utils/actions';\nimport {convertDynamicModifiersConfigs} from './utils/dynamicModifiers';\nimport {LoggerFacet} from './utils/logger';\nimport {logTransactionMetrics} from './utils/metrics';\n\ntype OnChange = (editor: WysiwygEditor) => void;\n\nexport type EscapeConfig = {\n commonEscape?: RegExp;\n startOfLineEscape?: RegExp;\n};\n\nexport type WysiwygEditorOptions = {\n domElem?: Element;\n /** markdown markup */\n initialContent?: string;\n extensions?: Extension;\n /** @default 'default' */\n mdPreset?: PresetName;\n allowHTML?: boolean;\n linkify?: boolean;\n pmTransformers?: TransformFn[];\n linkifyTlds?: string | string[];\n escapeConfig?: EscapeConfig;\n /** Call on any state change (move cursor, change selection, etc...) */\n onChange?: OnChange;\n /** Call only if document change */\n onDocChange?: OnChange;\n /** @internal Modifiers adjust the parser and serializer */\n modifiers?: DynamicModifiers[];\n logger?: Logger2.ILogger;\n};\n\nexport class WysiwygEditor implements CommonEditor, ActionStorage {\n #view: EditorView;\n #serializer: Serializer;\n #parser: Parser;\n #actions: ActionsManager;\n #contentHandler: ContentHandler;\n #escapeConfig?: EscapeConfig;\n\n get dom() {\n return this.#view.dom;\n }\n\n get serializer() {\n return this.#serializer;\n }\n\n get parser() {\n return this.#parser;\n }\n\n get actions() {\n return this.#actions.actions;\n }\n\n /** @internal used for prosemirror-dev-tools in demo */\n get view() {\n return this.#view;\n }\n\n constructor({\n domElem,\n initialContent = '',\n extensions = () => {},\n allowHTML,\n mdPreset,\n linkify,\n pmTransformers,\n linkifyTlds,\n escapeConfig,\n onChange,\n onDocChange,\n modifiers,\n logger = new Logger2(),\n }: WysiwygEditorOptions) {\n const dynamicModifiersConfig = modifiers\n ? convertDynamicModifiersConfigs(modifiers)\n : undefined;\n const dynamicModifiers = dynamicModifiersConfig\n ? {\n schema: new SchemaDynamicModifier(dynamicModifiersConfig.schema),\n parser: new MarkdownParserDynamicModifier(dynamicModifiersConfig.parser),\n serializer: new MarkdownSerializerDynamicModifier(\n dynamicModifiersConfig.serializer,\n ),\n }\n : undefined;\n\n const {\n schema,\n markupParser: parser,\n serializer,\n nodeViews,\n markViews,\n plugins,\n rawActions,\n actions,\n } = ExtensionsManager.process(\n extensions,\n {\n // \"breaks\" option only affects the renderer, but not the parser\n mdOpts: {html: allowHTML, linkify, breaks: true, preset: mdPreset},\n linkifyTlds,\n pmTransformers,\n dynamicModifiers,\n },\n logger,\n );\n\n plugins.unshift(LoggerFacet.of(logger));\n\n const state = EditorState.create({\n schema,\n doc: parser.parse(initialContent),\n plugins,\n });\n\n const thisOnChange = () => this.tryOnChange(onChange);\n const thisOnDocChange = () => this.tryOnChange(onDocChange);\n\n this.#view = new EditorView(domElem ?? null, {\n state,\n nodeViews,\n markViews,\n dispatchTransaction(tr) {\n const newState = this.state.apply(tr);\n // @ts-expect-error\n this.updateState(newState);\n thisOnChange();\n if (tr.docChanged) {\n thisOnDocChange();\n }\n logTransactionMetrics(tr, logger);\n },\n });\n this.#actions = actions.setActions(\n bindActions<keyof WysiwygEditor.Actions>(rawActions)(\n this.#view,\n ) as WysiwygEditor.Actions,\n );\n this.#serializer = serializer;\n this.#parser = parser;\n this.#contentHandler = new WysiwygContentHandler(this.#view, parser);\n this.#escapeConfig = escapeConfig;\n }\n\n action<T extends keyof WysiwygEditor.Actions>(actionName: T): WysiwygEditor.Actions[T] {\n return this.#actions.action(actionName);\n }\n\n focus() {\n return this.#view.focus();\n }\n\n hasFocus() {\n return this.#view.hasFocus();\n }\n\n getValue(): MarkupString {\n return this.#serializer.serialize(this.#view.state.doc, this.#escapeConfig);\n }\n\n isEmpty(): boolean {\n const {doc} = this.#view.state;\n return (\n doc.childCount === 1 &&\n doc.firstChild?.type.name === 'paragraph' &&\n doc.firstChild.childCount === 0\n );\n }\n\n clear(): void {\n return this.#contentHandler.clear();\n }\n\n replace(newMarkup: MarkupString): void {\n return this.#contentHandler.replace(newMarkup);\n }\n\n prepend(markup: MarkupString): void {\n return this.#contentHandler.prepend(markup);\n }\n\n append(markup: MarkupString): void {\n return this.#contentHandler.append(markup);\n }\n\n moveCursor(position: 'start' | 'end'): void {\n return this.#contentHandler.moveCursor(position);\n }\n\n destroy() {\n this.#view.destroy();\n }\n\n private tryOnChange(cb?: OnChange) {\n if (cb) {\n try {\n cb(this);\n } catch (err) {\n console.error(err);\n }\n }\n }\n}\n\ndeclare global {\n namespace WysiwygEditor {\n interface Actions {}\n }\n}\n"]}
|
|
@@ -9,13 +9,11 @@ type InputRulesConfig = Parameters<typeof inputRules>[0];
|
|
|
9
9
|
type ConfigureMdParams = {
|
|
10
10
|
/**
|
|
11
11
|
* Apply this configurtion to text parser
|
|
12
|
-
*
|
|
13
12
|
* @default true
|
|
14
13
|
*/
|
|
15
14
|
text?: boolean;
|
|
16
15
|
/**
|
|
17
16
|
* Apply this configurtion to markup parser
|
|
18
|
-
*
|
|
19
17
|
* @default true
|
|
20
18
|
*/
|
|
21
19
|
markup?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExtensionBuilder.js","sourceRoot":"../../../src","sources":["core/ExtensionBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import type MarkdownIt from 'markdown-it';\nimport OrderedMap from 'orderedmap'; // eslint-disable-line import/no-extraneous-dependencies\nimport {inputRules} from 'prosemirror-inputrules';\nimport {keymap} from 'prosemirror-keymap';\nimport type {Plugin} from 'prosemirror-state';\n\nimport type {Logger2} from '../logger';\n\nimport type {ActionSpec} from './types/actions';\nimport type {\n Extension,\n ExtensionDeps,\n ExtensionMarkSpec,\n ExtensionNodeSpec,\n ExtensionSpec,\n ExtensionWithOptions,\n} from './types/extension';\nimport type {Keymap} from './types/keymap';\n\ntype InputRulesConfig = Parameters<typeof inputRules>[0];\ntype ExtensionWithParams = (builder: ExtensionBuilder, ...params: any[]) => void;\ntype ConfigureMdParams = {\n /**\n * Apply this configurtion to text parser\n *\n * @default true\n */\n text?: boolean;\n /**\n * Apply this configurtion to markup parser\n *\n * @default true\n */\n markup?: boolean;\n};\n\ntype ConfigureMdCallback = (md: MarkdownIt) => MarkdownIt;\ntype AddPmNodeCallback = () => ExtensionNodeSpec;\ntype AddPmMarkCallback = () => ExtensionMarkSpec;\ntype AddPmPluginCallback = (deps: ExtensionDeps) => Plugin | Plugin[];\ntype AddPmKeymapCallback = (deps: ExtensionDeps) => Keymap;\ntype AddPmInputRulesCallback = (deps: ExtensionDeps) => InputRulesConfig;\ntype AddActionCallback = (deps: ExtensionDeps) => ActionSpec;\n\nenum Priority {\n Highest = 1_000_000,\n VeryHigh = 100_000,\n High = 10_000,\n Medium = 1_000,\n Low = 100,\n VeryLow = 10,\n Lowest = 0,\n}\n\nconst DEFAULT_PRIORITY = Priority.Medium;\n\ntype BuilderContext<T extends object> = {\n has(key: keyof T): boolean;\n get<K extends keyof T>(key: K): T[K] | undefined;\n set<K extends keyof T>(key: K, value: T[K]): BuilderContext<T>;\n};\n\ndeclare global {\n namespace WysiwygEditor {\n interface Context {}\n }\n}\n\nexport class ExtensionBuilder {\n static createContext(): BuilderContext<WysiwygEditor.Context> {\n return new Map();\n }\n\n /* eslint-disable @typescript-eslint/member-ordering */\n static readonly Priority = Priority;\n readonly Priority = ExtensionBuilder.Priority;\n /* eslint-enable @typescript-eslint/member-ordering */\n\n readonly #logger: Logger2.ILogger;\n #confMdCbs: {cb: ConfigureMdCallback; params: Required<ConfigureMdParams>}[] = [];\n #nodeSpecs: Record<string, {name: string; cb: AddPmNodeCallback}> = {};\n #markSpecs: Record<string, {name: string; cb: AddPmMarkCallback; priority: number}> = {};\n #plugins: {cb: AddPmPluginCallback; priority: number}[] = [];\n #actions: [string, AddActionCallback][] = [];\n\n readonly context: BuilderContext<WysiwygEditor.Context>;\n\n constructor(logger: Logger2.ILogger, context?: BuilderContext<WysiwygEditor.Context>) {\n this.#logger = logger;\n this.context = context ?? ExtensionBuilder.createContext();\n }\n\n get logger(): Logger2.ILogger {\n return this.#logger;\n }\n\n use(extension: Extension): this;\n use<T>(extension: ExtensionWithOptions<T>, options: T): this;\n use(extension: ExtensionWithParams, ...params: any[]): this {\n extension(this, ...params);\n return this;\n }\n\n configureMd(cb: ConfigureMdCallback, params: ConfigureMdParams = {}): this {\n this.#confMdCbs.push({\n cb,\n params: {\n text: params.text ?? true,\n markup: params.markup ?? true,\n },\n });\n return this;\n }\n\n addNode(name: string, cb: AddPmNodeCallback): this {\n if (this.#nodeSpecs[name]) {\n throw new Error(`ProseMirror node with this name \"${name}\" already exist`);\n }\n this.#nodeSpecs[name] = {name, cb};\n return this;\n }\n\n addMark(name: string, cb: AddPmMarkCallback, priority = DEFAULT_PRIORITY): this {\n if (this.#markSpecs[name]) {\n throw new Error(`ProseMirror mark with this name \"${name}\" already exist`);\n }\n this.#markSpecs[name] = {name, cb, priority};\n return this;\n }\n\n addPlugin(cb: AddPmPluginCallback, priority = DEFAULT_PRIORITY): this {\n this.#plugins.push({cb, priority});\n return this;\n }\n\n addKeymap(cb: AddPmKeymapCallback, priority = DEFAULT_PRIORITY): this {\n this.#plugins.push({cb: (...args) => keymap(cb(...args)), priority});\n return this;\n }\n\n addInputRules(cb: AddPmInputRulesCallback, priority = DEFAULT_PRIORITY): this {\n this.#plugins.push({cb: (...args) => inputRules(cb(...args)), priority});\n return this;\n }\n\n addAction(name: string, cb: AddActionCallback): this {\n if (this.#actions.some(([actionName]) => actionName === name)) {\n throw new Error(\n `[Markdown Wysiwyg Editor] action with this name \"${name}\" already exist`,\n );\n }\n this.#actions.push([name, cb]);\n return this;\n }\n\n build(): ExtensionSpec {\n const confMd = this.#confMdCbs.slice();\n const nodes = {...this.#nodeSpecs};\n const marks = {...this.#markSpecs};\n const plugins = this.#plugins.slice();\n const actions = this.#actions.slice();\n\n return {\n configureMd: (md, parserType) =>\n confMd.reduce((pMd, {cb, params}) => {\n if (parserType === 'text' && params.text) {\n return cb(pMd);\n }\n if (parserType === 'markup' && params.markup) {\n return cb(pMd);\n }\n return pMd;\n }, md),\n nodes: () => {\n let map = OrderedMap.from<ExtensionNodeSpec>({});\n for (const {name, cb} of Object.values(nodes)) {\n map = map.addToEnd(name, cb());\n }\n return map;\n },\n marks: () => {\n // The order of marks in schema is important when serializing pm-document to DOM or markup\n // https://discuss.prosemirror.net/t/marks-priority/4463\n const sortedMarks = Object.values(marks).sort((a, b) => b.priority - a.priority);\n let map = OrderedMap.from<ExtensionMarkSpec>({});\n for (const {name, cb} of sortedMarks) {\n map = map.addToEnd(name, cb());\n }\n return map;\n },\n plugins: (deps) => {\n return plugins\n .sort((a, b) => b.priority - a.priority)\n .reduce<Plugin[]>((acc, {cb}) => {\n const res = cb(deps);\n if (Array.isArray(res)) acc.push(...res);\n else acc.push(res);\n return acc;\n }, []);\n },\n actions: (deps) =>\n actions.reduce(\n (obj, [name, cb]) => {\n obj[name] = cb(deps);\n return obj;\n },\n {} as Record<string, ActionSpec>,\n ),\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ExtensionBuilder.js","sourceRoot":"../../../src","sources":["core/ExtensionBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import type MarkdownIt from 'markdown-it';\nimport OrderedMap from 'orderedmap';\nimport {inputRules} from 'prosemirror-inputrules';\nimport {keymap} from 'prosemirror-keymap';\nimport type {Plugin} from 'prosemirror-state';\n\nimport type {Logger2} from '../logger';\n\nimport type {ActionSpec} from './types/actions';\nimport type {\n Extension,\n ExtensionDeps,\n ExtensionMarkSpec,\n ExtensionNodeSpec,\n ExtensionSpec,\n ExtensionWithOptions,\n} from './types/extension';\nimport type {Keymap} from './types/keymap';\n\ntype InputRulesConfig = Parameters<typeof inputRules>[0];\ntype ExtensionWithParams = (builder: ExtensionBuilder, ...params: any[]) => void;\ntype ConfigureMdParams = {\n /**\n * Apply this configurtion to text parser\n * @default true\n */\n text?: boolean;\n /**\n * Apply this configurtion to markup parser\n * @default true\n */\n markup?: boolean;\n};\n\ntype ConfigureMdCallback = (md: MarkdownIt) => MarkdownIt;\ntype AddPmNodeCallback = () => ExtensionNodeSpec;\ntype AddPmMarkCallback = () => ExtensionMarkSpec;\ntype AddPmPluginCallback = (deps: ExtensionDeps) => Plugin | Plugin[];\ntype AddPmKeymapCallback = (deps: ExtensionDeps) => Keymap;\ntype AddPmInputRulesCallback = (deps: ExtensionDeps) => InputRulesConfig;\ntype AddActionCallback = (deps: ExtensionDeps) => ActionSpec;\n\nenum Priority {\n Highest = 1_000_000,\n VeryHigh = 100_000,\n High = 10_000,\n Medium = 1_000,\n Low = 100,\n VeryLow = 10,\n Lowest = 0,\n}\n\nconst DEFAULT_PRIORITY = Priority.Medium;\n\ntype BuilderContext<T extends object> = {\n has(key: keyof T): boolean;\n get<K extends keyof T>(key: K): T[K] | undefined;\n set<K extends keyof T>(key: K, value: T[K]): BuilderContext<T>;\n};\n\ndeclare global {\n namespace WysiwygEditor {\n interface Context {}\n }\n}\n\nexport class ExtensionBuilder {\n static createContext(): BuilderContext<WysiwygEditor.Context> {\n return new Map();\n }\n\n /* eslint-disable @typescript-eslint/member-ordering */\n static readonly Priority = Priority;\n readonly Priority = ExtensionBuilder.Priority;\n /* eslint-enable @typescript-eslint/member-ordering */\n\n readonly #logger: Logger2.ILogger;\n #confMdCbs: {cb: ConfigureMdCallback; params: Required<ConfigureMdParams>}[] = [];\n #nodeSpecs: Record<string, {name: string; cb: AddPmNodeCallback}> = {};\n #markSpecs: Record<string, {name: string; cb: AddPmMarkCallback; priority: number}> = {};\n #plugins: {cb: AddPmPluginCallback; priority: number}[] = [];\n #actions: [string, AddActionCallback][] = [];\n\n readonly context: BuilderContext<WysiwygEditor.Context>;\n\n constructor(logger: Logger2.ILogger, context?: BuilderContext<WysiwygEditor.Context>) {\n this.#logger = logger;\n this.context = context ?? ExtensionBuilder.createContext();\n }\n\n get logger(): Logger2.ILogger {\n return this.#logger;\n }\n\n use(extension: Extension): this;\n use<T>(extension: ExtensionWithOptions<T>, options: T): this;\n use(extension: ExtensionWithParams, ...params: any[]): this {\n extension(this, ...params);\n return this;\n }\n\n configureMd(cb: ConfigureMdCallback, params: ConfigureMdParams = {}): this {\n this.#confMdCbs.push({\n cb,\n params: {\n text: params.text ?? true,\n markup: params.markup ?? true,\n },\n });\n return this;\n }\n\n addNode(name: string, cb: AddPmNodeCallback): this {\n if (this.#nodeSpecs[name]) {\n throw new Error(`ProseMirror node with this name \"${name}\" already exist`);\n }\n this.#nodeSpecs[name] = {name, cb};\n return this;\n }\n\n addMark(name: string, cb: AddPmMarkCallback, priority = DEFAULT_PRIORITY): this {\n if (this.#markSpecs[name]) {\n throw new Error(`ProseMirror mark with this name \"${name}\" already exist`);\n }\n this.#markSpecs[name] = {name, cb, priority};\n return this;\n }\n\n addPlugin(cb: AddPmPluginCallback, priority = DEFAULT_PRIORITY): this {\n this.#plugins.push({cb, priority});\n return this;\n }\n\n addKeymap(cb: AddPmKeymapCallback, priority = DEFAULT_PRIORITY): this {\n this.#plugins.push({cb: (...args) => keymap(cb(...args)), priority});\n return this;\n }\n\n addInputRules(cb: AddPmInputRulesCallback, priority = DEFAULT_PRIORITY): this {\n this.#plugins.push({cb: (...args) => inputRules(cb(...args)), priority});\n return this;\n }\n\n addAction(name: string, cb: AddActionCallback): this {\n if (this.#actions.some(([actionName]) => actionName === name)) {\n throw new Error(\n `[Markdown Wysiwyg Editor] action with this name \"${name}\" already exist`,\n );\n }\n this.#actions.push([name, cb]);\n return this;\n }\n\n build(): ExtensionSpec {\n const confMd = this.#confMdCbs.slice();\n const nodes = {...this.#nodeSpecs};\n const marks = {...this.#markSpecs};\n const plugins = this.#plugins.slice();\n const actions = this.#actions.slice();\n\n return {\n configureMd: (md, parserType) =>\n confMd.reduce((pMd, {cb, params}) => {\n if (parserType === 'text' && params.text) {\n return cb(pMd);\n }\n if (parserType === 'markup' && params.markup) {\n return cb(pMd);\n }\n return pMd;\n }, md),\n nodes: () => {\n let map = OrderedMap.from<ExtensionNodeSpec>({});\n for (const {name, cb} of Object.values(nodes)) {\n map = map.addToEnd(name, cb());\n }\n return map;\n },\n marks: () => {\n // The order of marks in schema is important when serializing pm-document to DOM or markup\n // https://discuss.prosemirror.net/t/marks-priority/4463\n const sortedMarks = Object.values(marks).sort((a, b) => b.priority - a.priority);\n let map = OrderedMap.from<ExtensionMarkSpec>({});\n for (const {name, cb} of sortedMarks) {\n map = map.addToEnd(name, cb());\n }\n return map;\n },\n plugins: (deps) => {\n return plugins\n .sort((a, b) => b.priority - a.priority)\n .reduce<Plugin[]>((acc, {cb}) => {\n const res = cb(deps);\n if (Array.isArray(res)) acc.push(...res);\n else acc.push(res);\n return acc;\n }, []);\n },\n actions: (deps) =>\n actions.reduce(\n (obj, [name, cb]) => {\n obj[name] = cb(deps);\n return obj;\n },\n {} as Record<string, ActionSpec>,\n ),\n };\n }\n}\n"]}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import type { Match } from 'linkify-it';
|
|
2
1
|
import type MarkdownIt from 'markdown-it';
|
|
3
2
|
import type Token from 'markdown-it/lib/token';
|
|
4
3
|
import { Mark, type Node, type NodeType, type Schema } from 'prosemirror-model';
|
|
5
4
|
import { type Logger2 } from "../../logger.js";
|
|
6
|
-
import type { Parser, ParserToken } from "../types/parser.js";
|
|
5
|
+
import type { LinkMatch, Parser, ParserToken } from "../types/parser.js";
|
|
7
6
|
import { type TransformFn } from "./ProseMirrorTransformer/index.js";
|
|
8
7
|
export type TokenAttrs = {
|
|
9
8
|
[name: string]: unknown;
|
|
@@ -30,7 +29,7 @@ export declare class MarkdownParser implements Parser {
|
|
|
30
29
|
validateLink(url: string): boolean;
|
|
31
30
|
normalizeLink(url: string): string;
|
|
32
31
|
normalizeLinkText(url: string): string;
|
|
33
|
-
matchLinks(text: string): Readonly<
|
|
32
|
+
matchLinks(text: string): Readonly<LinkMatch>[] | null;
|
|
34
33
|
parse(src: string): Node;
|
|
35
34
|
parse(tokens: Token[]): Node;
|
|
36
35
|
private top;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownParser.js","sourceRoot":"../../../../src","sources":["core/markdown/MarkdownParser.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Match} from 'linkify-it'; // eslint-disable-line import/no-extraneous-dependencies\nimport type MarkdownIt from 'markdown-it';\nimport type Token from 'markdown-it/lib/token';\nimport {Mark, type MarkType, type Node, type NodeType, type Schema} from 'prosemirror-model';\n\nimport {type Logger2, logger} from '../../logger';\nimport type {Parser, ParserToken} from '../types/parser';\n\nimport {ProseMirrorTransformer, type TransformFn} from './ProseMirrorTransformer';\n\nexport type TokenAttrs = {[name: string]: unknown};\n\nconst openSuffix = '_open';\nconst closeSuffix = '_close';\nenum TokenType {\n open = 'open',\n close = 'close',\n default = 'default',\n}\n\n/**\n * Remove suffixes from the node name.\n * Crops specified `openSuffix` and `closeSuffix` from the end of the given `tokName`.\n */\nfunction cropNodeName(tokName: string, openSuffix: string, closeSuffix: string): string {\n const regex = new RegExp(`(${openSuffix})$|(${closeSuffix})$`);\n return tokName.replace(regex, '');\n}\n\ntype MarkdownParserOptions = {\n logger: Logger2.ILogger;\n pmTransformers: TransformFn[];\n dynamicModifier?: MarkdownParserDynamicModifier;\n};\n\nexport class MarkdownParser implements Parser {\n schema: Schema;\n stack: Array<{type: NodeType; attrs?: TokenAttrs; content: Array<Node>}> = [];\n marks: readonly Mark[];\n tokens: Record<string, ParserToken>;\n tokenizer: MarkdownIt;\n pmTransformers: TransformFn[];\n dynamicModifier: MarkdownParserDynamicModifier | null;\n\n private logger: Logger2.ILogger;\n\n constructor(\n schema: Schema,\n tokenizer: MarkdownIt,\n tokens: Record<string, ParserToken>,\n opts: MarkdownParserOptions,\n ) {\n this.schema = schema;\n\n this.marks = Mark.none;\n this.tokens = tokens;\n this.tokenizer = tokenizer;\n this.pmTransformers = opts.pmTransformers;\n this.dynamicModifier = opts.dynamicModifier ?? null;\n\n this.logger = opts.logger.nested({module: 'markdown-parser'});\n }\n\n validateLink(url: string): boolean {\n return this.tokenizer.validateLink(url);\n }\n\n normalizeLink(url: string): string {\n return this.tokenizer.normalizeLink(url);\n }\n\n normalizeLinkText(url: string): string {\n return this.tokenizer.normalizeLinkText(url);\n }\n\n matchLinks(text: string): Readonly<Match>[] | null {\n return this.tokenizer.linkify.match(text);\n }\n\n parse(src: string): Node;\n parse(tokens: Token[]): Node;\n parse(src: string | Token[]) {\n const time = Date.now();\n\n try {\n this.stack = [{type: this.schema.topNodeType, content: []}];\n\n let mdItTokens;\n try {\n mdItTokens = typeof src === 'string' ? this.tokenizer.parse(src, {}) : src;\n if (this.dynamicModifier) {\n mdItTokens = this.dynamicModifier.processTokens(\n mdItTokens,\n typeof src === 'string' ? src : null,\n );\n }\n } catch (err) {\n const e = err as Error;\n e.message = 'Unable to parse your markup. Please check for errors. ' + e.message;\n this.logger.error(e);\n throw e;\n }\n\n this.parseTokens(mdItTokens);\n\n let doc;\n\n // If after parsing there are still unclosed nodes, close them by removing them from the stack.\n do {\n doc = this.closeNode();\n } while (this.stack.length);\n\n const pmTransformer = new ProseMirrorTransformer(this.pmTransformers);\n\n return doc ? pmTransformer.transform(doc) : this.schema.topNodeType.createAndFill()!;\n } finally {\n logger.metrics({component: 'parser', event: 'parse', duration: Date.now() - time});\n this.logger.metrics({component: 'parser', event: 'parse', duration: Date.now() - time});\n }\n }\n\n private top() {\n return this.stack[this.stack.length - 1];\n }\n\n private push(elt: Node) {\n if (this.stack.length) this.top().content.push(elt);\n }\n\n //#region helpers\n\n private getTokenAttrs(\n token: Token,\n tokenSpec: ParserToken,\n tokenStream: Token[],\n i: number,\n ): TokenAttrs | undefined {\n let attrs: TokenAttrs | undefined = {};\n\n if (tokenSpec.getAttrs) {\n attrs = tokenSpec.getAttrs(token, tokenStream, i);\n } else if (tokenSpec.attrs instanceof Function) {\n attrs = tokenSpec.attrs(token);\n } else {\n attrs = tokenSpec.attrs;\n }\n\n if (this.dynamicModifier) {\n attrs = this.dynamicModifier.processAttrs(token, attrs ?? {});\n }\n\n return attrs;\n }\n\n private getTokenSpec(token: Token) {\n // Matching the pm-node meta-attribute which is set in the plugin for markdown-it\n let tokName = (token.meta?.['pm-node'] as string) || token.type;\n\n // Cropping _open and _close from node name end\n // e.g. paragraph_open -> paragraph\n tokName = cropNodeName(tokName, openSuffix, closeSuffix);\n\n let tokenSpec: ParserToken | undefined;\n if (tokName in this.tokens) {\n tokenSpec = this.tokens[tokName];\n }\n\n if (!tokenSpec) {\n throw new RangeError(`No token spec for token: ${JSON.stringify(token)}`);\n }\n\n return tokenSpec;\n }\n\n // Getting token type from its name\n // e.g. \"paragraph_open\" - is opening token for paragraph\n private getTokenType({type}: Token): keyof typeof TokenType {\n if (type.endsWith(openSuffix)) return TokenType.open;\n if (type.endsWith(closeSuffix)) return TokenType.close;\n\n return TokenType.default;\n }\n\n //#endregion\n\n //#region token handlers\n\n // Self-explanatory\n private handlePrimitiveToken(token: Token) {\n switch (token.type) {\n case 'text':\n this.addText(withoutTrailingNewline(token.content));\n return true;\n case 'inline':\n this.parseTokens(token.children || []);\n return true;\n case 'softbreak':\n // TODO: move all primitive token's handlers to extensions\n if (this.tokens.softbreak) return false;\n this.addText('\\n');\n return true;\n }\n\n return false;\n }\n\n private handleMark(token: Token, tokenSpec: ParserToken, attrs?: TokenAttrs) {\n const schemaSpec = this.schema.marks[tokenSpec.name];\n\n if (tokenSpec.noCloseToken) {\n this.openMark(schemaSpec.create(attrs));\n let {content} = token;\n if (!tokenSpec.code) content = withoutTrailingNewline(content);\n this.addText(content);\n this.closeMark(schemaSpec);\n\n return;\n }\n\n switch (this.getTokenType(token)) {\n case 'open': {\n this.openMark(schemaSpec.create(attrs));\n\n break;\n }\n case 'close': {\n this.closeMark(schemaSpec);\n\n break;\n }\n }\n }\n\n private getNodeSchema(tokenSpec: ParserToken) {\n const spec = this.schema.nodes[tokenSpec.name];\n return spec;\n }\n\n private handleNode(_token: Token, tokenSpec: ParserToken, attrs?: TokenAttrs) {\n const schemaSpec = this.getNodeSchema(tokenSpec);\n\n // Adding node as is, becasuse it doesn't contain content.\n this.addNode(schemaSpec, attrs);\n }\n\n private handleBlock(token: Token, tokenSpec: ParserToken, attrs?: TokenAttrs) {\n const schemaSpec = this.getNodeSchema(tokenSpec);\n\n if (tokenSpec.noCloseToken) {\n this.openNode(schemaSpec, attrs);\n\n if (tokenSpec.contentField === 'children' && token.children?.length) {\n this.parseTokens(token.children);\n } else {\n let {content} = token;\n if (tokenSpec.prepareContent) {\n content = tokenSpec.prepareContent(content);\n }\n this.addText(content);\n }\n\n this.closeNode();\n return;\n }\n\n switch (this.getTokenType(token)) {\n case 'open': {\n this.openNode(schemaSpec, attrs);\n\n break;\n }\n case 'close': {\n this.closeNode();\n\n break;\n }\n }\n }\n\n private handleToken(token: Token, tokenSpec: ParserToken, attrs?: TokenAttrs) {\n switch (tokenSpec.type) {\n case 'mark':\n this.handleMark(token, tokenSpec, attrs);\n break;\n case 'node':\n this.handleNode(token, tokenSpec, attrs);\n break;\n case 'block':\n this.handleBlock(token, tokenSpec, attrs);\n break;\n }\n }\n\n //#endregion\n\n //#region state methods\n\n private addNode(type: NodeType, attrs?: Object, content?: Node[]) {\n let node = type.createAndFill(attrs, content, this.marks);\n if (!node) {\n return null;\n }\n\n if (this.dynamicModifier) {\n node = this.dynamicModifier.processNodes(node);\n }\n\n this.push(node);\n\n return node;\n }\n\n private openNode(type: NodeType, attrs?: TokenAttrs) {\n this.stack.push({type: type, attrs, content: []});\n }\n\n private closeNode() {\n // Marks operate within a node. Therefore, when we close the node, we reset the existing marks.\n if (this.marks.length) {\n this.marks = Mark.none;\n }\n\n const info = this.stack.pop();\n if (info) {\n return this.addNode(info.type, info.attrs, info.content);\n }\n\n return null;\n }\n\n private addText(text: string) {\n if (!text) return;\n const nodes = this.top().content;\n const last = nodes[nodes.length - 1];\n const node = this.schema.text(text, this.marks);\n let merged;\n if (last && (merged = maybeMerge(last, node))) nodes[nodes.length - 1] = merged;\n else nodes.push(node);\n }\n\n // Adding mark to a set of open marks\n private openMark(mark: Mark) {\n this.marks = mark.addToSet(this.marks);\n }\n\n private closeMark(mark: MarkType) {\n this.marks = mark.removeFromSet(this.marks);\n }\n\n //#endregion\n\n private parseTokens(tokens: Token[]) {\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (this.handlePrimitiveToken(token)) continue;\n\n const tokenSpec = this.getTokenSpec(token);\n\n if (tokenSpec.ignore) continue;\n\n const attrs = this.getTokenAttrs(token, tokenSpec, tokens, i);\n\n this.handleToken(token, tokenSpec, attrs);\n }\n }\n}\n\n// Checking if these are two text nodes and they have the same marks, then it merges them into one.\nfunction maybeMerge(a: Node, b: Node) {\n if (a.isText && b.isText && Mark.sameSet(a.marks, b.marks)) {\n // Somehow this method is not in typings but it exists.\n // @ts-expect-error\n return a.withText(a.text + b.text);\n }\n}\n\nfunction withoutTrailingNewline(str: string) {\n return str[str.length - 1] === '\\n' || str.endsWith('\\\\n') ? str.slice(0, str.length - 1) : str;\n}\n\nexport type ProcessToken = (\n token: Token,\n index: number,\n rawMarkup: string | null,\n allowedAttrs?: string[],\n) => Token;\nexport type ProcessNodeAttrs = (\n token: Token,\n attrs: TokenAttrs,\n allowedAttrs?: string[],\n) => TokenAttrs;\nexport type ProcessNode = (node: Node) => Node;\n\nexport interface ElementProcessor {\n processToken?: ProcessToken[];\n processNodeAttrs?: ProcessNodeAttrs[];\n processNode?: ProcessNode[];\n}\n\nexport interface MarkdownParserDynamicModifierConfig {\n [elementType: string]: ElementProcessor;\n}\n\n/**\n * Class MarkdownParserDynamicModifier\n *\n * Provides a mechanism for dynamic modification of tokens and node attributes during parsing by a MarkdownParser.\n * It allows sequential processing of element types by applying a series of custom handlers:\n *\n * - `processToken`: An array of handlers that process tokens sequentially, each passing the result to the next.\n *\n * - `processNodeAttrs`: An array of handlers that modify and process node attributes.\n *\n * - `processNode`: An array of handlers that process and modify the resulting ProseMirror nodes.\n *\n * Example:\n * ```ts\n * const dynamicModifier = new MarkdownParserDynamicModifier({\n * paragraph: {\n * processToken: [\n * (token, index, rawMarkup, allowedAttrs) => {\n * token.attrSet('data-prefix', 'prefix-value');\n * return token;\n * },\n * (token) => {\n * console.log(`Processing token: ${token.type}`);\n * return token;\n * },\n * ],\n * processNodeAttrs: [\n * (token, attrs) => {\n * attrs['data-paragraph'] = token.attrGet('data-prefix');\n * return attrs;\n * },\n * (token, attrs) => {\n * console.log(`Processing attrs for token: ${token.type}`);\n * return attrs;\n * },\n * ],\n * processNode: [\n * (node) => {\n * console.log(`Processing node: ${node.type}`);\n * return node;\n * },\n * ],\n * },\n * });\n * ```\n *\n * This class extends the functionality of a MarkdownParser for scenarios such as:\n * - Adding default attributes to specific elements.\n * - Modifying token metadata.\n * - Logging or customizing processing steps for debugging.\n */\nexport class MarkdownParserDynamicModifier {\n private elementProcessors: Map<string, ElementProcessor>;\n\n constructor(config: MarkdownParserDynamicModifierConfig) {\n this.elementProcessors = new Map(Object.entries(config));\n }\n\n processTokens(tokens: Token[], rawMarkup: string | null): Token[] {\n return tokens.map((token, index) => {\n const processor = this.elementProcessors.get(cropNodeName(token.type, openSuffix, ''));\n\n const processedToken =\n processor?.processToken?.reduce((currentToken, process) => {\n return process(currentToken, index, rawMarkup);\n }, token) || token;\n\n if (processedToken.children) {\n processedToken.children = this.processTokens(processedToken.children, rawMarkup);\n }\n\n return processedToken;\n });\n }\n\n processAttrs(token: Token, attrs: TokenAttrs): TokenAttrs {\n const processor = this.elementProcessors.get(cropNodeName(token.type, openSuffix, ''));\n if (!processor || !processor.processNodeAttrs || processor.processNodeAttrs.length === 0) {\n return attrs;\n }\n\n return processor.processNodeAttrs.reduce((currentAttrs, process) => {\n return process(token, currentAttrs);\n }, attrs);\n }\n\n processNodes(node: Node): Node {\n const processor = this.elementProcessors.get(node.type.name);\n if (!processor || !processor.processNode || processor.processNode.length === 0) {\n return node;\n }\n\n return processor.processNode.reduce((currentNode, process) => {\n return process(currentNode);\n }, node);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"MarkdownParser.js","sourceRoot":"../../../../src","sources":["core/markdown/MarkdownParser.ts"],"names":[],"mappings":"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","sourcesContent":["import type MarkdownIt from 'markdown-it';\nimport type Token from 'markdown-it/lib/token';\nimport {Mark, type MarkType, type Node, type NodeType, type Schema} from 'prosemirror-model';\n\nimport {type Logger2, logger} from '../../logger';\nimport type {LinkMatch, Parser, ParserToken} from '../types/parser';\n\nimport {ProseMirrorTransformer, type TransformFn} from './ProseMirrorTransformer';\n\nexport type TokenAttrs = {[name: string]: unknown};\n\nconst openSuffix = '_open';\nconst closeSuffix = '_close';\nenum TokenType {\n open = 'open',\n close = 'close',\n default = 'default',\n}\n\n/**\n * Remove suffixes from the node name.\n * Crops specified `openSuffix` and `closeSuffix` from the end of the given `tokName`.\n */\nfunction cropNodeName(tokName: string, openSuffix: string, closeSuffix: string): string {\n const regex = new RegExp(`(${openSuffix})$|(${closeSuffix})$`);\n return tokName.replace(regex, '');\n}\n\ntype MarkdownParserOptions = {\n logger: Logger2.ILogger;\n pmTransformers: TransformFn[];\n dynamicModifier?: MarkdownParserDynamicModifier;\n};\n\nexport class MarkdownParser implements Parser {\n schema: Schema;\n stack: Array<{type: NodeType; attrs?: TokenAttrs; content: Array<Node>}> = [];\n marks: readonly Mark[];\n tokens: Record<string, ParserToken>;\n tokenizer: MarkdownIt;\n pmTransformers: TransformFn[];\n dynamicModifier: MarkdownParserDynamicModifier | null;\n\n private logger: Logger2.ILogger;\n\n constructor(\n schema: Schema,\n tokenizer: MarkdownIt,\n tokens: Record<string, ParserToken>,\n opts: MarkdownParserOptions,\n ) {\n this.schema = schema;\n\n this.marks = Mark.none;\n this.tokens = tokens;\n this.tokenizer = tokenizer;\n this.pmTransformers = opts.pmTransformers;\n this.dynamicModifier = opts.dynamicModifier ?? null;\n\n this.logger = opts.logger.nested({module: 'markdown-parser'});\n }\n\n validateLink(url: string): boolean {\n return this.tokenizer.validateLink(url);\n }\n\n normalizeLink(url: string): string {\n return this.tokenizer.normalizeLink(url);\n }\n\n normalizeLinkText(url: string): string {\n return this.tokenizer.normalizeLinkText(url);\n }\n\n matchLinks(text: string): Readonly<LinkMatch>[] | null {\n return this.tokenizer.linkify.match(text);\n }\n\n parse(src: string): Node;\n parse(tokens: Token[]): Node;\n parse(src: string | Token[]) {\n const time = Date.now();\n\n try {\n this.stack = [{type: this.schema.topNodeType, content: []}];\n\n let mdItTokens;\n try {\n mdItTokens = typeof src === 'string' ? this.tokenizer.parse(src, {}) : src;\n if (this.dynamicModifier) {\n mdItTokens = this.dynamicModifier.processTokens(\n mdItTokens,\n typeof src === 'string' ? src : null,\n );\n }\n } catch (err) {\n const e = err as Error;\n e.message = 'Unable to parse your markup. Please check for errors. ' + e.message;\n this.logger.error(e);\n throw e;\n }\n\n this.parseTokens(mdItTokens);\n\n let doc;\n\n // If after parsing there are still unclosed nodes, close them by removing them from the stack.\n do {\n doc = this.closeNode();\n } while (this.stack.length);\n\n const pmTransformer = new ProseMirrorTransformer(this.pmTransformers);\n\n return doc ? pmTransformer.transform(doc) : this.schema.topNodeType.createAndFill()!;\n } finally {\n logger.metrics({component: 'parser', event: 'parse', duration: Date.now() - time});\n this.logger.metrics({component: 'parser', event: 'parse', duration: Date.now() - time});\n }\n }\n\n private top() {\n return this.stack[this.stack.length - 1];\n }\n\n private push(elt: Node) {\n if (this.stack.length) this.top().content.push(elt);\n }\n\n //#region helpers\n\n private getTokenAttrs(\n token: Token,\n tokenSpec: ParserToken,\n tokenStream: Token[],\n i: number,\n ): TokenAttrs | undefined {\n let attrs: TokenAttrs | undefined = {};\n\n if (tokenSpec.getAttrs) {\n attrs = tokenSpec.getAttrs(token, tokenStream, i);\n } else if (tokenSpec.attrs instanceof Function) {\n attrs = tokenSpec.attrs(token);\n } else {\n attrs = tokenSpec.attrs;\n }\n\n if (this.dynamicModifier) {\n attrs = this.dynamicModifier.processAttrs(token, attrs ?? {});\n }\n\n return attrs;\n }\n\n private getTokenSpec(token: Token) {\n // Matching the pm-node meta-attribute which is set in the plugin for markdown-it\n let tokName = (token.meta?.['pm-node'] as string) || token.type;\n\n // Cropping _open and _close from node name end\n // e.g. paragraph_open -> paragraph\n tokName = cropNodeName(tokName, openSuffix, closeSuffix);\n\n let tokenSpec: ParserToken | undefined;\n if (tokName in this.tokens) {\n tokenSpec = this.tokens[tokName];\n }\n\n if (!tokenSpec) {\n throw new RangeError(`No token spec for token: ${JSON.stringify(token)}`);\n }\n\n return tokenSpec;\n }\n\n // Getting token type from its name\n // e.g. \"paragraph_open\" - is opening token for paragraph\n private getTokenType({type}: Token): keyof typeof TokenType {\n if (type.endsWith(openSuffix)) return TokenType.open;\n if (type.endsWith(closeSuffix)) return TokenType.close;\n\n return TokenType.default;\n }\n\n //#endregion\n\n //#region token handlers\n\n // Self-explanatory\n private handlePrimitiveToken(token: Token) {\n switch (token.type) {\n case 'text':\n this.addText(withoutTrailingNewline(token.content));\n return true;\n case 'inline':\n this.parseTokens(token.children || []);\n return true;\n case 'softbreak':\n // TODO: move all primitive token's handlers to extensions\n if (this.tokens.softbreak) return false;\n this.addText('\\n');\n return true;\n }\n\n return false;\n }\n\n private handleMark(token: Token, tokenSpec: ParserToken, attrs?: TokenAttrs) {\n const schemaSpec = this.schema.marks[tokenSpec.name];\n\n if (tokenSpec.noCloseToken) {\n this.openMark(schemaSpec.create(attrs));\n let {content} = token;\n if (!tokenSpec.code) content = withoutTrailingNewline(content);\n this.addText(content);\n this.closeMark(schemaSpec);\n\n return;\n }\n\n switch (this.getTokenType(token)) {\n case 'open': {\n this.openMark(schemaSpec.create(attrs));\n\n break;\n }\n case 'close': {\n this.closeMark(schemaSpec);\n\n break;\n }\n }\n }\n\n private getNodeSchema(tokenSpec: ParserToken) {\n const spec = this.schema.nodes[tokenSpec.name];\n return spec;\n }\n\n private handleNode(_token: Token, tokenSpec: ParserToken, attrs?: TokenAttrs) {\n const schemaSpec = this.getNodeSchema(tokenSpec);\n\n // Adding node as is, becasuse it doesn't contain content.\n this.addNode(schemaSpec, attrs);\n }\n\n private handleBlock(token: Token, tokenSpec: ParserToken, attrs?: TokenAttrs) {\n const schemaSpec = this.getNodeSchema(tokenSpec);\n\n if (tokenSpec.noCloseToken) {\n this.openNode(schemaSpec, attrs);\n\n if (tokenSpec.contentField === 'children' && token.children?.length) {\n this.parseTokens(token.children);\n } else {\n let {content} = token;\n if (tokenSpec.prepareContent) {\n content = tokenSpec.prepareContent(content);\n }\n this.addText(content);\n }\n\n this.closeNode();\n return;\n }\n\n switch (this.getTokenType(token)) {\n case 'open': {\n this.openNode(schemaSpec, attrs);\n\n break;\n }\n case 'close': {\n this.closeNode();\n\n break;\n }\n }\n }\n\n private handleToken(token: Token, tokenSpec: ParserToken, attrs?: TokenAttrs) {\n switch (tokenSpec.type) {\n case 'mark':\n this.handleMark(token, tokenSpec, attrs);\n break;\n case 'node':\n this.handleNode(token, tokenSpec, attrs);\n break;\n case 'block':\n this.handleBlock(token, tokenSpec, attrs);\n break;\n }\n }\n\n //#endregion\n\n //#region state methods\n\n private addNode(type: NodeType, attrs?: Object, content?: Node[]) {\n let node = type.createAndFill(attrs, content, this.marks);\n if (!node) {\n return null;\n }\n\n if (this.dynamicModifier) {\n node = this.dynamicModifier.processNodes(node);\n }\n\n this.push(node);\n\n return node;\n }\n\n private openNode(type: NodeType, attrs?: TokenAttrs) {\n this.stack.push({type: type, attrs, content: []});\n }\n\n private closeNode() {\n // Marks operate within a node. Therefore, when we close the node, we reset the existing marks.\n if (this.marks.length) {\n this.marks = Mark.none;\n }\n\n const info = this.stack.pop();\n if (info) {\n return this.addNode(info.type, info.attrs, info.content);\n }\n\n return null;\n }\n\n private addText(text: string) {\n if (!text) return;\n const nodes = this.top().content;\n const last = nodes[nodes.length - 1];\n const node = this.schema.text(text, this.marks);\n let merged;\n if (last && (merged = maybeMerge(last, node))) nodes[nodes.length - 1] = merged;\n else nodes.push(node);\n }\n\n // Adding mark to a set of open marks\n private openMark(mark: Mark) {\n this.marks = mark.addToSet(this.marks);\n }\n\n private closeMark(mark: MarkType) {\n this.marks = mark.removeFromSet(this.marks);\n }\n\n //#endregion\n\n private parseTokens(tokens: Token[]) {\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (this.handlePrimitiveToken(token)) continue;\n\n const tokenSpec = this.getTokenSpec(token);\n\n if (tokenSpec.ignore) continue;\n\n const attrs = this.getTokenAttrs(token, tokenSpec, tokens, i);\n\n this.handleToken(token, tokenSpec, attrs);\n }\n }\n}\n\n// Checking if these are two text nodes and they have the same marks, then it merges them into one.\nfunction maybeMerge(a: Node, b: Node) {\n if (a.isText && b.isText && Mark.sameSet(a.marks, b.marks)) {\n // Somehow this method is not in typings but it exists.\n // @ts-expect-error\n return a.withText(a.text + b.text);\n }\n}\n\nfunction withoutTrailingNewline(str: string) {\n return str[str.length - 1] === '\\n' || str.endsWith('\\\\n') ? str.slice(0, str.length - 1) : str;\n}\n\nexport type ProcessToken = (\n token: Token,\n index: number,\n rawMarkup: string | null,\n allowedAttrs?: string[],\n) => Token;\nexport type ProcessNodeAttrs = (\n token: Token,\n attrs: TokenAttrs,\n allowedAttrs?: string[],\n) => TokenAttrs;\nexport type ProcessNode = (node: Node) => Node;\n\nexport interface ElementProcessor {\n processToken?: ProcessToken[];\n processNodeAttrs?: ProcessNodeAttrs[];\n processNode?: ProcessNode[];\n}\n\nexport interface MarkdownParserDynamicModifierConfig {\n [elementType: string]: ElementProcessor;\n}\n\n/**\n * Class MarkdownParserDynamicModifier\n *\n * Provides a mechanism for dynamic modification of tokens and node attributes during parsing by a MarkdownParser.\n * It allows sequential processing of element types by applying a series of custom handlers:\n *\n * - `processToken`: An array of handlers that process tokens sequentially, each passing the result to the next.\n *\n * - `processNodeAttrs`: An array of handlers that modify and process node attributes.\n *\n * - `processNode`: An array of handlers that process and modify the resulting ProseMirror nodes.\n *\n * Example:\n * ```ts\n * const dynamicModifier = new MarkdownParserDynamicModifier({\n * paragraph: {\n * processToken: [\n * (token, index, rawMarkup, allowedAttrs) => {\n * token.attrSet('data-prefix', 'prefix-value');\n * return token;\n * },\n * (token) => {\n * console.log(`Processing token: ${token.type}`);\n * return token;\n * },\n * ],\n * processNodeAttrs: [\n * (token, attrs) => {\n * attrs['data-paragraph'] = token.attrGet('data-prefix');\n * return attrs;\n * },\n * (token, attrs) => {\n * console.log(`Processing attrs for token: ${token.type}`);\n * return attrs;\n * },\n * ],\n * processNode: [\n * (node) => {\n * console.log(`Processing node: ${node.type}`);\n * return node;\n * },\n * ],\n * },\n * });\n * ```\n *\n * This class extends the functionality of a MarkdownParser for scenarios such as:\n * - Adding default attributes to specific elements.\n * - Modifying token metadata.\n * - Logging or customizing processing steps for debugging.\n */\nexport class MarkdownParserDynamicModifier {\n private elementProcessors: Map<string, ElementProcessor>;\n\n constructor(config: MarkdownParserDynamicModifierConfig) {\n this.elementProcessors = new Map(Object.entries(config));\n }\n\n processTokens(tokens: Token[], rawMarkup: string | null): Token[] {\n return tokens.map((token, index) => {\n const processor = this.elementProcessors.get(cropNodeName(token.type, openSuffix, ''));\n\n const processedToken =\n processor?.processToken?.reduce((currentToken, process) => {\n return process(currentToken, index, rawMarkup);\n }, token) || token;\n\n if (processedToken.children) {\n processedToken.children = this.processTokens(processedToken.children, rawMarkup);\n }\n\n return processedToken;\n });\n }\n\n processAttrs(token: Token, attrs: TokenAttrs): TokenAttrs {\n const processor = this.elementProcessors.get(cropNodeName(token.type, openSuffix, ''));\n if (!processor || !processor.processNodeAttrs || processor.processNodeAttrs.length === 0) {\n return attrs;\n }\n\n return processor.processNodeAttrs.reduce((currentAttrs, process) => {\n return process(token, currentAttrs);\n }, attrs);\n }\n\n processNodes(node: Node): Node {\n const processor = this.elementProcessors.get(node.type.name);\n if (!processor || !processor.processNode || processor.processNode.length === 0) {\n return node;\n }\n\n return processor.processNode.reduce((currentNode, process) => {\n return process(currentNode);\n }, node);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.js","sourceRoot":"../../../../src","sources":["core/types/extension.ts"],"names":[],"mappings":"","sourcesContent":["import type MarkdownIt from 'markdown-it';\nimport type OrderedMap from 'orderedmap'
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"../../../../src","sources":["core/types/extension.ts"],"names":[],"mappings":"","sourcesContent":["import type MarkdownIt from 'markdown-it';\nimport type OrderedMap from 'orderedmap';\nimport type {MarkSpec, NodeSpec, Schema} from 'prosemirror-model';\nimport type {Plugin} from 'prosemirror-state';\n\nimport type {ExtensionBuilder} from '../ExtensionBuilder';\n\nimport type {ActionSpec, ActionStorage} from './actions';\nimport type {MarkViewConstructor, NodeViewConstructor} from './node-views';\nimport type {Parser, ParserToken} from './parser';\nimport type {Serializer, SerializerMarkToken, SerializerNodeToken} from './serializer';\n\nexport type Extension = (builder: ExtensionBuilder) => void;\nexport type ExtensionWithOptions<T> = (builder: ExtensionBuilder, options: T) => void;\nexport type ExtensionAuto<T = void> = T extends void ? Extension : ExtensionWithOptions<T>;\n\nexport type ExtensionSpec = {\n configureMd(md: MarkdownIt, parserType: 'text' | 'markup'): MarkdownIt;\n nodes(): OrderedMap<ExtensionNodeSpec>;\n marks(): OrderedMap<ExtensionMarkSpec>;\n plugins(deps: ExtensionDeps): Plugin[];\n actions(deps: ExtensionDeps): Record<string, ActionSpec>;\n};\n\nexport type ExtensionNodeSpec = {\n spec: NodeSpec;\n view?: (deps: ExtensionDeps) => NodeViewConstructor;\n fromMd: {\n tokenName?: string;\n tokenSpec: ParserToken;\n };\n toMd: SerializerNodeToken;\n};\n\nexport type ExtensionMarkSpec = {\n spec: MarkSpec;\n view?: (deps: ExtensionDeps) => MarkViewConstructor;\n fromMd: {\n tokenName?: string;\n tokenSpec: ParserToken;\n };\n toMd: SerializerMarkToken;\n};\n\nexport type ExtensionDeps = {\n readonly schema: Schema;\n readonly textParser: Parser;\n readonly markupParser: Parser;\n readonly serializer: Serializer;\n readonly actions: ActionStorage;\n};\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import type MarkdownIt from 'markdown-it';
|
|
2
2
|
import type Token from 'markdown-it/lib/token';
|
|
3
3
|
import type { Node } from 'prosemirror-model';
|
|
4
|
+
export type LinkMatch = Readonly<NonNullable<ReturnType<MarkdownIt['linkify']['match']>>[number]>;
|
|
4
5
|
export interface Parser {
|
|
5
6
|
/** Parse raw markup to prosemirror's root node */
|
|
6
7
|
parse(markup: string): Node;
|
|
@@ -9,7 +10,7 @@ export interface Parser {
|
|
|
9
10
|
validateLink(url: string): boolean;
|
|
10
11
|
normalizeLink(url: string): string;
|
|
11
12
|
normalizeLinkText(url: string): string;
|
|
12
|
-
matchLinks(text: string):
|
|
13
|
+
matchLinks(text: string): LinkMatch[] | null;
|
|
13
14
|
}
|
|
14
15
|
export interface ParserToken {
|
|
15
16
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"../../../../src","sources":["core/types/parser.ts"],"names":[],"mappings":"","sourcesContent":["import type
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"../../../../src","sources":["core/types/parser.ts"],"names":[],"mappings":"","sourcesContent":["import type MarkdownIt from 'markdown-it';\nimport type Token from 'markdown-it/lib/token';\nimport type {Node} from 'prosemirror-model';\n\nexport type LinkMatch = Readonly<NonNullable<ReturnType<MarkdownIt['linkify']['match']>>[number]>;\n\nexport interface Parser {\n /** Parse raw markup to prosemirror's root node */\n parse(markup: string): Node;\n /** Parse markdown-it tokens stream to prosemirror's root node */\n parse(tokens: Token[]): Node;\n validateLink(url: string): boolean;\n normalizeLink(url: string): string;\n normalizeLinkText(url: string): string;\n matchLinks(text: string): LinkMatch[] | null;\n}\n\nexport interface ParserToken {\n name: string;\n type: 'node' | 'block' | 'mark';\n attrs?: {[name: string]: unknown};\n getAttrs?: (token: Token, tokens: Token[], index: number) => NonNullable<ParserToken['attrs']>;\n // It means that there is no closing token\n // That is, the content lies in the content field of the token, and not between the opening and closing tokens.\n noCloseToken?: boolean;\n ignore?: boolean;\n code?: boolean;\n /** only for tokens with type=block */\n prepareContent?: (content: string) => string;\n /**\n * only for tokens with type=block and noCloseToken=true\n * @default 'content'\n */\n contentField?: 'content' | 'children';\n}\n"]}
|
|
@@ -118,9 +118,7 @@ export class GptWidgetDecoView {
|
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
120
|
_getCurrentDecoration() {
|
|
121
|
-
return this._getPluginState()?.find(undefined, undefined,
|
|
122
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return
|
|
123
|
-
(spec) => spec[WIDGET_DECO_SPEC_FLAG])[0];
|
|
121
|
+
return this._getPluginState()?.find(undefined, undefined, (spec) => spec[WIDGET_DECO_SPEC_FLAG])[0];
|
|
124
122
|
}
|
|
125
123
|
_getPluginState() {
|
|
126
124
|
return pluginKey.getState(this._view.state);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.js","sourceRoot":"../../../../../../src","sources":["extensions/additional/GPT/gptExtension/view.tsx"],"names":[],"mappings":"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","sourcesContent":["import {useCallback} from 'react';\n\nimport {Popup} from '@gravity-ui/uikit';\nimport type {PopupProps} from '@gravity-ui/uikit';\nimport {Slice} from 'prosemirror-model';\nimport type {EditorState, PluginView} from 'prosemirror-state';\nimport {TextSelection} from 'prosemirror-state';\nimport type {EditorView} from 'prosemirror-view';\nimport {useMount} from 'react-use';\n\nimport {cn} from '../../../../classname';\nimport type {Parser, Serializer} from '../../../../core';\nimport {getReactRendererFromState} from '../../../behavior';\nimport type {CommonAnswer} from '../ErrorScreen/types';\nimport type {GptDialogProps} from '../GptDialog/GptDialog';\nimport {GptDialog} from '../GptDialog/GptDialog';\nimport {WIDGET_DECO_CLASS_NAME, WIDGET_DECO_SPEC_FLAG, gptPopupPlacement} from '../constants';\nimport type {GptWidgetMeta} from '../plugin';\nimport {pluginKey} from '../plugin';\n\nimport './view.scss';\n\nexport const cnGptPopup = cn('gpt-popup');\n\nexport type GptWidgetDecoViewParams<\n AnswerData extends CommonAnswer = CommonAnswer,\n PromptData extends unknown = unknown,\n> = Omit<GptDialogProps<AnswerData, PromptData>, 'markup' | 'onApplyResult'> & {\n serializer: Serializer;\n parser: Parser;\n} & {\n onApplyResult?: GptDialogProps['onApplyResult'];\n};\n\nexport class GptWidgetDecoView<\n AnswerData extends CommonAnswer = CommonAnswer,\n PromptData extends unknown = unknown,\n> implements Required<PluginView>\n{\n private readonly _view;\n private readonly _renderer;\n\n private _decoElem: Element | null = null;\n private _params: GptWidgetDecoViewParams<AnswerData, PromptData>;\n private _serializer: Serializer;\n private _parser: Parser;\n private _confirmOpen: boolean;\n\n constructor(view: EditorView, params: GptWidgetDecoViewParams<AnswerData, PromptData>) {\n this._view = view;\n\n this._params = params;\n this._serializer = params.serializer;\n this._parser = params.parser;\n this._confirmOpen = false;\n\n this._renderer = getReactRendererFromState(view.state).createItem(\n 'gpt-widget-view',\n this._render.bind(this),\n );\n }\n\n update(view: EditorView, prevState: EditorState): void {\n const {state, dispatch} = view;\n\n if (this._decoElem && !state.selection.eq(prevState.selection)) {\n const transaction = state.tr;\n const meta: GptWidgetMeta = {action: 'hide'};\n\n dispatch(transaction.setMeta(pluginKey, meta));\n this._view.focus();\n\n return;\n }\n\n const decoElements = Array.from(view.dom.querySelectorAll(`.${WIDGET_DECO_CLASS_NAME}`));\n\n this._decoElem = decoElements.at(-1) ?? null;\n this._renderer.rerender();\n }\n\n destroy(): void {\n this._resetState();\n\n this._renderer.remove();\n }\n\n private _resetState() {\n this._decoElem = null;\n this._confirmOpen = false;\n }\n\n private _onConfirmCancel = () => {\n this._confirmOpen = false;\n\n this._renderer.rerender();\n };\n\n private _onConfirmOk = () => {\n this._onClose();\n };\n\n private _render() {\n if (!this._decoElem) return null;\n\n const markup = this._getContentOfDecoration();\n\n if (markup === undefined) {\n return null;\n }\n\n return (\n <Widget\n markup={markup}\n anchorElement={this._decoElem}\n answerRender={this._params.answerRender}\n promptPresets={this._params.promptPresets}\n disablePromptPresets={this._params.disablePromptPresets}\n customPromptPlaceholder={this._params.customPromptPlaceholder}\n disabledPromptPlaceholder={this._params.disabledPromptPlaceholder}\n gptAlertProps={this._params.gptAlertProps}\n onApplyResult={this._onSubmit}\n onCustomPromptApply={this._params.onCustomPromptApply}\n onPromptPresetClick={this._params.onPromptPresetClick}\n onTryAgain={this._params.onTryAgain}\n onLike={this._params.onLike}\n onDislike={this._params.onDislike}\n onClose={this._onClose}\n onUpdate={this._onGptAnswerUpdate}\n confirmOpen={this._confirmOpen}\n onConfirmOk={this._onConfirmOk}\n onConfirmCancel={this._onConfirmCancel}\n />\n );\n }\n\n private _onGptAnswerUpdate: NonNullable<WidgetProps<AnswerData, PromptData>['onUpdate']> = (\n answer,\n ) => {\n this._params.onUpdate?.(answer);\n };\n\n private _onSubmit: NonNullable<WidgetProps['onApplyResult']> = (answer: string) => {\n const deco = this._getCurrentDecoration();\n\n if (!deco) return;\n\n const {from, to} = deco;\n\n const answerNode = this._parser.parse(answer);\n\n const tr = this._view.state.tr;\n const meta: GptWidgetMeta = {action: 'hide'};\n\n tr.setMeta(pluginKey, meta);\n tr.replace(from, to, new Slice(answerNode.content, 1, 1));\n tr.setSelection(TextSelection.create(tr.doc, tr.mapping.map(to)));\n\n this._view.dispatch(tr);\n\n setTimeout(() => {\n this._view.focus();\n }, 0);\n\n this._params.onApplyResult?.(answer);\n\n this._resetState();\n };\n\n private _onClose = () => {\n const deco = this._getCurrentDecoration();\n\n if (!deco) {\n return;\n }\n\n const tr = this._view.state.tr;\n const meta: GptWidgetMeta = {action: 'hide'};\n\n tr.setSelection(TextSelection.create(tr.doc, deco.from, deco.to));\n\n tr.setMeta(pluginKey, meta);\n\n this._view.dispatch(tr);\n\n setTimeout(() => {\n this._view.focus();\n }, 0);\n\n this._params.onClose?.();\n\n this._resetState();\n };\n\n private _getContentOfDecoration(): string | undefined {\n const deco = this._getCurrentDecoration();\n\n if (!deco) return undefined;\n\n const {from, to} = deco;\n\n try {\n // FIXME: Verify and use Node instead of Fragment\n const fragment = this._view.state.doc.slice(from, to, true).content;\n const yfmMarkup = this._serializer.serialize(fragment as any);\n\n return yfmMarkup;\n } catch (error) {\n console.error(error);\n\n return this._view.state.doc.textBetween(from, to, '\\n', '');\n }\n }\n\n private _getCurrentDecoration() {\n return this._getPluginState()?.find(\n undefined,\n undefined,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return\n (spec) => spec[WIDGET_DECO_SPEC_FLAG],\n )[0];\n }\n\n private _getPluginState() {\n return pluginKey.getState(this._view.state);\n }\n}\n\ntype WidgetProps<\n AnswerData extends CommonAnswer = CommonAnswer,\n PromptData extends unknown = unknown,\n> = Pick<PopupProps, 'anchorElement'> & {\n markup: string;\n onClose: () => void;\n confirmOpen: boolean;\n onConfirmOk: () => void;\n onConfirmCancel: () => void;\n} & GptDialogProps<AnswerData, PromptData>;\n\nfunction Widget<\n AnswerData extends CommonAnswer = CommonAnswer,\n PromptData extends unknown = unknown,\n>({\n markup,\n anchorElement,\n answerRender,\n promptPresets,\n disablePromptPresets,\n customPromptPlaceholder,\n disabledPromptPlaceholder,\n onCustomPromptApply,\n onApplyResult,\n onPromptPresetClick,\n onTryAgain,\n onLike,\n onDislike,\n onClose,\n onUpdate,\n gptAlertProps,\n}: WidgetProps<AnswerData, PromptData>) {\n useMount(() => {\n if (anchorElement && 'scrollIntoView' in anchorElement) {\n anchorElement.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n }\n });\n\n const handleUpdate = useCallback(\n (result?: AnswerData) => {\n onUpdate?.(result);\n },\n [onUpdate],\n );\n\n return (\n <>\n <Popup\n className={cnGptPopup()}\n open\n anchorElement={anchorElement}\n placement={gptPopupPlacement}\n onOpenChange={(open) => {\n if (!open) onClose();\n }}\n strategy=\"absolute\"\n >\n <div className={cnGptPopup('content')}>\n <GptDialog\n markup={markup}\n answerRender={answerRender}\n promptPresets={promptPresets}\n disablePromptPresets={disablePromptPresets}\n customPromptPlaceholder={customPromptPlaceholder}\n disabledPromptPlaceholder={disabledPromptPlaceholder}\n onApplyResult={onApplyResult}\n onCustomPromptApply={onCustomPromptApply}\n onPromptPresetClick={onPromptPresetClick}\n onTryAgain={onTryAgain}\n onLike={onLike}\n onDislike={onDislike}\n onClose={onClose}\n onUpdate={handleUpdate}\n gptAlertProps={gptAlertProps}\n />\n </div>\n </Popup>\n </>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"../../../../../../src","sources":["extensions/additional/GPT/gptExtension/view.tsx"],"names":[],"mappings":"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","sourcesContent":["import {useCallback} from 'react';\n\nimport {Popup} from '@gravity-ui/uikit';\nimport type {PopupProps} from '@gravity-ui/uikit';\nimport {Slice} from 'prosemirror-model';\nimport type {EditorState, PluginView} from 'prosemirror-state';\nimport {TextSelection} from 'prosemirror-state';\nimport type {EditorView} from 'prosemirror-view';\nimport {useMount} from 'react-use';\n\nimport {cn} from '../../../../classname';\nimport type {Parser, Serializer} from '../../../../core';\nimport {getReactRendererFromState} from '../../../behavior';\nimport type {CommonAnswer} from '../ErrorScreen/types';\nimport type {GptDialogProps} from '../GptDialog/GptDialog';\nimport {GptDialog} from '../GptDialog/GptDialog';\nimport {WIDGET_DECO_CLASS_NAME, WIDGET_DECO_SPEC_FLAG, gptPopupPlacement} from '../constants';\nimport type {GptWidgetMeta} from '../plugin';\nimport {pluginKey} from '../plugin';\n\nimport './view.scss';\n\nexport const cnGptPopup = cn('gpt-popup');\n\nexport type GptWidgetDecoViewParams<\n AnswerData extends CommonAnswer = CommonAnswer,\n PromptData extends unknown = unknown,\n> = Omit<GptDialogProps<AnswerData, PromptData>, 'markup' | 'onApplyResult'> & {\n serializer: Serializer;\n parser: Parser;\n} & {\n onApplyResult?: GptDialogProps['onApplyResult'];\n};\n\nexport class GptWidgetDecoView<\n AnswerData extends CommonAnswer = CommonAnswer,\n PromptData extends unknown = unknown,\n> implements Required<PluginView> {\n private readonly _view;\n private readonly _renderer;\n\n private _decoElem: Element | null = null;\n private _params: GptWidgetDecoViewParams<AnswerData, PromptData>;\n private _serializer: Serializer;\n private _parser: Parser;\n private _confirmOpen: boolean;\n\n constructor(view: EditorView, params: GptWidgetDecoViewParams<AnswerData, PromptData>) {\n this._view = view;\n\n this._params = params;\n this._serializer = params.serializer;\n this._parser = params.parser;\n this._confirmOpen = false;\n\n this._renderer = getReactRendererFromState(view.state).createItem(\n 'gpt-widget-view',\n this._render.bind(this),\n );\n }\n\n update(view: EditorView, prevState: EditorState): void {\n const {state, dispatch} = view;\n\n if (this._decoElem && !state.selection.eq(prevState.selection)) {\n const transaction = state.tr;\n const meta: GptWidgetMeta = {action: 'hide'};\n\n dispatch(transaction.setMeta(pluginKey, meta));\n this._view.focus();\n\n return;\n }\n\n const decoElements = Array.from(view.dom.querySelectorAll(`.${WIDGET_DECO_CLASS_NAME}`));\n\n this._decoElem = decoElements.at(-1) ?? null;\n this._renderer.rerender();\n }\n\n destroy(): void {\n this._resetState();\n\n this._renderer.remove();\n }\n\n private _resetState() {\n this._decoElem = null;\n this._confirmOpen = false;\n }\n\n private _onConfirmCancel = () => {\n this._confirmOpen = false;\n\n this._renderer.rerender();\n };\n\n private _onConfirmOk = () => {\n this._onClose();\n };\n\n private _render() {\n if (!this._decoElem) return null;\n\n const markup = this._getContentOfDecoration();\n\n if (markup === undefined) {\n return null;\n }\n\n return (\n <Widget\n markup={markup}\n anchorElement={this._decoElem}\n answerRender={this._params.answerRender}\n promptPresets={this._params.promptPresets}\n disablePromptPresets={this._params.disablePromptPresets}\n customPromptPlaceholder={this._params.customPromptPlaceholder}\n disabledPromptPlaceholder={this._params.disabledPromptPlaceholder}\n gptAlertProps={this._params.gptAlertProps}\n onApplyResult={this._onSubmit}\n onCustomPromptApply={this._params.onCustomPromptApply}\n onPromptPresetClick={this._params.onPromptPresetClick}\n onTryAgain={this._params.onTryAgain}\n onLike={this._params.onLike}\n onDislike={this._params.onDislike}\n onClose={this._onClose}\n onUpdate={this._onGptAnswerUpdate}\n confirmOpen={this._confirmOpen}\n onConfirmOk={this._onConfirmOk}\n onConfirmCancel={this._onConfirmCancel}\n />\n );\n }\n\n private _onGptAnswerUpdate: NonNullable<WidgetProps<AnswerData, PromptData>['onUpdate']> = (\n answer,\n ) => {\n this._params.onUpdate?.(answer);\n };\n\n private _onSubmit: NonNullable<WidgetProps['onApplyResult']> = (answer: string) => {\n const deco = this._getCurrentDecoration();\n\n if (!deco) return;\n\n const {from, to} = deco;\n\n const answerNode = this._parser.parse(answer);\n\n const tr = this._view.state.tr;\n const meta: GptWidgetMeta = {action: 'hide'};\n\n tr.setMeta(pluginKey, meta);\n tr.replace(from, to, new Slice(answerNode.content, 1, 1));\n tr.setSelection(TextSelection.create(tr.doc, tr.mapping.map(to)));\n\n this._view.dispatch(tr);\n\n setTimeout(() => {\n this._view.focus();\n }, 0);\n\n this._params.onApplyResult?.(answer);\n\n this._resetState();\n };\n\n private _onClose = () => {\n const deco = this._getCurrentDecoration();\n\n if (!deco) {\n return;\n }\n\n const tr = this._view.state.tr;\n const meta: GptWidgetMeta = {action: 'hide'};\n\n tr.setSelection(TextSelection.create(tr.doc, deco.from, deco.to));\n\n tr.setMeta(pluginKey, meta);\n\n this._view.dispatch(tr);\n\n setTimeout(() => {\n this._view.focus();\n }, 0);\n\n this._params.onClose?.();\n\n this._resetState();\n };\n\n private _getContentOfDecoration(): string | undefined {\n const deco = this._getCurrentDecoration();\n\n if (!deco) return undefined;\n\n const {from, to} = deco;\n\n try {\n // FIXME: Verify and use Node instead of Fragment\n const fragment = this._view.state.doc.slice(from, to, true).content;\n const yfmMarkup = this._serializer.serialize(fragment as any);\n\n return yfmMarkup;\n } catch (error) {\n console.error(error);\n\n return this._view.state.doc.textBetween(from, to, '\\n', '');\n }\n }\n\n private _getCurrentDecoration() {\n return this._getPluginState()?.find(\n undefined,\n undefined,\n (spec) => spec[WIDGET_DECO_SPEC_FLAG],\n )[0];\n }\n\n private _getPluginState() {\n return pluginKey.getState(this._view.state);\n }\n}\n\ntype WidgetProps<\n AnswerData extends CommonAnswer = CommonAnswer,\n PromptData extends unknown = unknown,\n> = Pick<PopupProps, 'anchorElement'> & {\n markup: string;\n onClose: () => void;\n confirmOpen: boolean;\n onConfirmOk: () => void;\n onConfirmCancel: () => void;\n} & GptDialogProps<AnswerData, PromptData>;\n\nfunction Widget<\n AnswerData extends CommonAnswer = CommonAnswer,\n PromptData extends unknown = unknown,\n>({\n markup,\n anchorElement,\n answerRender,\n promptPresets,\n disablePromptPresets,\n customPromptPlaceholder,\n disabledPromptPlaceholder,\n onCustomPromptApply,\n onApplyResult,\n onPromptPresetClick,\n onTryAgain,\n onLike,\n onDislike,\n onClose,\n onUpdate,\n gptAlertProps,\n}: WidgetProps<AnswerData, PromptData>) {\n useMount(() => {\n if (anchorElement && 'scrollIntoView' in anchorElement) {\n anchorElement.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n }\n });\n\n const handleUpdate = useCallback(\n (result?: AnswerData) => {\n onUpdate?.(result);\n },\n [onUpdate],\n );\n\n return (\n <>\n <Popup\n className={cnGptPopup()}\n open\n anchorElement={anchorElement}\n placement={gptPopupPlacement}\n onOpenChange={(open) => {\n if (!open) onClose();\n }}\n strategy=\"absolute\"\n >\n <div className={cnGptPopup('content')}>\n <GptDialog\n markup={markup}\n answerRender={answerRender}\n promptPresets={promptPresets}\n disablePromptPresets={disablePromptPresets}\n customPromptPlaceholder={customPromptPlaceholder}\n disabledPromptPlaceholder={disabledPromptPlaceholder}\n onApplyResult={onApplyResult}\n onCustomPromptApply={onCustomPromptApply}\n onPromptPresetClick={onPromptPresetClick}\n onTryAgain={onTryAgain}\n onLike={onLike}\n onDislike={onDislike}\n onClose={onClose}\n onUpdate={handleUpdate}\n gptAlertProps={gptAlertProps}\n />\n </div>\n </Popup>\n </>\n );\n}\n"]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// eslint-disable-next-line import/no-extraneous-dependencies
|
|
2
1
|
import { transform } from '@diplodoc/mermaid-extension';
|
|
3
2
|
import { generateEntityId } from "../../../../utils/entity-id.js";
|
|
4
3
|
import { MermaidConsts, defaultMermaidEntityId, mermaidNodeName } from "./const.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/additional/Mermaid/MermaidSpecs/index.tsx"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/additional/Mermaid/MermaidSpecs/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,6BAA6B,CAAC;AAGtD,OAAO,EAAC,gBAAgB,EAAC,uCAA4B;AAErD,OAAO,EAAC,aAAa,EAAE,sBAAsB,EAAE,eAAe,EAAC,mBAAgB;AAC/E,OAAO,EAAC,eAAe,EAAE,aAAa,EAAC,mBAAgB;AAMvD,MAAM,qBAAqB,GAAuC,CAAC,OAAO,EAAE,EAAC,QAAQ,EAAC,EAAE,EAAE;IACtF,OAAO;SACF,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,EAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SAC/E,OAAO,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7B,MAAM,EAAE;YACJ,SAAS,EAAE;gBACP,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,CAAC,EAAC,OAAO,EAAC,EAAE,EAAE,CAAC,CAAC;oBACtB,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO;oBAC1C,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC,eAAe,CAAC;iBACxE,CAAC;aACL;SACJ;QACD,IAAI,EAAE;YACF,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,OAAO;YACd,KAAK,EAAE;gBACH,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAC,OAAO,EAAE,EAAE,EAAC;gBAChD,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAC,OAAO,EAAE,SAAS,EAAC;gBACrD,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAC,OAAO,EAAE,sBAAsB,EAAC;gBACrE,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC;aACxD;YACD,QAAQ,EAAE,EAAE;YACZ,KAAK,CAAC,IAAI;gBACN,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;YACD,GAAG,EAAE,EAAC,KAAK,EAAE,EAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,EAAC;SACjC;QACD,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAClB,MAAM,OAAO,GAAW,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAE1E,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC1B,KAAK,CAAC,aAAa,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;YAClC,KAAK,CAAC,aAAa,EAAE,CAAC;YACtB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACnB,KAAK,CAAC,aAAa,EAAE,CAAC;QAC1B,CAAC;QACD,IAAI,EAAE,QAAQ;KACjB,CAAC,CAAC,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,aAAa,CAAC,CAAC","sourcesContent":["import {transform} from '@diplodoc/mermaid-extension';\n\nimport type {ExtensionAuto, ExtensionNodeSpec} from '#core';\nimport {generateEntityId} from 'src/utils/entity-id';\n\nimport {MermaidConsts, defaultMermaidEntityId, mermaidNodeName} from './const';\nexport {mermaidNodeName, MermaidConsts} from './const';\n\nexport type MermaidSpecsOptions = {\n nodeView?: ExtensionNodeSpec['view'];\n};\n\nconst MermaidSpecsExtension: ExtensionAuto<MermaidSpecsOptions> = (builder, {nodeView}) => {\n builder\n .configureMd((md) => md.use(transform({runtime: 'mermaid', bundle: false}), {}))\n .addNode(mermaidNodeName, () => ({\n fromMd: {\n tokenSpec: {\n name: mermaidNodeName,\n type: 'node',\n getAttrs: ({content}) => ({\n [MermaidConsts.NodeAttrs.content]: content,\n [MermaidConsts.NodeAttrs.EntityId]: generateEntityId(mermaidNodeName),\n }),\n },\n },\n spec: {\n selectable: true,\n atom: true,\n group: 'block',\n attrs: {\n [MermaidConsts.NodeAttrs.content]: {default: ''},\n [MermaidConsts.NodeAttrs.class]: {default: 'mermaid'},\n [MermaidConsts.NodeAttrs.EntityId]: {default: defaultMermaidEntityId},\n [MermaidConsts.NodeAttrs.newCreated]: {default: null},\n },\n parseDOM: [],\n toDOM(node) {\n return ['div', node.attrs];\n },\n dnd: {props: {offset: [8, 1]}},\n },\n toMd: (state, node) => {\n const content: string = node.attrs[MermaidConsts.NodeAttrs.content] || '';\n\n state.write('```mermaid');\n state.ensureNewLine();\n state.text(content.trim(), false);\n state.ensureNewLine();\n state.write('```');\n state.ensureNewLine();\n },\n view: nodeView,\n }));\n};\n\nexport const MermaidSpecs = Object.assign(MermaidSpecsExtension, MermaidConsts);\n"]}
|
package/build/esm/extensions/additional/YfmHtmlBlock/YfmHtmlBlockNodeView/YfmHtmlBlockView.js
CHANGED
|
@@ -171,7 +171,7 @@ export const YfmHtmlBlockView = ({ onChange, node, getPos, view, options }) => {
|
|
|
171
171
|
const html = `<!DOCTYPE html><html>${head}${body}</html>`;
|
|
172
172
|
const sanitizeFunction = typeof sanitize === 'function' ? sanitize : sanitize?.body;
|
|
173
173
|
const resultHtml = sanitizeFunction ? sanitizeFunction(html) : html;
|
|
174
|
-
return (_jsxs("div", { className: b(), onDoubleClick: setEditing, children: [_jsx(Label, { className: b('label'), icon: _jsx(Icon, { size: 16, data: Eye }), children: i18n('preview') }), _jsx(YfmHtmlBlockPreview, { html: resultHtml, onClick: setEditing, config: config }), _jsxs("div", { className: b('menu'), children: [_jsx(Button, { onClick: toggleMenuOpen, ref: setAnchorElement, size: "s", className: STOP_EVENT_CLASSNAME, children: _jsx(Icon, { data: DotsIcon, className: STOP_EVENT_CLASSNAME }) }), _jsx(Popup, { anchorElement: anchorElement, open: menuOpen, onOpenChange: closeMenu, placement: "bottom-end", children: _jsxs(Menu, { children: [_jsx(Menu.Item, { onClick: () => {
|
|
174
|
+
return (_jsxs("div", { className: b(), onDoubleClick: setEditing, children: [_jsx(Label, { className: b('label'), icon: _jsx(Icon, { size: 16, data: Eye }), children: i18n('preview') }), _jsx(YfmHtmlBlockPreview, { html: resultHtml, onClick: setEditing, config: config }), _jsxs("div", { className: b('menu'), children: [_jsx(Button, { onClick: toggleMenuOpen, ref: setAnchorElement, size: "s", className: STOP_EVENT_CLASSNAME, "aria-label": i18n('actions'), children: _jsx(Icon, { data: DotsIcon, className: STOP_EVENT_CLASSNAME }) }), _jsx(Popup, { anchorElement: anchorElement, open: menuOpen, onOpenChange: closeMenu, placement: "bottom-end", children: _jsxs(Menu, { children: [_jsx(Menu.Item, { onClick: () => {
|
|
175
175
|
setEditing();
|
|
176
176
|
closeMenu();
|
|
177
177
|
}, children: i18n('edit') }), _jsx(Menu.Item, { onClick: () => {
|