@gravity-ui/markdown-editor 15.27.1 → 15.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/build/cjs/bundle/Editor.js.map +1 -1
- package/build/cjs/bundle/HorizontalDrag.js +3 -3
- package/build/cjs/bundle/HorizontalDrag.js.map +1 -1
- package/build/cjs/bundle/settings/index.js +1 -1
- package/build/cjs/bundle/settings/index.js.map +1 -1
- package/build/cjs/bundle/toolbar/utils/toolbarsConfigs.js +8 -8
- package/build/cjs/bundle/toolbar/utils/toolbarsConfigs.js.map +1 -1
- package/build/cjs/bundle/types.d.ts +8 -11
- package/build/cjs/bundle/types.js.map +1 -1
- package/build/cjs/bundle/wysiwyg-preset.d.ts +0 -1
- package/build/cjs/bundle/wysiwyg-preset.js +1 -1
- package/build/cjs/bundle/wysiwyg-preset.js.map +1 -1
- package/build/cjs/core/Editor.js.map +1 -1
- package/build/cjs/core/ExtensionBuilder.d.ts +0 -2
- package/build/cjs/core/ExtensionBuilder.js +1 -1
- package/build/cjs/core/ExtensionBuilder.js.map +1 -1
- package/build/cjs/core/markdown/MarkdownParser.d.ts +2 -3
- package/build/cjs/core/markdown/MarkdownParser.js.map +1 -1
- package/build/cjs/core/types/extension.js.map +1 -1
- package/build/cjs/core/types/parser.d.ts +3 -2
- package/build/cjs/core/types/parser.js.map +1 -1
- package/build/cjs/extensions/additional/GPT/gptExtension/view.js +1 -3
- package/build/cjs/extensions/additional/GPT/gptExtension/view.js.map +1 -1
- package/build/cjs/extensions/additional/Mermaid/MermaidSpecs/index.js +0 -1
- package/build/cjs/extensions/additional/Mermaid/MermaidSpecs/index.js.map +1 -1
- package/build/cjs/extensions/additional/YfmHtmlBlock/YfmHtmlBlockNodeView/YfmHtmlBlockView.js +1 -1
- package/build/cjs/extensions/additional/YfmHtmlBlock/YfmHtmlBlockNodeView/YfmHtmlBlockView.js.map +1 -1
- package/build/cjs/extensions/additional/YfmHtmlBlock/YfmHtmlBlockSpecs/index.js.map +1 -1
- package/build/cjs/extensions/additional/YfmHtmlBlock/index.js.map +1 -1
- package/build/cjs/extensions/behavior/Autocomplete/types.js.map +1 -1
- package/build/cjs/extensions/behavior/SelectionContext/index.d.ts +0 -2
- package/build/cjs/extensions/behavior/SelectionContext/index.js.map +1 -1
- package/build/cjs/extensions/behavior/SelectionContext/tooltip.js.map +1 -1
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +11 -1
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
- package/build/cjs/extensions/markdown/CodeBlock/handle-paste.d.ts +20 -0
- package/build/cjs/extensions/markdown/CodeBlock/handle-paste.js +80 -23
- package/build/cjs/extensions/markdown/CodeBlock/handle-paste.js.map +1 -1
- package/build/cjs/extensions/markdown/Deflist/DeflistSpecs/index.d.ts +2 -2
- package/build/cjs/extensions/markdown/Deflist/DeflistSpecs/index.js.map +1 -1
- package/build/cjs/extensions/markdown/Heading/HeadingSpecs/index.d.ts +1 -1
- package/build/cjs/extensions/markdown/Heading/HeadingSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/Checkbox/CheckboxSpecs/index.d.ts +1 -1
- package/build/cjs/extensions/yfm/Checkbox/CheckboxSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/index.d.ts +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/index.d.ts +0 -1
- package/build/cjs/extensions/yfm/ImgSize/index.js.map +1 -1
- package/build/cjs/extensions/yfm/Video/VideoSpecs/md-video.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/schema.d.ts +2 -2
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/schema.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmNote/YfmNoteSpecs/index.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmNote/YfmNoteSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/index.d.ts +0 -2
- package/build/cjs/extensions/yfm/YfmTable/index.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.js +3 -4
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js +0 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js.map +1 -1
- package/build/cjs/i18n/bundle/en.json +2 -1
- package/build/cjs/i18n/bundle/index.d.ts +3 -2
- package/build/cjs/i18n/bundle/ru.json +2 -1
- package/build/cjs/i18n/common/en.json +2 -1
- package/build/cjs/i18n/common/index.d.ts +2 -1
- package/build/cjs/i18n/common/ru.json +2 -1
- package/build/cjs/logger.d.ts +0 -1
- package/build/cjs/logger.js +0 -1
- package/build/cjs/logger.js.map +1 -1
- package/build/cjs/shortcuts/default.js +0 -2
- package/build/cjs/shortcuts/default.js.map +1 -1
- package/build/cjs/table-utils/commands/removeRow.js +1 -2
- package/build/cjs/table-utils/commands/removeRow.js.map +1 -1
- package/build/cjs/toolbar/types.d.ts +2 -3
- package/build/cjs/toolbar/types.js.map +1 -1
- package/build/cjs/types/spec.d.ts +0 -1
- package/build/cjs/types/spec.js.map +1 -1
- package/build/cjs/utils/ecapeRegexp.d.ts +1 -2
- package/build/cjs/utils/ecapeRegexp.js +1 -2
- package/build/cjs/utils/ecapeRegexp.js.map +1 -1
- package/build/cjs/utils/inputrules.js +2 -2
- package/build/cjs/utils/inputrules.js.map +1 -1
- package/build/cjs/version.js +1 -1
- package/build/cjs/version.js.map +1 -1
- package/build/cjs/view/hooks/useFilesGallery/constants.d.ts +5 -0
- package/build/cjs/view/hooks/useFilesGallery/constants.js +10 -2
- package/build/cjs/view/hooks/useFilesGallery/constants.js.map +1 -1
- package/build/cjs/view/hooks/useFilesGallery/helpers.d.ts +8 -0
- package/build/cjs/view/hooks/useFilesGallery/helpers.js +28 -0
- package/build/cjs/view/hooks/useFilesGallery/helpers.js.map +1 -0
- package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.d.ts +0 -1
- package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.js +19 -22
- package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.js.map +1 -1
- package/build/esm/bundle/Editor.js.map +1 -1
- package/build/esm/bundle/HorizontalDrag.js +3 -3
- package/build/esm/bundle/HorizontalDrag.js.map +1 -1
- package/build/esm/bundle/settings/index.js +1 -1
- package/build/esm/bundle/settings/index.js.map +1 -1
- package/build/esm/bundle/toolbar/utils/toolbarsConfigs.js +8 -8
- package/build/esm/bundle/toolbar/utils/toolbarsConfigs.js.map +1 -1
- package/build/esm/bundle/types.d.ts +8 -11
- package/build/esm/bundle/types.js.map +1 -1
- package/build/esm/bundle/wysiwyg-preset.d.ts +0 -1
- package/build/esm/bundle/wysiwyg-preset.js +1 -1
- package/build/esm/bundle/wysiwyg-preset.js.map +1 -1
- package/build/esm/core/Editor.js.map +1 -1
- package/build/esm/core/ExtensionBuilder.d.ts +0 -2
- package/build/esm/core/ExtensionBuilder.js +1 -1
- package/build/esm/core/ExtensionBuilder.js.map +1 -1
- package/build/esm/core/markdown/MarkdownParser.d.ts +2 -3
- package/build/esm/core/markdown/MarkdownParser.js.map +1 -1
- package/build/esm/core/types/extension.js.map +1 -1
- package/build/esm/core/types/parser.d.ts +3 -2
- package/build/esm/core/types/parser.js.map +1 -1
- package/build/esm/extensions/additional/GPT/gptExtension/view.js +1 -3
- package/build/esm/extensions/additional/GPT/gptExtension/view.js.map +1 -1
- package/build/esm/extensions/additional/Mermaid/MermaidSpecs/index.js +0 -1
- package/build/esm/extensions/additional/Mermaid/MermaidSpecs/index.js.map +1 -1
- package/build/esm/extensions/additional/YfmHtmlBlock/YfmHtmlBlockNodeView/YfmHtmlBlockView.js +1 -1
- package/build/esm/extensions/additional/YfmHtmlBlock/YfmHtmlBlockNodeView/YfmHtmlBlockView.js.map +1 -1
- package/build/esm/extensions/additional/YfmHtmlBlock/YfmHtmlBlockSpecs/index.js.map +1 -1
- package/build/esm/extensions/additional/YfmHtmlBlock/index.js.map +1 -1
- package/build/esm/extensions/behavior/Autocomplete/types.js.map +1 -1
- package/build/esm/extensions/behavior/SelectionContext/index.d.ts +0 -2
- package/build/esm/extensions/behavior/SelectionContext/index.js.map +1 -1
- package/build/esm/extensions/behavior/SelectionContext/tooltip.js.map +1 -1
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +11 -1
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
- package/build/esm/extensions/markdown/CodeBlock/handle-paste.d.ts +20 -0
- package/build/esm/extensions/markdown/CodeBlock/handle-paste.js +78 -24
- package/build/esm/extensions/markdown/CodeBlock/handle-paste.js.map +1 -1
- package/build/esm/extensions/markdown/Deflist/DeflistSpecs/index.d.ts +2 -2
- package/build/esm/extensions/markdown/Deflist/DeflistSpecs/index.js.map +1 -1
- package/build/esm/extensions/markdown/Heading/HeadingSpecs/index.d.ts +1 -1
- package/build/esm/extensions/markdown/Heading/HeadingSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/Checkbox/CheckboxSpecs/index.d.ts +1 -1
- package/build/esm/extensions/yfm/Checkbox/CheckboxSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/index.d.ts +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/index.d.ts +0 -1
- package/build/esm/extensions/yfm/ImgSize/index.js.map +1 -1
- package/build/esm/extensions/yfm/Video/VideoSpecs/md-video.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/schema.d.ts +2 -2
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/schema.js.map +1 -1
- package/build/esm/extensions/yfm/YfmNote/YfmNoteSpecs/index.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmNote/YfmNoteSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/index.d.ts +0 -2
- package/build/esm/extensions/yfm/YfmTable/index.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingMenuControl/FloatingMenuControl.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.js +1 -2
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusButton/InsertCursor.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPlusControl/FloatingPlusControl.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js +0 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/components/FloatingPopup/FloatingPopup.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js.map +1 -1
- package/build/esm/i18n/bundle/en.json +2 -1
- package/build/esm/i18n/bundle/index.d.ts +3 -2
- package/build/esm/i18n/bundle/ru.json +2 -1
- package/build/esm/i18n/common/en.json +2 -1
- package/build/esm/i18n/common/index.d.ts +2 -1
- package/build/esm/i18n/common/ru.json +2 -1
- package/build/esm/logger.d.ts +0 -1
- package/build/esm/logger.js +0 -1
- package/build/esm/logger.js.map +1 -1
- package/build/esm/shortcuts/default.js +0 -2
- package/build/esm/shortcuts/default.js.map +1 -1
- package/build/esm/table-utils/commands/removeRow.js +1 -2
- package/build/esm/table-utils/commands/removeRow.js.map +1 -1
- package/build/esm/toolbar/types.d.ts +2 -3
- package/build/esm/toolbar/types.js.map +1 -1
- package/build/esm/types/spec.d.ts +0 -1
- package/build/esm/types/spec.js.map +1 -1
- package/build/esm/utils/ecapeRegexp.d.ts +1 -2
- package/build/esm/utils/ecapeRegexp.js +1 -2
- package/build/esm/utils/ecapeRegexp.js.map +1 -1
- package/build/esm/utils/inputrules.js +2 -2
- package/build/esm/utils/inputrules.js.map +1 -1
- package/build/esm/version.js +1 -1
- package/build/esm/version.js.map +1 -1
- package/build/esm/view/hooks/useFilesGallery/constants.d.ts +5 -0
- package/build/esm/view/hooks/useFilesGallery/constants.js +9 -1
- package/build/esm/view/hooks/useFilesGallery/constants.js.map +1 -1
- package/build/esm/view/hooks/useFilesGallery/helpers.d.ts +8 -0
- package/build/esm/view/hooks/useFilesGallery/helpers.js +25 -0
- package/build/esm/view/hooks/useFilesGallery/helpers.js.map +1 -0
- package/build/esm/view/hooks/useFilesGallery/useFilesGallery.d.ts +0 -1
- package/build/esm/view/hooks/useFilesGallery/useFilesGallery.js +19 -21
- package/build/esm/view/hooks/useFilesGallery/useFilesGallery.js.map +1 -1
- package/package.json +73 -49
|
@@ -1,43 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.useFilesGallery = useFilesGallery;
|
|
4
|
-
const
|
|
5
|
-
const React = tslib_1.__importStar(require("react"));
|
|
4
|
+
const react_1 = require("react");
|
|
6
5
|
const components_1 = require("@gravity-ui/components");
|
|
7
6
|
const uikit_1 = require("@gravity-ui/uikit");
|
|
8
7
|
const gallery_1 = require("../../../i18n/gallery/index.js");
|
|
9
8
|
const constants_1 = require("./constants.js");
|
|
9
|
+
const helpers_1 = require("./helpers.js");
|
|
10
10
|
function useFilesGallery(customFiles, { download: getItemDownloladUrl, overrideItemProps, copyUrl: getItemCopyUrl, } = {}) {
|
|
11
11
|
const { openGallery } = (0, components_1.useGallery)();
|
|
12
12
|
const toaster = (0, uikit_1.useToaster)();
|
|
13
13
|
return {
|
|
14
|
-
openFilesGallery:
|
|
14
|
+
openFilesGallery: (0, react_1.useCallback)((event) => {
|
|
15
15
|
if (!(event.target instanceof HTMLElement)) {
|
|
16
16
|
return false;
|
|
17
17
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
else if (event.target.tagName === 'A') {
|
|
23
|
-
fileLink = event.target.getAttribute('href') ?? '';
|
|
24
|
-
}
|
|
25
|
-
if (!fileLink) {
|
|
18
|
+
if (event.target.tagName === 'IMG' && event.target.closest('a'))
|
|
19
|
+
return false;
|
|
20
|
+
// Opening the context menu or opening the link in the new tab
|
|
21
|
+
if (event.ctrlKey || event.metaKey) {
|
|
26
22
|
return false;
|
|
27
23
|
}
|
|
24
|
+
const targetFile = (0, helpers_1.buildLinkObject)(event.target);
|
|
25
|
+
if (!targetFile || !targetFile.link)
|
|
26
|
+
return false;
|
|
28
27
|
const filesFromContent = [
|
|
29
28
|
...(event.currentTarget?.querySelectorAll('img,a') ?? []),
|
|
30
29
|
].reduce((result, element) => {
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const name =
|
|
39
|
-
? element.getAttribute('alt')
|
|
40
|
-
: element.getAttribute('title')) || '';
|
|
30
|
+
const linkObj = (0, helpers_1.buildLinkObject)(element);
|
|
31
|
+
if (linkObj?.link && !customFiles?.some((item) => item.url === linkObj.link)) {
|
|
32
|
+
const extension = linkObj.mimetype?.match(constants_1.extensionRegex)?.[0] ||
|
|
33
|
+
linkObj.link.match(constants_1.extensionRegex)?.[0] ||
|
|
34
|
+
'';
|
|
35
|
+
if (linkObj.type === 'image' || constants_1.supportedExtensions.includes(extension)) {
|
|
36
|
+
const link = linkObj.link;
|
|
37
|
+
const name = linkObj.name || '';
|
|
41
38
|
const filesGalleryItemType = constants_1.supportedVideoExtensions.includes(extension) ? 'video' : 'image';
|
|
42
39
|
const galleryItemActions = [];
|
|
43
40
|
const itemCopyUrl = getItemCopyUrl?.(link, filesGalleryItemType, element);
|
|
@@ -74,7 +71,7 @@ function useFilesGallery(customFiles, { download: getItemDownloladUrl, overrideI
|
|
|
74
71
|
return result;
|
|
75
72
|
}, []);
|
|
76
73
|
const files = [...(customFiles ?? []), ...filesFromContent];
|
|
77
|
-
const initialItemIndex = files.findIndex((item) => item.url ===
|
|
74
|
+
const initialItemIndex = files.findIndex((item) => item.url === targetFile.link);
|
|
78
75
|
if (initialItemIndex !== -1) {
|
|
79
76
|
event.preventDefault();
|
|
80
77
|
openGallery(files, initialItemIndex);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFilesGallery.js","sourceRoot":"../../../../../src","sources":["view/hooks/useFilesGallery/useFilesGallery.tsx"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"useFilesGallery.js","sourceRoot":"../../../../../src","sources":["view/hooks/useFilesGallery/useFilesGallery.tsx"],"names":[],"mappings":"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","sourcesContent":["import {useCallback} from 'react';\n\nimport {\n type GalleryItemAction,\n getGalleryItemCopyLinkAction,\n getGalleryItemDownloadAction,\n getGalleryItemImage,\n getGalleryItemVideo,\n useGallery,\n} from '@gravity-ui/components';\nimport {useToaster} from '@gravity-ui/uikit';\n\nimport {i18n} from 'src/i18n/gallery';\n\nimport {extensionRegex, supportedExtensions, supportedVideoExtensions} from './constants';\nimport {buildLinkObject} from './helpers';\nimport type {FilesGalleryItemType, GalleryItemPropsWithUrl, UseFilesGalleryOptions} from './types';\n\nexport function useFilesGallery(\n customFiles?: GalleryItemPropsWithUrl[],\n {\n download: getItemDownloladUrl,\n overrideItemProps,\n copyUrl: getItemCopyUrl,\n }: UseFilesGalleryOptions = {},\n) {\n const {openGallery} = useGallery();\n\n const toaster = useToaster();\n\n return {\n openFilesGallery: useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (!(event.target instanceof HTMLElement)) {\n return false;\n }\n\n if (event.target.tagName === 'IMG' && event.target.closest('a')) return false;\n\n // Opening the context menu or opening the link in the new tab\n if (event.ctrlKey || event.metaKey) {\n return false;\n }\n\n const targetFile = buildLinkObject(event.target);\n\n if (!targetFile || !targetFile.link) return false;\n\n const filesFromContent = [\n ...(event.currentTarget?.querySelectorAll('img,a') ?? []),\n ].reduce<GalleryItemPropsWithUrl[]>((result, element) => {\n const linkObj = buildLinkObject(element);\n\n if (linkObj?.link && !customFiles?.some((item) => item.url === linkObj.link)) {\n const extension =\n linkObj.mimetype?.match(extensionRegex)?.[0] ||\n linkObj.link.match(extensionRegex)?.[0] ||\n '';\n\n if (linkObj.type === 'image' || supportedExtensions.includes(extension)) {\n const link = linkObj.link;\n const name = linkObj.name || '';\n\n const filesGalleryItemType: FilesGalleryItemType =\n supportedVideoExtensions.includes(extension) ? 'video' : 'image';\n const galleryItemActions: GalleryItemAction[] = [];\n\n const itemCopyUrl = getItemCopyUrl?.(\n link,\n filesGalleryItemType,\n element,\n );\n\n if (itemCopyUrl) {\n const handleLinkCopied = () => {\n toaster.add({\n theme: 'success',\n name: 'g-md-editor-gallery-copy-link',\n title: i18n('link_copied'),\n });\n };\n\n galleryItemActions.push(\n getGalleryItemCopyLinkAction({\n copyUrl: itemCopyUrl,\n onCopy: handleLinkCopied,\n }),\n );\n }\n\n const downloadUrl = getItemDownloladUrl?.(\n link,\n filesGalleryItemType,\n element,\n );\n\n if (downloadUrl) {\n galleryItemActions.push(\n getGalleryItemDownloadAction({downloadUrl}),\n );\n }\n\n const galleryItemProps = {\n ...(filesGalleryItemType === 'video'\n ? getGalleryItemVideo({src: link, name: name})\n : getGalleryItemImage({src: link, name: name})),\n url: link,\n actions: galleryItemActions,\n };\n\n result.push({\n ...galleryItemProps,\n ...overrideItemProps?.(\n link,\n filesGalleryItemType,\n element,\n galleryItemProps,\n ),\n });\n }\n }\n\n return result;\n }, []);\n\n const files = [...(customFiles ?? []), ...filesFromContent];\n\n const initialItemIndex = files.findIndex((item) => item.url === targetFile.link);\n\n if (initialItemIndex !== -1) {\n event.preventDefault();\n openGallery(files, initialItemIndex);\n return true;\n }\n\n return false;\n },\n [\n customFiles,\n getItemCopyUrl,\n getItemDownloladUrl,\n overrideItemProps,\n toaster,\n openGallery,\n ],\n ),\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Editor.js","sourceRoot":"../../../src","sources":["bundle/Editor.ts"],"names":[],"mappings":"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","sourcesContent":["import type {ReactNode} from 'react';\n\nimport {EditorView as CMEditorView} from '@codemirror/view';\nimport {TextSelection} from 'prosemirror-state';\nimport type {EditorView as PMEditorView} from 'prosemirror-view';\n\nimport {getDescedantByAttribute} from 'src/utils/node-descedants';\n\nimport type {CommonEditor, MarkupString} from '../common';\nimport {\n type ActionStorage,\n type EscapeConfig,\n WysiwygEditor,\n type WysiwygEditorOptions,\n} from '../core';\nimport type {TransformFn} from '../core/markdown/ProseMirrorTransformer';\nimport type {DynamicModifiers} from '../core/types/dynamicModifiers';\nimport type {ReactRenderStorage, RenderStorage} from '../extensions';\nimport {i18n} from '../i18n/bundle';\nimport {type Logger2, globalLogger} from '../logger';\nimport {createCodemirror} from '../markup';\nimport {getAutocompleteConfig} from '../markup/codemirror/autocomplete';\nimport {type CodeEditor, Editor as MarkupEditor} from '../markup/editor';\nimport {type Emitter, type FileUploadHandler, type Receiver, SafeEventEmitter} from '../utils';\nimport type {DirectiveSyntaxContext} from '../utils/directive';\n\nimport {MarkupManager} from './MarkupManager';\nimport {createDynamicModifiers} from './config/dynamicModifiers';\nimport type {\n MarkdownEditorMode as EditorMode,\n MarkdownEditorPreset as EditorPreset,\n MarkdownEditorMdOptions,\n MarkdownEditorOptions,\n MarkdownEditorMarkupConfig as MarkupConfig,\n ParseInsertedUrlAsImage,\n RenderPreview,\n MarkdownEditorSplitMode as SplitMode,\n} from './types';\n\nexport type ToolbarActionData = {\n editorMode: EditorMode;\n id: string;\n attrs?: {[key: string]: any};\n};\n\nexport interface EventMap {\n change: null;\n cancel: null;\n submit: null;\n\n 'toolbar-action': ToolbarActionData;\n\n 'change-editor-mode': {mode: EditorMode};\n 'change-toolbar-visibility': {visible: boolean};\n 'change-split-mode-enabled': {splitModeEnabled: boolean};\n}\n\n// internal events\ninterface EventMapInt extends EventMap {\n rerender: null;\n 'rerender-toolbar': null;\n 'cm-scroll': {event: Event};\n}\n\nexport interface Editor extends Receiver<EventMap>, CommonEditor {\n readonly logger: Logger2.LogReceiver;\n readonly currentMode: EditorMode;\n readonly toolbarVisible: boolean;\n\n setEditorMode(mode: EditorMode, opts?: SetEditorModeOptions): void;\n\n moveCursor(position: 'start' | 'end' | {line: number}): void;\n\n /** @internal used in demo for dev-tools */\n readonly _wysiwygView?: PMEditorView;\n}\n\n/** @internal */\nexport interface EditorInt\n extends CommonEditor,\n Emitter<EventMapInt>,\n Receiver<EventMapInt>,\n ActionStorage,\n CodeEditor {\n readonly logger: Logger2.ILogger;\n readonly currentMode: EditorMode;\n readonly toolbarVisible: boolean;\n readonly splitModeEnabled: boolean;\n readonly splitMode: SplitMode;\n readonly preset: EditorPreset;\n readonly mdOptions: Readonly<MarkdownEditorMdOptions>;\n readonly directiveSyntax: DirectiveSyntaxContext;\n readonly mobile: boolean;\n\n /** @internal used in demo for dev-tools */\n readonly _wysiwygView?: PMEditorView;\n\n readonly currentEditor: CommonEditor;\n readonly wysiwygEditor: WysiwygEditor;\n readonly markupEditor: MarkupEditor;\n\n readonly renderStorage: RenderStorage<ReactNode>;\n readonly fileUploadHandler?: FileUploadHandler;\n readonly needToSetDimensionsForUploadedImages: boolean;\n readonly disableHTMLParsingInMd?: boolean;\n\n readonly renderPreview?: RenderPreview;\n\n changeEditorMode(opts: ChangeEditorModeOptions): void;\n\n setEditorMode(mode: EditorMode, opts?: SetEditorModeOptions): void;\n\n moveCursor(position: 'start' | 'end' | {line: number}): void;\n\n changeToolbarVisibility(opts: {visible: boolean}): void;\n\n changeSplitModeEnabled(opts: {splitModeEnabled: boolean}): void;\n\n destroy(): void;\n}\n\ntype SetEditorModeOptions = Pick<ChangeEditorModeOptions, 'emit'>;\n\nexport type ChangeEditorModeOptions = {\n mode: EditorMode;\n reason: 'error-boundary' | 'settings' | 'manually';\n emit?: boolean;\n};\n\nexport type EditorOptions = Pick<\n MarkdownEditorOptions,\n 'md' | 'initial' | 'handlers' | 'experimental' | 'markupConfig' | 'wysiwygConfig' | 'mobile'\n> & {\n logger: Logger2.ILogger;\n renderStorage: ReactRenderStorage;\n preset: EditorPreset;\n directiveSyntax: DirectiveSyntaxContext;\n pmTransformers: TransformFn[];\n};\n\n/** @internal */\nexport class EditorImpl extends SafeEventEmitter<EventMapInt> implements EditorInt {\n #logger: Logger2.ILogger;\n #markup: MarkupString;\n #editorMode: EditorMode;\n #toolbarVisible: boolean;\n #splitModeEnabled: boolean;\n #splitMode: SplitMode;\n #renderPreview?: RenderPreview;\n #wysiwygEditor?: WysiwygEditor;\n #markupEditor?: MarkupEditor;\n #markupConfig: MarkupConfig;\n #escapeConfig?: EscapeConfig;\n #mdOptions: Readonly<MarkdownEditorMdOptions>;\n #pmTransformers: TransformFn[] = [];\n #preserveEmptyRows: boolean;\n #modifiers?: DynamicModifiers[];\n\n readonly #preset: EditorPreset;\n #extensions?: WysiwygEditorOptions['extensions'];\n #renderStorage: ReactRenderStorage;\n #fileUploadHandler?: FileUploadHandler;\n #parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n #needToSetDimensionsForUploadedImages: boolean;\n #enableNewImageSizeCalculation: boolean;\n #directiveSyntax: DirectiveSyntaxContext;\n #prepareRawMarkup?: (value: MarkupString) => MarkupString;\n #beforeEditorModeChange?: (\n options: Pick<ChangeEditorModeOptions, 'mode' | 'reason'>,\n ) => boolean | undefined;\n #mobile: boolean;\n\n get _wysiwygView(): PMEditorView {\n // @ts-expect-error internal typing\n return this.#wysiwygEditor?.view;\n }\n\n get logger(): Logger2.ILogger {\n return this.#logger;\n }\n\n get currentMode(): EditorMode {\n return this.#editorMode;\n }\n\n private set currentMode(newMode: EditorMode) {\n switch (newMode) {\n case 'markup': {\n this.#editorMode = newMode;\n if (this.#wysiwygEditor) {\n const markupEditorValue = this.#markupEditor?.getValue();\n const wysiwygEditorValue = this.#wysiwygEditor.getValue();\n if (\n !markupEditorValue ||\n this.shouldReplaceMarkupEditorValue(markupEditorValue, wysiwygEditorValue)\n ) {\n this.#markup = wysiwygEditorValue;\n } else {\n this.#markup = markupEditorValue;\n }\n }\n if (this.#markupEditor) this.#markupEditor.replace(this.#markup);\n break;\n }\n case 'wysiwyg': {\n this.#editorMode = newMode;\n if (this.#markupEditor) {\n const value = this.#markupEditor.getValue();\n this.#markup = this.#prepareRawMarkup?.(value) ?? value;\n } else if (this.#prepareRawMarkup) {\n this.#markup = this.#prepareRawMarkup(this.#markup);\n }\n if (this.#wysiwygEditor) this.#wysiwygEditor.replace(this.#markup);\n break;\n }\n default:\n throw new Error('Unknown editor mode: ' + newMode);\n }\n setTimeout(() => {\n this.currentEditor.focus();\n }, 30);\n }\n\n get toolbarVisible(): boolean {\n return this.#toolbarVisible;\n }\n\n get splitModeEnabled(): boolean {\n return this.#splitModeEnabled;\n }\n\n get splitMode(): SplitMode {\n return this.#splitMode;\n }\n\n get preset(): EditorPreset {\n return this.#preset;\n }\n\n get mdOptions(): Readonly<MarkdownEditorMdOptions> {\n return this.#mdOptions;\n }\n\n get directiveSyntax(): DirectiveSyntaxContext {\n return this.#directiveSyntax;\n }\n\n get renderPreview(): RenderPreview | undefined {\n return this.#renderPreview;\n }\n\n get currentEditor(): CommonEditor {\n const mode = this.currentMode;\n switch (mode) {\n case 'markup':\n return this.markupEditor;\n case 'wysiwyg':\n return this.wysiwygEditor;\n default:\n throw new Error('Unknown editor mode: ' + mode);\n }\n }\n\n get wysiwygEditor(): WysiwygEditor {\n if (!this.#wysiwygEditor) {\n const mdPreset: NonNullable<WysiwygEditorOptions['mdPreset']> =\n this.#preset === 'zero' || this.#preset === 'commonmark' ? this.#preset : 'default';\n this.#wysiwygEditor = new WysiwygEditor({\n mdPreset,\n logger: this.logger.nested({mode: 'wysiwyg'}),\n initialContent: this.#markup,\n extensions: this.#extensions,\n pmTransformers: this.#pmTransformers,\n modifiers: this.#modifiers,\n allowHTML: this.#mdOptions.html,\n linkify: this.#mdOptions.linkify,\n linkifyTlds: this.#mdOptions.linkifyTlds,\n escapeConfig: this.#escapeConfig,\n onChange: () => this.emit('rerender-toolbar', null),\n onDocChange: () => this.emit('change', null),\n });\n }\n return this.#wysiwygEditor;\n }\n\n get markupEditor(): MarkupEditor {\n if (!this.#markupEditor) {\n this.#markupEditor = new MarkupEditor(\n createCodemirror({\n doc: this.#markup,\n logger: this.logger.nested({mode: 'markup'}),\n placeholder: this.#markupConfig.placeholder ?? i18n('markup_placeholder'),\n onCancel: () => this.emit('cancel', null),\n onSubmit: () => this.emit('submit', null),\n onChange: () => this.emit('rerender-toolbar', null),\n onDocChange: () => this.emit('change', null),\n onScroll: (event) => this.emit('cm-scroll', {event}),\n reactRenderer: this.#renderStorage,\n uploadHandler: this.fileUploadHandler,\n parseInsertedUrlAsImage: this.parseInsertedUrlAsImage,\n needImageDimensions: this.needToSetDimensionsForUploadedImages,\n parseHtmlOnPaste: this.#markupConfig.parseHtmlOnPaste,\n enableNewImageSizeCalculation: this.enableNewImageSizeCalculation,\n extensions: this.#markupConfig.extensions,\n disabledExtensions: this.#markupConfig.disabledExtensions,\n keymaps: this.#markupConfig.keymaps,\n preserveEmptyRows: this.#preserveEmptyRows,\n yfmLangOptions: {\n languageData: getAutocompleteConfig({\n preserveEmptyRows: this.#preserveEmptyRows,\n }).concat(this.#markupConfig?.languageData || []),\n },\n autocompletion: this.#markupConfig.autocompletion,\n directiveSyntax: this.directiveSyntax,\n receiver: this,\n searchPanel: this.#markupConfig.searchPanel,\n }),\n );\n }\n return this.#markupEditor;\n }\n\n get renderStorage(): RenderStorage<ReactNode> {\n return this.#renderStorage;\n }\n\n get fileUploadHandler(): FileUploadHandler | undefined {\n return this.#fileUploadHandler;\n }\n\n get parseInsertedUrlAsImage() {\n return this.#parseInsertedUrlAsImage;\n }\n\n get needToSetDimensionsForUploadedImages(): boolean {\n return this.#needToSetDimensionsForUploadedImages;\n }\n\n get enableNewImageSizeCalculation(): boolean {\n return this.#enableNewImageSizeCalculation;\n }\n\n get mobile(): boolean {\n return this.#mobile;\n }\n\n constructor(opts: EditorOptions) {\n const {logger} = opts;\n\n super({\n onError: (error) => {\n logger.error(error);\n globalLogger.error(error);\n },\n });\n\n const {\n md = {},\n initial = {},\n handlers = {},\n experimental = {},\n markupConfig = {},\n wysiwygConfig = {},\n mobile = false,\n } = opts;\n\n this.#logger = logger;\n this.#modifiers = experimental.preserveMarkupFormatting\n ? createDynamicModifiers(\n new MarkupManager(this.logger.nested({module: 'markup-manager'})),\n )\n : undefined;\n\n this.#editorMode = initial.mode ?? 'wysiwyg';\n this.#toolbarVisible = initial.toolbarVisible ?? true;\n this.#splitMode = (markupConfig.renderPreview && markupConfig.splitMode) ?? false;\n this.#splitModeEnabled = (this.#splitMode && initial.splitModeEnabled) ?? false;\n this.#renderPreview = markupConfig.renderPreview;\n\n this.#markup = initial.markup ?? '';\n\n this.#preset = opts.preset ?? 'full';\n this.#pmTransformers = opts.pmTransformers;\n this.#mdOptions = md;\n this.#extensions = wysiwygConfig.extensions;\n this.#markupConfig = {...opts.markupConfig};\n\n this.#renderStorage = opts.renderStorage;\n this.#fileUploadHandler = handlers.uploadFile;\n this.#parseInsertedUrlAsImage = markupConfig.parseInsertedUrlAsImage;\n this.#needToSetDimensionsForUploadedImages = Boolean(\n experimental.needToSetDimensionsForUploadedImages,\n );\n this.#directiveSyntax = opts.directiveSyntax;\n this.#enableNewImageSizeCalculation = Boolean(experimental.enableNewImageSizeCalculation);\n this.#preserveEmptyRows = experimental.preserveEmptyRows || false;\n this.#prepareRawMarkup = experimental.prepareRawMarkup;\n this.#escapeConfig = wysiwygConfig.escapeConfig;\n this.#beforeEditorModeChange = experimental.beforeEditorModeChange;\n this.#mobile = mobile;\n }\n\n // ---> implements CodeEditor\n\n get cm() {\n return this.markupEditor.cm;\n }\n\n // <--- implements CodeEditor\n\n // ---> implements ActionStorage\n get actions(): WysiwygEditor.Actions {\n return this.wysiwygEditor.actions;\n }\n\n action<T extends keyof WysiwygEditor.Actions>(actionName: T): WysiwygEditor.Actions[T] {\n return this.wysiwygEditor.action(actionName);\n }\n\n // <--- implements ActionStorage\n\n destroy() {\n this.#wysiwygEditor?.destroy();\n this.#markupEditor?.codemirror.destroy();\n\n this.#markupEditor = undefined;\n this.#markupEditor = undefined;\n this.#wysiwygEditor = undefined;\n }\n\n setEditorMode(mode: EditorMode, opts?: SetEditorModeOptions): void {\n this.changeEditorMode({mode, reason: 'manually', emit: opts?.emit});\n }\n\n changeEditorMode({emit = true, ...opts}: ChangeEditorModeOptions): void {\n if (this.#editorMode === opts.mode) return;\n\n if (this.#beforeEditorModeChange?.({mode: opts.mode, reason: opts.reason}) === false) {\n return;\n }\n\n this.logger.event({\n event: 'mode-change',\n prevMode: this.#editorMode,\n nextMode: opts.mode,\n reason: opts.reason,\n });\n\n this.currentMode = opts.mode;\n this.emit('rerender', null);\n\n if (emit) {\n this.emit('change-editor-mode', opts);\n }\n }\n\n changeToolbarVisibility(opts: {visible: boolean}): void {\n this.#toolbarVisible = opts.visible;\n this.emit('rerender', null);\n this.emit('change-toolbar-visibility', opts);\n }\n\n changeSplitModeEnabled(opts: {splitModeEnabled: boolean}): void {\n if (this.#splitModeEnabled === opts.splitModeEnabled) return;\n this.#splitModeEnabled = opts.splitModeEnabled;\n this.emit('rerender', null);\n this.emit('change-split-mode-enabled', opts);\n }\n\n focus(): void {\n return this.currentEditor.focus();\n }\n\n hasFocus(): boolean {\n return this.currentEditor.hasFocus();\n }\n\n getValue: () => MarkupString = () => this.currentEditor.getValue();\n\n isEmpty(): boolean {\n return this.currentEditor.isEmpty();\n }\n\n clear(): void {\n return this.currentEditor.clear();\n }\n\n replace(newMarkup: MarkupString): void {\n return this.currentEditor.replace(newMarkup);\n }\n\n prepend(markup: MarkupString): void {\n return this.currentEditor.prepend(markup);\n }\n\n append(markup: MarkupString): void {\n return this.currentEditor.append(markup);\n }\n\n moveCursor(\n position:\n | 'start'\n | 'end'\n | {\n /** 0-based line number */\n line: number;\n },\n ): void {\n if (typeof position === 'object') {\n return this.moveCursorToLine(position.line);\n }\n\n return this.currentEditor.moveCursor(position);\n }\n\n private moveCursorToLine(/** 0-based line number */ line: number): void {\n const mode = this.currentMode;\n\n switch (mode) {\n case 'markup': {\n this.markupMoveToLine(line);\n break;\n }\n case 'wysiwyg': {\n this.wysiwygMoveToLine(line);\n break;\n }\n default:\n throw new Error('Unknown editor mode: ' + mode);\n }\n }\n\n private markupMoveToLine(line: number): void {\n const view = this.markupEditor.cm;\n const isConnected = Boolean(view.dom.parentElement);\n\n let cmLine = line + 1; // lines in codemirror is 1-based\n cmLine = Math.max(cmLine, 1);\n cmLine = Math.min(cmLine, view.state.doc.lines);\n\n const anchor = view.state.doc.line(cmLine).from;\n view.dispatch({\n scrollIntoView: true,\n selection: {anchor},\n effects: isConnected\n ? [\n CMEditorView.scrollIntoView(anchor, {\n y: 'start',\n x: 'start',\n yMargin: getTopOffset(view.dom),\n }),\n ]\n : undefined,\n });\n }\n\n private wysiwygMoveToLine(line: number): void {\n const DATA_LINE = 'data-line';\n const SELECTOR = `[${DATA_LINE}=\"${line}\"]` as const;\n\n const view = this._wysiwygView;\n const isConnected = Boolean(view.dom.parentElement);\n\n const setSelection = (pos: number) => {\n const {tr} = view.state;\n view.dispatch(tr.setSelection(TextSelection.near(tr.doc.resolve(pos), 1)));\n };\n\n const scrollIntoView = (elemTop: number) => {\n const topOffset = getTopOffset(this.wysiwygEditor.dom);\n window.scrollTo({top: elemTop + window.scrollY - topOffset});\n };\n\n const elem = this.wysiwygEditor.dom.querySelector(SELECTOR);\n if (elem) {\n const position = this._wysiwygView.posAtDOM(elem, 0);\n setSelection(position);\n\n if (isConnected) {\n const elemTop = elem.getBoundingClientRect().top;\n scrollIntoView(elemTop);\n }\n\n return;\n }\n\n const node = getDescedantByAttribute(view.state.doc, DATA_LINE, [line, String(line)]);\n if (node) {\n setSelection(node.pos);\n\n if (isConnected) {\n const elemTop = view.coordsAtPos(node.pos).top;\n scrollIntoView(elemTop);\n }\n }\n }\n\n private shouldReplaceMarkupEditorValue(markupValue: string, wysiwygValue: string) {\n const serializedEditorMarkup = this.#wysiwygEditor?.serializer.serialize(\n this.#wysiwygEditor.parser.parse(markupValue),\n this.#escapeConfig,\n );\n return serializedEditorMarkup?.trim() !== wysiwygValue.trim();\n }\n}\n\nfunction getTopOffset(elem: Element) {\n const TOOLBAR_HEIGHT = 36; //px\n const TOOLBAR_BOTTOM_OFFSET = 8; // px\n const TOOLBAR_TOP_ADDITIONAL_OFFSET = 8; // px\n const TOOLBAR_TOP_OFFSET_VAR = '--g-md-toolbar-sticky-offset';\n\n const topOffsetValue = window.getComputedStyle(elem).getPropertyValue(TOOLBAR_TOP_OFFSET_VAR);\n const toolbarTopOffset =\n calculateCSSNumberValue(topOffsetValue) + TOOLBAR_TOP_ADDITIONAL_OFFSET;\n\n return toolbarTopOffset + TOOLBAR_HEIGHT + TOOLBAR_BOTTOM_OFFSET;\n}\n\nfunction calculateCSSNumberValue(cssValue: string): number {\n const tmp = document.createElement('div');\n tmp.style.position = 'absolute';\n tmp.style.top = '-99999px';\n tmp.style.left = '-99999px';\n tmp.style.width = `calc(${cssValue})`;\n\n document.body.appendChild(tmp);\n const value = tmp.getBoundingClientRect().width;\n tmp.remove();\n\n return value;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Editor.js","sourceRoot":"../../../src","sources":["bundle/Editor.ts"],"names":[],"mappings":"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","sourcesContent":["import type {ReactNode} from 'react';\n\nimport {EditorView as CMEditorView} from '@codemirror/view';\nimport {TextSelection} from 'prosemirror-state';\nimport type {EditorView as PMEditorView} from 'prosemirror-view';\n\nimport {getDescedantByAttribute} from 'src/utils/node-descedants';\n\nimport type {CommonEditor, MarkupString} from '../common';\nimport {\n type ActionStorage,\n type EscapeConfig,\n WysiwygEditor,\n type WysiwygEditorOptions,\n} from '../core';\nimport type {TransformFn} from '../core/markdown/ProseMirrorTransformer';\nimport type {DynamicModifiers} from '../core/types/dynamicModifiers';\nimport type {ReactRenderStorage, RenderStorage} from '../extensions';\nimport {i18n} from '../i18n/bundle';\nimport {type Logger2, globalLogger} from '../logger';\nimport {createCodemirror} from '../markup';\nimport {getAutocompleteConfig} from '../markup/codemirror/autocomplete';\nimport {type CodeEditor, Editor as MarkupEditor} from '../markup/editor';\nimport {type Emitter, type FileUploadHandler, type Receiver, SafeEventEmitter} from '../utils';\nimport type {DirectiveSyntaxContext} from '../utils/directive';\n\nimport {MarkupManager} from './MarkupManager';\nimport {createDynamicModifiers} from './config/dynamicModifiers';\nimport type {\n MarkdownEditorMode as EditorMode,\n MarkdownEditorPreset as EditorPreset,\n MarkdownEditorMdOptions,\n MarkdownEditorOptions,\n MarkdownEditorMarkupConfig as MarkupConfig,\n ParseInsertedUrlAsImage,\n RenderPreview,\n MarkdownEditorSplitMode as SplitMode,\n} from './types';\n\nexport type ToolbarActionData = {\n editorMode: EditorMode;\n id: string;\n attrs?: {[key: string]: any};\n};\n\nexport interface EventMap {\n change: null;\n cancel: null;\n submit: null;\n\n 'toolbar-action': ToolbarActionData;\n\n 'change-editor-mode': {mode: EditorMode};\n 'change-toolbar-visibility': {visible: boolean};\n 'change-split-mode-enabled': {splitModeEnabled: boolean};\n}\n\n// internal events\ninterface EventMapInt extends EventMap {\n rerender: null;\n 'rerender-toolbar': null;\n 'cm-scroll': {event: Event};\n}\n\nexport interface Editor extends Receiver<EventMap>, CommonEditor {\n readonly logger: Logger2.LogReceiver;\n readonly currentMode: EditorMode;\n readonly toolbarVisible: boolean;\n\n setEditorMode(mode: EditorMode, opts?: SetEditorModeOptions): void;\n\n moveCursor(position: 'start' | 'end' | {line: number}): void;\n\n /** @internal used in demo for dev-tools */\n readonly _wysiwygView?: PMEditorView;\n}\n\n/** @internal */\nexport interface EditorInt\n extends CommonEditor, Emitter<EventMapInt>, Receiver<EventMapInt>, ActionStorage, CodeEditor {\n readonly logger: Logger2.ILogger;\n readonly currentMode: EditorMode;\n readonly toolbarVisible: boolean;\n readonly splitModeEnabled: boolean;\n readonly splitMode: SplitMode;\n readonly preset: EditorPreset;\n readonly mdOptions: Readonly<MarkdownEditorMdOptions>;\n readonly directiveSyntax: DirectiveSyntaxContext;\n readonly mobile: boolean;\n\n /** @internal used in demo for dev-tools */\n readonly _wysiwygView?: PMEditorView;\n\n readonly currentEditor: CommonEditor;\n readonly wysiwygEditor: WysiwygEditor;\n readonly markupEditor: MarkupEditor;\n\n readonly renderStorage: RenderStorage<ReactNode>;\n readonly fileUploadHandler?: FileUploadHandler;\n readonly needToSetDimensionsForUploadedImages: boolean;\n readonly disableHTMLParsingInMd?: boolean;\n\n readonly renderPreview?: RenderPreview;\n\n changeEditorMode(opts: ChangeEditorModeOptions): void;\n\n setEditorMode(mode: EditorMode, opts?: SetEditorModeOptions): void;\n\n moveCursor(position: 'start' | 'end' | {line: number}): void;\n\n changeToolbarVisibility(opts: {visible: boolean}): void;\n\n changeSplitModeEnabled(opts: {splitModeEnabled: boolean}): void;\n\n destroy(): void;\n}\n\ntype SetEditorModeOptions = Pick<ChangeEditorModeOptions, 'emit'>;\n\nexport type ChangeEditorModeOptions = {\n mode: EditorMode;\n reason: 'error-boundary' | 'settings' | 'manually';\n emit?: boolean;\n};\n\nexport type EditorOptions = Pick<\n MarkdownEditorOptions,\n 'md' | 'initial' | 'handlers' | 'experimental' | 'markupConfig' | 'wysiwygConfig' | 'mobile'\n> & {\n logger: Logger2.ILogger;\n renderStorage: ReactRenderStorage;\n preset: EditorPreset;\n directiveSyntax: DirectiveSyntaxContext;\n pmTransformers: TransformFn[];\n};\n\n/** @internal */\nexport class EditorImpl extends SafeEventEmitter<EventMapInt> implements EditorInt {\n #logger: Logger2.ILogger;\n #markup: MarkupString;\n #editorMode: EditorMode;\n #toolbarVisible: boolean;\n #splitModeEnabled: boolean;\n #splitMode: SplitMode;\n #renderPreview?: RenderPreview;\n #wysiwygEditor?: WysiwygEditor;\n #markupEditor?: MarkupEditor;\n #markupConfig: MarkupConfig;\n #escapeConfig?: EscapeConfig;\n #mdOptions: Readonly<MarkdownEditorMdOptions>;\n #pmTransformers: TransformFn[] = [];\n #preserveEmptyRows: boolean;\n #modifiers?: DynamicModifiers[];\n\n readonly #preset: EditorPreset;\n #extensions?: WysiwygEditorOptions['extensions'];\n #renderStorage: ReactRenderStorage;\n #fileUploadHandler?: FileUploadHandler;\n #parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n #needToSetDimensionsForUploadedImages: boolean;\n #enableNewImageSizeCalculation: boolean;\n #directiveSyntax: DirectiveSyntaxContext;\n #prepareRawMarkup?: (value: MarkupString) => MarkupString;\n #beforeEditorModeChange?: (\n options: Pick<ChangeEditorModeOptions, 'mode' | 'reason'>,\n ) => boolean | undefined;\n #mobile: boolean;\n\n get _wysiwygView(): PMEditorView {\n // @ts-expect-error internal typing\n return this.#wysiwygEditor?.view;\n }\n\n get logger(): Logger2.ILogger {\n return this.#logger;\n }\n\n get currentMode(): EditorMode {\n return this.#editorMode;\n }\n\n private set currentMode(newMode: EditorMode) {\n switch (newMode) {\n case 'markup': {\n this.#editorMode = newMode;\n if (this.#wysiwygEditor) {\n const markupEditorValue = this.#markupEditor?.getValue();\n const wysiwygEditorValue = this.#wysiwygEditor.getValue();\n if (\n !markupEditorValue ||\n this.shouldReplaceMarkupEditorValue(markupEditorValue, wysiwygEditorValue)\n ) {\n this.#markup = wysiwygEditorValue;\n } else {\n this.#markup = markupEditorValue;\n }\n }\n if (this.#markupEditor) this.#markupEditor.replace(this.#markup);\n break;\n }\n case 'wysiwyg': {\n this.#editorMode = newMode;\n if (this.#markupEditor) {\n const value = this.#markupEditor.getValue();\n this.#markup = this.#prepareRawMarkup?.(value) ?? value;\n } else if (this.#prepareRawMarkup) {\n this.#markup = this.#prepareRawMarkup(this.#markup);\n }\n if (this.#wysiwygEditor) this.#wysiwygEditor.replace(this.#markup);\n break;\n }\n default:\n throw new Error('Unknown editor mode: ' + newMode);\n }\n setTimeout(() => {\n this.currentEditor.focus();\n }, 30);\n }\n\n get toolbarVisible(): boolean {\n return this.#toolbarVisible;\n }\n\n get splitModeEnabled(): boolean {\n return this.#splitModeEnabled;\n }\n\n get splitMode(): SplitMode {\n return this.#splitMode;\n }\n\n get preset(): EditorPreset {\n return this.#preset;\n }\n\n get mdOptions(): Readonly<MarkdownEditorMdOptions> {\n return this.#mdOptions;\n }\n\n get directiveSyntax(): DirectiveSyntaxContext {\n return this.#directiveSyntax;\n }\n\n get renderPreview(): RenderPreview | undefined {\n return this.#renderPreview;\n }\n\n get currentEditor(): CommonEditor {\n const mode = this.currentMode;\n switch (mode) {\n case 'markup':\n return this.markupEditor;\n case 'wysiwyg':\n return this.wysiwygEditor;\n default:\n throw new Error('Unknown editor mode: ' + mode);\n }\n }\n\n get wysiwygEditor(): WysiwygEditor {\n if (!this.#wysiwygEditor) {\n const mdPreset: NonNullable<WysiwygEditorOptions['mdPreset']> =\n this.#preset === 'zero' || this.#preset === 'commonmark' ? this.#preset : 'default';\n this.#wysiwygEditor = new WysiwygEditor({\n mdPreset,\n logger: this.logger.nested({mode: 'wysiwyg'}),\n initialContent: this.#markup,\n extensions: this.#extensions,\n pmTransformers: this.#pmTransformers,\n modifiers: this.#modifiers,\n allowHTML: this.#mdOptions.html,\n linkify: this.#mdOptions.linkify,\n linkifyTlds: this.#mdOptions.linkifyTlds,\n escapeConfig: this.#escapeConfig,\n onChange: () => this.emit('rerender-toolbar', null),\n onDocChange: () => this.emit('change', null),\n });\n }\n return this.#wysiwygEditor;\n }\n\n get markupEditor(): MarkupEditor {\n if (!this.#markupEditor) {\n this.#markupEditor = new MarkupEditor(\n createCodemirror({\n doc: this.#markup,\n logger: this.logger.nested({mode: 'markup'}),\n placeholder: this.#markupConfig.placeholder ?? i18n('markup_placeholder'),\n onCancel: () => this.emit('cancel', null),\n onSubmit: () => this.emit('submit', null),\n onChange: () => this.emit('rerender-toolbar', null),\n onDocChange: () => this.emit('change', null),\n onScroll: (event) => this.emit('cm-scroll', {event}),\n reactRenderer: this.#renderStorage,\n uploadHandler: this.fileUploadHandler,\n parseInsertedUrlAsImage: this.parseInsertedUrlAsImage,\n needImageDimensions: this.needToSetDimensionsForUploadedImages,\n parseHtmlOnPaste: this.#markupConfig.parseHtmlOnPaste,\n enableNewImageSizeCalculation: this.enableNewImageSizeCalculation,\n extensions: this.#markupConfig.extensions,\n disabledExtensions: this.#markupConfig.disabledExtensions,\n keymaps: this.#markupConfig.keymaps,\n preserveEmptyRows: this.#preserveEmptyRows,\n yfmLangOptions: {\n languageData: getAutocompleteConfig({\n preserveEmptyRows: this.#preserveEmptyRows,\n }).concat(this.#markupConfig?.languageData || []),\n },\n autocompletion: this.#markupConfig.autocompletion,\n directiveSyntax: this.directiveSyntax,\n receiver: this,\n searchPanel: this.#markupConfig.searchPanel,\n }),\n );\n }\n return this.#markupEditor;\n }\n\n get renderStorage(): RenderStorage<ReactNode> {\n return this.#renderStorage;\n }\n\n get fileUploadHandler(): FileUploadHandler | undefined {\n return this.#fileUploadHandler;\n }\n\n get parseInsertedUrlAsImage() {\n return this.#parseInsertedUrlAsImage;\n }\n\n get needToSetDimensionsForUploadedImages(): boolean {\n return this.#needToSetDimensionsForUploadedImages;\n }\n\n get enableNewImageSizeCalculation(): boolean {\n return this.#enableNewImageSizeCalculation;\n }\n\n get mobile(): boolean {\n return this.#mobile;\n }\n\n constructor(opts: EditorOptions) {\n const {logger} = opts;\n\n super({\n onError: (error) => {\n logger.error(error);\n globalLogger.error(error);\n },\n });\n\n const {\n md = {},\n initial = {},\n handlers = {},\n experimental = {},\n markupConfig = {},\n wysiwygConfig = {},\n mobile = false,\n } = opts;\n\n this.#logger = logger;\n this.#modifiers = experimental.preserveMarkupFormatting\n ? createDynamicModifiers(\n new MarkupManager(this.logger.nested({module: 'markup-manager'})),\n )\n : undefined;\n\n this.#editorMode = initial.mode ?? 'wysiwyg';\n this.#toolbarVisible = initial.toolbarVisible ?? true;\n this.#splitMode = (markupConfig.renderPreview && markupConfig.splitMode) ?? false;\n this.#splitModeEnabled = (this.#splitMode && initial.splitModeEnabled) ?? false;\n this.#renderPreview = markupConfig.renderPreview;\n\n this.#markup = initial.markup ?? '';\n\n this.#preset = opts.preset ?? 'full';\n this.#pmTransformers = opts.pmTransformers;\n this.#mdOptions = md;\n this.#extensions = wysiwygConfig.extensions;\n this.#markupConfig = {...opts.markupConfig};\n\n this.#renderStorage = opts.renderStorage;\n this.#fileUploadHandler = handlers.uploadFile;\n this.#parseInsertedUrlAsImage = markupConfig.parseInsertedUrlAsImage;\n this.#needToSetDimensionsForUploadedImages = Boolean(\n experimental.needToSetDimensionsForUploadedImages,\n );\n this.#directiveSyntax = opts.directiveSyntax;\n this.#enableNewImageSizeCalculation = Boolean(experimental.enableNewImageSizeCalculation);\n this.#preserveEmptyRows = experimental.preserveEmptyRows || false;\n this.#prepareRawMarkup = experimental.prepareRawMarkup;\n this.#escapeConfig = wysiwygConfig.escapeConfig;\n this.#beforeEditorModeChange = experimental.beforeEditorModeChange;\n this.#mobile = mobile;\n }\n\n // ---> implements CodeEditor\n\n get cm() {\n return this.markupEditor.cm;\n }\n\n // <--- implements CodeEditor\n\n // ---> implements ActionStorage\n get actions(): WysiwygEditor.Actions {\n return this.wysiwygEditor.actions;\n }\n\n action<T extends keyof WysiwygEditor.Actions>(actionName: T): WysiwygEditor.Actions[T] {\n return this.wysiwygEditor.action(actionName);\n }\n\n // <--- implements ActionStorage\n\n destroy() {\n this.#wysiwygEditor?.destroy();\n this.#markupEditor?.codemirror.destroy();\n\n this.#markupEditor = undefined;\n this.#markupEditor = undefined;\n this.#wysiwygEditor = undefined;\n }\n\n setEditorMode(mode: EditorMode, opts?: SetEditorModeOptions): void {\n this.changeEditorMode({mode, reason: 'manually', emit: opts?.emit});\n }\n\n changeEditorMode({emit = true, ...opts}: ChangeEditorModeOptions): void {\n if (this.#editorMode === opts.mode) return;\n\n if (this.#beforeEditorModeChange?.({mode: opts.mode, reason: opts.reason}) === false) {\n return;\n }\n\n this.logger.event({\n event: 'mode-change',\n prevMode: this.#editorMode,\n nextMode: opts.mode,\n reason: opts.reason,\n });\n\n this.currentMode = opts.mode;\n this.emit('rerender', null);\n\n if (emit) {\n this.emit('change-editor-mode', opts);\n }\n }\n\n changeToolbarVisibility(opts: {visible: boolean}): void {\n this.#toolbarVisible = opts.visible;\n this.emit('rerender', null);\n this.emit('change-toolbar-visibility', opts);\n }\n\n changeSplitModeEnabled(opts: {splitModeEnabled: boolean}): void {\n if (this.#splitModeEnabled === opts.splitModeEnabled) return;\n this.#splitModeEnabled = opts.splitModeEnabled;\n this.emit('rerender', null);\n this.emit('change-split-mode-enabled', opts);\n }\n\n focus(): void {\n return this.currentEditor.focus();\n }\n\n hasFocus(): boolean {\n return this.currentEditor.hasFocus();\n }\n\n getValue: () => MarkupString = () => this.currentEditor.getValue();\n\n isEmpty(): boolean {\n return this.currentEditor.isEmpty();\n }\n\n clear(): void {\n return this.currentEditor.clear();\n }\n\n replace(newMarkup: MarkupString): void {\n return this.currentEditor.replace(newMarkup);\n }\n\n prepend(markup: MarkupString): void {\n return this.currentEditor.prepend(markup);\n }\n\n append(markup: MarkupString): void {\n return this.currentEditor.append(markup);\n }\n\n moveCursor(\n position:\n | 'start'\n | 'end'\n | {\n /** 0-based line number */\n line: number;\n },\n ): void {\n if (typeof position === 'object') {\n return this.moveCursorToLine(position.line);\n }\n\n return this.currentEditor.moveCursor(position);\n }\n\n private moveCursorToLine(/** 0-based line number */ line: number): void {\n const mode = this.currentMode;\n\n switch (mode) {\n case 'markup': {\n this.markupMoveToLine(line);\n break;\n }\n case 'wysiwyg': {\n this.wysiwygMoveToLine(line);\n break;\n }\n default:\n throw new Error('Unknown editor mode: ' + mode);\n }\n }\n\n private markupMoveToLine(line: number): void {\n const view = this.markupEditor.cm;\n const isConnected = Boolean(view.dom.parentElement);\n\n let cmLine = line + 1; // lines in codemirror is 1-based\n cmLine = Math.max(cmLine, 1);\n cmLine = Math.min(cmLine, view.state.doc.lines);\n\n const anchor = view.state.doc.line(cmLine).from;\n view.dispatch({\n scrollIntoView: true,\n selection: {anchor},\n effects: isConnected\n ? [\n CMEditorView.scrollIntoView(anchor, {\n y: 'start',\n x: 'start',\n yMargin: getTopOffset(view.dom),\n }),\n ]\n : undefined,\n });\n }\n\n private wysiwygMoveToLine(line: number): void {\n const DATA_LINE = 'data-line';\n const SELECTOR = `[${DATA_LINE}=\"${line}\"]` as const;\n\n const view = this._wysiwygView;\n const isConnected = Boolean(view.dom.parentElement);\n\n const setSelection = (pos: number) => {\n const {tr} = view.state;\n view.dispatch(tr.setSelection(TextSelection.near(tr.doc.resolve(pos), 1)));\n };\n\n const scrollIntoView = (elemTop: number) => {\n const topOffset = getTopOffset(this.wysiwygEditor.dom);\n window.scrollTo({top: elemTop + window.scrollY - topOffset});\n };\n\n const elem = this.wysiwygEditor.dom.querySelector(SELECTOR);\n if (elem) {\n const position = this._wysiwygView.posAtDOM(elem, 0);\n setSelection(position);\n\n if (isConnected) {\n const elemTop = elem.getBoundingClientRect().top;\n scrollIntoView(elemTop);\n }\n\n return;\n }\n\n const node = getDescedantByAttribute(view.state.doc, DATA_LINE, [line, String(line)]);\n if (node) {\n setSelection(node.pos);\n\n if (isConnected) {\n const elemTop = view.coordsAtPos(node.pos).top;\n scrollIntoView(elemTop);\n }\n }\n }\n\n private shouldReplaceMarkupEditorValue(markupValue: string, wysiwygValue: string) {\n const serializedEditorMarkup = this.#wysiwygEditor?.serializer.serialize(\n this.#wysiwygEditor.parser.parse(markupValue),\n this.#escapeConfig,\n );\n return serializedEditorMarkup?.trim() !== wysiwygValue.trim();\n }\n}\n\nfunction getTopOffset(elem: Element) {\n const TOOLBAR_HEIGHT = 36; //px\n const TOOLBAR_BOTTOM_OFFSET = 8; // px\n const TOOLBAR_TOP_ADDITIONAL_OFFSET = 8; // px\n const TOOLBAR_TOP_OFFSET_VAR = '--g-md-toolbar-sticky-offset';\n\n const topOffsetValue = window.getComputedStyle(elem).getPropertyValue(TOOLBAR_TOP_OFFSET_VAR);\n const toolbarTopOffset =\n calculateCSSNumberValue(topOffsetValue) + TOOLBAR_TOP_ADDITIONAL_OFFSET;\n\n return toolbarTopOffset + TOOLBAR_HEIGHT + TOOLBAR_BOTTOM_OFFSET;\n}\n\nfunction calculateCSSNumberValue(cssValue: string): number {\n const tmp = document.createElement('div');\n tmp.style.position = 'absolute';\n tmp.style.top = '-99999px';\n tmp.style.left = '-99999px';\n tmp.style.width = `calc(${cssValue})`;\n\n document.body.appendChild(tmp);\n const value = tmp.getBoundingClientRect().width;\n tmp.remove();\n\n return value;\n}\n"]}
|
|
@@ -7,7 +7,7 @@ const useColResize = ({ onStart, onMove, onEnd }) => {
|
|
|
7
7
|
const initialXPosition = useRef(0);
|
|
8
8
|
const currentXPosition = useRef(0);
|
|
9
9
|
const handleMove = useCallback((e) => {
|
|
10
|
-
const currentX = 'touches' in e ? e.touches[0]?.clientX ?? 0 : e.clientX;
|
|
10
|
+
const currentX = 'touches' in e ? (e.touches[0]?.clientX ?? 0) : e.clientX;
|
|
11
11
|
if (currentXPosition.current === currentX) {
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
@@ -19,12 +19,12 @@ const useColResize = ({ onStart, onMove, onEnd }) => {
|
|
|
19
19
|
window.removeEventListener('mousemove', handleMove);
|
|
20
20
|
window.removeEventListener('touchmove', handleMove);
|
|
21
21
|
document.body.style.removeProperty('user-select');
|
|
22
|
-
const currentX = 'touches' in e ? e.touches[0]?.clientX ?? 0 : e.clientX;
|
|
22
|
+
const currentX = 'touches' in e ? (e.touches[0]?.clientX ?? 0) : e.clientX;
|
|
23
23
|
const delta = initialXPosition.current - currentX;
|
|
24
24
|
onEnd(delta);
|
|
25
25
|
}, [handleMove, onEnd]);
|
|
26
26
|
const handleStart = useCallback((e) => {
|
|
27
|
-
const currentX = 'touches' in e ? e.touches[0]?.clientX ?? 0 : e.clientX;
|
|
27
|
+
const currentX = 'touches' in e ? (e.touches[0]?.clientX ?? 0) : e.clientX;
|
|
28
28
|
initialXPosition.current = currentX;
|
|
29
29
|
currentXPosition.current = currentX;
|
|
30
30
|
window.addEventListener('mouseup', handleDragEnd, { once: true });
|
|
@@ -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"]}
|
|
@@ -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, [className]), children: [renderPreviewButton && (_jsxs(_Fragment, { children: [_jsx(ActionTooltip, { openDelay: ToolbarTooltipDelay.Open, closeDelay: ToolbarTooltipDelay.Close, title: i18n('
|
|
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, }) {
|
|
@@ -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 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_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 <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"]}
|
|
@@ -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":"AAAA,OAAO,EAAC,WAAW,EAAC,+CAA4C;AAChE,OAAO,EAAC,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAC,6CAA0C;AAS7F,OAAO,EAAC,eAAe,EAAC,oBAAiB;AAGzC,OAAO,EAAC,aAAa,EAAC,2BAAwB;AAE9C,MAAM,cAAc,GAAiD;IACjE,IAAI;IACJ,UAAU;IACV,OAAO,EAAE,aAAa;IACtB,GAAG;IACH,IAAI;CACP,CAAC;AAiBF,MAAM,aAAa,GAAG,CAClB,IAA0B,EAC1B,IAA6E,EAC7E,EAAE,GAAG,SAAS,EACC,EAAE;IACjB,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,CAAC,IAAI,CACR,iBAAiB,EAAE,oEAAoE,CAC1F,CAAC;QACF,OAAO,EAAqB,CAAC;IACjC,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,UAAU,CAAC;IACnE,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,YAAY,CAAC;IAEvE,OAAO;QACH,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,eAAe,CAAC,YAAY;QACpD,EAAE;QACF,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;QACtB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;QACpB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;QACpB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;QACxB,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB;QAC9C,GAAG,CAAC,cAAc,IAAI,EAAC,OAAO,EAAG,IAAI,CAAC,IAAY,CAAC,OAAO,EAAC,CAAC;QAC5D,GAAG,CAAC,YAAY,IAAI;YAChB,SAAS,EAAG,IAAI,CAAC,IAAY,CAAC,SAAS;YACvC,iBAAiB,EAAG,IAAI,CAAC,IAAY,CAAC,iBAAiB;SAC1D,CAAC;QACF,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,IAAI,EAAC,GAAG,IAAI,CAAC,OAAO,EAAC,CAAC;QAC5D,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,EAAC,GAAG,IAAI,CAAC,MAAM,EAAC,CAAC;KAC5D,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAC/B,UAAgC,EAChC,aAAoD,EACpD,WAAmB,EAClB,EAAE;IACH,MAAM,MAAM,GACR,OAAO,aAAa,KAAK,QAAQ;QAC7B,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,OAAO;QACzD,CAAC,CAAC,aAAa,CAAC;IACxB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClD,MAAM,EAAC,KAAK,EAAC,GAAG,MAAM,CAAC;IAEvB,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACrC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACjB,OAAO,OAAO,MAAM,KAAK,QAAQ;YAC7B,CAAC,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YAClD,CAAC,CAAC;gBACI,GAAG,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;gBACzD,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;aAC3E,CAAC;IACZ,CAAC,CAAC,CACL,CAAC;IAEF,OAAO,WAAgB,CAAC;AAC5B,CAAC,CAAC;AAaF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAC,cAAc,EAAE,KAAK,EAAE,MAAM,EAAyB,EAAE,EAAE;IAC1F,MAAM,oBAAoB,GAAG,cAAc;QACvC,CAAC,CAAC,mBAAmB,CAAe,SAAS,EAAE,cAAc,EAAE,WAAW,CAAC,WAAW,CAAC;QACvF,CAAC,CAAC,KAAK,CAAC,oBAAoB;
|
|
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"]}
|