@gravity-ui/markdown-editor 15.0.1 → 15.0.2

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.
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createDynamicModifiers = createDynamicModifiers;
4
+ const tslib_1 = require("tslib");
5
+ const ts_dedent_1 = tslib_1.__importDefault(require("ts-dedent"));
4
6
  const uuid_1 = require("uuid");
5
7
  const YFM_TABLE_TOKEN_ATTR = 'data-token-id';
6
8
  const YFM_TABLE_NODE_ATTR = 'data-node-id';
7
- const PARENTS_WITH_AFFECT = ['blockquote', 'yfm_tabs'];
8
9
  function createDynamicModifiers(markupManager) {
9
10
  return [
10
11
  {
@@ -17,10 +18,12 @@ function createDynamicModifiers(markupManager) {
17
18
  process: (token, _, rawMarkup) => {
18
19
  const { map } = token;
19
20
  if (map) {
20
- const content = rawMarkup.split('\n').slice(map[0], map[1]).join('\n');
21
+ const content = rawMarkup.split('\n').slice(map[0], map[1]).join('\n').trim();
21
22
  const tokenId = (0, uuid_1.v5)(content, markupManager.getNamespace());
22
- token.attrSet(YFM_TABLE_TOKEN_ATTR, tokenId);
23
- markupManager.setMarkup(tokenId, content);
23
+ if (/^\s*#\|/.test(content)) {
24
+ token.attrSet(YFM_TABLE_TOKEN_ATTR, tokenId);
25
+ markupManager.setMarkup(tokenId, (0, ts_dedent_1.default)(content));
26
+ }
24
27
  }
25
28
  return token;
26
29
  },
@@ -58,8 +61,13 @@ function createDynamicModifiers(markupManager) {
58
61
  process: (state, node, parent, index, callback) => {
59
62
  const nodeId = node.attrs[YFM_TABLE_NODE_ATTR];
60
63
  const savedNode = markupManager.getNode(nodeId);
61
- if (!PARENTS_WITH_AFFECT.includes(parent?.type?.name) && savedNode?.eq(node)) {
62
- state.write(markupManager.getMarkup(nodeId) + '\n');
64
+ if (savedNode?.eq(node)) {
65
+ const content = markupManager.getMarkup(nodeId) || '';
66
+ state.ensureNewLine();
67
+ state.text(content, false);
68
+ state.ensureNewLine();
69
+ state.closeBlock();
70
+ state.write('\n');
63
71
  return;
64
72
  }
65
73
  callback?.(state, node, parent, index);
@@ -1 +1 @@
1
- {"version":3,"file":"dynamicModifiers.js","sourceRoot":"../../../../src","sources":["bundle/config/dynamicModifiers.ts"],"names":[],"mappings":";;AASA,wDAyEC;AAlFD,+BAAwB;AAKxB,MAAM,oBAAoB,GAAG,eAAe,CAAC;AAC7C,MAAM,mBAAmB,GAAG,cAAc,CAAC;AAC3C,MAAM,mBAAmB,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AAEvD,SAAgB,sBAAsB,CAAC,aAA4B;IAC/D,OAAO;QACH;YACI,IAAI,EAAE,aAAa;YACnB,SAAS,EAAE,WAAW;YACtB;;;eAGG;YACH,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE;gBAC7B,MAAM,EAAC,GAAG,EAAC,GAAG,KAAK,CAAC;gBAEpB,IAAI,GAAG,EAAE,CAAC;oBACN,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACvE,MAAM,OAAO,GAAG,IAAA,SAAE,EAAC,OAAO,EAAE,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC;oBAE1D,KAAK,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;oBAC7C,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC9C,CAAC;gBACD,OAAO,KAAK,CAAC;YACjB,CAAC;SACJ;QACD;YACI,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,WAAW;YACtB;;eAEG;YACH,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBACxB,GAAG,KAAK;gBACR,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC;aAC7D,CAAC;SACL;QACD;YACI,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,WAAW;YACrB,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACd,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBAC/C,IAAI,MAAM,EAAE,CAAC;oBACT,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACxC,CAAC;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC;SACJ;QACD;YACI,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,WAAW;YACrB;;;;eAIG;YACH,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;gBAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBAC/C,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAEhD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3E,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;oBACpD,OAAO;gBACX,CAAC;gBAED,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAC3C,CAAC;SACJ;QACD;YACI,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,WAAW;YACrB;;eAEG;YACH,YAAY,EAAE,CAAC,mBAAmB,CAAC;SACtC;KACJ,CAAC;AACN,CAAC","sourcesContent":["import {v5} from 'uuid';\n\nimport type {DynamicModifiers} from '../../core/types/dynamicModifiers';\nimport type {MarkupManager} from '../MarkupManager';\n\nconst YFM_TABLE_TOKEN_ATTR = 'data-token-id';\nconst YFM_TABLE_NODE_ATTR = 'data-node-id';\nconst PARENTS_WITH_AFFECT = ['blockquote', 'yfm_tabs'];\n\nexport function createDynamicModifiers(markupManager: MarkupManager): DynamicModifiers[] {\n return [\n {\n type: 'parserToken',\n tokenName: 'yfm_table',\n /**\n * - Assigns a unique `data-token-id` to each token.\n * - Captures and stores the raw Markdown using `MarkupManager`.\n */\n process: (token, _, rawMarkup) => {\n const {map} = token;\n\n if (map) {\n const content = rawMarkup.split('\\n').slice(map[0], map[1]).join('\\n');\n const tokenId = v5(content, markupManager.getNamespace());\n\n token.attrSet(YFM_TABLE_TOKEN_ATTR, tokenId);\n markupManager.setMarkup(tokenId, content);\n }\n return token;\n },\n },\n {\n type: 'parserNodeAttrs',\n tokenName: 'yfm_table',\n /**\n * - Links the token to its corresponding node via `data-node-id`.\n */\n process: (token, attrs) => ({\n ...attrs,\n [YFM_TABLE_NODE_ATTR]: token.attrGet(YFM_TABLE_TOKEN_ATTR),\n }),\n },\n {\n type: 'parserNode',\n nodeName: 'yfm_table',\n process: (node) => {\n const nodeId = node.attrs[YFM_TABLE_NODE_ATTR];\n if (nodeId) {\n markupManager.setNode(nodeId, node);\n }\n return node;\n },\n },\n {\n type: 'serializerNode',\n nodeName: 'yfm_table',\n /**\n * - Retrieves the original Markdown using the `data-node-id` attribute.\n * - Uses the original Markdown if the node matches the saved version.\n * - Falls back to schema-based rendering if the node structure, attributes, or parent elements affect it.\n */\n process: (state, node, parent, index, callback) => {\n const nodeId = node.attrs[YFM_TABLE_NODE_ATTR];\n const savedNode = markupManager.getNode(nodeId);\n\n if (!PARENTS_WITH_AFFECT.includes(parent?.type?.name) && savedNode?.eq(node)) {\n state.write(markupManager.getMarkup(nodeId) + '\\n');\n return;\n }\n\n callback?.(state, node, parent, index);\n },\n },\n {\n type: 'schemaNodeSpec',\n nodeName: 'yfm_table',\n /**\n * - Adds the `data-node-id` attribute to the list of allowed attributes.\n */\n allowedAttrs: [YFM_TABLE_NODE_ATTR],\n },\n ];\n}\n"]}
1
+ {"version":3,"file":"dynamicModifiers.js","sourceRoot":"../../../../src","sources":["bundle/config/dynamicModifiers.ts"],"names":[],"mappings":"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","sourcesContent":["import dedent from 'ts-dedent';\nimport {v5} from 'uuid';\n\nimport type {DynamicModifiers} from '../../core/types/dynamicModifiers';\nimport type {MarkupManager} from '../MarkupManager';\n\nconst YFM_TABLE_TOKEN_ATTR = 'data-token-id';\nconst YFM_TABLE_NODE_ATTR = 'data-node-id';\n\nexport function createDynamicModifiers(markupManager: MarkupManager): DynamicModifiers[] {\n return [\n {\n type: 'parserToken',\n tokenName: 'yfm_table',\n /**\n * - Assigns a unique `data-token-id` to each token.\n * - Captures and stores the raw Markdown using `MarkupManager`.\n */\n process: (token, _, rawMarkup) => {\n const {map} = token;\n\n if (map) {\n const content = rawMarkup.split('\\n').slice(map[0], map[1]).join('\\n').trim();\n const tokenId = v5(content, markupManager.getNamespace());\n\n if (/^\\s*#\\|/.test(content)) {\n token.attrSet(YFM_TABLE_TOKEN_ATTR, tokenId);\n markupManager.setMarkup(tokenId, dedent(content));\n }\n }\n return token;\n },\n },\n {\n type: 'parserNodeAttrs',\n tokenName: 'yfm_table',\n /**\n * - Links the token to its corresponding node via `data-node-id`.\n */\n process: (token, attrs) => ({\n ...attrs,\n [YFM_TABLE_NODE_ATTR]: token.attrGet(YFM_TABLE_TOKEN_ATTR),\n }),\n },\n {\n type: 'parserNode',\n nodeName: 'yfm_table',\n process: (node) => {\n const nodeId = node.attrs[YFM_TABLE_NODE_ATTR];\n if (nodeId) {\n markupManager.setNode(nodeId, node);\n }\n return node;\n },\n },\n {\n type: 'serializerNode',\n nodeName: 'yfm_table',\n /**\n * - Retrieves the original Markdown using the `data-node-id` attribute.\n * - Uses the original Markdown if the node matches the saved version.\n * - Falls back to schema-based rendering if the node structure, attributes, or parent elements affect it.\n */\n process: (state, node, parent, index, callback) => {\n const nodeId = node.attrs[YFM_TABLE_NODE_ATTR];\n const savedNode = markupManager.getNode(nodeId);\n\n if (savedNode?.eq(node)) {\n const content: string = markupManager.getMarkup(nodeId) || '';\n state.ensureNewLine();\n state.text(content, false);\n state.ensureNewLine();\n state.closeBlock();\n state.write('\\n');\n return;\n }\n\n callback?.(state, node, parent, index);\n },\n },\n {\n type: 'schemaNodeSpec',\n nodeName: 'yfm_table',\n /**\n * - Adds the `data-node-id` attribute to the list of allowed attributes.\n */\n allowedAttrs: [YFM_TABLE_NODE_ATTR],\n },\n ];\n}\n"]}
@@ -79,7 +79,7 @@ const ImagePaste = (builder, opts) => {
79
79
  return false;
80
80
  },
81
81
  },
82
- }), builder.Priority.High);
82
+ }), builder.Priority.VeryHigh);
83
83
  };
84
84
  exports.ImagePaste = ImagePaste;
85
85
  function getPastedImages(data) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/ImgSize/ImagePaste/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {decode as base64ToBuffer} from 'base64-arraybuffer';\nimport {Fragment, type Node, type Schema, Slice} from 'prosemirror-model';\nimport {Plugin} from 'prosemirror-state';\nimport {dropPoint} from 'prosemirror-transform';\n\nimport type {ParseInsertedUrlAsImage} from '../../../../bundle';\nimport type {ExtensionAuto} from '../../../../core';\nimport {isFunction} from '../../../../lodash';\nimport type {FileUploadHandler} from '../../../../utils';\nimport {clipboardUtils} from '../../../behavior/Clipboard';\nimport {DataTransferType} from '../../../behavior/Clipboard/utils';\nimport {ImageAttr, ImgSizeAttr, imageType} from '../../../specs';\nimport {type CreateImageNodeOptions, isImageNode} from '../utils';\n\nimport {ImagesUploadProcess} from './upload';\n\nconst {isFilesFromHtml, isFilesOnly, isImageFile} = clipboardUtils;\n\nexport type ImagePasteOptions = Pick<\n CreateImageNodeOptions,\n 'needDimensions' | 'enableNewImageSizeCalculation'\n> & {\n imageUploadHandler?: FileUploadHandler;\n /**\n * The function, used to determine if the pasted text is the image url and should be inserted as an image\n */\n parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n};\n\nexport const ImagePaste: ExtensionAuto<ImagePasteOptions> = (builder, opts) => {\n const {parseInsertedUrlAsImage, imageUploadHandler} = opts ?? {};\n\n if (!isFunction(imageUploadHandler ?? parseInsertedUrlAsImage))\n throw new Error(\n `ImagePaste extension: ${\n opts.imageUploadHandler ? 'imageUploadHandler' : 'parseInsertedUrlAsImage'\n } is not a function`,\n );\n\n builder.addPlugin(\n () =>\n new Plugin({\n props: {\n handleDOMEvents: {\n paste(view, e) {\n const files = getPastedImages(e.clipboardData);\n if (imageUploadHandler && files) {\n e.preventDefault();\n new ImagesUploadProcess(\n view,\n files,\n imageUploadHandler,\n view.state.tr.selection.from,\n opts,\n ).run();\n return true;\n } else if (parseInsertedUrlAsImage) {\n const {imageUrl, title} =\n parseInsertedUrlAsImage(\n e.clipboardData?.getData(DataTransferType.Text) ?? '',\n ) || {};\n\n if (!imageUrl) {\n return false;\n }\n\n e.preventDefault();\n\n const imageNode = imageType(view.state.schema).create({\n src: imageUrl,\n alt: title,\n });\n\n const tr = view.state.tr.replaceSelectionWith(imageNode);\n view.dispatch(tr.scrollIntoView());\n\n return true;\n }\n\n return false;\n },\n drop(view, e) {\n if (!imageUploadHandler) {\n return false;\n }\n\n // handle drop images from device\n if (view.dragging) return false;\n\n const files = getPastedImages(e.dataTransfer);\n if (!files) return false;\n\n const dropPos =\n view.posAtCoords({left: e.clientX, top: e.clientY})?.pos ?? -1;\n if (dropPos === -1) return false;\n\n const posToInsert = dropPoint(\n view.state.doc,\n dropPos,\n createFakeImageSlice(view.state.schema),\n );\n\n if (posToInsert !== null) {\n new ImagesUploadProcess(\n view,\n files,\n imageUploadHandler,\n posToInsert,\n opts,\n ).run();\n }\n\n e.preventDefault();\n return true;\n },\n },\n handlePaste(view, _event, slice) {\n if (!imageUploadHandler) {\n return false;\n }\n\n const node = sliceSingleNode(slice);\n if (node && isImageNode(node)) {\n const imgUrl = node.attrs[ImgSizeAttr.Src];\n const imgFile = dataUrlToFile(imgUrl, 'image');\n if (imgFile) {\n new ImagesUploadProcess(\n view,\n [imgFile],\n imageUploadHandler,\n view.state.tr.selection.from,\n opts,\n ).run();\n return true;\n }\n }\n return false;\n },\n },\n }),\n builder.Priority.High,\n );\n};\n\nfunction getPastedImages(data: DataTransfer | null): File[] | null {\n if (!data || data.files.length === 0) return null;\n if (!isFilesOnly(data) && !isFilesFromHtml(data)) return null;\n const files = Array.from(data.files);\n return files.every(isImageFile) ? files : null;\n}\n\nfunction createFakeImageSlice(schema: Schema): Slice {\n return new Slice(\n Fragment.from(\n imageType(schema).create({\n [ImageAttr.Src]: 'fake',\n [ImageAttr.Title]: 'image',\n }),\n ),\n 0,\n 0,\n );\n}\n\n// copied from prosemirror-view input.ts\nfunction sliceSingleNode(slice: Slice): Node | null {\n return slice.openStart === 0 && slice.openEnd === 0 && slice.content.childCount === 1\n ? slice.content.firstChild\n : null;\n}\n\nfunction dataUrlToFile(dataUrl: string, filename: string): File | null {\n const [data, base64String] = dataUrl.split(',');\n if (!data || !base64String) return null;\n const mime = data.match(/^data:(.+);base64/)?.[1];\n if (!mime) return null;\n return new File([base64ToBuffer(base64String)], filename, {type: mime});\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/ImgSize/ImagePaste/index.ts"],"names":[],"mappings":";;;AAAA,2DAA4D;AAC5D,yDAA0E;AAC1E,yDAAyC;AACzC,iEAAgD;AAIhD,kDAA8C;AAE9C,oEAA2D;AAC3D,gEAAmE;AACnE,6CAAiE;AACjE,uCAAkE;AAElE,wCAA6C;AAE7C,MAAM,EAAC,eAAe,EAAE,WAAW,EAAE,WAAW,EAAC,GAAG,0BAAc,CAAC;AAa5D,MAAM,UAAU,GAAqC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IAC1E,MAAM,EAAC,uBAAuB,EAAE,kBAAkB,EAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IAEjE,IAAI,CAAC,IAAA,mBAAU,EAAC,kBAAkB,IAAI,uBAAuB,CAAC;QAC1D,MAAM,IAAI,KAAK,CACX,yBACI,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,yBACrD,oBAAoB,CACvB,CAAC;IAEN,OAAO,CAAC,SAAS,CACb,GAAG,EAAE,CACD,IAAI,0BAAM,CAAC;QACP,KAAK,EAAE;YACH,eAAe,EAAE;gBACb,KAAK,CAAC,IAAI,EAAE,CAAC;oBACT,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;oBAC/C,IAAI,kBAAkB,IAAI,KAAK,EAAE,CAAC;wBAC9B,CAAC,CAAC,cAAc,EAAE,CAAC;wBACnB,IAAI,4BAAmB,CACnB,IAAI,EACJ,KAAK,EACL,kBAAkB,EAClB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAC5B,IAAI,CACP,CAAC,GAAG,EAAE,CAAC;wBACR,OAAO,IAAI,CAAC;oBAChB,CAAC;yBAAM,IAAI,uBAAuB,EAAE,CAAC;wBACjC,MAAM,EAAC,QAAQ,EAAE,KAAK,EAAC,GACnB,uBAAuB,CACnB,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,wBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,CACxD,IAAI,EAAE,CAAC;wBAEZ,IAAI,CAAC,QAAQ,EAAE,CAAC;4BACZ,OAAO,KAAK,CAAC;wBACjB,CAAC;wBAED,CAAC,CAAC,cAAc,EAAE,CAAC;wBAEnB,MAAM,SAAS,GAAG,IAAA,iBAAS,EAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;4BAClD,GAAG,EAAE,QAAQ;4BACb,GAAG,EAAE,KAAK;yBACb,CAAC,CAAC;wBAEH,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;wBACzD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;wBAEnC,OAAO,IAAI,CAAC;oBAChB,CAAC;oBAED,OAAO,KAAK,CAAC;gBACjB,CAAC;gBACD,IAAI,CAAC,IAAI,EAAE,CAAC;oBACR,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBACtB,OAAO,KAAK,CAAC;oBACjB,CAAC;oBAED,iCAAiC;oBACjC,IAAI,IAAI,CAAC,QAAQ;wBAAE,OAAO,KAAK,CAAC;oBAEhC,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;oBAC9C,IAAI,CAAC,KAAK;wBAAE,OAAO,KAAK,CAAC;oBAEzB,MAAM,OAAO,GACT,IAAI,CAAC,WAAW,CAAC,EAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;oBACnE,IAAI,OAAO,KAAK,CAAC,CAAC;wBAAE,OAAO,KAAK,CAAC;oBAEjC,MAAM,WAAW,GAAG,IAAA,iCAAS,EACzB,IAAI,CAAC,KAAK,CAAC,GAAG,EACd,OAAO,EACP,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAC1C,CAAC;oBAEF,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;wBACvB,IAAI,4BAAmB,CACnB,IAAI,EACJ,KAAK,EACL,kBAAkB,EAClB,WAAW,EACX,IAAI,CACP,CAAC,GAAG,EAAE,CAAC;oBACZ,CAAC;oBAED,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,OAAO,IAAI,CAAC;gBAChB,CAAC;aACJ;YACD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK;gBAC3B,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBACtB,OAAO,KAAK,CAAC;gBACjB,CAAC;gBAED,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;gBACpC,IAAI,IAAI,IAAI,IAAA,mBAAW,EAAC,IAAI,CAAC,EAAE,CAAC;oBAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAW,CAAC,GAAG,CAAC,CAAC;oBAC3C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBAC/C,IAAI,OAAO,EAAE,CAAC;wBACV,IAAI,4BAAmB,CACnB,IAAI,EACJ,CAAC,OAAO,CAAC,EACT,kBAAkB,EAClB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAC5B,IAAI,CACP,CAAC,GAAG,EAAE,CAAC;wBACR,OAAO,IAAI,CAAC;oBAChB,CAAC;gBACL,CAAC;gBACD,OAAO,KAAK,CAAC;YACjB,CAAC;SACJ;KACJ,CAAC,EACN,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAC5B,CAAC;AACN,CAAC,CAAC;AAjHW,QAAA,UAAU,cAiHrB;AAEF,SAAS,eAAe,CAAC,IAAyB;IAC9C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAc;IACxC,OAAO,IAAI,yBAAK,CACZ,4BAAQ,CAAC,IAAI,CACT,IAAA,iBAAS,EAAC,MAAM,CAAC,CAAC,MAAM,CAAC;QACrB,CAAC,iBAAS,CAAC,GAAG,CAAC,EAAE,MAAM;QACvB,CAAC,iBAAS,CAAC,KAAK,CAAC,EAAE,OAAO;KAC7B,CAAC,CACL,EACD,CAAC,EACD,CAAC,CACJ,CAAC;AACN,CAAC;AAED,wCAAwC;AACxC,SAAS,eAAe,CAAC,KAAY;IACjC,OAAO,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,KAAK,CAAC;QACjF,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU;QAC1B,CAAC,CAAC,IAAI,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,OAAe,EAAE,QAAgB;IACpD,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,IAAI,IAAI,CAAC,CAAC,IAAA,2BAAc,EAAC,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;AAC5E,CAAC","sourcesContent":["import {decode as base64ToBuffer} from 'base64-arraybuffer';\nimport {Fragment, type Node, type Schema, Slice} from 'prosemirror-model';\nimport {Plugin} from 'prosemirror-state';\nimport {dropPoint} from 'prosemirror-transform';\n\nimport type {ParseInsertedUrlAsImage} from '../../../../bundle';\nimport type {ExtensionAuto} from '../../../../core';\nimport {isFunction} from '../../../../lodash';\nimport type {FileUploadHandler} from '../../../../utils';\nimport {clipboardUtils} from '../../../behavior/Clipboard';\nimport {DataTransferType} from '../../../behavior/Clipboard/utils';\nimport {ImageAttr, ImgSizeAttr, imageType} from '../../../specs';\nimport {type CreateImageNodeOptions, isImageNode} from '../utils';\n\nimport {ImagesUploadProcess} from './upload';\n\nconst {isFilesFromHtml, isFilesOnly, isImageFile} = clipboardUtils;\n\nexport type ImagePasteOptions = Pick<\n CreateImageNodeOptions,\n 'needDimensions' | 'enableNewImageSizeCalculation'\n> & {\n imageUploadHandler?: FileUploadHandler;\n /**\n * The function, used to determine if the pasted text is the image url and should be inserted as an image\n */\n parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n};\n\nexport const ImagePaste: ExtensionAuto<ImagePasteOptions> = (builder, opts) => {\n const {parseInsertedUrlAsImage, imageUploadHandler} = opts ?? {};\n\n if (!isFunction(imageUploadHandler ?? parseInsertedUrlAsImage))\n throw new Error(\n `ImagePaste extension: ${\n opts.imageUploadHandler ? 'imageUploadHandler' : 'parseInsertedUrlAsImage'\n } is not a function`,\n );\n\n builder.addPlugin(\n () =>\n new Plugin({\n props: {\n handleDOMEvents: {\n paste(view, e) {\n const files = getPastedImages(e.clipboardData);\n if (imageUploadHandler && files) {\n e.preventDefault();\n new ImagesUploadProcess(\n view,\n files,\n imageUploadHandler,\n view.state.tr.selection.from,\n opts,\n ).run();\n return true;\n } else if (parseInsertedUrlAsImage) {\n const {imageUrl, title} =\n parseInsertedUrlAsImage(\n e.clipboardData?.getData(DataTransferType.Text) ?? '',\n ) || {};\n\n if (!imageUrl) {\n return false;\n }\n\n e.preventDefault();\n\n const imageNode = imageType(view.state.schema).create({\n src: imageUrl,\n alt: title,\n });\n\n const tr = view.state.tr.replaceSelectionWith(imageNode);\n view.dispatch(tr.scrollIntoView());\n\n return true;\n }\n\n return false;\n },\n drop(view, e) {\n if (!imageUploadHandler) {\n return false;\n }\n\n // handle drop images from device\n if (view.dragging) return false;\n\n const files = getPastedImages(e.dataTransfer);\n if (!files) return false;\n\n const dropPos =\n view.posAtCoords({left: e.clientX, top: e.clientY})?.pos ?? -1;\n if (dropPos === -1) return false;\n\n const posToInsert = dropPoint(\n view.state.doc,\n dropPos,\n createFakeImageSlice(view.state.schema),\n );\n\n if (posToInsert !== null) {\n new ImagesUploadProcess(\n view,\n files,\n imageUploadHandler,\n posToInsert,\n opts,\n ).run();\n }\n\n e.preventDefault();\n return true;\n },\n },\n handlePaste(view, _event, slice) {\n if (!imageUploadHandler) {\n return false;\n }\n\n const node = sliceSingleNode(slice);\n if (node && isImageNode(node)) {\n const imgUrl = node.attrs[ImgSizeAttr.Src];\n const imgFile = dataUrlToFile(imgUrl, 'image');\n if (imgFile) {\n new ImagesUploadProcess(\n view,\n [imgFile],\n imageUploadHandler,\n view.state.tr.selection.from,\n opts,\n ).run();\n return true;\n }\n }\n return false;\n },\n },\n }),\n builder.Priority.VeryHigh,\n );\n};\n\nfunction getPastedImages(data: DataTransfer | null): File[] | null {\n if (!data || data.files.length === 0) return null;\n if (!isFilesOnly(data) && !isFilesFromHtml(data)) return null;\n const files = Array.from(data.files);\n return files.every(isImageFile) ? files : null;\n}\n\nfunction createFakeImageSlice(schema: Schema): Slice {\n return new Slice(\n Fragment.from(\n imageType(schema).create({\n [ImageAttr.Src]: 'fake',\n [ImageAttr.Title]: 'image',\n }),\n ),\n 0,\n 0,\n );\n}\n\n// copied from prosemirror-view input.ts\nfunction sliceSingleNode(slice: Slice): Node | null {\n return slice.openStart === 0 && slice.openEnd === 0 && slice.content.childCount === 1\n ? slice.content.firstChild\n : null;\n}\n\nfunction dataUrlToFile(dataUrl: string, filename: string): File | null {\n const [data, base64String] = dataUrl.split(',');\n if (!data || !base64String) return null;\n const mime = data.match(/^data:(.+);base64/)?.[1];\n if (!mime) return null;\n return new File([base64ToBuffer(base64String)], filename, {type: mime});\n}\n"]}
@@ -2,5 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
4
  /** During build process, the current version will be injected here */
5
- exports.VERSION = typeof '15.0.1' !== 'undefined' ? '15.0.1' : 'unknown';
5
+ exports.VERSION = typeof '15.0.2' !== 'undefined' ? '15.0.2' : 'unknown';
6
6
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"../../src","sources":["version.ts"],"names":[],"mappings":";;;AAAA,sEAAsE;AACzD,QAAA,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["/** During build process, the current version will be injected here */\nexport const VERSION = typeof '15.0.1' !== 'undefined' ? '15.0.1' : 'unknown';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"../../src","sources":["version.ts"],"names":[],"mappings":";;;AAAA,sEAAsE;AACzD,QAAA,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["/** During build process, the current version will be injected here */\nexport const VERSION = typeof '15.0.2' !== 'undefined' ? '15.0.2' : 'unknown';\n"]}
@@ -3,9 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useYfmShowElemWithId = useYfmShowElemWithId;
4
4
  const react_1 = require("react");
5
5
  const YfmCutCN = {
6
- Open: 'open',
7
6
  Cut: 'yfm-cut',
8
7
  };
8
+ const YfmCutAttrs = {
9
+ Open: 'open',
10
+ };
9
11
  const YfmTabsCN = {
10
12
  Active: 'active',
11
13
  Tabs: 'yfm-tabs',
@@ -32,9 +34,9 @@ function useYfmShowElemWithId(ref, id) {
32
34
  }
33
35
  }, [id]);
34
36
  }
35
- function openYfmCut({ classList }) {
36
- if (classList.contains(YfmCutCN.Cut) && !classList.contains(YfmCutCN.Open)) {
37
- classList.add(YfmCutCN.Open);
37
+ function openYfmCut(cutElement) {
38
+ if (cutElement.classList.contains(YfmCutCN.Cut) && !cutElement.hasAttribute(YfmCutAttrs.Open)) {
39
+ cutElement.setAttribute(YfmCutAttrs.Open, '');
38
40
  return true;
39
41
  }
40
42
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"useYfmShowElemWithId.js","sourceRoot":"../../../../../src","sources":["view/hooks/useYfmShowElemWithId/useYfmShowElemWithId.ts"],"names":[],"mappings":"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","sourcesContent":["import {type RefObject, useEffect} from 'react';\n\nconst YfmCutCN = {\n Open: 'open',\n Cut: 'yfm-cut',\n} as const;\n\nconst YfmTabsCN = {\n Active: 'active',\n Tabs: 'yfm-tabs',\n TabList: 'yfm-tab-list',\n Tab: 'yfm-tab',\n TabPanel: 'yfm-tab-panel',\n} as const;\n\nconst FoldingHeadingsCN = {\n Open: 'open',\n Section: 'heading-section',\n} as const;\n\nexport function useYfmShowElemWithId(ref: RefObject<HTMLElement>, id: string) {\n useEffect(() => {\n const {current: containerDom} = ref;\n if (!id || !containerDom) return;\n\n let elem = document.getElementById(id);\n if (!elem || !containerDom.contains(elem)) return;\n\n while (elem && elem !== containerDom) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n openYfmCut(elem) || openFoldingHeadings(elem, id) || switchYfmTabs(elem);\n elem = elem.parentElement;\n }\n }, [id]);\n}\n\nfunction openYfmCut({classList}: Element): boolean {\n if (classList.contains(YfmCutCN.Cut) && !classList.contains(YfmCutCN.Open)) {\n classList.add(YfmCutCN.Open);\n return true;\n }\n return false;\n}\n\nfunction switchYfmTabs(tabPanelElem: Element): boolean {\n if (\n !tabPanelElem.id ||\n !tabPanelElem.classList.contains(YfmTabsCN.TabPanel) ||\n tabPanelElem.classList.contains(YfmTabsCN.Active)\n )\n return false;\n const tabsElem = tabPanelElem.parentElement;\n if (!tabsElem?.classList.contains(YfmTabsCN.Tabs)) return false;\n const yfmTabList = tabsElem.firstElementChild;\n if (!yfmTabList?.classList.contains(YfmTabsCN.TabList)) return false;\n\n const tabPanelId = tabPanelElem.id;\n for (const tabElem of Array.from(yfmTabList.children)) {\n if (!tabElem.classList.contains(YfmTabsCN.Tab)) continue;\n\n const isDesiredElem = tabElem.hasAttribute('aria-controls')\n ? tabElem.getAttribute('aria-controls') === tabPanelId\n : tabElem.textContent === tabPanelElem.getAttribute('data-title');\n tabElem.setAttribute('data-diplodoc-is-active', String(isDesiredElem));\n tabElem.setAttribute('aria-selected', String(isDesiredElem));\n tabElem.classList.toggle(YfmTabsCN.Active, isDesiredElem);\n }\n for (const panelElem of Array.from(tabsElem.children)) {\n if (!panelElem.classList.contains(YfmTabsCN.TabPanel)) continue;\n\n const isDesiredElem = panelElem.id === tabPanelId;\n panelElem.classList.toggle(YfmTabsCN.Active, isDesiredElem);\n }\n return true;\n}\n\nfunction openFoldingHeadings(elem: Element, id: string): boolean {\n if (\n elem.classList.contains(FoldingHeadingsCN.Section) &&\n !elem.classList.contains(FoldingHeadingsCN.Open) &&\n id !== elem.firstElementChild?.id\n ) {\n elem.classList.add(FoldingHeadingsCN.Open);\n return true;\n }\n return false;\n}\n"]}
1
+ {"version":3,"file":"useYfmShowElemWithId.js","sourceRoot":"../../../../../src","sources":["view/hooks/useYfmShowElemWithId/useYfmShowElemWithId.ts"],"names":[],"mappings":"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","sourcesContent":["import {type RefObject, useEffect} from 'react';\n\nconst YfmCutCN = {\n Cut: 'yfm-cut',\n} as const;\n\nconst YfmCutAttrs = {\n Open: 'open',\n} as const;\n\nconst YfmTabsCN = {\n Active: 'active',\n Tabs: 'yfm-tabs',\n TabList: 'yfm-tab-list',\n Tab: 'yfm-tab',\n TabPanel: 'yfm-tab-panel',\n} as const;\n\nconst FoldingHeadingsCN = {\n Open: 'open',\n Section: 'heading-section',\n} as const;\n\nexport function useYfmShowElemWithId(ref: RefObject<HTMLElement>, id: string) {\n useEffect(() => {\n const {current: containerDom} = ref;\n if (!id || !containerDom) return;\n\n let elem = document.getElementById(id);\n if (!elem || !containerDom.contains(elem)) return;\n\n while (elem && elem !== containerDom) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n openYfmCut(elem) || openFoldingHeadings(elem, id) || switchYfmTabs(elem);\n elem = elem.parentElement;\n }\n }, [id]);\n}\n\nfunction openYfmCut(cutElement: Element): boolean {\n if (cutElement.classList.contains(YfmCutCN.Cut) && !cutElement.hasAttribute(YfmCutAttrs.Open)) {\n cutElement.setAttribute(YfmCutAttrs.Open, '');\n return true;\n }\n return false;\n}\n\nfunction switchYfmTabs(tabPanelElem: Element): boolean {\n if (\n !tabPanelElem.id ||\n !tabPanelElem.classList.contains(YfmTabsCN.TabPanel) ||\n tabPanelElem.classList.contains(YfmTabsCN.Active)\n )\n return false;\n const tabsElem = tabPanelElem.parentElement;\n if (!tabsElem?.classList.contains(YfmTabsCN.Tabs)) return false;\n const yfmTabList = tabsElem.firstElementChild;\n if (!yfmTabList?.classList.contains(YfmTabsCN.TabList)) return false;\n\n const tabPanelId = tabPanelElem.id;\n for (const tabElem of Array.from(yfmTabList.children)) {\n if (!tabElem.classList.contains(YfmTabsCN.Tab)) continue;\n\n const isDesiredElem = tabElem.hasAttribute('aria-controls')\n ? tabElem.getAttribute('aria-controls') === tabPanelId\n : tabElem.textContent === tabPanelElem.getAttribute('data-title');\n tabElem.setAttribute('data-diplodoc-is-active', String(isDesiredElem));\n tabElem.setAttribute('aria-selected', String(isDesiredElem));\n tabElem.classList.toggle(YfmTabsCN.Active, isDesiredElem);\n }\n for (const panelElem of Array.from(tabsElem.children)) {\n if (!panelElem.classList.contains(YfmTabsCN.TabPanel)) continue;\n\n const isDesiredElem = panelElem.id === tabPanelId;\n panelElem.classList.toggle(YfmTabsCN.Active, isDesiredElem);\n }\n return true;\n}\n\nfunction openFoldingHeadings(elem: Element, id: string): boolean {\n if (\n elem.classList.contains(FoldingHeadingsCN.Section) &&\n !elem.classList.contains(FoldingHeadingsCN.Open) &&\n id !== elem.firstElementChild?.id\n ) {\n elem.classList.add(FoldingHeadingsCN.Open);\n return true;\n }\n return false;\n}\n"]}
@@ -1,7 +1,7 @@
1
+ import dedent from 'ts-dedent';
1
2
  import { v5 } from 'uuid';
2
3
  const YFM_TABLE_TOKEN_ATTR = 'data-token-id';
3
4
  const YFM_TABLE_NODE_ATTR = 'data-node-id';
4
- const PARENTS_WITH_AFFECT = ['blockquote', 'yfm_tabs'];
5
5
  export function createDynamicModifiers(markupManager) {
6
6
  return [
7
7
  {
@@ -14,10 +14,12 @@ export function createDynamicModifiers(markupManager) {
14
14
  process: (token, _, rawMarkup) => {
15
15
  const { map } = token;
16
16
  if (map) {
17
- const content = rawMarkup.split('\n').slice(map[0], map[1]).join('\n');
17
+ const content = rawMarkup.split('\n').slice(map[0], map[1]).join('\n').trim();
18
18
  const tokenId = v5(content, markupManager.getNamespace());
19
- token.attrSet(YFM_TABLE_TOKEN_ATTR, tokenId);
20
- markupManager.setMarkup(tokenId, content);
19
+ if (/^\s*#\|/.test(content)) {
20
+ token.attrSet(YFM_TABLE_TOKEN_ATTR, tokenId);
21
+ markupManager.setMarkup(tokenId, dedent(content));
22
+ }
21
23
  }
22
24
  return token;
23
25
  },
@@ -55,8 +57,13 @@ export function createDynamicModifiers(markupManager) {
55
57
  process: (state, node, parent, index, callback) => {
56
58
  const nodeId = node.attrs[YFM_TABLE_NODE_ATTR];
57
59
  const savedNode = markupManager.getNode(nodeId);
58
- if (!PARENTS_WITH_AFFECT.includes(parent?.type?.name) && savedNode?.eq(node)) {
59
- state.write(markupManager.getMarkup(nodeId) + '\n');
60
+ if (savedNode?.eq(node)) {
61
+ const content = markupManager.getMarkup(nodeId) || '';
62
+ state.ensureNewLine();
63
+ state.text(content, false);
64
+ state.ensureNewLine();
65
+ state.closeBlock();
66
+ state.write('\n');
60
67
  return;
61
68
  }
62
69
  callback?.(state, node, parent, index);
@@ -1 +1 @@
1
- {"version":3,"file":"dynamicModifiers.js","sourceRoot":"../../../../src","sources":["bundle/config/dynamicModifiers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,EAAE,EAAC,MAAM,MAAM,CAAC;AAKxB,MAAM,oBAAoB,GAAG,eAAe,CAAC;AAC7C,MAAM,mBAAmB,GAAG,cAAc,CAAC;AAC3C,MAAM,mBAAmB,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AAEvD,MAAM,UAAU,sBAAsB,CAAC,aAA4B;IAC/D,OAAO;QACH;YACI,IAAI,EAAE,aAAa;YACnB,SAAS,EAAE,WAAW;YACtB;;;eAGG;YACH,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE;gBAC7B,MAAM,EAAC,GAAG,EAAC,GAAG,KAAK,CAAC;gBAEpB,IAAI,GAAG,EAAE,CAAC;oBACN,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACvE,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC;oBAE1D,KAAK,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;oBAC7C,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC9C,CAAC;gBACD,OAAO,KAAK,CAAC;YACjB,CAAC;SACJ;QACD;YACI,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,WAAW;YACtB;;eAEG;YACH,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBACxB,GAAG,KAAK;gBACR,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC;aAC7D,CAAC;SACL;QACD;YACI,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,WAAW;YACrB,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACd,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBAC/C,IAAI,MAAM,EAAE,CAAC;oBACT,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACxC,CAAC;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC;SACJ;QACD;YACI,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,WAAW;YACrB;;;;eAIG;YACH,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;gBAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBAC/C,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAEhD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3E,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;oBACpD,OAAO;gBACX,CAAC;gBAED,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAC3C,CAAC;SACJ;QACD;YACI,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,WAAW;YACrB;;eAEG;YACH,YAAY,EAAE,CAAC,mBAAmB,CAAC;SACtC;KACJ,CAAC;AACN,CAAC","sourcesContent":["import {v5} from 'uuid';\n\nimport type {DynamicModifiers} from '../../core/types/dynamicModifiers';\nimport type {MarkupManager} from '../MarkupManager';\n\nconst YFM_TABLE_TOKEN_ATTR = 'data-token-id';\nconst YFM_TABLE_NODE_ATTR = 'data-node-id';\nconst PARENTS_WITH_AFFECT = ['blockquote', 'yfm_tabs'];\n\nexport function createDynamicModifiers(markupManager: MarkupManager): DynamicModifiers[] {\n return [\n {\n type: 'parserToken',\n tokenName: 'yfm_table',\n /**\n * - Assigns a unique `data-token-id` to each token.\n * - Captures and stores the raw Markdown using `MarkupManager`.\n */\n process: (token, _, rawMarkup) => {\n const {map} = token;\n\n if (map) {\n const content = rawMarkup.split('\\n').slice(map[0], map[1]).join('\\n');\n const tokenId = v5(content, markupManager.getNamespace());\n\n token.attrSet(YFM_TABLE_TOKEN_ATTR, tokenId);\n markupManager.setMarkup(tokenId, content);\n }\n return token;\n },\n },\n {\n type: 'parserNodeAttrs',\n tokenName: 'yfm_table',\n /**\n * - Links the token to its corresponding node via `data-node-id`.\n */\n process: (token, attrs) => ({\n ...attrs,\n [YFM_TABLE_NODE_ATTR]: token.attrGet(YFM_TABLE_TOKEN_ATTR),\n }),\n },\n {\n type: 'parserNode',\n nodeName: 'yfm_table',\n process: (node) => {\n const nodeId = node.attrs[YFM_TABLE_NODE_ATTR];\n if (nodeId) {\n markupManager.setNode(nodeId, node);\n }\n return node;\n },\n },\n {\n type: 'serializerNode',\n nodeName: 'yfm_table',\n /**\n * - Retrieves the original Markdown using the `data-node-id` attribute.\n * - Uses the original Markdown if the node matches the saved version.\n * - Falls back to schema-based rendering if the node structure, attributes, or parent elements affect it.\n */\n process: (state, node, parent, index, callback) => {\n const nodeId = node.attrs[YFM_TABLE_NODE_ATTR];\n const savedNode = markupManager.getNode(nodeId);\n\n if (!PARENTS_WITH_AFFECT.includes(parent?.type?.name) && savedNode?.eq(node)) {\n state.write(markupManager.getMarkup(nodeId) + '\\n');\n return;\n }\n\n callback?.(state, node, parent, index);\n },\n },\n {\n type: 'schemaNodeSpec',\n nodeName: 'yfm_table',\n /**\n * - Adds the `data-node-id` attribute to the list of allowed attributes.\n */\n allowedAttrs: [YFM_TABLE_NODE_ATTR],\n },\n ];\n}\n"]}
1
+ {"version":3,"file":"dynamicModifiers.js","sourceRoot":"../../../../src","sources":["bundle/config/dynamicModifiers.ts"],"names":[],"mappings":"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","sourcesContent":["import dedent from 'ts-dedent';\nimport {v5} from 'uuid';\n\nimport type {DynamicModifiers} from '../../core/types/dynamicModifiers';\nimport type {MarkupManager} from '../MarkupManager';\n\nconst YFM_TABLE_TOKEN_ATTR = 'data-token-id';\nconst YFM_TABLE_NODE_ATTR = 'data-node-id';\n\nexport function createDynamicModifiers(markupManager: MarkupManager): DynamicModifiers[] {\n return [\n {\n type: 'parserToken',\n tokenName: 'yfm_table',\n /**\n * - Assigns a unique `data-token-id` to each token.\n * - Captures and stores the raw Markdown using `MarkupManager`.\n */\n process: (token, _, rawMarkup) => {\n const {map} = token;\n\n if (map) {\n const content = rawMarkup.split('\\n').slice(map[0], map[1]).join('\\n').trim();\n const tokenId = v5(content, markupManager.getNamespace());\n\n if (/^\\s*#\\|/.test(content)) {\n token.attrSet(YFM_TABLE_TOKEN_ATTR, tokenId);\n markupManager.setMarkup(tokenId, dedent(content));\n }\n }\n return token;\n },\n },\n {\n type: 'parserNodeAttrs',\n tokenName: 'yfm_table',\n /**\n * - Links the token to its corresponding node via `data-node-id`.\n */\n process: (token, attrs) => ({\n ...attrs,\n [YFM_TABLE_NODE_ATTR]: token.attrGet(YFM_TABLE_TOKEN_ATTR),\n }),\n },\n {\n type: 'parserNode',\n nodeName: 'yfm_table',\n process: (node) => {\n const nodeId = node.attrs[YFM_TABLE_NODE_ATTR];\n if (nodeId) {\n markupManager.setNode(nodeId, node);\n }\n return node;\n },\n },\n {\n type: 'serializerNode',\n nodeName: 'yfm_table',\n /**\n * - Retrieves the original Markdown using the `data-node-id` attribute.\n * - Uses the original Markdown if the node matches the saved version.\n * - Falls back to schema-based rendering if the node structure, attributes, or parent elements affect it.\n */\n process: (state, node, parent, index, callback) => {\n const nodeId = node.attrs[YFM_TABLE_NODE_ATTR];\n const savedNode = markupManager.getNode(nodeId);\n\n if (savedNode?.eq(node)) {\n const content: string = markupManager.getMarkup(nodeId) || '';\n state.ensureNewLine();\n state.text(content, false);\n state.ensureNewLine();\n state.closeBlock();\n state.write('\\n');\n return;\n }\n\n callback?.(state, node, parent, index);\n },\n },\n {\n type: 'schemaNodeSpec',\n nodeName: 'yfm_table',\n /**\n * - Adds the `data-node-id` attribute to the list of allowed attributes.\n */\n allowedAttrs: [YFM_TABLE_NODE_ATTR],\n },\n ];\n}\n"]}
@@ -76,7 +76,7 @@ export const ImagePaste = (builder, opts) => {
76
76
  return false;
77
77
  },
78
78
  },
79
- }), builder.Priority.High);
79
+ }), builder.Priority.VeryHigh);
80
80
  };
81
81
  function getPastedImages(data) {
82
82
  if (!data || data.files.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/ImgSize/ImagePaste/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {decode as base64ToBuffer} from 'base64-arraybuffer';\nimport {Fragment, type Node, type Schema, Slice} from 'prosemirror-model';\nimport {Plugin} from 'prosemirror-state';\nimport {dropPoint} from 'prosemirror-transform';\n\nimport type {ParseInsertedUrlAsImage} from '../../../../bundle';\nimport type {ExtensionAuto} from '../../../../core';\nimport {isFunction} from '../../../../lodash';\nimport type {FileUploadHandler} from '../../../../utils';\nimport {clipboardUtils} from '../../../behavior/Clipboard';\nimport {DataTransferType} from '../../../behavior/Clipboard/utils';\nimport {ImageAttr, ImgSizeAttr, imageType} from '../../../specs';\nimport {type CreateImageNodeOptions, isImageNode} from '../utils';\n\nimport {ImagesUploadProcess} from './upload';\n\nconst {isFilesFromHtml, isFilesOnly, isImageFile} = clipboardUtils;\n\nexport type ImagePasteOptions = Pick<\n CreateImageNodeOptions,\n 'needDimensions' | 'enableNewImageSizeCalculation'\n> & {\n imageUploadHandler?: FileUploadHandler;\n /**\n * The function, used to determine if the pasted text is the image url and should be inserted as an image\n */\n parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n};\n\nexport const ImagePaste: ExtensionAuto<ImagePasteOptions> = (builder, opts) => {\n const {parseInsertedUrlAsImage, imageUploadHandler} = opts ?? {};\n\n if (!isFunction(imageUploadHandler ?? parseInsertedUrlAsImage))\n throw new Error(\n `ImagePaste extension: ${\n opts.imageUploadHandler ? 'imageUploadHandler' : 'parseInsertedUrlAsImage'\n } is not a function`,\n );\n\n builder.addPlugin(\n () =>\n new Plugin({\n props: {\n handleDOMEvents: {\n paste(view, e) {\n const files = getPastedImages(e.clipboardData);\n if (imageUploadHandler && files) {\n e.preventDefault();\n new ImagesUploadProcess(\n view,\n files,\n imageUploadHandler,\n view.state.tr.selection.from,\n opts,\n ).run();\n return true;\n } else if (parseInsertedUrlAsImage) {\n const {imageUrl, title} =\n parseInsertedUrlAsImage(\n e.clipboardData?.getData(DataTransferType.Text) ?? '',\n ) || {};\n\n if (!imageUrl) {\n return false;\n }\n\n e.preventDefault();\n\n const imageNode = imageType(view.state.schema).create({\n src: imageUrl,\n alt: title,\n });\n\n const tr = view.state.tr.replaceSelectionWith(imageNode);\n view.dispatch(tr.scrollIntoView());\n\n return true;\n }\n\n return false;\n },\n drop(view, e) {\n if (!imageUploadHandler) {\n return false;\n }\n\n // handle drop images from device\n if (view.dragging) return false;\n\n const files = getPastedImages(e.dataTransfer);\n if (!files) return false;\n\n const dropPos =\n view.posAtCoords({left: e.clientX, top: e.clientY})?.pos ?? -1;\n if (dropPos === -1) return false;\n\n const posToInsert = dropPoint(\n view.state.doc,\n dropPos,\n createFakeImageSlice(view.state.schema),\n );\n\n if (posToInsert !== null) {\n new ImagesUploadProcess(\n view,\n files,\n imageUploadHandler,\n posToInsert,\n opts,\n ).run();\n }\n\n e.preventDefault();\n return true;\n },\n },\n handlePaste(view, _event, slice) {\n if (!imageUploadHandler) {\n return false;\n }\n\n const node = sliceSingleNode(slice);\n if (node && isImageNode(node)) {\n const imgUrl = node.attrs[ImgSizeAttr.Src];\n const imgFile = dataUrlToFile(imgUrl, 'image');\n if (imgFile) {\n new ImagesUploadProcess(\n view,\n [imgFile],\n imageUploadHandler,\n view.state.tr.selection.from,\n opts,\n ).run();\n return true;\n }\n }\n return false;\n },\n },\n }),\n builder.Priority.High,\n );\n};\n\nfunction getPastedImages(data: DataTransfer | null): File[] | null {\n if (!data || data.files.length === 0) return null;\n if (!isFilesOnly(data) && !isFilesFromHtml(data)) return null;\n const files = Array.from(data.files);\n return files.every(isImageFile) ? files : null;\n}\n\nfunction createFakeImageSlice(schema: Schema): Slice {\n return new Slice(\n Fragment.from(\n imageType(schema).create({\n [ImageAttr.Src]: 'fake',\n [ImageAttr.Title]: 'image',\n }),\n ),\n 0,\n 0,\n );\n}\n\n// copied from prosemirror-view input.ts\nfunction sliceSingleNode(slice: Slice): Node | null {\n return slice.openStart === 0 && slice.openEnd === 0 && slice.content.childCount === 1\n ? slice.content.firstChild\n : null;\n}\n\nfunction dataUrlToFile(dataUrl: string, filename: string): File | null {\n const [data, base64String] = dataUrl.split(',');\n if (!data || !base64String) return null;\n const mime = data.match(/^data:(.+);base64/)?.[1];\n if (!mime) return null;\n return new File([base64ToBuffer(base64String)], filename, {type: mime});\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/ImgSize/ImagePaste/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {decode as base64ToBuffer} from 'base64-arraybuffer';\nimport {Fragment, type Node, type Schema, Slice} from 'prosemirror-model';\nimport {Plugin} from 'prosemirror-state';\nimport {dropPoint} from 'prosemirror-transform';\n\nimport type {ParseInsertedUrlAsImage} from '../../../../bundle';\nimport type {ExtensionAuto} from '../../../../core';\nimport {isFunction} from '../../../../lodash';\nimport type {FileUploadHandler} from '../../../../utils';\nimport {clipboardUtils} from '../../../behavior/Clipboard';\nimport {DataTransferType} from '../../../behavior/Clipboard/utils';\nimport {ImageAttr, ImgSizeAttr, imageType} from '../../../specs';\nimport {type CreateImageNodeOptions, isImageNode} from '../utils';\n\nimport {ImagesUploadProcess} from './upload';\n\nconst {isFilesFromHtml, isFilesOnly, isImageFile} = clipboardUtils;\n\nexport type ImagePasteOptions = Pick<\n CreateImageNodeOptions,\n 'needDimensions' | 'enableNewImageSizeCalculation'\n> & {\n imageUploadHandler?: FileUploadHandler;\n /**\n * The function, used to determine if the pasted text is the image url and should be inserted as an image\n */\n parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n};\n\nexport const ImagePaste: ExtensionAuto<ImagePasteOptions> = (builder, opts) => {\n const {parseInsertedUrlAsImage, imageUploadHandler} = opts ?? {};\n\n if (!isFunction(imageUploadHandler ?? parseInsertedUrlAsImage))\n throw new Error(\n `ImagePaste extension: ${\n opts.imageUploadHandler ? 'imageUploadHandler' : 'parseInsertedUrlAsImage'\n } is not a function`,\n );\n\n builder.addPlugin(\n () =>\n new Plugin({\n props: {\n handleDOMEvents: {\n paste(view, e) {\n const files = getPastedImages(e.clipboardData);\n if (imageUploadHandler && files) {\n e.preventDefault();\n new ImagesUploadProcess(\n view,\n files,\n imageUploadHandler,\n view.state.tr.selection.from,\n opts,\n ).run();\n return true;\n } else if (parseInsertedUrlAsImage) {\n const {imageUrl, title} =\n parseInsertedUrlAsImage(\n e.clipboardData?.getData(DataTransferType.Text) ?? '',\n ) || {};\n\n if (!imageUrl) {\n return false;\n }\n\n e.preventDefault();\n\n const imageNode = imageType(view.state.schema).create({\n src: imageUrl,\n alt: title,\n });\n\n const tr = view.state.tr.replaceSelectionWith(imageNode);\n view.dispatch(tr.scrollIntoView());\n\n return true;\n }\n\n return false;\n },\n drop(view, e) {\n if (!imageUploadHandler) {\n return false;\n }\n\n // handle drop images from device\n if (view.dragging) return false;\n\n const files = getPastedImages(e.dataTransfer);\n if (!files) return false;\n\n const dropPos =\n view.posAtCoords({left: e.clientX, top: e.clientY})?.pos ?? -1;\n if (dropPos === -1) return false;\n\n const posToInsert = dropPoint(\n view.state.doc,\n dropPos,\n createFakeImageSlice(view.state.schema),\n );\n\n if (posToInsert !== null) {\n new ImagesUploadProcess(\n view,\n files,\n imageUploadHandler,\n posToInsert,\n opts,\n ).run();\n }\n\n e.preventDefault();\n return true;\n },\n },\n handlePaste(view, _event, slice) {\n if (!imageUploadHandler) {\n return false;\n }\n\n const node = sliceSingleNode(slice);\n if (node && isImageNode(node)) {\n const imgUrl = node.attrs[ImgSizeAttr.Src];\n const imgFile = dataUrlToFile(imgUrl, 'image');\n if (imgFile) {\n new ImagesUploadProcess(\n view,\n [imgFile],\n imageUploadHandler,\n view.state.tr.selection.from,\n opts,\n ).run();\n return true;\n }\n }\n return false;\n },\n },\n }),\n builder.Priority.VeryHigh,\n );\n};\n\nfunction getPastedImages(data: DataTransfer | null): File[] | null {\n if (!data || data.files.length === 0) return null;\n if (!isFilesOnly(data) && !isFilesFromHtml(data)) return null;\n const files = Array.from(data.files);\n return files.every(isImageFile) ? files : null;\n}\n\nfunction createFakeImageSlice(schema: Schema): Slice {\n return new Slice(\n Fragment.from(\n imageType(schema).create({\n [ImageAttr.Src]: 'fake',\n [ImageAttr.Title]: 'image',\n }),\n ),\n 0,\n 0,\n );\n}\n\n// copied from prosemirror-view input.ts\nfunction sliceSingleNode(slice: Slice): Node | null {\n return slice.openStart === 0 && slice.openEnd === 0 && slice.content.childCount === 1\n ? slice.content.firstChild\n : null;\n}\n\nfunction dataUrlToFile(dataUrl: string, filename: string): File | null {\n const [data, base64String] = dataUrl.split(',');\n if (!data || !base64String) return null;\n const mime = data.match(/^data:(.+);base64/)?.[1];\n if (!mime) return null;\n return new File([base64ToBuffer(base64String)], filename, {type: mime});\n}\n"]}
@@ -1,3 +1,3 @@
1
1
  /** During build process, the current version will be injected here */
2
- export const VERSION = typeof '15.0.1' !== 'undefined' ? '15.0.1' : 'unknown';
2
+ export const VERSION = typeof '15.0.2' !== 'undefined' ? '15.0.2' : 'unknown';
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"../../src","sources":["version.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["/** During build process, the current version will be injected here */\nexport const VERSION = typeof '15.0.1' !== 'undefined' ? '15.0.1' : 'unknown';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"../../src","sources":["version.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["/** During build process, the current version will be injected here */\nexport const VERSION = typeof '15.0.2' !== 'undefined' ? '15.0.2' : 'unknown';\n"]}
@@ -1,8 +1,10 @@
1
1
  import { useEffect } from 'react';
2
2
  const YfmCutCN = {
3
- Open: 'open',
4
3
  Cut: 'yfm-cut',
5
4
  };
5
+ const YfmCutAttrs = {
6
+ Open: 'open',
7
+ };
6
8
  const YfmTabsCN = {
7
9
  Active: 'active',
8
10
  Tabs: 'yfm-tabs',
@@ -29,9 +31,9 @@ export function useYfmShowElemWithId(ref, id) {
29
31
  }
30
32
  }, [id]);
31
33
  }
32
- function openYfmCut({ classList }) {
33
- if (classList.contains(YfmCutCN.Cut) && !classList.contains(YfmCutCN.Open)) {
34
- classList.add(YfmCutCN.Open);
34
+ function openYfmCut(cutElement) {
35
+ if (cutElement.classList.contains(YfmCutCN.Cut) && !cutElement.hasAttribute(YfmCutAttrs.Open)) {
36
+ cutElement.setAttribute(YfmCutAttrs.Open, '');
35
37
  return true;
36
38
  }
37
39
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"useYfmShowElemWithId.js","sourceRoot":"../../../../../src","sources":["view/hooks/useYfmShowElemWithId/useYfmShowElemWithId.ts"],"names":[],"mappings":"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","sourcesContent":["import {type RefObject, useEffect} from 'react';\n\nconst YfmCutCN = {\n Open: 'open',\n Cut: 'yfm-cut',\n} as const;\n\nconst YfmTabsCN = {\n Active: 'active',\n Tabs: 'yfm-tabs',\n TabList: 'yfm-tab-list',\n Tab: 'yfm-tab',\n TabPanel: 'yfm-tab-panel',\n} as const;\n\nconst FoldingHeadingsCN = {\n Open: 'open',\n Section: 'heading-section',\n} as const;\n\nexport function useYfmShowElemWithId(ref: RefObject<HTMLElement>, id: string) {\n useEffect(() => {\n const {current: containerDom} = ref;\n if (!id || !containerDom) return;\n\n let elem = document.getElementById(id);\n if (!elem || !containerDom.contains(elem)) return;\n\n while (elem && elem !== containerDom) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n openYfmCut(elem) || openFoldingHeadings(elem, id) || switchYfmTabs(elem);\n elem = elem.parentElement;\n }\n }, [id]);\n}\n\nfunction openYfmCut({classList}: Element): boolean {\n if (classList.contains(YfmCutCN.Cut) && !classList.contains(YfmCutCN.Open)) {\n classList.add(YfmCutCN.Open);\n return true;\n }\n return false;\n}\n\nfunction switchYfmTabs(tabPanelElem: Element): boolean {\n if (\n !tabPanelElem.id ||\n !tabPanelElem.classList.contains(YfmTabsCN.TabPanel) ||\n tabPanelElem.classList.contains(YfmTabsCN.Active)\n )\n return false;\n const tabsElem = tabPanelElem.parentElement;\n if (!tabsElem?.classList.contains(YfmTabsCN.Tabs)) return false;\n const yfmTabList = tabsElem.firstElementChild;\n if (!yfmTabList?.classList.contains(YfmTabsCN.TabList)) return false;\n\n const tabPanelId = tabPanelElem.id;\n for (const tabElem of Array.from(yfmTabList.children)) {\n if (!tabElem.classList.contains(YfmTabsCN.Tab)) continue;\n\n const isDesiredElem = tabElem.hasAttribute('aria-controls')\n ? tabElem.getAttribute('aria-controls') === tabPanelId\n : tabElem.textContent === tabPanelElem.getAttribute('data-title');\n tabElem.setAttribute('data-diplodoc-is-active', String(isDesiredElem));\n tabElem.setAttribute('aria-selected', String(isDesiredElem));\n tabElem.classList.toggle(YfmTabsCN.Active, isDesiredElem);\n }\n for (const panelElem of Array.from(tabsElem.children)) {\n if (!panelElem.classList.contains(YfmTabsCN.TabPanel)) continue;\n\n const isDesiredElem = panelElem.id === tabPanelId;\n panelElem.classList.toggle(YfmTabsCN.Active, isDesiredElem);\n }\n return true;\n}\n\nfunction openFoldingHeadings(elem: Element, id: string): boolean {\n if (\n elem.classList.contains(FoldingHeadingsCN.Section) &&\n !elem.classList.contains(FoldingHeadingsCN.Open) &&\n id !== elem.firstElementChild?.id\n ) {\n elem.classList.add(FoldingHeadingsCN.Open);\n return true;\n }\n return false;\n}\n"]}
1
+ {"version":3,"file":"useYfmShowElemWithId.js","sourceRoot":"../../../../../src","sources":["view/hooks/useYfmShowElemWithId/useYfmShowElemWithId.ts"],"names":[],"mappings":"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","sourcesContent":["import {type RefObject, useEffect} from 'react';\n\nconst YfmCutCN = {\n Cut: 'yfm-cut',\n} as const;\n\nconst YfmCutAttrs = {\n Open: 'open',\n} as const;\n\nconst YfmTabsCN = {\n Active: 'active',\n Tabs: 'yfm-tabs',\n TabList: 'yfm-tab-list',\n Tab: 'yfm-tab',\n TabPanel: 'yfm-tab-panel',\n} as const;\n\nconst FoldingHeadingsCN = {\n Open: 'open',\n Section: 'heading-section',\n} as const;\n\nexport function useYfmShowElemWithId(ref: RefObject<HTMLElement>, id: string) {\n useEffect(() => {\n const {current: containerDom} = ref;\n if (!id || !containerDom) return;\n\n let elem = document.getElementById(id);\n if (!elem || !containerDom.contains(elem)) return;\n\n while (elem && elem !== containerDom) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n openYfmCut(elem) || openFoldingHeadings(elem, id) || switchYfmTabs(elem);\n elem = elem.parentElement;\n }\n }, [id]);\n}\n\nfunction openYfmCut(cutElement: Element): boolean {\n if (cutElement.classList.contains(YfmCutCN.Cut) && !cutElement.hasAttribute(YfmCutAttrs.Open)) {\n cutElement.setAttribute(YfmCutAttrs.Open, '');\n return true;\n }\n return false;\n}\n\nfunction switchYfmTabs(tabPanelElem: Element): boolean {\n if (\n !tabPanelElem.id ||\n !tabPanelElem.classList.contains(YfmTabsCN.TabPanel) ||\n tabPanelElem.classList.contains(YfmTabsCN.Active)\n )\n return false;\n const tabsElem = tabPanelElem.parentElement;\n if (!tabsElem?.classList.contains(YfmTabsCN.Tabs)) return false;\n const yfmTabList = tabsElem.firstElementChild;\n if (!yfmTabList?.classList.contains(YfmTabsCN.TabList)) return false;\n\n const tabPanelId = tabPanelElem.id;\n for (const tabElem of Array.from(yfmTabList.children)) {\n if (!tabElem.classList.contains(YfmTabsCN.Tab)) continue;\n\n const isDesiredElem = tabElem.hasAttribute('aria-controls')\n ? tabElem.getAttribute('aria-controls') === tabPanelId\n : tabElem.textContent === tabPanelElem.getAttribute('data-title');\n tabElem.setAttribute('data-diplodoc-is-active', String(isDesiredElem));\n tabElem.setAttribute('aria-selected', String(isDesiredElem));\n tabElem.classList.toggle(YfmTabsCN.Active, isDesiredElem);\n }\n for (const panelElem of Array.from(tabsElem.children)) {\n if (!panelElem.classList.contains(YfmTabsCN.TabPanel)) continue;\n\n const isDesiredElem = panelElem.id === tabPanelId;\n panelElem.classList.toggle(YfmTabsCN.Active, isDesiredElem);\n }\n return true;\n}\n\nfunction openFoldingHeadings(elem: Element, id: string): boolean {\n if (\n elem.classList.contains(FoldingHeadingsCN.Section) &&\n !elem.classList.contains(FoldingHeadingsCN.Open) &&\n id !== elem.firstElementChild?.id\n ) {\n elem.classList.add(FoldingHeadingsCN.Open);\n return true;\n }\n return false;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/markdown-editor",
3
- "version": "15.0.1",
3
+ "version": "15.0.2",
4
4
  "description": "Markdown wysiwyg and markup editor",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -203,6 +203,7 @@
203
203
  "react-error-boundary": "^3.1.4",
204
204
  "react-hotkeys-hook": "4.5.0",
205
205
  "react-use": "^17.3.2",
206
+ "ts-dedent": "2.2.0",
206
207
  "tslib": "^2.3.1",
207
208
  "uuid": "11.0.5"
208
209
  },
@@ -269,7 +270,6 @@
269
270
  "sass": "^1.84.0",
270
271
  "sass-loader": "^13.3.2",
271
272
  "stylelint": "15.11.0",
272
- "ts-dedent": "2.2.0",
273
273
  "ts-jest": "^29.2.5",
274
274
  "typescript": "^5.7.3"
275
275
  },