@gravity-ui/markdown-editor 15.27.2 → 15.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/build/cjs/bundle/Editor.js +1 -0
- 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.css +6 -14
- package/build/cjs/bundle/settings/index.js +5 -2
- 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 +10 -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/markup/codemirror/create.d.ts +3 -1
- package/build/cjs/markup/codemirror/create.js +4 -1
- package/build/cjs/markup/codemirror/create.js.map +1 -1
- package/build/cjs/markup/codemirror/gravity.js +0 -1
- package/build/cjs/markup/codemirror/gravity.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 +1 -0
- 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.css +6 -14
- package/build/esm/bundle/settings/index.js +6 -3
- 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 +10 -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/markup/codemirror/create.d.ts +3 -1
- package/build/esm/markup/codemirror/create.js +5 -2
- package/build/esm/markup/codemirror/create.js.map +1 -1
- package/build/esm/markup/codemirror/gravity.js +0 -1
- package/build/esm/markup/codemirror/gravity.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/build/styles.css +6 -14
- package/package.json +73 -49
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HorizontalDrag.js","sourceRoot":"../../../src","sources":["bundle/HorizontalDrag.tsx"],"names":[],"mappings":"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","sourcesContent":["import {useCallback, useEffect, useRef, useState} from 'react';\n\nimport {clamp} from '../lodash';\n\nimport type {EditorInt} from './Editor';\nimport {cnEditorComponent} from './MarkdownEditorView';\n\nexport const IN_RESIZE_CLASSNAME = 'in-resize';\n\ntype UseDragHandlersParams = {\n onStart: () => void;\n onMove: (delta: number) => void;\n onEnd: (delta: number) => void;\n};\n\nconst useColResize = ({onStart, onMove, onEnd}: UseDragHandlersParams) => {\n const initialXPosition = useRef(0);\n const currentXPosition = useRef(0);\n\n const handleMove = useCallback(\n (e: MouseEvent | TouchEvent) => {\n const currentX = 'touches' in e ? e.touches[0]?.clientX ?? 0 : e.clientX;\n\n if (currentXPosition.current === currentX) {\n return;\n }\n\n currentXPosition.current = currentX;\n const delta = initialXPosition.current - currentX;\n\n onMove(delta);\n },\n [onMove],\n );\n\n const handleDragEnd = useCallback(\n (e: MouseEvent | TouchEvent) => {\n window.removeEventListener('mousemove', handleMove);\n window.removeEventListener('touchmove', handleMove);\n\n document.body.style.removeProperty('user-select');\n\n const currentX = 'touches' in e ? e.touches[0]?.clientX ?? 0 : e.clientX;\n const delta = initialXPosition.current - currentX;\n\n onEnd(delta);\n },\n [handleMove, onEnd],\n );\n\n const handleStart: React.EventHandler<React.MouseEvent | React.TouchEvent> = useCallback(\n (e) => {\n const currentX = 'touches' in e ? e.touches[0]?.clientX ?? 0 : e.clientX;\n initialXPosition.current = currentX;\n currentXPosition.current = currentX;\n\n window.addEventListener('mouseup', handleDragEnd, {once: true});\n window.addEventListener('touchend', handleDragEnd, {once: true});\n window.addEventListener('touchcancel', handleDragEnd, {once: true});\n\n window.addEventListener('mousemove', handleMove);\n window.addEventListener('touchmove', handleMove);\n\n document.body.style.setProperty('user-select', 'none');\n\n onStart();\n },\n [handleDragEnd, handleMove, onStart],\n );\n\n return {\n listeners: {\n onMouseDown: handleStart,\n onTouchStart: handleStart,\n },\n };\n};\n\nexport type HorizontalDragProps = {\n leftElRef: React.RefObject<HTMLDivElement>;\n rightElRef: React.RefObject<HTMLDivElement>;\n wrapperRef: React.RefObject<HTMLDivElement>;\n editor: EditorInt;\n onEndMove?: (right: HTMLDivElement | null, left: HTMLDivElement | null) => any;\n};\n\nconst HorizontalDrag: React.FC<HorizontalDragProps> = ({\n leftElRef,\n rightElRef,\n wrapperRef,\n editor,\n onEndMove,\n}) => {\n const cm = editor.cm;\n\n const [lCardWidth, lSetCardWidth] = useState((wrapperRef.current?.clientWidth ?? 0) / 2);\n const [rCardWidth, rSetCardWidth] = useState((wrapperRef.current?.clientWidth ?? 0) / 2);\n\n const updateWidth = useCallback(\n (lNewWidth: number, rNewWidth: number) => {\n leftElRef.current?.style?.setProperty('width', `${lNewWidth}px`);\n rightElRef.current?.style?.setProperty('width', `${rNewWidth}px`);\n },\n [leftElRef, rightElRef],\n );\n\n const calculateWidth = useCallback(\n (delta: number) => [\n clamp(\n lCardWidth - delta,\n (wrapperRef.current?.clientWidth ?? 0) / 8,\n ((wrapperRef.current?.clientWidth ?? 0) * 3) / 4,\n ),\n clamp(\n rCardWidth + delta,\n (wrapperRef.current?.clientWidth ?? 0) / 8,\n ((wrapperRef.current?.clientWidth ?? 0) * 3) / 4,\n ),\n ],\n [lCardWidth, rCardWidth, wrapperRef],\n );\n\n // Set initially calculated width\n useEffect(() => {\n updateWidth(lCardWidth, rCardWidth);\n cm.requestMeasure();\n }, []);\n\n useEffect(() => {\n const [leftElCurrent, rightElCurrent] = [leftElRef.current, rightElRef.current];\n\n return () => {\n leftElCurrent?.classList.remove(IN_RESIZE_CLASSNAME);\n rightElCurrent?.classList.remove(IN_RESIZE_CLASSNAME);\n\n leftElCurrent?.style?.removeProperty('width');\n rightElCurrent?.style?.removeProperty('width');\n };\n }, [leftElRef, rightElRef]);\n\n const onStart = useCallback(() => {\n wrapperRef.current?.style.setProperty('user-select', 'none');\n\n leftElRef.current?.classList.add(IN_RESIZE_CLASSNAME);\n rightElRef.current?.classList.add(IN_RESIZE_CLASSNAME);\n }, [leftElRef, rightElRef, wrapperRef]);\n\n const onMove = useCallback(\n (delta: number) => {\n const [lNewWidth, rNewWidth] = calculateWidth(delta);\n updateWidth(lNewWidth, rNewWidth);\n },\n [calculateWidth, lCardWidth, rCardWidth, updateWidth],\n );\n\n const onEnd = useCallback(\n (delta: number) => {\n const [lNewWidth, rNewWidth] = calculateWidth(delta);\n lSetCardWidth(lNewWidth);\n rSetCardWidth(rNewWidth);\n updateWidth(lNewWidth, rNewWidth);\n\n wrapperRef.current?.style.removeProperty('user-select');\n cm.requestMeasure();\n\n rightElRef.current?.classList.remove(IN_RESIZE_CLASSNAME);\n leftElRef.current?.classList.remove(IN_RESIZE_CLASSNAME);\n\n onEndMove?.(rightElRef.current, leftElRef.current);\n },\n [calculateWidth, cm, leftElRef, rightElRef, updateWidth, wrapperRef],\n );\n\n const {listeners} = useColResize({onStart, onMove, onEnd});\n\n return (\n <div className={cnEditorComponent('resizer', {horizontal: true})} {...listeners}>\n <div className={cnEditorComponent('gutter')} />\n </div>\n );\n};\n\nconst HorizontalDragWrapper: React.FC<HorizontalDragProps & {isMounted: boolean}> = (props) => {\n // If component calling HorizontalDrag is not mounted, then most likely wrapperRef will be null\n if (!props.isMounted)\n return (\n <div className={cnEditorComponent('resizer', {horizontal: true})}>\n <div className={cnEditorComponent('gutter')} />\n </div>\n );\n return <HorizontalDrag {...props} />;\n};\n\nexport {HorizontalDragWrapper as HorizontalDrag};\n"]}
|
|
1
|
+
{"version":3,"file":"HorizontalDrag.js","sourceRoot":"../../../src","sources":["bundle/HorizontalDrag.tsx"],"names":[],"mappings":"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","sourcesContent":["import {useCallback, useEffect, useRef, useState} from 'react';\n\nimport {clamp} from '../lodash';\n\nimport type {EditorInt} from './Editor';\nimport {cnEditorComponent} from './MarkdownEditorView';\n\nexport const IN_RESIZE_CLASSNAME = 'in-resize';\n\ntype UseDragHandlersParams = {\n onStart: () => void;\n onMove: (delta: number) => void;\n onEnd: (delta: number) => void;\n};\n\nconst useColResize = ({onStart, onMove, onEnd}: UseDragHandlersParams) => {\n const initialXPosition = useRef(0);\n const currentXPosition = useRef(0);\n\n const handleMove = useCallback(\n (e: MouseEvent | TouchEvent) => {\n const currentX = 'touches' in e ? (e.touches[0]?.clientX ?? 0) : e.clientX;\n\n if (currentXPosition.current === currentX) {\n return;\n }\n\n currentXPosition.current = currentX;\n const delta = initialXPosition.current - currentX;\n\n onMove(delta);\n },\n [onMove],\n );\n\n const handleDragEnd = useCallback(\n (e: MouseEvent | TouchEvent) => {\n window.removeEventListener('mousemove', handleMove);\n window.removeEventListener('touchmove', handleMove);\n\n document.body.style.removeProperty('user-select');\n\n const currentX = 'touches' in e ? (e.touches[0]?.clientX ?? 0) : e.clientX;\n const delta = initialXPosition.current - currentX;\n\n onEnd(delta);\n },\n [handleMove, onEnd],\n );\n\n const handleStart: React.EventHandler<React.MouseEvent | React.TouchEvent> = useCallback(\n (e) => {\n const currentX = 'touches' in e ? (e.touches[0]?.clientX ?? 0) : e.clientX;\n initialXPosition.current = currentX;\n currentXPosition.current = currentX;\n\n window.addEventListener('mouseup', handleDragEnd, {once: true});\n window.addEventListener('touchend', handleDragEnd, {once: true});\n window.addEventListener('touchcancel', handleDragEnd, {once: true});\n\n window.addEventListener('mousemove', handleMove);\n window.addEventListener('touchmove', handleMove);\n\n document.body.style.setProperty('user-select', 'none');\n\n onStart();\n },\n [handleDragEnd, handleMove, onStart],\n );\n\n return {\n listeners: {\n onMouseDown: handleStart,\n onTouchStart: handleStart,\n },\n };\n};\n\nexport type HorizontalDragProps = {\n leftElRef: React.RefObject<HTMLDivElement>;\n rightElRef: React.RefObject<HTMLDivElement>;\n wrapperRef: React.RefObject<HTMLDivElement>;\n editor: EditorInt;\n onEndMove?: (right: HTMLDivElement | null, left: HTMLDivElement | null) => any;\n};\n\nconst HorizontalDrag: React.FC<HorizontalDragProps> = ({\n leftElRef,\n rightElRef,\n wrapperRef,\n editor,\n onEndMove,\n}) => {\n const cm = editor.cm;\n\n const [lCardWidth, lSetCardWidth] = useState((wrapperRef.current?.clientWidth ?? 0) / 2);\n const [rCardWidth, rSetCardWidth] = useState((wrapperRef.current?.clientWidth ?? 0) / 2);\n\n const updateWidth = useCallback(\n (lNewWidth: number, rNewWidth: number) => {\n leftElRef.current?.style?.setProperty('width', `${lNewWidth}px`);\n rightElRef.current?.style?.setProperty('width', `${rNewWidth}px`);\n },\n [leftElRef, rightElRef],\n );\n\n const calculateWidth = useCallback(\n (delta: number) => [\n clamp(\n lCardWidth - delta,\n (wrapperRef.current?.clientWidth ?? 0) / 8,\n ((wrapperRef.current?.clientWidth ?? 0) * 3) / 4,\n ),\n clamp(\n rCardWidth + delta,\n (wrapperRef.current?.clientWidth ?? 0) / 8,\n ((wrapperRef.current?.clientWidth ?? 0) * 3) / 4,\n ),\n ],\n [lCardWidth, rCardWidth, wrapperRef],\n );\n\n // Set initially calculated width\n useEffect(() => {\n updateWidth(lCardWidth, rCardWidth);\n cm.requestMeasure();\n }, []);\n\n useEffect(() => {\n const [leftElCurrent, rightElCurrent] = [leftElRef.current, rightElRef.current];\n\n return () => {\n leftElCurrent?.classList.remove(IN_RESIZE_CLASSNAME);\n rightElCurrent?.classList.remove(IN_RESIZE_CLASSNAME);\n\n leftElCurrent?.style?.removeProperty('width');\n rightElCurrent?.style?.removeProperty('width');\n };\n }, [leftElRef, rightElRef]);\n\n const onStart = useCallback(() => {\n wrapperRef.current?.style.setProperty('user-select', 'none');\n\n leftElRef.current?.classList.add(IN_RESIZE_CLASSNAME);\n rightElRef.current?.classList.add(IN_RESIZE_CLASSNAME);\n }, [leftElRef, rightElRef, wrapperRef]);\n\n const onMove = useCallback(\n (delta: number) => {\n const [lNewWidth, rNewWidth] = calculateWidth(delta);\n updateWidth(lNewWidth, rNewWidth);\n },\n [calculateWidth, lCardWidth, rCardWidth, updateWidth],\n );\n\n const onEnd = useCallback(\n (delta: number) => {\n const [lNewWidth, rNewWidth] = calculateWidth(delta);\n lSetCardWidth(lNewWidth);\n rSetCardWidth(rNewWidth);\n updateWidth(lNewWidth, rNewWidth);\n\n wrapperRef.current?.style.removeProperty('user-select');\n cm.requestMeasure();\n\n rightElRef.current?.classList.remove(IN_RESIZE_CLASSNAME);\n leftElRef.current?.classList.remove(IN_RESIZE_CLASSNAME);\n\n onEndMove?.(rightElRef.current, leftElRef.current);\n },\n [calculateWidth, cm, leftElRef, rightElRef, updateWidth, wrapperRef],\n );\n\n const {listeners} = useColResize({onStart, onMove, onEnd});\n\n return (\n <div className={cnEditorComponent('resizer', {horizontal: true})} {...listeners}>\n <div className={cnEditorComponent('gutter')} />\n </div>\n );\n};\n\nconst HorizontalDragWrapper: React.FC<HorizontalDragProps & {isMounted: boolean}> = (props) => {\n // If component calling HorizontalDrag is not mounted, then most likely wrapperRef will be null\n if (!props.isMounted)\n return (\n <div className={cnEditorComponent('resizer', {horizontal: true})}>\n <div className={cnEditorComponent('gutter')} />\n </div>\n );\n return <HorizontalDrag {...props} />;\n};\n\nexport {HorizontalDragWrapper as HorizontalDrag};\n"]}
|
|
@@ -2,9 +2,6 @@
|
|
|
2
2
|
display: flex;
|
|
3
3
|
flex-wrap: nowrap;
|
|
4
4
|
}
|
|
5
|
-
.g-md-editor-settings__mode-button {
|
|
6
|
-
margin-right: 1px;
|
|
7
|
-
}
|
|
8
5
|
.g-md-editor-settings__preview-button {
|
|
9
6
|
margin: 0 2px;
|
|
10
7
|
}
|
|
@@ -17,6 +14,10 @@
|
|
|
17
14
|
.g-md-settings-content {
|
|
18
15
|
width: 300px;
|
|
19
16
|
}
|
|
17
|
+
.g-md-settings-content__mode {
|
|
18
|
+
border-start-start-radius: inherit;
|
|
19
|
+
border-start-end-radius: inherit;
|
|
20
|
+
}
|
|
20
21
|
.g-md-settings-content__mode-help {
|
|
21
22
|
position: relative;
|
|
22
23
|
top: 8px;
|
|
@@ -25,13 +26,8 @@
|
|
|
25
26
|
.g-md-settings-content__separator {
|
|
26
27
|
border-bottom: 1px solid var(--g-color-line-generic);
|
|
27
28
|
}
|
|
28
|
-
.g-md-settings-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
.g-md-settings-content__toolbar-hint {
|
|
32
|
-
margin-top: 3px;
|
|
33
|
-
padding-left: 19px;
|
|
34
|
-
color: var(--g-color-text-secondary);
|
|
29
|
+
.g-md-settings-content__check-box .g-control-label__text {
|
|
30
|
+
margin-left: calc(var(--g-spacing-2) + var(--g-spacing-half));
|
|
35
31
|
}
|
|
36
32
|
.g-md-settings-content__version {
|
|
37
33
|
position: absolute;
|
|
@@ -39,8 +35,4 @@
|
|
|
39
35
|
left: 50%;
|
|
40
36
|
opacity: 0.03;
|
|
41
37
|
transform: translateX(-50%);
|
|
42
|
-
font-family: var(--g-text-code-font-family);
|
|
43
|
-
font-weight: var(--g-text-code-font-weight);
|
|
44
|
-
font-size: var(--g-text-code-inline-1-font-size);
|
|
45
|
-
line-height: var(--g-text-code-inline-1-line-height);
|
|
46
38
|
}
|
|
@@ -3,7 +3,7 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
|
|
|
3
3
|
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
|
4
4
|
import { memo, useState } from 'react';
|
|
5
5
|
import { Eye, Gear, LogoMarkdown } from '@gravity-ui/icons';
|
|
6
|
-
import { ActionTooltip, Button, Checkbox, HelpMark, Icon, Menu, Popup, } from '@gravity-ui/uikit';
|
|
6
|
+
import { ActionTooltip, Box, Button, Checkbox, HelpMark, Icon, Menu, Popup, Text, sp, } from '@gravity-ui/uikit';
|
|
7
7
|
import { LAYOUT } from "../../common/layout.js";
|
|
8
8
|
import { cn } from "../../classname.js";
|
|
9
9
|
import { i18n } from "../../i18n/bundle/index.js";
|
|
@@ -24,7 +24,7 @@ export const EditorSettings = memo(function EditorSettings(props) {
|
|
|
24
24
|
const [popupShown, , hidePopup, togglePopup] = useBooleanState(false);
|
|
25
25
|
const zIndex = useTargetZIndex(LAYOUT.STICKY_TOOLBAR);
|
|
26
26
|
const areSettingsVisible = settingsVisible === true || (Array.isArray(settingsVisible) && settingsVisible.length > 0);
|
|
27
|
-
return (_jsxs("div", { className: bSettings(null,
|
|
27
|
+
return (_jsxs("div", { className: bSettings(null, className), children: [renderPreviewButton && (_jsxs(_Fragment, { children: [_jsx(ActionTooltip, { openDelay: ToolbarTooltipDelay.Open, closeDelay: ToolbarTooltipDelay.Close, title: i18n('preview_label'), hotkey: "mod+shift+p", children: _jsx(Button, { qa: "g-md-markup-preview-button", size: "m", view: "flat", pin: "round-round", className: bSettings('preview-button'), onClick: () => onShowPreviewChange?.(!showPreview), selected: showPreview, "aria-label": i18n('preview_label'), children: _jsx(Icon, { data: Eye }) }) }), settingsVisible && _jsx("div", { className: bSettings('separator') })] })), areSettingsVisible && (_jsxs(_Fragment, { children: [_jsx(Button, { size: "m", view: "flat", pin: "round-round", onClick: togglePopup, ref: setChevronElement, qa: "g-md-settings-button", className: bSettings('dropdown-button'), "aria-label": i18n('settings_label'), children: _jsx(Icon, { data: Gear }) }), _jsx(Popup, { open: popupShown, anchorElement: chevronElement, placement: placement, onOpenChange: hidePopup, zIndex: zIndex, children: _jsx(SettingsContent, { ...props, qa: "g-md-settings-content", onClose: hidePopup, className: bSettings('content'), zIndex: zIndex }) })] }))] }));
|
|
28
28
|
});
|
|
29
29
|
const mdHelpPlacement = ['bottom', 'bottom-end', 'right-start', 'right', 'left'];
|
|
30
30
|
const SettingsContent = function SettingsContent({ mode, onClose, onModeChange, toolbarVisibility, onToolbarVisibilityChange, onSplitModeChange, splitMode = false, splitModeEnabled, className, showPreview, settingsVisible, qa, disableMark, zIndex, }) {
|
|
@@ -46,6 +46,9 @@ const SettingsContent = function SettingsContent({ mode, onClose, onModeChange,
|
|
|
46
46
|
// stop clicks propagation
|
|
47
47
|
// because otherwise click in MarkdownHints handled as click on MenuItem
|
|
48
48
|
e.stopPropagation();
|
|
49
|
-
}, children: _jsx(MarkdownHints, {}) }) }))] })] })), showModeSetting && (showSplitModeSetting || showToolbarSetting) && (_jsx("div", { className: bContent('separator') })), showToolbarSetting && !showPreview && (
|
|
49
|
+
}, children: _jsx(MarkdownHints, {}) }) }))] })] })), showModeSetting && (showSplitModeSetting || showToolbarSetting) && (_jsx("div", { className: bContent('separator') })), showToolbarSetting && !showPreview && (_jsx(CheckboxWithHint, { checked: toolbarVisibility, className: bContent('toolbar'), onUpdate: onToolbarVisibilityChange, title: i18n('settings_menubar'), hint: i18n('settings_hint') })), showSplitModeSetting && splitMode && (_jsx(CheckboxWithHint, { checked: splitModeEnabled, disabled: mode !== 'markup', className: bContent('split-mode'), onUpdate: onSplitModeChange ?? noop, title: i18n('settings_split-mode'), hint: i18n('settings_split-mode-hint') })), _jsx(Text, { variant: "code-inline-1", className: bContent('version'), children: VERSION })] }));
|
|
50
50
|
};
|
|
51
|
+
function CheckboxWithHint({ checked, disabled, onUpdate, title, hint, className, }) {
|
|
52
|
+
return (_jsxs(Box, { spacing: { px: 4, pt: 2, pb: 3 }, className: bContent('check-box', className), children: [_jsx(Checkbox, { size: "m", disabled: disabled, checked: checked, onUpdate: onUpdate, children: title }), _jsx(Text, { as: "div", color: "secondary", className: bContent('check-hint', sp({ mt: 1, pl: 6 })), children: hint })] }));
|
|
53
|
+
}
|
|
51
54
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../../../../src","sources":["bundle/settings/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable jsx-a11y/no-static-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport {memo, useState} from 'react';\n\nimport {Eye, Gear, LogoMarkdown} from '@gravity-ui/icons';\nimport {\n ActionTooltip,\n Button,\n Checkbox,\n HelpMark,\n Icon,\n Menu,\n Popup,\n type PopupPlacement,\n type QAProps,\n} from '@gravity-ui/uikit';\n\nimport {LAYOUT} from 'src/common/layout';\n\nimport {type ClassNameProps, cn} from '../../classname';\nimport {i18n} from '../../i18n/bundle';\nimport WysiwygModeIcon from '../../icons/WysiwygMode';\nimport {noop} from '../../lodash';\nimport {useTargetZIndex} from '../../react-utils';\nimport {useBooleanState} from '../../react-utils/hooks';\nimport {ToolbarTooltipDelay} from '../../toolbar';\nimport {VERSION} from '../../version';\nimport type {MarkdownEditorMode, MarkdownEditorSplitMode} from '../types';\n\nimport {MarkdownHints} from './MarkdownHints';\n\nimport './index.scss';\n\nconst placement: PopupPlacement = ['bottom-end', 'top-end'];\n\nconst bSettings = cn('editor-settings');\nconst bContent = cn('settings-content');\n\nexport type EditorSettingsProps = Omit<SettingsContentProps, 'onClose' | 'zIndex'> & {\n renderPreviewButton?: boolean;\n settingsVisible?: boolean | SettingItems[];\n};\n\nexport const EditorSettings = memo<EditorSettingsProps>(function EditorSettings(props) {\n const {className, onShowPreviewChange, showPreview, renderPreviewButton, settingsVisible} =\n props;\n const [chevronElement, setChevronElement] = useState<HTMLButtonElement | null>(null);\n const [popupShown, , hidePopup, togglePopup] = useBooleanState(false);\n const zIndex = useTargetZIndex(LAYOUT.STICKY_TOOLBAR);\n\n const areSettingsVisible =\n settingsVisible === true || (Array.isArray(settingsVisible) && settingsVisible.length > 0);\n\n return (\n <div className={bSettings(null, [className])}>\n {renderPreviewButton && (\n <>\n <ActionTooltip\n openDelay={ToolbarTooltipDelay.Open}\n closeDelay={ToolbarTooltipDelay.Close}\n title={i18n('preview_hint')}\n hotkey=\"mod+shift+p\"\n >\n <Button\n qa=\"g-md-markup-preview-button\"\n size=\"m\"\n view=\"flat\"\n pin=\"round-round\"\n className={bSettings('preview-button')}\n onClick={() => onShowPreviewChange?.(!showPreview)}\n selected={showPreview}\n >\n <Icon data={Eye} />\n </Button>\n </ActionTooltip>\n {settingsVisible && <div className={bSettings('separator')} />}\n </>\n )}\n {areSettingsVisible && (\n <>\n <Button\n size=\"m\"\n view=\"flat\"\n pin=\"round-round\"\n onClick={togglePopup}\n ref={setChevronElement}\n qa=\"g-md-settings-button\"\n className={bSettings('dropdown-button')}\n >\n <Icon data={Gear} />\n </Button>\n <Popup\n open={popupShown}\n anchorElement={chevronElement}\n placement={placement}\n onOpenChange={hidePopup}\n zIndex={zIndex}\n >\n <SettingsContent\n {...props}\n qa=\"g-md-settings-content\"\n onClose={hidePopup}\n className={bSettings('content')}\n zIndex={zIndex}\n />\n </Popup>\n </>\n )}\n </div>\n );\n});\n\nexport type SettingItems = 'mode' | 'toolbar' | 'split';\n\ntype SettingsContentProps = ClassNameProps &\n QAProps & {\n mode: MarkdownEditorMode;\n onClose: () => void;\n onModeChange: (mode: MarkdownEditorMode) => void;\n onShowPreviewChange: (showPreview: boolean) => void;\n showPreview: boolean;\n toolbarVisibility: boolean;\n settingsVisible?: SettingItems[] | boolean;\n onToolbarVisibilityChange: (val: boolean) => void;\n splitMode?: MarkdownEditorSplitMode;\n splitModeEnabled?: boolean;\n onSplitModeChange?: (splitModeEnabled: boolean) => void;\n disableMark?: boolean;\n zIndex?: number;\n };\n\nconst mdHelpPlacement: PopupPlacement = ['bottom', 'bottom-end', 'right-start', 'right', 'left'];\n\nconst SettingsContent: React.FC<SettingsContentProps> = function SettingsContent({\n mode,\n onClose,\n onModeChange,\n toolbarVisibility,\n onToolbarVisibilityChange,\n onSplitModeChange,\n splitMode = false,\n splitModeEnabled,\n className,\n showPreview,\n settingsVisible,\n qa,\n disableMark,\n zIndex,\n}) {\n const isSettingsArray = Array.isArray(settingsVisible);\n const showModeSetting = isSettingsArray ? settingsVisible?.includes('mode') : true;\n const showToolbarSetting = isSettingsArray ? settingsVisible?.includes('toolbar') : true;\n const showSplitModeSetting = isSettingsArray ? settingsVisible?.includes('split') : true;\n\n return (\n <div className={bContent(null, [className])} data-qa={qa}>\n {showModeSetting && (\n <Menu size=\"l\" className={bContent('mode')}>\n <Menu.Item\n qa=\"g-md-settings-mode-wysiwyg\"\n active={mode === 'wysiwyg'}\n onClick={() => {\n onModeChange('wysiwyg');\n onClose();\n }}\n iconStart={<Icon data={WysiwygModeIcon} />}\n >\n {i18n('settings_wysiwyg')}\n </Menu.Item>\n <Menu.Item\n qa=\"g-md-settings-mode-markup\"\n active={mode === 'markup'}\n onClick={() => {\n onModeChange('markup');\n onClose();\n }}\n iconStart={<Icon data={LogoMarkdown} />}\n >\n {i18n('settings_markup')}\n {!disableMark && (\n <HelpMark\n popoverProps={{\n placement: mdHelpPlacement,\n modal: false,\n zIndex,\n }}\n className={bContent('mode-help')}\n >\n <div\n onClick={(e) => {\n // stop clicks propagation\n // because otherwise click in MarkdownHints handled as click on MenuItem\n e.stopPropagation();\n }}\n >\n <MarkdownHints />\n </div>\n </HelpMark>\n )}\n </Menu.Item>\n </Menu>\n )}\n {showModeSetting && (showSplitModeSetting || showToolbarSetting) && (\n <div className={bContent('separator')} />\n )}\n {showToolbarSetting && !showPreview && (\n <div className={bContent('toolbar')}>\n <Checkbox\n size=\"m\"\n checked={toolbarVisibility}\n onUpdate={onToolbarVisibilityChange}\n >\n {i18n('settings_menubar')}\n </Checkbox>\n <div className={bContent('toolbar-hint')}>{i18n('settings_hint')}</div>\n </div>\n )}\n {showSplitModeSetting && splitMode && (\n <div className={bContent('split-mode')}>\n <Checkbox\n size=\"m\"\n disabled={mode !== 'markup'}\n checked={splitModeEnabled}\n onUpdate={onSplitModeChange ?? noop}\n >\n {i18n('settings_split-mode')}\n </Checkbox>\n <div className={bContent('toolbar-hint')}>\n {i18n('settings_split-mode-hint')}\n </div>\n </div>\n )}\n <span className={bContent('version')}>{VERSION}</span>\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../src","sources":["bundle/settings/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable jsx-a11y/no-static-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport {memo, useState} from 'react';\n\nimport {Eye, Gear, LogoMarkdown} from '@gravity-ui/icons';\nimport {\n ActionTooltip,\n Box,\n Button,\n Checkbox,\n type CheckboxProps,\n HelpMark,\n Icon,\n Menu,\n Popup,\n type PopupPlacement,\n type QAProps,\n Text,\n sp,\n} from '@gravity-ui/uikit';\n\nimport {LAYOUT} from 'src/common/layout';\n\nimport {type ClassNameProps, cn} from '../../classname';\nimport {i18n} from '../../i18n/bundle';\nimport WysiwygModeIcon from '../../icons/WysiwygMode';\nimport {noop} from '../../lodash';\nimport {useTargetZIndex} from '../../react-utils';\nimport {useBooleanState} from '../../react-utils/hooks';\nimport {ToolbarTooltipDelay} from '../../toolbar';\nimport {VERSION} from '../../version';\nimport type {MarkdownEditorMode, MarkdownEditorSplitMode} from '../types';\n\nimport {MarkdownHints} from './MarkdownHints';\n\nimport './index.scss';\n\nconst placement: PopupPlacement = ['bottom-end', 'top-end'];\n\nconst bSettings = cn('editor-settings');\nconst bContent = cn('settings-content');\n\nexport type EditorSettingsProps = Omit<SettingsContentProps, 'onClose' | 'zIndex'> & {\n renderPreviewButton?: boolean;\n settingsVisible?: boolean | SettingItems[];\n};\n\nexport const EditorSettings = memo<EditorSettingsProps>(function EditorSettings(props) {\n const {className, onShowPreviewChange, showPreview, renderPreviewButton, settingsVisible} =\n props;\n const [chevronElement, setChevronElement] = useState<HTMLButtonElement | null>(null);\n const [popupShown, , hidePopup, togglePopup] = useBooleanState(false);\n const zIndex = useTargetZIndex(LAYOUT.STICKY_TOOLBAR);\n\n const areSettingsVisible =\n settingsVisible === true || (Array.isArray(settingsVisible) && settingsVisible.length > 0);\n\n return (\n <div className={bSettings(null, className)}>\n {renderPreviewButton && (\n <>\n <ActionTooltip\n openDelay={ToolbarTooltipDelay.Open}\n closeDelay={ToolbarTooltipDelay.Close}\n title={i18n('preview_label')}\n hotkey=\"mod+shift+p\"\n >\n <Button\n qa=\"g-md-markup-preview-button\"\n size=\"m\"\n view=\"flat\"\n pin=\"round-round\"\n className={bSettings('preview-button')}\n onClick={() => onShowPreviewChange?.(!showPreview)}\n selected={showPreview}\n aria-label={i18n('preview_label')}\n >\n <Icon data={Eye} />\n </Button>\n </ActionTooltip>\n {settingsVisible && <div className={bSettings('separator')} />}\n </>\n )}\n {areSettingsVisible && (\n <>\n <Button\n size=\"m\"\n view=\"flat\"\n pin=\"round-round\"\n onClick={togglePopup}\n ref={setChevronElement}\n qa=\"g-md-settings-button\"\n className={bSettings('dropdown-button')}\n aria-label={i18n('settings_label')}\n >\n <Icon data={Gear} />\n </Button>\n <Popup\n open={popupShown}\n anchorElement={chevronElement}\n placement={placement}\n onOpenChange={hidePopup}\n zIndex={zIndex}\n >\n <SettingsContent\n {...props}\n qa=\"g-md-settings-content\"\n onClose={hidePopup}\n className={bSettings('content')}\n zIndex={zIndex}\n />\n </Popup>\n </>\n )}\n </div>\n );\n});\n\nexport type SettingItems = 'mode' | 'toolbar' | 'split';\n\ntype SettingsContentProps = ClassNameProps &\n QAProps & {\n mode: MarkdownEditorMode;\n onClose: () => void;\n onModeChange: (mode: MarkdownEditorMode) => void;\n onShowPreviewChange: (showPreview: boolean) => void;\n showPreview: boolean;\n toolbarVisibility: boolean;\n settingsVisible?: SettingItems[] | boolean;\n onToolbarVisibilityChange: (val: boolean) => void;\n splitMode?: MarkdownEditorSplitMode;\n splitModeEnabled?: boolean;\n onSplitModeChange?: (splitModeEnabled: boolean) => void;\n disableMark?: boolean;\n zIndex?: number;\n };\n\nconst mdHelpPlacement: PopupPlacement = ['bottom', 'bottom-end', 'right-start', 'right', 'left'];\n\nconst SettingsContent: React.FC<SettingsContentProps> = function SettingsContent({\n mode,\n onClose,\n onModeChange,\n toolbarVisibility,\n onToolbarVisibilityChange,\n onSplitModeChange,\n splitMode = false,\n splitModeEnabled,\n className,\n showPreview,\n settingsVisible,\n qa,\n disableMark,\n zIndex,\n}) {\n const isSettingsArray = Array.isArray(settingsVisible);\n const showModeSetting = isSettingsArray ? settingsVisible?.includes('mode') : true;\n const showToolbarSetting = isSettingsArray ? settingsVisible?.includes('toolbar') : true;\n const showSplitModeSetting = isSettingsArray ? settingsVisible?.includes('split') : true;\n\n return (\n <div className={bContent(null, [className])} data-qa={qa}>\n {showModeSetting && (\n <Menu size=\"l\" className={bContent('mode')}>\n <Menu.Item\n qa=\"g-md-settings-mode-wysiwyg\"\n active={mode === 'wysiwyg'}\n onClick={() => {\n onModeChange('wysiwyg');\n onClose();\n }}\n iconStart={<Icon data={WysiwygModeIcon} />}\n >\n {i18n('settings_wysiwyg')}\n </Menu.Item>\n <Menu.Item\n qa=\"g-md-settings-mode-markup\"\n active={mode === 'markup'}\n onClick={() => {\n onModeChange('markup');\n onClose();\n }}\n iconStart={<Icon data={LogoMarkdown} />}\n >\n {i18n('settings_markup')}\n {!disableMark && (\n <HelpMark\n popoverProps={{\n placement: mdHelpPlacement,\n modal: false,\n zIndex,\n }}\n className={bContent('mode-help')}\n >\n <div\n onClick={(e) => {\n // stop clicks propagation\n // because otherwise click in MarkdownHints handled as click on MenuItem\n e.stopPropagation();\n }}\n >\n <MarkdownHints />\n </div>\n </HelpMark>\n )}\n </Menu.Item>\n </Menu>\n )}\n {showModeSetting && (showSplitModeSetting || showToolbarSetting) && (\n <div className={bContent('separator')} />\n )}\n {showToolbarSetting && !showPreview && (\n <CheckboxWithHint\n checked={toolbarVisibility}\n className={bContent('toolbar')}\n onUpdate={onToolbarVisibilityChange}\n title={i18n('settings_menubar')}\n hint={i18n('settings_hint')}\n />\n )}\n {showSplitModeSetting && splitMode && (\n <CheckboxWithHint\n checked={splitModeEnabled}\n disabled={mode !== 'markup'}\n className={bContent('split-mode')}\n onUpdate={onSplitModeChange ?? noop}\n title={i18n('settings_split-mode')}\n hint={i18n('settings_split-mode-hint')}\n />\n )}\n <Text variant=\"code-inline-1\" className={bContent('version')}>\n {VERSION}\n </Text>\n </div>\n );\n};\n\ntype CheckboxWithHintProps = {\n checked?: boolean;\n disabled?: boolean;\n onUpdate: CheckboxProps['onUpdate'];\n title: string;\n hint: string;\n className: string;\n};\n\nfunction CheckboxWithHint({\n checked,\n disabled,\n onUpdate,\n title,\n hint,\n className,\n}: CheckboxWithHintProps) {\n return (\n <Box spacing={{px: 4, pt: 2, pb: 3}} className={bContent('check-box', className)}>\n <Checkbox size=\"m\" disabled={disabled} checked={checked} onUpdate={onUpdate}>\n {title}\n </Checkbox>\n <Text as=\"div\" color=\"secondary\" className={bContent('check-hint', sp({mt: 1, pl: 6}))}>\n {hint}\n </Text>\n </Box>\n );\n}\n"]}
|
|
@@ -52,20 +52,20 @@ export const createToolbarConfig = (editorType, toolbarPreset, toolbarName) => {
|
|
|
52
52
|
export const getToolbarsConfigs = ({ toolbarsPreset, props, preset }) => {
|
|
53
53
|
const wysiwygToolbarConfig = toolbarsPreset
|
|
54
54
|
? createToolbarConfig('wysiwyg', toolbarsPreset, ToolbarName.wysiwygMain)
|
|
55
|
-
: props.wysiwygToolbarConfig ??
|
|
56
|
-
createToolbarConfig('wysiwyg', preset, ToolbarName.wysiwygMain);
|
|
55
|
+
: (props.wysiwygToolbarConfig ??
|
|
56
|
+
createToolbarConfig('wysiwyg', preset, ToolbarName.wysiwygMain));
|
|
57
57
|
const markupToolbarConfig = toolbarsPreset
|
|
58
58
|
? createToolbarConfig('markup', toolbarsPreset, ToolbarName.markupMain)
|
|
59
|
-
: props.markupToolbarConfig ??
|
|
60
|
-
createToolbarConfig('markup', preset, ToolbarName.markupMain);
|
|
59
|
+
: (props.markupToolbarConfig ??
|
|
60
|
+
createToolbarConfig('markup', preset, ToolbarName.markupMain));
|
|
61
61
|
const wysiwygHiddenActionsConfig = toolbarsPreset
|
|
62
62
|
? flattenPreset(createToolbarConfig('wysiwyg', toolbarsPreset, ToolbarName.wysiwygHidden))
|
|
63
|
-
: props.wysiwygHiddenActionsConfig ??
|
|
64
|
-
flattenPreset(createToolbarConfig('wysiwyg', preset, ToolbarName.wysiwygHidden));
|
|
63
|
+
: (props.wysiwygHiddenActionsConfig ??
|
|
64
|
+
flattenPreset(createToolbarConfig('wysiwyg', preset, ToolbarName.wysiwygHidden)));
|
|
65
65
|
const markupHiddenActionsConfig = toolbarsPreset
|
|
66
66
|
? flattenPreset(createToolbarConfig('markup', toolbarsPreset, ToolbarName.markupHidden))
|
|
67
|
-
: props.markupHiddenActionsConfig ??
|
|
68
|
-
flattenPreset(createToolbarConfig('markup', preset, ToolbarName.markupHidden));
|
|
67
|
+
: (props.markupHiddenActionsConfig ??
|
|
68
|
+
flattenPreset(createToolbarConfig('markup', preset, ToolbarName.markupHidden)));
|
|
69
69
|
return {
|
|
70
70
|
wysiwygToolbarConfig,
|
|
71
71
|
markupToolbarConfig,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbarsConfigs.js","sourceRoot":"../../../../../src","sources":["bundle/toolbar/utils/toolbarsConfigs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"toolbarsConfigs.js","sourceRoot":"../../../../../src","sources":["bundle/toolbar/utils/toolbarsConfigs.ts"],"names":[],"mappings":"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","sourcesContent":["import {ToolbarName} from '../../../modules/toolbars/constants';\nimport {commonmark, defaultPreset, full, yfm, zero} from '../../../modules/toolbars/presets';\nimport type {\n ToolbarItem,\n ToolbarItemMarkup,\n ToolbarItemWysiwyg,\n ToolbarsPreset,\n} from '../../../modules/toolbars/types';\nimport type {MarkdownEditorViewProps} from '../../MarkdownEditorView';\nimport type {MarkdownEditorPreset} from '../../types';\nimport {ToolbarDataType} from '../types';\nimport type {MToolbarData, ToolbarIconData, WToolbarData} from '../types';\n\nimport {flattenPreset} from './flattenPreset';\n\nconst defaultPresets: Record<MarkdownEditorPreset, ToolbarsPreset> = {\n zero,\n commonmark,\n default: defaultPreset,\n yfm,\n full,\n};\n\ninterface TransformedItem {\n type: ToolbarDataType;\n id: string;\n title?: string | (() => string);\n hint?: string | (() => string);\n icon?: ToolbarIconData;\n hotkey?: string;\n withArrow?: boolean;\n replaceActiveIcon?: true;\n doNotActivateList?: boolean;\n preview?: React.ReactNode;\n wysiwyg?: ToolbarItemWysiwyg<ToolbarDataType>;\n markup?: ToolbarItemMarkup<ToolbarDataType>;\n}\n\nconst transformItem = (\n type: 'wysiwyg' | 'markup',\n item?: ToolbarItem<ToolbarDataType.SingleButton | ToolbarDataType.ListButton>,\n id = 'unknown',\n): TransformedItem => {\n if (!item) {\n console.warn(\n `Toolbar item \"${id}\" not found, it might not have been added to the items dictionary.`,\n );\n return {} as TransformedItem;\n }\n\n const isListButton = item.view.type === ToolbarDataType.ListButton;\n const isSingleButton = item.view.type === ToolbarDataType.SingleButton;\n\n return {\n type: item.view.type ?? ToolbarDataType.SingleButton,\n id,\n title: item.view.title,\n hint: item.view.hint,\n icon: item.view.icon,\n hotkey: item.view.hotkey,\n doNotActivateList: item.view.doNotActivateList,\n ...(isSingleButton && {preview: (item.view as any).preview}),\n ...(isListButton && {\n withArrow: (item.view as any).withArrow,\n replaceActiveIcon: (item.view as any).replaceActiveIcon,\n }),\n ...(type === 'wysiwyg' && item.wysiwyg && {...item.wysiwyg}),\n ...(type === 'markup' && item.markup && {...item.markup}),\n };\n};\n\nexport const createToolbarConfig = <T extends WToolbarData | MToolbarData>(\n editorType: 'wysiwyg' | 'markup',\n toolbarPreset: ToolbarsPreset | MarkdownEditorPreset,\n toolbarName: string,\n): T => {\n const preset =\n typeof toolbarPreset === 'string'\n ? defaultPresets[toolbarPreset] || defaultPresets.default\n : toolbarPreset;\n const orders = preset.orders[toolbarName] ?? [[]];\n const {items} = preset;\n\n const toolbarData = orders.map((group) =>\n group.map((action) => {\n return typeof action === 'string'\n ? transformItem(editorType, items[action], action)\n : {\n ...transformItem(editorType, items[action.id], action.id),\n data: action.items.map((id) => transformItem(editorType, items[id], id)),\n };\n }),\n );\n\n return toolbarData as T;\n};\n\ninterface GetToolbarsConfigsArgs {\n toolbarsPreset?: ToolbarsPreset;\n props: Pick<\n MarkdownEditorViewProps,\n | 'markupToolbarConfig'\n | 'wysiwygToolbarConfig'\n | 'wysiwygHiddenActionsConfig'\n | 'markupHiddenActionsConfig'\n >;\n preset: MarkdownEditorPreset;\n}\nexport const getToolbarsConfigs = ({toolbarsPreset, props, preset}: GetToolbarsConfigsArgs) => {\n const wysiwygToolbarConfig = toolbarsPreset\n ? createToolbarConfig<WToolbarData>('wysiwyg', toolbarsPreset, ToolbarName.wysiwygMain)\n : (props.wysiwygToolbarConfig ??\n createToolbarConfig<WToolbarData>('wysiwyg', preset, ToolbarName.wysiwygMain));\n\n const markupToolbarConfig = toolbarsPreset\n ? createToolbarConfig<MToolbarData>('markup', toolbarsPreset, ToolbarName.markupMain)\n : (props.markupToolbarConfig ??\n createToolbarConfig<MToolbarData>('markup', preset, ToolbarName.markupMain));\n\n const wysiwygHiddenActionsConfig = toolbarsPreset\n ? flattenPreset(\n createToolbarConfig<WToolbarData>(\n 'wysiwyg',\n toolbarsPreset,\n ToolbarName.wysiwygHidden,\n ),\n )\n : (props.wysiwygHiddenActionsConfig ??\n flattenPreset(\n createToolbarConfig<WToolbarData>('wysiwyg', preset, ToolbarName.wysiwygHidden),\n ));\n\n const markupHiddenActionsConfig = toolbarsPreset\n ? flattenPreset(\n createToolbarConfig<MToolbarData>('markup', toolbarsPreset, ToolbarName.markupHidden),\n )\n : (props.markupHiddenActionsConfig ??\n flattenPreset(\n createToolbarConfig<MToolbarData>('markup', preset, ToolbarName.markupHidden),\n ));\n\n return {\n wysiwygToolbarConfig,\n markupToolbarConfig,\n wysiwygHiddenActionsConfig,\n markupHiddenActionsConfig,\n };\n};\n"]}
|
|
@@ -24,12 +24,14 @@ export type ParseInsertedUrlAsImage = (text: string) => {
|
|
|
24
24
|
} | null;
|
|
25
25
|
export type WysiwygPlaceholderOptions = {
|
|
26
26
|
value?: string | (() => string);
|
|
27
|
-
/**
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Default – empty-doc.
|
|
29
|
+
*
|
|
30
|
+
* Values:
|
|
31
|
+
* - 'empty-doc' – The placeholder will only be shown when the document is completely empty;
|
|
32
|
+
* - 'empty-row-top-level' – The placeholder will be displayed in an empty line that is at the top level of the document structure;
|
|
33
|
+
* - 'empty-row' – The placeholder will be shown in any empty line within the document, regardless of its nesting level.
|
|
34
|
+
*/
|
|
33
35
|
behavior?: 'empty-doc' | 'empty-row-top-level' | 'empty-row';
|
|
34
36
|
};
|
|
35
37
|
export type MarkdownEditorMdOptions = {
|
|
@@ -58,13 +60,11 @@ export type MarkdownEditorHandlers = {
|
|
|
58
60
|
export type MarkdownEditorExperimentalOptions = {
|
|
59
61
|
/**
|
|
60
62
|
* If we need to set dimensions for uploaded images
|
|
61
|
-
*
|
|
62
63
|
* @default false
|
|
63
64
|
*/
|
|
64
65
|
needToSetDimensionsForUploadedImages?: boolean;
|
|
65
66
|
/**
|
|
66
67
|
* If we need to enable new image size calculations
|
|
67
|
-
*
|
|
68
68
|
* @default false
|
|
69
69
|
*/
|
|
70
70
|
enableNewImageSizeCalculation?: boolean;
|
|
@@ -96,7 +96,6 @@ export type MarkdownEditorExperimentalOptions = {
|
|
|
96
96
|
directiveSyntax?: DirectiveSyntaxOption;
|
|
97
97
|
/**
|
|
98
98
|
* If we need support for empty strings
|
|
99
|
-
*
|
|
100
99
|
* @default false
|
|
101
100
|
*/
|
|
102
101
|
preserveEmptyRows?: boolean;
|
|
@@ -107,7 +106,6 @@ export type MarkdownEditorExperimentalOptions = {
|
|
|
107
106
|
* **Use case:** Maintain consistent markup when switching modes
|
|
108
107
|
*
|
|
109
108
|
* **Note:** Applies to tracked blocks: `yfm_table`
|
|
110
|
-
*
|
|
111
109
|
* @default false
|
|
112
110
|
*/
|
|
113
111
|
preserveMarkupFormatting?: boolean;
|
|
@@ -147,6 +145,8 @@ export type MarkdownEditorMarkupConfig = {
|
|
|
147
145
|
languageData?: YfmLangOptions['languageData'];
|
|
148
146
|
/** Config for @codemirror/autocomplete https://codemirror.net/docs/ref/#autocomplete.autocompletion%5Econfig */
|
|
149
147
|
autocompletion?: CreateCodemirrorParams['autocompletion'];
|
|
148
|
+
/** Config for tooltips https://codemirror.net/docs/ref/#view.tooltips */
|
|
149
|
+
tooltips?: CreateCodemirrorParams['tooltips'];
|
|
150
150
|
/**
|
|
151
151
|
* The function, used to determine if the pasted text is the image url and should be inserted as an image
|
|
152
152
|
*/
|
|
@@ -179,7 +179,6 @@ export type MarkdownEditorWysiwygConfig = {
|
|
|
179
179
|
export type MarkdownEditorOptions = {
|
|
180
180
|
/**
|
|
181
181
|
* A set of plug-in extensions.
|
|
182
|
-
*
|
|
183
182
|
* @default 'full'
|
|
184
183
|
*/
|
|
185
184
|
preset?: MarkdownEditorPreset;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"../../../src","sources":["bundle/types.ts"],"names":[],"mappings":"AAAA,mDAAmD","sourcesContent":["// public types, re-exported in src/bundle/index.ts\n\nimport type {ReactNode} from 'react';\n\nimport type {MarkupString} from '../common';\nimport type {EscapeConfig, Extension} from '../core';\nimport type {Logger2} from '../logger';\nimport type {CreateCodemirrorParams, YfmLangOptions} from '../markup';\nimport type {FileUploadHandler} from '../utils';\nimport type {DirectiveSyntaxContext, DirectiveSyntaxOption} from '../utils/directive';\n\nimport type {ChangeEditorModeOptions} from './Editor';\nimport type {ExtensionsOptions as WysiwygPresetExtensionsOptions} from './wysiwyg-preset';\n\nexport type {Editor as MarkdownEditorInstance} from './Editor';\nexport type MarkdownEditorMode = 'wysiwyg' | 'markup';\nexport type MarkdownEditorPreset = 'zero' | 'commonmark' | 'default' | 'yfm' | 'full';\nexport type MarkdownEditorSplitMode = false | 'horizontal' | 'vertical';\n\nexport type RenderPreviewParams = {\n getValue: () => MarkupString;\n mode: 'preview' | 'split';\n md: Readonly<MarkdownEditorMdOptions>;\n directiveSyntax: Pick<DirectiveSyntaxContext, 'option' | 'valueFor' | 'mdPluginValueFor'>;\n};\nexport type RenderPreview = (params: RenderPreviewParams) => ReactNode;\n\nexport type ParseInsertedUrlAsImage = (text: string) => {imageUrl: string; title?: string} | null;\n\nexport type WysiwygPlaceholderOptions = {\n value?: string | (() => string);\n
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"../../../src","sources":["bundle/types.ts"],"names":[],"mappings":"AAAA,mDAAmD","sourcesContent":["// public types, re-exported in src/bundle/index.ts\n\nimport type {ReactNode} from 'react';\n\nimport type {MarkupString} from '../common';\nimport type {EscapeConfig, Extension} from '../core';\nimport type {Logger2} from '../logger';\nimport type {CreateCodemirrorParams, YfmLangOptions} from '../markup';\nimport type {FileUploadHandler} from '../utils';\nimport type {DirectiveSyntaxContext, DirectiveSyntaxOption} from '../utils/directive';\n\nimport type {ChangeEditorModeOptions} from './Editor';\nimport type {ExtensionsOptions as WysiwygPresetExtensionsOptions} from './wysiwyg-preset';\n\nexport type {Editor as MarkdownEditorInstance} from './Editor';\nexport type MarkdownEditorMode = 'wysiwyg' | 'markup';\nexport type MarkdownEditorPreset = 'zero' | 'commonmark' | 'default' | 'yfm' | 'full';\nexport type MarkdownEditorSplitMode = false | 'horizontal' | 'vertical';\n\nexport type RenderPreviewParams = {\n getValue: () => MarkupString;\n mode: 'preview' | 'split';\n md: Readonly<MarkdownEditorMdOptions>;\n directiveSyntax: Pick<DirectiveSyntaxContext, 'option' | 'valueFor' | 'mdPluginValueFor'>;\n};\nexport type RenderPreview = (params: RenderPreviewParams) => ReactNode;\n\nexport type ParseInsertedUrlAsImage = (text: string) => {imageUrl: string; title?: string} | null;\n\nexport type WysiwygPlaceholderOptions = {\n value?: string | (() => string);\n /**\n * Default – empty-doc.\n *\n * Values:\n * - 'empty-doc' – The placeholder will only be shown when the document is completely empty;\n * - 'empty-row-top-level' – The placeholder will be displayed in an empty line that is at the top level of the document structure;\n * - 'empty-row' – The placeholder will be shown in any empty line within the document, regardless of its nesting level.\n */\n behavior?: 'empty-doc' | 'empty-row-top-level' | 'empty-row';\n};\n\nexport type MarkdownEditorMdOptions = {\n html?: boolean;\n breaks?: boolean;\n linkify?: boolean;\n linkifyTlds?: string | string[];\n};\n\nexport type MarkdownEditorInitialOptions = {\n markup?: MarkupString;\n /** Default – wysiwyg */\n mode?: MarkdownEditorMode;\n /** Default – true */\n toolbarVisible?: boolean;\n /**\n * Default – false\n *\n * Note: has no effect if `MarkdownEditorMarkupConfig.splitMode` is set to false or is not set.\n */\n splitModeEnabled?: boolean;\n};\n\nexport type MarkdownEditorHandlers = {\n /** Pass this handler to allow uploading files from device. */\n uploadFile?: FileUploadHandler;\n};\n\nexport type MarkdownEditorExperimentalOptions = {\n /**\n * If we need to set dimensions for uploaded images\n * @default false\n */\n needToSetDimensionsForUploadedImages?: boolean;\n /**\n * If we need to enable new image size calculations\n * @default false\n */\n enableNewImageSizeCalculation?: boolean;\n /**\n * Called before switching from the markup editor to the wysiwyg editor.\n * You can use it to pre-process the value from the markup editor before it gets into the wysiwyg editor.\n */\n prepareRawMarkup?: (value: MarkupString) => MarkupString;\n beforeEditorModeChange?: (\n options: Pick<ChangeEditorModeOptions, 'mode' | 'reason'>,\n ) => boolean | undefined;\n /**\n * Enables support of directive syntax for diplodoc (YFM) extensions.\n *\n * **Note:** This setting affects parsing of markdown markup and serializing to markdown markup.\n * Be careful with it and use it in consistency with diplodoc/transform and diplodoc-extensions.\n *\n * Before enabling this option, make sure that appropriate versions of diplodoc/transform and diplodoc-extensions are installed.\n *\n * You can pass an object in `key:value` format to provide different behaviour for each extension individually.\n *\n * Values:\n * - 'disabled' – directive syntax is disabled;\n * - 'enabled' – directive syntax is enabled. Syntax of existing blocks is preserved. New blocks will be serialized using old syntax;\n * - 'preserve' – directive syntax is enabled. Syntax of existing blocks is preserved. New blocks will be serialized using directive syntax;\n * - 'overwrite' – existing blocks will be overwritten using directive syntax through serialization;\n * - 'only' – old syntax is disabled, only directive syntax available. Blocks in old syntax will not be parsed.\n *\n * Default value is 'disabled'.\n */\n directiveSyntax?: DirectiveSyntaxOption;\n /**\n * If we need support for empty strings\n * @default false\n */\n preserveEmptyRows?: boolean;\n /**\n * Preserves the original formatting of unmodified blocks,\n * restoring their structure during serialization\n *\n * **Use case:** Maintain consistent markup when switching modes\n *\n * **Note:** Applies to tracked blocks: `yfm_table`\n * @default false\n */\n preserveMarkupFormatting?: boolean;\n};\n\nexport type MarkdownEditorMarkupConfig = {\n /**\n * Pass the rendering function to preview the markdown content.\n *\n * It is also used for split view rendering.\n *\n * If false is passed, preview will be disabled.\n */\n renderPreview?: RenderPreview;\n /**\n * Pass position of split view.\n *\n * Note: for enable split view, you need to pass renderPreview function too.\n *\n * If false is passed, split view will be disabled.\n */\n splitMode?: MarkdownEditorSplitMode;\n /** Additional extensions for codemirror instance. */\n extensions?: CreateCodemirrorParams['extensions'];\n /** Can be used to disable some of the default extensions */\n disabledExtensions?: CreateCodemirrorParams['disabledExtensions'];\n /** Additional keymaps for codemirror instance */\n keymaps?: CreateCodemirrorParams['keymaps'];\n /** Overrides the default placeholder content. */\n placeholder?: CreateCodemirrorParams['placeholder'];\n /** Enable HTML parsing when pasting content. */\n parseHtmlOnPaste?: boolean;\n /**\n * Additional language data for markdown language in codemirror.\n * Can be used to configure additional autocompletions and others.\n * See more https://codemirror.net/docs/ref/#state.EditorState.languageDataAt\n */\n languageData?: YfmLangOptions['languageData'];\n /** Config for @codemirror/autocomplete https://codemirror.net/docs/ref/#autocomplete.autocompletion%5Econfig */\n autocompletion?: CreateCodemirrorParams['autocompletion'];\n /** Config for tooltips https://codemirror.net/docs/ref/#view.tooltips */\n tooltips?: CreateCodemirrorParams['tooltips'];\n /**\n * The function, used to determine if the pasted text is the image url and should be inserted as an image\n */\n parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n /**\n * Show search panel in the editor.\n * @default true\n */\n searchPanel?: boolean;\n};\n\n// do not export this type\ntype ExtensionsOptions<T extends object = {}> = Omit<\n WysiwygPresetExtensionsOptions,\n 'reactRenderer'\n> &\n T;\n\nexport type MarkdownEditorWysiwygConfig = {\n /** Additional extensions */\n extensions?: Extension;\n extensionOptions?: ExtensionsOptions;\n escapeConfig?: EscapeConfig;\n placeholderOptions?: WysiwygPlaceholderOptions;\n // MAJOR: remove markdown-it-attrs\n /**\n * Disable the markdown-it-attrs plugin in the markup parser.\n *\n * Note: The use of the markdown-it-attrs plugin will be removed in the next major version.\n */\n disableMarkdownAttrs?: boolean;\n /**\n * Show search panel in the editor.\n * @default true\n */\n searchPanel?: boolean;\n};\n\nexport type MarkdownEditorOptions = {\n /**\n * A set of plug-in extensions.\n * @default 'full'\n */\n preset?: MarkdownEditorPreset;\n /** Markdown parser options */\n md?: MarkdownEditorMdOptions;\n /** Initial values */\n initial?: MarkdownEditorInitialOptions;\n handlers?: MarkdownEditorHandlers;\n experimental?: MarkdownEditorExperimentalOptions;\n /** Options for markup mode */\n markupConfig?: MarkdownEditorMarkupConfig;\n /** Options for wysiwyg mode */\n wysiwygConfig?: MarkdownEditorWysiwygConfig;\n logger?: Logger2.ILogger;\n /** Mobile view */\n mobile?: boolean;\n};\n"]}
|
|
@@ -14,7 +14,6 @@ export type BundlePresetOptions = ExtensionsOptions & EditorModeKeymapOptions &
|
|
|
14
14
|
placeholderOptions?: WysiwygPlaceholderOptions;
|
|
15
15
|
/**
|
|
16
16
|
* If we need to set dimensions for uploaded images
|
|
17
|
-
*
|
|
18
17
|
* @default false
|
|
19
18
|
*/
|
|
20
19
|
needToSetDimensionsForUploadedImages?: boolean;
|
|
@@ -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;
|