@gravity-ui/markdown-editor 15.23.0 → 15.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/build/cjs/bundle/ToolbarView.js +2 -1
  2. package/build/cjs/bundle/ToolbarView.js.map +1 -1
  3. package/build/cjs/bundle/settings/index.d.ts +2 -1
  4. package/build/cjs/bundle/settings/index.js +6 -2
  5. package/build/cjs/bundle/settings/index.js.map +1 -1
  6. package/build/cjs/bundle/toolbar/ToolbarButtonWithPopupMenu.js +4 -1
  7. package/build/cjs/bundle/toolbar/ToolbarButtonWithPopupMenu.js.map +1 -1
  8. package/build/cjs/common/layout.d.ts +3 -0
  9. package/build/cjs/common/layout.js +7 -0
  10. package/build/cjs/common/layout.js.map +1 -0
  11. package/build/cjs/extensions/base/BaseSchema/BaseSchemaSpecs/index.d.ts +1 -1
  12. package/build/cjs/extensions/base/BaseSchema/BaseSchemaSpecs/index.js +2 -2
  13. package/build/cjs/extensions/base/BaseSchema/BaseSchemaSpecs/index.js.map +1 -1
  14. package/build/cjs/extensions/markdown/Table/commands.d.ts +2 -0
  15. package/build/cjs/extensions/markdown/Table/commands.js +73 -0
  16. package/build/cjs/extensions/markdown/Table/commands.js.map +1 -0
  17. package/build/cjs/extensions/markdown/Table/helpers.d.ts +7 -2
  18. package/build/cjs/extensions/markdown/Table/helpers.js +22 -9
  19. package/build/cjs/extensions/markdown/Table/helpers.js.map +1 -1
  20. package/build/cjs/extensions/markdown/Table/index.js +3 -0
  21. package/build/cjs/extensions/markdown/Table/index.js.map +1 -1
  22. package/build/cjs/extensions/yfm/ImgSize/ImagePaste/index.js +35 -0
  23. package/build/cjs/extensions/yfm/ImgSize/ImagePaste/index.js.map +1 -1
  24. package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/const.d.ts +1 -0
  25. package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/const.js +1 -0
  26. package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/const.js.map +1 -1
  27. package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/index.js +3 -0
  28. package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/index.js.map +1 -1
  29. package/build/cjs/extensions/yfm/ImgSize/utils.d.ts +6 -0
  30. package/build/cjs/extensions/yfm/ImgSize/utils.js +25 -0
  31. package/build/cjs/extensions/yfm/ImgSize/utils.js.map +1 -1
  32. package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/const.d.ts +5 -0
  33. package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/const.js +6 -1
  34. package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/const.js.map +1 -1
  35. package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/index.d.ts +1 -1
  36. package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/index.js +2 -1
  37. package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/index.js.map +1 -1
  38. package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/schema.d.ts +1 -1
  39. package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/schema.js +6 -6
  40. package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/schema.js.map +1 -1
  41. package/build/cjs/extensions/yfm/YfmCut/actions/toYfmCut.d.ts +1 -1
  42. package/build/cjs/extensions/yfm/YfmCut/actions/toYfmCut.js +6 -6
  43. package/build/cjs/extensions/yfm/YfmCut/actions/toYfmCut.js.map +1 -1
  44. package/build/cjs/extensions/yfm/YfmCut/const.d.ts +9 -1
  45. package/build/cjs/extensions/yfm/YfmCut/const.js +13 -6
  46. package/build/cjs/extensions/yfm/YfmCut/const.js.map +1 -1
  47. package/build/cjs/extensions/yfm/YfmCut/index.css +0 -3
  48. package/build/cjs/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.css +6 -5
  49. package/build/cjs/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.d.ts +5 -2
  50. package/build/cjs/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.js +26 -9
  51. package/build/cjs/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.js.map +1 -1
  52. package/build/cjs/extensions/yfm/YfmCut/plugins/active.d.ts +1 -1
  53. package/build/cjs/extensions/yfm/YfmCut/plugins/active.js +6 -7
  54. package/build/cjs/extensions/yfm/YfmCut/plugins/active.js.map +1 -1
  55. package/build/cjs/extensions/yfm/YfmCut/plugins/auto-open.d.ts +1 -1
  56. package/build/cjs/extensions/yfm/YfmCut/plugins/auto-open.js +8 -9
  57. package/build/cjs/extensions/yfm/YfmCut/plugins/auto-open.js.map +1 -1
  58. package/build/cjs/react-utils/index.d.ts +1 -0
  59. package/build/cjs/react-utils/index.js +1 -0
  60. package/build/cjs/react-utils/index.js.map +1 -1
  61. package/build/cjs/react-utils/useSticky.js +13 -2
  62. package/build/cjs/react-utils/useSticky.js.map +1 -1
  63. package/build/cjs/react-utils/useTargetZIndex.d.ts +1 -0
  64. package/build/cjs/react-utils/useTargetZIndex.js +50 -0
  65. package/build/cjs/react-utils/useTargetZIndex.js.map +1 -0
  66. package/build/cjs/toolbar/ToolbarListButton.js +4 -1
  67. package/build/cjs/toolbar/ToolbarListButton.js.map +1 -1
  68. package/build/cjs/utils/get-target-z-index.d.ts +1 -0
  69. package/build/cjs/utils/get-target-z-index.js +17 -0
  70. package/build/cjs/utils/get-target-z-index.js.map +1 -0
  71. package/build/cjs/utils/inputrules.d.ts +1 -0
  72. package/build/cjs/utils/inputrules.js +8 -3
  73. package/build/cjs/utils/inputrules.js.map +1 -1
  74. package/build/cjs/utils/rulebuilders.js +2 -0
  75. package/build/cjs/utils/rulebuilders.js.map +1 -1
  76. package/build/cjs/version.js +1 -1
  77. package/build/cjs/version.js.map +1 -1
  78. package/build/esm/bundle/ToolbarView.js +2 -1
  79. package/build/esm/bundle/ToolbarView.js.map +1 -1
  80. package/build/esm/bundle/settings/index.d.ts +2 -1
  81. package/build/esm/bundle/settings/index.js +6 -2
  82. package/build/esm/bundle/settings/index.js.map +1 -1
  83. package/build/esm/bundle/toolbar/ToolbarButtonWithPopupMenu.js +4 -1
  84. package/build/esm/bundle/toolbar/ToolbarButtonWithPopupMenu.js.map +1 -1
  85. package/build/esm/common/layout.d.ts +3 -0
  86. package/build/esm/common/layout.js +4 -0
  87. package/build/esm/common/layout.js.map +1 -0
  88. package/build/esm/extensions/base/BaseSchema/BaseSchemaSpecs/index.d.ts +1 -1
  89. package/build/esm/extensions/base/BaseSchema/BaseSchemaSpecs/index.js +1 -1
  90. package/build/esm/extensions/base/BaseSchema/BaseSchemaSpecs/index.js.map +1 -1
  91. package/build/esm/extensions/markdown/Table/commands.d.ts +2 -0
  92. package/build/esm/extensions/markdown/Table/commands.js +69 -0
  93. package/build/esm/extensions/markdown/Table/commands.js.map +1 -0
  94. package/build/esm/extensions/markdown/Table/helpers.d.ts +7 -2
  95. package/build/esm/extensions/markdown/Table/helpers.js +9 -3
  96. package/build/esm/extensions/markdown/Table/helpers.js.map +1 -1
  97. package/build/esm/extensions/markdown/Table/index.js +3 -0
  98. package/build/esm/extensions/markdown/Table/index.js.map +1 -1
  99. package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.js +36 -1
  100. package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.js.map +1 -1
  101. package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/const.d.ts +1 -0
  102. package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/const.js +1 -0
  103. package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/const.js.map +1 -1
  104. package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/index.js +3 -0
  105. package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/index.js.map +1 -1
  106. package/build/esm/extensions/yfm/ImgSize/utils.d.ts +6 -0
  107. package/build/esm/extensions/yfm/ImgSize/utils.js +22 -0
  108. package/build/esm/extensions/yfm/ImgSize/utils.js.map +1 -1
  109. package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/const.d.ts +5 -0
  110. package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/const.js +5 -0
  111. package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/const.js.map +1 -1
  112. package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/index.d.ts +1 -1
  113. package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/index.js +1 -1
  114. package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/index.js.map +1 -1
  115. package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/schema.d.ts +1 -1
  116. package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/schema.js +7 -7
  117. package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/schema.js.map +1 -1
  118. package/build/esm/extensions/yfm/YfmCut/actions/toYfmCut.d.ts +1 -1
  119. package/build/esm/extensions/yfm/YfmCut/actions/toYfmCut.js +5 -5
  120. package/build/esm/extensions/yfm/YfmCut/actions/toYfmCut.js.map +1 -1
  121. package/build/esm/extensions/yfm/YfmCut/const.d.ts +9 -1
  122. package/build/esm/extensions/yfm/YfmCut/const.js +8 -1
  123. package/build/esm/extensions/yfm/YfmCut/const.js.map +1 -1
  124. package/build/esm/extensions/yfm/YfmCut/index.css +0 -3
  125. package/build/esm/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.css +6 -5
  126. package/build/esm/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.d.ts +5 -2
  127. package/build/esm/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.js +26 -9
  128. package/build/esm/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.js.map +1 -1
  129. package/build/esm/extensions/yfm/YfmCut/plugins/active.d.ts +1 -1
  130. package/build/esm/extensions/yfm/YfmCut/plugins/active.js +4 -5
  131. package/build/esm/extensions/yfm/YfmCut/plugins/active.js.map +1 -1
  132. package/build/esm/extensions/yfm/YfmCut/plugins/auto-open.d.ts +1 -1
  133. package/build/esm/extensions/yfm/YfmCut/plugins/auto-open.js +6 -7
  134. package/build/esm/extensions/yfm/YfmCut/plugins/auto-open.js.map +1 -1
  135. package/build/esm/react-utils/index.d.ts +1 -0
  136. package/build/esm/react-utils/index.js +1 -0
  137. package/build/esm/react-utils/index.js.map +1 -1
  138. package/build/esm/react-utils/useSticky.js +13 -2
  139. package/build/esm/react-utils/useSticky.js.map +1 -1
  140. package/build/esm/react-utils/useTargetZIndex.d.ts +1 -0
  141. package/build/esm/react-utils/useTargetZIndex.js +47 -0
  142. package/build/esm/react-utils/useTargetZIndex.js.map +1 -0
  143. package/build/esm/toolbar/ToolbarListButton.js +4 -1
  144. package/build/esm/toolbar/ToolbarListButton.js.map +1 -1
  145. package/build/esm/utils/get-target-z-index.d.ts +1 -0
  146. package/build/esm/utils/get-target-z-index.js +14 -0
  147. package/build/esm/utils/get-target-z-index.js.map +1 -0
  148. package/build/esm/utils/inputrules.d.ts +1 -0
  149. package/build/esm/utils/inputrules.js +5 -1
  150. package/build/esm/utils/inputrules.js.map +1 -1
  151. package/build/esm/utils/rulebuilders.js +3 -1
  152. package/build/esm/utils/rulebuilders.js.map +1 -1
  153. package/build/esm/version.js +1 -1
  154. package/build/esm/version.js.map +1 -1
  155. package/build/styles.css +6 -8
  156. package/package.json +2 -2
@@ -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 {InputState} from 'src/utils/input-state';\n\nimport type {ParseInsertedUrlAsImage} from '../../../../bundle';\nimport {type ExtensionAuto, getLoggerFromState} 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 const inputState = new InputState();\n\n builder.addPlugin(\n () =>\n new Plugin({\n props: {\n handleDOMEvents: {\n keydown(_view, e) {\n inputState.keydown(e);\n },\n keyup(_view, e) {\n inputState.keyup(e);\n },\n paste(view, e) {\n const logger = getLoggerFromState(view.state).nested({\n plugin: 'image-paste',\n domEvent: 'paste',\n });\n\n const files = getPastedImages(e.clipboardData);\n if (imageUploadHandler && files) {\n e.preventDefault();\n logger.event({event: 'paste-images'});\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 (!inputState.shiftKey && 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 logger.event({event: 'paste-url-as-image'});\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 const logger = getLoggerFromState(view.state);\n logger.event({\n event: 'drop-image',\n plugin: 'image-paste',\n domEvent: 'drop',\n runProcess: posToInsert !== null,\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
+ {"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 {InputState} from 'src/utils/input-state';\n\nimport type {ParseInsertedUrlAsImage} from '../../../../bundle';\nimport {type ExtensionAuto, getLoggerFromState} 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 {\n type CreateImageNodeOptions,\n checkSvg,\n findImageNode,\n getImageSize,\n getImageSizeNew,\n isImageNode,\n loadImageFromUrl,\n} 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 const inputState = new InputState();\n\n builder.addPlugin(\n () =>\n new Plugin({\n props: {\n handleDOMEvents: {\n keydown(_view, e) {\n inputState.keydown(e);\n },\n keyup(_view, e) {\n inputState.keyup(e);\n },\n paste(view, e) {\n const logger = getLoggerFromState(view.state).nested({\n plugin: 'image-paste',\n domEvent: 'paste',\n });\n\n const files = getPastedImages(e.clipboardData);\n if (imageUploadHandler && files) {\n e.preventDefault();\n logger.event({event: 'paste-images'});\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 (!inputState.shiftKey && 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 isSvg = checkSvg(imageUrl);\n\n const trackingId = `img-${Math.random().toString(36).slice(2)}`;\n\n const imageNode = imageType(view.state.schema).create({\n src: imageUrl,\n alt: title,\n id: trackingId,\n });\n\n const tr = view.state.tr.replaceSelectionWith(imageNode);\n view.dispatch(tr.scrollIntoView());\n logger.event({event: 'paste-url-as-image'});\n\n loadImageFromUrl(imageUrl)\n .then((img) =>\n opts?.enableNewImageSizeCalculation || isSvg\n ? getImageSizeNew(img)\n : getImageSize(img),\n )\n .then(\n (sizes: {\n [ImgSizeAttr.Height]?: string;\n [ImgSizeAttr.Width]?: string;\n }) => {\n const currentState = view.state;\n\n const imageResult = findImageNode(\n currentState.doc,\n trackingId,\n );\n\n if (imageResult === null) {\n logger.error({\n event: 'img-node-not-found',\n trackingId,\n });\n return;\n }\n\n const {pos: targetPos} = imageResult;\n\n const updateTr = currentState.tr\n .setNodeAttribute(\n targetPos,\n ImgSizeAttr.Height,\n sizes.height,\n )\n .setNodeAttribute(\n targetPos,\n ImgSizeAttr.Width,\n sizes.width,\n )\n .setNodeAttribute(targetPos, 'id', null);\n\n view.dispatch(updateTr);\n\n logger.event({\n event: 'img-dimensions-updated',\n position: targetPos,\n sizes,\n });\n },\n )\n .catch((error) => {\n logger.error({\n event: 'img-dimensions-load-failed',\n error: error.message,\n });\n });\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 const logger = getLoggerFromState(view.state);\n logger.event({\n event: 'drop-image',\n plugin: 'image-paste',\n domEvent: 'drop',\n runProcess: posToInsert !== null,\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"]}
@@ -6,4 +6,5 @@ export declare const ImgSizeAttr: {
6
6
  readonly Width: ImsizeAttr.Width;
7
7
  readonly Height: ImsizeAttr.Height;
8
8
  readonly Loading: "loading";
9
+ readonly Id: "id";
9
10
  };
@@ -9,5 +9,6 @@ exports.ImgSizeAttr = {
9
9
  Width: const_js_1.ImsizeAttr.Width,
10
10
  Height: const_js_1.ImsizeAttr.Height,
11
11
  Loading: 'loading',
12
+ Id: 'id',
12
13
  };
13
14
  //# sourceMappingURL=const.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"const.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/ImgSize/ImgSizeSpecs/const.ts"],"names":[],"mappings":";;;AAAA,8EAA2E;AAE9D,QAAA,WAAW,GAAG;IACvB,GAAG,EAAE,qBAAU,CAAC,GAAG;IACnB,GAAG,EAAE,qBAAU,CAAC,GAAG;IACnB,KAAK,EAAE,qBAAU,CAAC,KAAK;IACvB,KAAK,EAAE,qBAAU,CAAC,KAAK;IACvB,MAAM,EAAE,qBAAU,CAAC,MAAM;IACzB,OAAO,EAAE,SAAS;CACZ,CAAC","sourcesContent":["import {ImsizeAttr} from '@diplodoc/transform/lib/plugins/imsize/const.js';\n\nexport const ImgSizeAttr = {\n Alt: ImsizeAttr.Alt,\n Src: ImsizeAttr.Src,\n Title: ImsizeAttr.Title,\n Width: ImsizeAttr.Width,\n Height: ImsizeAttr.Height,\n Loading: 'loading',\n} as const;\n"]}
1
+ {"version":3,"file":"const.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/ImgSize/ImgSizeSpecs/const.ts"],"names":[],"mappings":";;;AAAA,8EAA2E;AAE9D,QAAA,WAAW,GAAG;IACvB,GAAG,EAAE,qBAAU,CAAC,GAAG;IACnB,GAAG,EAAE,qBAAU,CAAC,GAAG;IACnB,KAAK,EAAE,qBAAU,CAAC,KAAK;IACvB,KAAK,EAAE,qBAAU,CAAC,KAAK;IACvB,MAAM,EAAE,qBAAU,CAAC,MAAM;IACzB,OAAO,EAAE,SAAS;IAClB,EAAE,EAAE,IAAI;CACF,CAAC","sourcesContent":["import {ImsizeAttr} from '@diplodoc/transform/lib/plugins/imsize/const.js';\n\nexport const ImgSizeAttr = {\n Alt: ImsizeAttr.Alt,\n Src: ImsizeAttr.Src,\n Title: ImsizeAttr.Title,\n Width: ImsizeAttr.Width,\n Height: ImsizeAttr.Height,\n Loading: 'loading',\n Id: 'id',\n} as const;\n"]}
@@ -21,6 +21,7 @@ const ImgSizeSpecs = (builder, opts) => {
21
21
  [const_2.ImgSizeAttr.Height]: { default: null },
22
22
  [const_2.ImgSizeAttr.Width]: { default: null },
23
23
  [const_2.ImgSizeAttr.Loading]: { default: null },
24
+ [const_2.ImgSizeAttr.Id]: { default: null },
24
25
  },
25
26
  placeholder: placeholderContent ? { content: placeholderContent } : opts.placeholder,
26
27
  group: 'inline',
@@ -38,6 +39,7 @@ const ImgSizeSpecs = (builder, opts) => {
38
39
  [const_2.ImgSizeAttr.Loading]: dom.getAttribute(const_2.ImgSizeAttr.Loading),
39
40
  [const_2.ImgSizeAttr.Height]: (0, is_number_1.default)(height) ? height : null,
40
41
  [const_2.ImgSizeAttr.Width]: (0, is_number_1.default)(width) ? height : null,
42
+ [const_2.ImgSizeAttr.Id]: dom.getAttribute(const_2.ImgSizeAttr.Id),
41
43
  };
42
44
  },
43
45
  },
@@ -57,6 +59,7 @@ const ImgSizeSpecs = (builder, opts) => {
57
59
  [const_2.ImgSizeAttr.Width]: tok.attrGet(const_2.ImgSizeAttr.Width),
58
60
  [const_2.ImgSizeAttr.Loading]: tok.attrGet(const_2.ImgSizeAttr.Loading),
59
61
  [const_2.ImgSizeAttr.Alt]: tok.children?.[0]?.content || null,
62
+ [const_2.ImgSizeAttr.Id]: tok.attrGet(const_2.ImgSizeAttr.Id),
60
63
  }),
61
64
  },
62
65
  },
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/ImgSize/ImgSizeSpecs/index.ts"],"names":[],"mappings":";;;;AAAA,2DAAmD;AACnD,uGAAqE;AACrE,kEAAiC;AAIjC,4DAA4D;AAE5D,sCAAoC;AAW5B,4FAXA,mBAAW,OAWA;AASZ,MAAM,YAAY,GAAuC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IAC9E,MAAM,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IAEvE,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,kBAAM,EAAE,EAAC,GAAG,EAAH,YAAG,EAAE,mBAAmB,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,OAAO,CAAC,qBAAa,EAAE,GAAG,EAAE,CAAC,CAAC;QAClC,IAAI,EAAE;YACF,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE;gBACH,CAAC,mBAAW,CAAC,GAAG,CAAC,EAAE,EAAE;gBACrB,CAAC,mBAAW,CAAC,GAAG,CAAC,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC;gBAClC,CAAC,mBAAW,CAAC,KAAK,CAAC,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC;gBACpC,CAAC,mBAAW,CAAC,MAAM,CAAC,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC;gBACrC,CAAC,mBAAW,CAAC,KAAK,CAAC,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC;gBACpC,CAAC,mBAAW,CAAC,OAAO,CAAC,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC;aACzC;YACD,WAAW,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,kBAAkB,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW;YAClF,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE;gBACN;oBACI,GAAG,EAAE,UAAU;oBACf,QAAQ,CAAC,GAAG;wBACR,MAAM,MAAM,GAAI,GAAe,CAAC,YAAY,CAAC,mBAAW,CAAC,MAAM,CAAC,CAAC;wBACjE,MAAM,KAAK,GAAI,GAAe,CAAC,YAAY,CAAC,mBAAW,CAAC,KAAK,CAAC,CAAC;wBAE/D,OAAO;4BACH,CAAC,mBAAW,CAAC,GAAG,CAAC,EAAG,GAAe,CAAC,YAAY,CAAC,mBAAW,CAAC,GAAG,CAAC;4BACjE,CAAC,mBAAW,CAAC,GAAG,CAAC,EAAG,GAAe,CAAC,YAAY,CAAC,mBAAW,CAAC,GAAG,CAAC;4BACjE,CAAC,mBAAW,CAAC,KAAK,CAAC,EAAG,GAAe,CAAC,YAAY,CAAC,mBAAW,CAAC,KAAK,CAAC;4BACrE,CAAC,mBAAW,CAAC,OAAO,CAAC,EAAG,GAAe,CAAC,YAAY,CAChD,mBAAW,CAAC,OAAO,CACtB;4BACD,CAAC,mBAAW,CAAC,MAAM,CAAC,EAAE,IAAA,mBAAQ,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;4BACtD,CAAC,mBAAW,CAAC,KAAK,CAAC,EAAE,IAAA,mBAAQ,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;yBACvD,CAAC;oBACN,CAAC;iBACJ;aACJ;YACD,KAAK,CAAC,IAAI;gBACN,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;SACJ;QACD,MAAM,EAAE;YACJ,SAAS,EAAE;gBACP,IAAI,EAAE,qBAAa;gBACnB,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,CAAC,GAAG,EAAyB,EAAE,CAAC,CAAC;oBACvC,CAAC,mBAAW,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,mBAAW,CAAC,GAAG,CAAE;oBAChD,CAAC,mBAAW,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,mBAAW,CAAC,KAAK,CAAC;oBACnD,CAAC,mBAAW,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,mBAAW,CAAC,MAAM,CAAC;oBACrD,CAAC,mBAAW,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,mBAAW,CAAC,KAAK,CAAC;oBACnD,CAAC,mBAAW,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,mBAAW,CAAC,OAAO,CAAC;oBACvD,CAAC,mBAAW,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI;iBACxD,CAAC;aACL;SACJ;QACD,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAClB,MAAM,KAAK,GAAG,IAAI,CAAC,KAA8B,CAAC;YAClD,IAAI,MAAM,GAAG,IAAI,CAAC;YAElB,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;YAED,MAAM,IAAI,IAAI,CAAC;YAEf,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;YAED,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7C,CAAC;YAED,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,CAAC;YAEd,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;KACJ,CAAC,CAAC,CAAC;AACR,CAAC,CAAC;AAhFW,QAAA,YAAY,gBAgFvB;AAEF,SAAS,OAAO,CAAC,EAAC,KAAK,EAAE,MAAM,EAAwB;IACnD,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QAClB,OAAO,KAAK,KAAK,IAAI,EAAE,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;IAC9C,CAAC;IAED,OAAO,EAAE,CAAC;AACd,CAAC","sourcesContent":["import {log} from '@diplodoc/transform/lib/log.js';\nimport imsize from '@diplodoc/transform/lib/plugins/imsize/index.js';\nimport isNumber from 'is-number';\nimport type {NodeSpec} from 'prosemirror-model';\n\nimport type {ExtensionAuto} from '../../../../core';\nimport {imageNodeName} from '../../../markdown/Image/const';\n\nimport {ImgSizeAttr} from './const';\n\ntype ImsizeTypedAttributes = {\n [ImgSizeAttr.Src]: string;\n [ImgSizeAttr.Title]: string | null;\n [ImgSizeAttr.Alt]: string | null;\n [ImgSizeAttr.Width]: string | null;\n [ImgSizeAttr.Height]: string | null;\n [ImgSizeAttr.Loading]: string | null;\n};\n\nexport {ImgSizeAttr};\n\nexport type ImgSizeSpecsOptions = {\n /**\n * @deprecated: use placeholder option in BehaviorPreset instead.\n */\n placeholder?: NodeSpec['placeholder'];\n};\n\nexport const ImgSizeSpecs: ExtensionAuto<ImgSizeSpecsOptions> = (builder, opts) => {\n const placeholderContent = builder.context.get('placeholder')?.imgSize;\n\n builder.configureMd((md) => md.use(imsize, {log, enableInlineStyling: true}));\n builder.addNode(imageNodeName, () => ({\n spec: {\n inline: true,\n attrs: {\n [ImgSizeAttr.Src]: {},\n [ImgSizeAttr.Alt]: {default: null},\n [ImgSizeAttr.Title]: {default: null},\n [ImgSizeAttr.Height]: {default: null},\n [ImgSizeAttr.Width]: {default: null},\n [ImgSizeAttr.Loading]: {default: null},\n },\n placeholder: placeholderContent ? {content: placeholderContent} : opts.placeholder,\n group: 'inline',\n draggable: true,\n parseDOM: [\n {\n tag: 'img[src]',\n getAttrs(dom) {\n const height = (dom as Element).getAttribute(ImgSizeAttr.Height);\n const width = (dom as Element).getAttribute(ImgSizeAttr.Width);\n\n return {\n [ImgSizeAttr.Src]: (dom as Element).getAttribute(ImgSizeAttr.Src),\n [ImgSizeAttr.Alt]: (dom as Element).getAttribute(ImgSizeAttr.Alt),\n [ImgSizeAttr.Title]: (dom as Element).getAttribute(ImgSizeAttr.Title),\n [ImgSizeAttr.Loading]: (dom as Element).getAttribute(\n ImgSizeAttr.Loading,\n ),\n [ImgSizeAttr.Height]: isNumber(height) ? height : null,\n [ImgSizeAttr.Width]: isNumber(width) ? height : null,\n };\n },\n },\n ],\n toDOM(node) {\n return ['img', node.attrs];\n },\n },\n fromMd: {\n tokenSpec: {\n name: imageNodeName,\n type: 'node',\n getAttrs: (tok): ImsizeTypedAttributes => ({\n [ImgSizeAttr.Src]: tok.attrGet(ImgSizeAttr.Src)!,\n [ImgSizeAttr.Title]: tok.attrGet(ImgSizeAttr.Title),\n [ImgSizeAttr.Height]: tok.attrGet(ImgSizeAttr.Height),\n [ImgSizeAttr.Width]: tok.attrGet(ImgSizeAttr.Width),\n [ImgSizeAttr.Loading]: tok.attrGet(ImgSizeAttr.Loading),\n [ImgSizeAttr.Alt]: tok.children?.[0]?.content || null,\n }),\n },\n },\n toMd: (state, node) => {\n const attrs = node.attrs as ImsizeTypedAttributes;\n let result = '![';\n\n if (attrs.alt) {\n result += state.esc(attrs.alt);\n }\n\n result += '](';\n\n if (attrs.src) {\n result += state.esc(attrs.src);\n }\n\n if (attrs.title) {\n result += ` ${state.quote(attrs.title)}`;\n }\n\n result += getSize(attrs);\n result += ')';\n\n state.write(result);\n },\n }));\n};\n\nfunction getSize({width, height}: ImsizeTypedAttributes): string {\n if (width || height) {\n return ` =${width || ''}x${height || ''}`;\n }\n\n return '';\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/ImgSize/ImgSizeSpecs/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {log} from '@diplodoc/transform/lib/log.js';\nimport imsize from '@diplodoc/transform/lib/plugins/imsize/index.js';\nimport isNumber from 'is-number';\nimport type {NodeSpec} from 'prosemirror-model';\n\nimport type {ExtensionAuto} from '../../../../core';\nimport {imageNodeName} from '../../../markdown/Image/const';\n\nimport {ImgSizeAttr} from './const';\n\ntype ImsizeTypedAttributes = {\n [ImgSizeAttr.Src]: string;\n [ImgSizeAttr.Title]: string | null;\n [ImgSizeAttr.Alt]: string | null;\n [ImgSizeAttr.Width]: string | null;\n [ImgSizeAttr.Height]: string | null;\n [ImgSizeAttr.Loading]: string | null;\n [ImgSizeAttr.Id]: string | null;\n};\n\nexport {ImgSizeAttr};\n\nexport type ImgSizeSpecsOptions = {\n /**\n * @deprecated: use placeholder option in BehaviorPreset instead.\n */\n placeholder?: NodeSpec['placeholder'];\n};\n\nexport const ImgSizeSpecs: ExtensionAuto<ImgSizeSpecsOptions> = (builder, opts) => {\n const placeholderContent = builder.context.get('placeholder')?.imgSize;\n\n builder.configureMd((md) => md.use(imsize, {log, enableInlineStyling: true}));\n builder.addNode(imageNodeName, () => ({\n spec: {\n inline: true,\n attrs: {\n [ImgSizeAttr.Src]: {},\n [ImgSizeAttr.Alt]: {default: null},\n [ImgSizeAttr.Title]: {default: null},\n [ImgSizeAttr.Height]: {default: null},\n [ImgSizeAttr.Width]: {default: null},\n [ImgSizeAttr.Loading]: {default: null},\n [ImgSizeAttr.Id]: {default: null},\n },\n placeholder: placeholderContent ? {content: placeholderContent} : opts.placeholder,\n group: 'inline',\n draggable: true,\n parseDOM: [\n {\n tag: 'img[src]',\n getAttrs(dom) {\n const height = (dom as Element).getAttribute(ImgSizeAttr.Height);\n const width = (dom as Element).getAttribute(ImgSizeAttr.Width);\n\n return {\n [ImgSizeAttr.Src]: (dom as Element).getAttribute(ImgSizeAttr.Src),\n [ImgSizeAttr.Alt]: (dom as Element).getAttribute(ImgSizeAttr.Alt),\n [ImgSizeAttr.Title]: (dom as Element).getAttribute(ImgSizeAttr.Title),\n [ImgSizeAttr.Loading]: (dom as Element).getAttribute(\n ImgSizeAttr.Loading,\n ),\n [ImgSizeAttr.Height]: isNumber(height) ? height : null,\n [ImgSizeAttr.Width]: isNumber(width) ? height : null,\n [ImgSizeAttr.Id]: (dom as Element).getAttribute(ImgSizeAttr.Id),\n };\n },\n },\n ],\n toDOM(node) {\n return ['img', node.attrs];\n },\n },\n fromMd: {\n tokenSpec: {\n name: imageNodeName,\n type: 'node',\n getAttrs: (tok): ImsizeTypedAttributes => ({\n [ImgSizeAttr.Src]: tok.attrGet(ImgSizeAttr.Src)!,\n [ImgSizeAttr.Title]: tok.attrGet(ImgSizeAttr.Title),\n [ImgSizeAttr.Height]: tok.attrGet(ImgSizeAttr.Height),\n [ImgSizeAttr.Width]: tok.attrGet(ImgSizeAttr.Width),\n [ImgSizeAttr.Loading]: tok.attrGet(ImgSizeAttr.Loading),\n [ImgSizeAttr.Alt]: tok.children?.[0]?.content || null,\n [ImgSizeAttr.Id]: tok.attrGet(ImgSizeAttr.Id),\n }),\n },\n },\n toMd: (state, node) => {\n const attrs = node.attrs as ImsizeTypedAttributes;\n let result = '![';\n\n if (attrs.alt) {\n result += state.esc(attrs.alt);\n }\n\n result += '](';\n\n if (attrs.src) {\n result += state.esc(attrs.src);\n }\n\n if (attrs.title) {\n result += ` ${state.quote(attrs.title)}`;\n }\n\n result += getSize(attrs);\n result += ')';\n\n state.write(result);\n },\n }));\n};\n\nfunction getSize({width, height}: ImsizeTypedAttributes): string {\n if (width || height) {\n return ` =${width || ''}x${height || ''}`;\n }\n\n return '';\n}\n"]}
@@ -9,6 +9,7 @@ export type CreateImageNodeOptions = {
9
9
  };
10
10
  export declare const createImageNode: (imgType: NodeType, opts: CreateImageNodeOptions, logger: Logger2.ILogger) => ({ result, file }: UploadSuccessItem) => Promise<Node>;
11
11
  export declare function loadImage(imgFile: File): Promise<HTMLImageElement>;
12
+ export declare function loadImageFromUrl(url: string): Promise<HTMLImageElement>;
12
13
  export declare function getImageSize(img: HTMLImageElement): {
13
14
  [ImgSizeAttr.Height]?: string;
14
15
  };
@@ -16,3 +17,8 @@ export declare function getImageSizeNew({ width, height }: HTMLImageElement): {
16
17
  [ImgSizeAttr.Width]?: string;
17
18
  [ImgSizeAttr.Height]?: string;
18
19
  };
20
+ export declare function checkSvg(imageUrl?: string): boolean | "" | undefined;
21
+ export declare function findImageNode(doc: Node, id: string): {
22
+ node: Node;
23
+ pos: number;
24
+ } | null;
@@ -3,8 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createImageNode = void 0;
4
4
  exports.isImageNode = isImageNode;
5
5
  exports.loadImage = loadImage;
6
+ exports.loadImageFromUrl = loadImageFromUrl;
6
7
  exports.getImageSize = getImageSize;
7
8
  exports.getImageSizeNew = getImageSizeNew;
9
+ exports.checkSvg = checkSvg;
10
+ exports.findImageNode = findImageNode;
8
11
  const logger_1 = require("../../../logger.js");
9
12
  const utils_1 = require("../../../utils/index.js");
10
13
  const markdown_1 = require("../../markdown/index.js");
@@ -42,6 +45,14 @@ async function loadImage(imgFile) {
42
45
  img.onerror = (_e, _s, _l, _c, error) => reject(error);
43
46
  });
44
47
  }
48
+ async function loadImageFromUrl(url) {
49
+ return new Promise((resolve, reject) => {
50
+ const img = new Image();
51
+ img.onload = () => resolve(img);
52
+ img.onerror = (_e, _s, _l, _c, error) => reject(error);
53
+ img.src = url;
54
+ });
55
+ }
45
56
  function getImageSize(img) {
46
57
  return { height: String(Math.min(const_1.IMG_MAX_HEIGHT, img.height)) };
47
58
  }
@@ -53,4 +64,18 @@ function getImageSizeNew({ width, height }) {
53
64
  });
54
65
  return { width: String(size.width), height: String(size.height) };
55
66
  }
67
+ function checkSvg(imageUrl) {
68
+ return imageUrl && (/\.svg($|\?|#)/i.test(imageUrl) || imageUrl.startsWith('data:image/svg'));
69
+ }
70
+ function findImageNode(doc, id) {
71
+ let result = null;
72
+ doc.descendants((node, pos) => {
73
+ if (isImageNode(node) && node.attrs.id === id) {
74
+ result = { node, pos };
75
+ return false;
76
+ }
77
+ return true;
78
+ });
79
+ return result;
80
+ }
56
81
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"../../../../../src","sources":["extensions/yfm/ImgSize/utils.ts"],"names":[],"mappings":";;;AASA,kCAEC;AA4BD,8BAUC;AAED,oCAEC;AAED,0CAUC;AA/DD,+CAA2D;AAC3D,mDAA2E;AAC3E,sDAA6C;AAC7C,0CAAwC;AAExC,sCAAuC;AAEvC,SAAgB,WAAW,CAAC,IAAU;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,wBAAa,CAAC;AAC5C,CAAC;AAOM,MAAM,eAAe,GACxB,CAAC,OAAiB,EAAE,IAA4B,EAAE,MAAuB,EAAE,EAAE,CAC7E,KAAK,EAAE,EAAC,MAAM,EAAE,IAAI,EAAoB,EAAE,EAAE;IACxC,MAAM,KAAK,GAA2B;QAClC,CAAC,mBAAW,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG;QAC7B,CAAC,mBAAW,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI;KAC9C,CAAC;IACF,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CACpC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,CACtE,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,qBAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,EAAC,KAAK,EAAE,GAAG,EAAC,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC,CAAC;AAnBO,QAAA,eAAe,mBAmBtB;AAEC,KAAK,UAAU,SAAS,CAAC,OAAa;IACzC,OAAO,IAAI,OAAO,CAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACvC,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;YACd,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC,CAAC;QACF,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAgB,YAAY,CAAC,GAAqB;IAC9C,OAAO,EAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC;AAClE,CAAC;AAED,SAAgB,eAAe,CAAC,EAAC,KAAK,EAAE,MAAM,EAAmB;IAI7D,MAAM,IAAI,GAAG,IAAA,2BAAmB,EAAC;QAC7B,KAAK;QACL,MAAM;QACN,YAAY,EAAE,sBAAc;KAC/B,CAAC,CAAC;IACH,OAAO,EAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAC,CAAC;AACpE,CAAC","sourcesContent":["import type {Node, NodeType} from 'prosemirror-model';\n\nimport {type Logger2, globalLogger} from '../../../logger';\nimport {type UploadSuccessItem, getProportionalSize} from '../../../utils';\nimport {imageNodeName} from '../../markdown';\nimport {ImgSizeAttr} from '../../specs';\n\nimport {IMG_MAX_HEIGHT} from './const';\n\nexport function isImageNode(node: Node): boolean {\n return node.type.name === imageNodeName;\n}\n\nexport type CreateImageNodeOptions = {\n needDimensions: boolean;\n enableNewImageSizeCalculation?: boolean;\n};\n\nexport const createImageNode =\n (imgType: NodeType, opts: CreateImageNodeOptions, logger: Logger2.ILogger) =>\n async ({result, file}: UploadSuccessItem) => {\n const attrs: Record<string, string> = {\n [ImgSizeAttr.Src]: result.url,\n [ImgSizeAttr.Alt]: result.name ?? file.name,\n };\n if (opts.needDimensions) {\n try {\n const sizes = await loadImage(file).then(\n opts.enableNewImageSizeCalculation ? getImageSizeNew : getImageSize,\n );\n Object.assign(attrs, sizes);\n } catch (err) {\n globalLogger.error(err);\n logger.error({error: err});\n }\n }\n return imgType.create(attrs);\n };\n\nexport async function loadImage(imgFile: File) {\n return new Promise<HTMLImageElement>((resolve, reject) => {\n const img = document.createElement('img');\n img.src = URL.createObjectURL(imgFile);\n img.onload = () => {\n URL.revokeObjectURL(img.src);\n resolve(img);\n };\n img.onerror = (_e, _s, _l, _c, error) => reject(error);\n });\n}\n\nexport function getImageSize(img: HTMLImageElement): {[ImgSizeAttr.Height]?: string} {\n return {height: String(Math.min(IMG_MAX_HEIGHT, img.height))};\n}\n\nexport function getImageSizeNew({width, height}: HTMLImageElement): {\n [ImgSizeAttr.Width]?: string;\n [ImgSizeAttr.Height]?: string;\n} {\n const size = getProportionalSize({\n width,\n height,\n imgMaxHeight: IMG_MAX_HEIGHT,\n });\n return {width: String(size.width), height: String(size.height)};\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"../../../../../src","sources":["extensions/yfm/ImgSize/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Node, NodeType} from 'prosemirror-model';\n\nimport {type Logger2, globalLogger} from '../../../logger';\nimport {type UploadSuccessItem, getProportionalSize} from '../../../utils';\nimport {imageNodeName} from '../../markdown';\nimport {ImgSizeAttr} from '../../specs';\n\nimport {IMG_MAX_HEIGHT} from './const';\n\nexport function isImageNode(node: Node): boolean {\n return node.type.name === imageNodeName;\n}\n\nexport type CreateImageNodeOptions = {\n needDimensions: boolean;\n enableNewImageSizeCalculation?: boolean;\n};\n\nexport const createImageNode =\n (imgType: NodeType, opts: CreateImageNodeOptions, logger: Logger2.ILogger) =>\n async ({result, file}: UploadSuccessItem) => {\n const attrs: Record<string, string> = {\n [ImgSizeAttr.Src]: result.url,\n [ImgSizeAttr.Alt]: result.name ?? file.name,\n };\n\n if (opts.needDimensions) {\n try {\n const sizes = await loadImage(file).then(\n opts.enableNewImageSizeCalculation ? getImageSizeNew : getImageSize,\n );\n Object.assign(attrs, sizes);\n } catch (err) {\n globalLogger.error(err);\n logger.error({error: err});\n }\n }\n return imgType.create(attrs);\n };\n\nexport async function loadImage(imgFile: File) {\n return new Promise<HTMLImageElement>((resolve, reject) => {\n const img = document.createElement('img');\n img.src = URL.createObjectURL(imgFile);\n img.onload = () => {\n URL.revokeObjectURL(img.src);\n resolve(img);\n };\n img.onerror = (_e, _s, _l, _c, error) => reject(error);\n });\n}\n\nexport async function loadImageFromUrl(url: string): Promise<HTMLImageElement> {\n return new Promise<HTMLImageElement>((resolve, reject) => {\n const img = new Image();\n img.onload = () => resolve(img);\n img.onerror = (_e, _s, _l, _c, error) => reject(error);\n img.src = url;\n });\n}\n\nexport function getImageSize(img: HTMLImageElement): {[ImgSizeAttr.Height]?: string} {\n return {height: String(Math.min(IMG_MAX_HEIGHT, img.height))};\n}\n\nexport function getImageSizeNew({width, height}: HTMLImageElement): {\n [ImgSizeAttr.Width]?: string;\n [ImgSizeAttr.Height]?: string;\n} {\n const size = getProportionalSize({\n width,\n height,\n imgMaxHeight: IMG_MAX_HEIGHT,\n });\n return {width: String(size.width), height: String(size.height)};\n}\n\nexport function checkSvg(imageUrl?: string) {\n return imageUrl && (/\\.svg($|\\?|#)/i.test(imageUrl) || imageUrl.startsWith('data:image/svg'));\n}\n\nexport function findImageNode(doc: Node, id: string): {node: Node; pos: number} | null {\n let result: {node: Node; pos: number} | null = null;\n\n doc.descendants((node, pos) => {\n if (isImageNode(node) && node.attrs.id === id) {\n result = {node, pos};\n return false;\n }\n return true;\n });\n\n return result;\n}\n"]}
@@ -10,3 +10,8 @@ export declare enum CutAttr {
10
10
  export declare const cutType: (schema: import("prosemirror-model").Schema) => import("prosemirror-model").NodeType;
11
11
  export declare const cutTitleType: (schema: import("prosemirror-model").Schema) => import("prosemirror-model").NodeType;
12
12
  export declare const cutContentType: (schema: import("prosemirror-model").Schema) => import("prosemirror-model").NodeType;
13
+ export declare const YfmCutClassName: {
14
+ readonly Cut: "yfm-cut";
15
+ readonly Title: "yfm-cut-title";
16
+ readonly Content: "yfm-cut-content";
17
+ };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.cutContentType = exports.cutTitleType = exports.cutType = exports.CutAttr = exports.CutNode = void 0;
3
+ exports.YfmCutClassName = exports.cutContentType = exports.cutTitleType = exports.cutType = exports.CutAttr = exports.CutNode = void 0;
4
4
  const schema_1 = require("../../../../utils/schema.js");
5
5
  var CutNode;
6
6
  (function (CutNode) {
@@ -16,4 +16,9 @@ var CutAttr;
16
16
  exports.cutType = (0, schema_1.nodeTypeFactory)(CutNode.Cut);
17
17
  exports.cutTitleType = (0, schema_1.nodeTypeFactory)(CutNode.CutTitle);
18
18
  exports.cutContentType = (0, schema_1.nodeTypeFactory)(CutNode.CutContent);
19
+ exports.YfmCutClassName = {
20
+ Cut: 'yfm-cut',
21
+ Title: 'yfm-cut-title',
22
+ Content: 'yfm-cut-content',
23
+ };
19
24
  //# sourceMappingURL=const.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"const.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmCut/YfmCutSpecs/const.ts"],"names":[],"mappings":";;;AAAA,wDAAyD;AAEzD,IAAY,OAIX;AAJD,WAAY,OAAO;IACf,0BAAe,CAAA;IACf,qCAA0B,CAAA;IAC1B,yCAA8B,CAAA;AAClC,CAAC,EAJW,OAAO,uBAAP,OAAO,QAIlB;AAED,IAAY,OAGX;AAHD,WAAY,OAAO;IACf,0BAAe,CAAA;IACf,iCAAsB,CAAA;AAC1B,CAAC,EAHW,OAAO,uBAAP,OAAO,QAGlB;AAEY,QAAA,OAAO,GAAG,IAAA,wBAAe,EAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACvC,QAAA,YAAY,GAAG,IAAA,wBAAe,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACjD,QAAA,cAAc,GAAG,IAAA,wBAAe,EAAC,OAAO,CAAC,UAAU,CAAC,CAAC","sourcesContent":["import {nodeTypeFactory} from '../../../../utils/schema';\n\nexport enum CutNode {\n Cut = 'yfm_cut',\n CutTitle = 'yfm_cut_title',\n CutContent = 'yfm_cut_content',\n}\n\nexport enum CutAttr {\n Class = 'class',\n Markup = 'data-markup',\n}\n\nexport const cutType = nodeTypeFactory(CutNode.Cut);\nexport const cutTitleType = nodeTypeFactory(CutNode.CutTitle);\nexport const cutContentType = nodeTypeFactory(CutNode.CutContent);\n"]}
1
+ {"version":3,"file":"const.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmCut/YfmCutSpecs/const.ts"],"names":[],"mappings":";;;AAAA,wDAAiD;AAEjD,IAAY,OAIX;AAJD,WAAY,OAAO;IACf,0BAAe,CAAA;IACf,qCAA0B,CAAA;IAC1B,yCAA8B,CAAA;AAClC,CAAC,EAJW,OAAO,uBAAP,OAAO,QAIlB;AAED,IAAY,OAGX;AAHD,WAAY,OAAO;IACf,0BAAe,CAAA;IACf,iCAAsB,CAAA;AAC1B,CAAC,EAHW,OAAO,uBAAP,OAAO,QAGlB;AAEY,QAAA,OAAO,GAAG,IAAA,wBAAe,EAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACvC,QAAA,YAAY,GAAG,IAAA,wBAAe,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACjD,QAAA,cAAc,GAAG,IAAA,wBAAe,EAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAErD,QAAA,eAAe,GAAG;IAC3B,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,eAAe;IACtB,OAAO,EAAE,iBAAiB;CACpB,CAAC","sourcesContent":["import {nodeTypeFactory} from 'src/utils/schema';\n\nexport enum CutNode {\n Cut = 'yfm_cut',\n CutTitle = 'yfm_cut_title',\n CutContent = 'yfm_cut_content',\n}\n\nexport enum CutAttr {\n Class = 'class',\n Markup = 'data-markup',\n}\n\nexport const cutType = nodeTypeFactory(CutNode.Cut);\nexport const cutTitleType = nodeTypeFactory(CutNode.CutTitle);\nexport const cutContentType = nodeTypeFactory(CutNode.CutContent);\n\nexport const YfmCutClassName = {\n Cut: 'yfm-cut',\n Title: 'yfm-cut-title',\n Content: 'yfm-cut-content',\n} as const;\n"]}
@@ -1,6 +1,6 @@
1
1
  import type { ExtensionAuto, ExtensionNodeSpec } from "../../../../core/index.js";
2
2
  import { type YfmCutSchemaOptions } from "./schema.js";
3
- export { CutAttr, CutNode, cutType, cutTitleType, cutContentType } from "./const.js";
3
+ export { CutAttr, CutNode, cutType, cutTitleType, cutContentType, YfmCutClassName } from "./const.js";
4
4
  declare global {
5
5
  namespace MarkdownEditor {
6
6
  interface DirectiveSyntaxAdditionalSupportedExtensions {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.YfmCutSpecs = exports.cutContentType = exports.cutTitleType = exports.cutType = exports.CutNode = exports.CutAttr = void 0;
3
+ exports.YfmCutSpecs = exports.YfmCutClassName = exports.cutContentType = exports.cutTitleType = exports.cutType = exports.CutNode = exports.CutAttr = void 0;
4
4
  const cut_extension_1 = require("@diplodoc/cut-extension");
5
5
  const const_1 = require("./const.js");
6
6
  const parser_1 = require("./parser.js");
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "CutNode", { enumerable: true, get: function () {
12
12
  Object.defineProperty(exports, "cutType", { enumerable: true, get: function () { return const_2.cutType; } });
13
13
  Object.defineProperty(exports, "cutTitleType", { enumerable: true, get: function () { return const_2.cutTitleType; } });
14
14
  Object.defineProperty(exports, "cutContentType", { enumerable: true, get: function () { return const_2.cutContentType; } });
15
+ Object.defineProperty(exports, "YfmCutClassName", { enumerable: true, get: function () { return const_2.YfmCutClassName; } });
15
16
  const YfmCutSpecs = (builder, opts) => {
16
17
  const schemaSpecs = (0, schema_1.getSchemaSpecs)(opts, builder.context.get('placeholder'));
17
18
  const directiveSyntax = builder.context.get('directiveSyntax');
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmCut/YfmCutSpecs/index.ts"],"names":[],"mappings":";;;AAAA,2DAA4D;AAI5D,sCAAgC;AAChC,wCAAsC;AACtC,wCAAkE;AAClE,gDAAiD;AAEjD,oCAAgF;AAAxE,gGAAA,OAAO,OAAA;AAAE,gGAAA,OAAO,OAAA;AAAE,gGAAA,OAAO,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,uGAAA,cAAc,OAAA;AAiBxD,MAAM,WAAW,GAAsC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IAC5E,MAAM,WAAW,GAAG,IAAA,uBAAc,EAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7E,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/D,MAAM,gBAAgB,GAAG,IAAA,gCAAmB,EAAC,EAAC,eAAe,EAAC,CAAC,CAAC;IAEhE,OAAO;SACF,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAChB,EAAE,CAAC,GAAG,CACF,IAAA,yBAAM,EAAC;QACH,MAAM,EAAE,KAAK;QACb,eAAe,EAAE,eAAe,EAAE,gBAAgB,CAAC,QAAQ,CAAC;KAC/D,CAAC,CACL,CACJ;SACA,OAAO,CAAC,eAAO,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACzB,IAAI,EAAE,WAAW,CAAC,eAAO,CAAC,GAAG,CAAC;QAC9B,IAAI,EAAE,gBAAgB,CAAC,eAAO,CAAC,GAAG,CAAC;QACnC,MAAM,EAAE;YACJ,SAAS,EAAE,qBAAY,CAAC,eAAO,CAAC,GAAG,CAAC;SACvC;QACD,IAAI,EAAE,IAAI,CAAC,OAAO;KACrB,CAAC,CAAC;SACF,OAAO,CAAC,eAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,IAAI,EAAE,WAAW,CAAC,eAAO,CAAC,QAAQ,CAAC;QACnC,IAAI,EAAE,gBAAgB,CAAC,eAAO,CAAC,QAAQ,CAAC;QACxC,MAAM,EAAE;YACJ,SAAS,EAAE,qBAAY,CAAC,eAAO,CAAC,QAAQ,CAAC;SAC5C;QACD,IAAI,EAAE,IAAI,CAAC,YAAY;KAC1B,CAAC,CAAC;SACF,OAAO,CAAC,eAAO,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;QAChC,IAAI,EAAE,WAAW,CAAC,eAAO,CAAC,UAAU,CAAC;QACrC,IAAI,EAAE,gBAAgB,CAAC,eAAO,CAAC,UAAU,CAAC;QAC1C,MAAM,EAAE;YACJ,SAAS,EAAE,qBAAY,CAAC,eAAO,CAAC,UAAU,CAAC;SAC9C;QACD,IAAI,EAAE,IAAI,CAAC,cAAc;KAC5B,CAAC,CAAC,CAAC;AACZ,CAAC,CAAC;AAtCW,QAAA,WAAW,eAsCtB","sourcesContent":["import {transform as yfmCut} from '@diplodoc/cut-extension';\n\nimport type {ExtensionAuto, ExtensionNodeSpec} from '../../../../core';\n\nimport {CutNode} from './const';\nimport {parserTokens} from './parser';\nimport {type YfmCutSchemaOptions, getSchemaSpecs} from './schema';\nimport {getSerializerTokens} from './serializer';\n\nexport {CutAttr, CutNode, cutType, cutTitleType, cutContentType} from './const';\n\ndeclare global {\n namespace MarkdownEditor {\n interface DirectiveSyntaxAdditionalSupportedExtensions {\n // Mark in global types that YfmCut has support for directive syntax\n yfmCut: true;\n }\n }\n}\n\nexport type YfmCutSpecsOptions = YfmCutSchemaOptions & {\n cutView?: ExtensionNodeSpec['view'];\n cutTitleView?: ExtensionNodeSpec['view'];\n cutContentView?: ExtensionNodeSpec['view'];\n};\n\nexport const YfmCutSpecs: ExtensionAuto<YfmCutSpecsOptions> = (builder, opts) => {\n const schemaSpecs = getSchemaSpecs(opts, builder.context.get('placeholder'));\n const directiveSyntax = builder.context.get('directiveSyntax');\n const serializerTokens = getSerializerTokens({directiveSyntax});\n\n builder\n .configureMd((md) =>\n md.use(\n yfmCut({\n bundle: false,\n directiveSyntax: directiveSyntax?.mdPluginValueFor('yfmCut'),\n }),\n ),\n )\n .addNode(CutNode.Cut, () => ({\n spec: schemaSpecs[CutNode.Cut],\n toMd: serializerTokens[CutNode.Cut],\n fromMd: {\n tokenSpec: parserTokens[CutNode.Cut],\n },\n view: opts.cutView,\n }))\n .addNode(CutNode.CutTitle, () => ({\n spec: schemaSpecs[CutNode.CutTitle],\n toMd: serializerTokens[CutNode.CutTitle],\n fromMd: {\n tokenSpec: parserTokens[CutNode.CutTitle],\n },\n view: opts.cutTitleView,\n }))\n .addNode(CutNode.CutContent, () => ({\n spec: schemaSpecs[CutNode.CutContent],\n toMd: serializerTokens[CutNode.CutContent],\n fromMd: {\n tokenSpec: parserTokens[CutNode.CutContent],\n },\n view: opts.cutContentView,\n }));\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmCut/YfmCutSpecs/index.ts"],"names":[],"mappings":";;;AAAA,2DAA4D;AAI5D,sCAAgC;AAChC,wCAAsC;AACtC,wCAAkE;AAClE,gDAAiD;AAEjD,oCAAiG;AAAzF,gGAAA,OAAO,OAAA;AAAE,gGAAA,OAAO,OAAA;AAAE,gGAAA,OAAO,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,uGAAA,cAAc,OAAA;AAAE,wGAAA,eAAe,OAAA;AAiBzE,MAAM,WAAW,GAAsC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IAC5E,MAAM,WAAW,GAAG,IAAA,uBAAc,EAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7E,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/D,MAAM,gBAAgB,GAAG,IAAA,gCAAmB,EAAC,EAAC,eAAe,EAAC,CAAC,CAAC;IAEhE,OAAO;SACF,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAChB,EAAE,CAAC,GAAG,CACF,IAAA,yBAAM,EAAC;QACH,MAAM,EAAE,KAAK;QACb,eAAe,EAAE,eAAe,EAAE,gBAAgB,CAAC,QAAQ,CAAC;KAC/D,CAAC,CACL,CACJ;SACA,OAAO,CAAC,eAAO,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACzB,IAAI,EAAE,WAAW,CAAC,eAAO,CAAC,GAAG,CAAC;QAC9B,IAAI,EAAE,gBAAgB,CAAC,eAAO,CAAC,GAAG,CAAC;QACnC,MAAM,EAAE;YACJ,SAAS,EAAE,qBAAY,CAAC,eAAO,CAAC,GAAG,CAAC;SACvC;QACD,IAAI,EAAE,IAAI,CAAC,OAAO;KACrB,CAAC,CAAC;SACF,OAAO,CAAC,eAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,IAAI,EAAE,WAAW,CAAC,eAAO,CAAC,QAAQ,CAAC;QACnC,IAAI,EAAE,gBAAgB,CAAC,eAAO,CAAC,QAAQ,CAAC;QACxC,MAAM,EAAE;YACJ,SAAS,EAAE,qBAAY,CAAC,eAAO,CAAC,QAAQ,CAAC;SAC5C;QACD,IAAI,EAAE,IAAI,CAAC,YAAY;KAC1B,CAAC,CAAC;SACF,OAAO,CAAC,eAAO,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;QAChC,IAAI,EAAE,WAAW,CAAC,eAAO,CAAC,UAAU,CAAC;QACrC,IAAI,EAAE,gBAAgB,CAAC,eAAO,CAAC,UAAU,CAAC;QAC1C,MAAM,EAAE;YACJ,SAAS,EAAE,qBAAY,CAAC,eAAO,CAAC,UAAU,CAAC;SAC9C;QACD,IAAI,EAAE,IAAI,CAAC,cAAc;KAC5B,CAAC,CAAC,CAAC;AACZ,CAAC,CAAC;AAtCW,QAAA,WAAW,eAsCtB","sourcesContent":["import {transform as yfmCut} from '@diplodoc/cut-extension';\n\nimport type {ExtensionAuto, ExtensionNodeSpec} from '#core';\n\nimport {CutNode} from './const';\nimport {parserTokens} from './parser';\nimport {type YfmCutSchemaOptions, getSchemaSpecs} from './schema';\nimport {getSerializerTokens} from './serializer';\n\nexport {CutAttr, CutNode, cutType, cutTitleType, cutContentType, YfmCutClassName} from './const';\n\ndeclare global {\n namespace MarkdownEditor {\n interface DirectiveSyntaxAdditionalSupportedExtensions {\n // Mark in global types that YfmCut has support for directive syntax\n yfmCut: true;\n }\n }\n}\n\nexport type YfmCutSpecsOptions = YfmCutSchemaOptions & {\n cutView?: ExtensionNodeSpec['view'];\n cutTitleView?: ExtensionNodeSpec['view'];\n cutContentView?: ExtensionNodeSpec['view'];\n};\n\nexport const YfmCutSpecs: ExtensionAuto<YfmCutSpecsOptions> = (builder, opts) => {\n const schemaSpecs = getSchemaSpecs(opts, builder.context.get('placeholder'));\n const directiveSyntax = builder.context.get('directiveSyntax');\n const serializerTokens = getSerializerTokens({directiveSyntax});\n\n builder\n .configureMd((md) =>\n md.use(\n yfmCut({\n bundle: false,\n directiveSyntax: directiveSyntax?.mdPluginValueFor('yfmCut'),\n }),\n ),\n )\n .addNode(CutNode.Cut, () => ({\n spec: schemaSpecs[CutNode.Cut],\n toMd: serializerTokens[CutNode.Cut],\n fromMd: {\n tokenSpec: parserTokens[CutNode.Cut],\n },\n view: opts.cutView,\n }))\n .addNode(CutNode.CutTitle, () => ({\n spec: schemaSpecs[CutNode.CutTitle],\n toMd: serializerTokens[CutNode.CutTitle],\n fromMd: {\n tokenSpec: parserTokens[CutNode.CutTitle],\n },\n view: opts.cutTitleView,\n }))\n .addNode(CutNode.CutContent, () => ({\n spec: schemaSpecs[CutNode.CutContent],\n toMd: serializerTokens[CutNode.CutContent],\n fromMd: {\n tokenSpec: parserTokens[CutNode.CutContent],\n },\n view: opts.cutContentView,\n }));\n};\n"]}
@@ -1,4 +1,4 @@
1
- import type { NodeSpec } from 'prosemirror-model';
1
+ import type { NodeSpec } from "../../../../pm/model.js";
2
2
  import type { PlaceholderOptions } from "../../../../utils/placeholder.js";
3
3
  import { CutNode } from "./const.js";
4
4
  export type YfmCutSchemaOptions = {
@@ -8,12 +8,12 @@ const DEFAULT_PLACEHOLDERS = {
8
8
  };
9
9
  const getSchemaSpecs = (opts, placeholder) => ({
10
10
  [const_1.CutNode.Cut]: {
11
- attrs: { class: { default: 'yfm-cut' }, [const_1.CutAttr.Markup]: { default: null } },
11
+ attrs: { class: { default: const_1.YfmCutClassName.Cut }, [const_1.CutAttr.Markup]: { default: null } },
12
12
  content: `${const_1.CutNode.CutTitle} ${const_1.CutNode.CutContent}`,
13
13
  group: 'block yfm-cut',
14
14
  parseDOM: [
15
15
  {
16
- tag: '.yfm-cut',
16
+ tag: `.${const_1.YfmCutClassName.Cut}`,
17
17
  getAttrs: (node) => ({ [const_1.CutAttr.Markup]: node.getAttribute(const_1.CutAttr.Markup) }),
18
18
  },
19
19
  ],
@@ -26,10 +26,10 @@ const getSchemaSpecs = (opts, placeholder) => ({
26
26
  complex: 'root',
27
27
  },
28
28
  [const_1.CutNode.CutTitle]: {
29
- attrs: { class: { default: 'yfm-cut-title' } },
29
+ attrs: { class: { default: const_1.YfmCutClassName.Title } },
30
30
  content: 'inline*',
31
31
  group: 'block yfm-cut',
32
- parseDOM: [{ tag: '.yfm-cut-title' }],
32
+ parseDOM: [{ tag: `.${const_1.YfmCutClassName.Title}` }],
33
33
  toDOM(node) {
34
34
  return ['div', node.attrs, 0];
35
35
  },
@@ -45,10 +45,10 @@ const getSchemaSpecs = (opts, placeholder) => ({
45
45
  complex: 'leaf',
46
46
  },
47
47
  [const_1.CutNode.CutContent]: {
48
- attrs: { class: { default: 'yfm-cut-content' } },
48
+ attrs: { class: { default: const_1.YfmCutClassName.Content } },
49
49
  content: '(block | paragraph)+',
50
50
  group: 'block yfm-cut',
51
- parseDOM: [{ tag: '.yfm-cut-content' }],
51
+ parseDOM: [{ tag: `.${const_1.YfmCutClassName.Content}` }],
52
52
  toDOM(node) {
53
53
  return ['div', node.attrs, 0];
54
54
  },
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmCut/YfmCutSpecs/schema.ts"],"names":[],"mappings":";;;AAIA,sCAAyC;AAazC,MAAM,oBAAoB,GAAG;IACzB,KAAK,EAAE,WAAW;IAClB,OAAO,EAAE,aAAa;CACzB,CAAC;AAEK,MAAM,cAAc,GAAG,CAC1B,IAA0B,EAC1B,WAAgC,EACP,EAAE,CAAC,CAAC;IAC7B,CAAC,eAAO,CAAC,GAAG,CAAC,EAAE;QACX,KAAK,EAAE,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,SAAS,EAAC,EAAE,CAAC,eAAO,CAAC,MAAM,CAAC,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,EAAC;QACvE,OAAO,EAAE,GAAG,eAAO,CAAC,QAAQ,IAAI,eAAO,CAAC,UAAU,EAAE;QACpD,KAAK,EAAE,eAAe;QACtB,QAAQ,EAAE;YACN;gBACI,GAAG,EAAE,UAAU;gBACf,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAC,CAAC,eAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,eAAO,CAAC,MAAM,CAAC,EAAC,CAAC;aAC9E;SACJ;QACD,KAAK,CAAC,IAAI;YACN,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,UAAU,EAAE,IAAI;QAChB,cAAc,EAAE,IAAI;QACpB,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,MAAM;KAClB;IAED,CAAC,eAAO,CAAC,QAAQ,CAAC,EAAE;QAChB,KAAK,EAAE,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,eAAe,EAAC,EAAC;QAC1C,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,eAAe;QACtB,QAAQ,EAAE,CAAC,EAAC,GAAG,EAAE,gBAAgB,EAAC,CAAC;QACnC,KAAK,CAAC,IAAI;YACN,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,WAAW,EAAE;YACT,OAAO,EACH,WAAW,EAAE,CAAC,eAAO,CAAC,QAAQ,CAAC;gBAC/B,IAAI,EAAE,sBAAsB;gBAC5B,oBAAoB,CAAC,KAAK;YAC9B,aAAa,EAAE,IAAI;SACtB;QACD,iBAAiB,EAAE,IAAI;QACvB,UAAU,EAAE,KAAK;QACjB,cAAc,EAAE,KAAK;QACrB,OAAO,EAAE,MAAM;KAClB;IAED,CAAC,eAAO,CAAC,UAAU,CAAC,EAAE;QAClB,KAAK,EAAE,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,iBAAiB,EAAC,EAAC;QAC5C,OAAO,EAAE,sBAAsB;QAC/B,KAAK,EAAE,eAAe;QACtB,QAAQ,EAAE,CAAC,EAAC,GAAG,EAAE,kBAAkB,EAAC,CAAC;QACrC,KAAK,CAAC,IAAI;YACN,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,WAAW,EAAE;YACT,OAAO,EACH,WAAW,EAAE,CAAC,eAAO,CAAC,UAAU,CAAC;gBACjC,IAAI,EAAE,wBAAwB;gBAC9B,oBAAoB,CAAC,OAAO;YAChC,aAAa,EAAE,IAAI;SACtB;QACD,iBAAiB,EAAE,IAAI;QACvB,UAAU,EAAE,KAAK;QACjB,cAAc,EAAE,KAAK;QACrB,OAAO,EAAE,MAAM;KAClB;CACJ,CAAC,CAAC;AAhEU,QAAA,cAAc,kBAgExB","sourcesContent":["import type {NodeSpec} from 'prosemirror-model';\n\nimport type {PlaceholderOptions} from '../../../../utils/placeholder';\n\nimport {CutAttr, CutNode} from './const';\n\nexport type YfmCutSchemaOptions = {\n /**\n * @deprecated: use placeholder option in BehaviorPreset instead.\n */\n yfmCutTitlePlaceholder?: NonNullable<NodeSpec['placeholder']>['content'];\n /**\n * @deprecated: use placeholder option in BehaviorPreset instead.\n */\n yfmCutContentPlaceholder?: NonNullable<NodeSpec['placeholder']>['content'];\n};\n\nconst DEFAULT_PLACEHOLDERS = {\n Title: 'Cut title',\n Content: 'Cut content',\n};\n\nexport const getSchemaSpecs = (\n opts?: YfmCutSchemaOptions,\n placeholder?: PlaceholderOptions,\n): Record<CutNode, NodeSpec> => ({\n [CutNode.Cut]: {\n attrs: {class: {default: 'yfm-cut'}, [CutAttr.Markup]: {default: null}},\n content: `${CutNode.CutTitle} ${CutNode.CutContent}`,\n group: 'block yfm-cut',\n parseDOM: [\n {\n tag: '.yfm-cut',\n getAttrs: (node) => ({[CutAttr.Markup]: node.getAttribute(CutAttr.Markup)}),\n },\n ],\n toDOM(node) {\n return ['div', node.attrs, 0];\n },\n selectable: true,\n allowSelection: true,\n defining: true,\n complex: 'root',\n },\n\n [CutNode.CutTitle]: {\n attrs: {class: {default: 'yfm-cut-title'}},\n content: 'inline*',\n group: 'block yfm-cut',\n parseDOM: [{tag: '.yfm-cut-title'}],\n toDOM(node) {\n return ['div', node.attrs, 0];\n },\n placeholder: {\n content:\n placeholder?.[CutNode.CutTitle] ??\n opts?.yfmCutTitlePlaceholder ??\n DEFAULT_PLACEHOLDERS.Title,\n alwaysVisible: true,\n },\n definingAsContext: true,\n selectable: false,\n allowSelection: false,\n complex: 'leaf',\n },\n\n [CutNode.CutContent]: {\n attrs: {class: {default: 'yfm-cut-content'}},\n content: '(block | paragraph)+',\n group: 'block yfm-cut',\n parseDOM: [{tag: '.yfm-cut-content'}],\n toDOM(node) {\n return ['div', node.attrs, 0];\n },\n placeholder: {\n content:\n placeholder?.[CutNode.CutContent] ??\n opts?.yfmCutContentPlaceholder ??\n DEFAULT_PLACEHOLDERS.Content,\n alwaysVisible: true,\n },\n definingAsContext: true,\n selectable: false,\n allowSelection: false,\n complex: 'leaf',\n },\n});\n"]}
1
+ {"version":3,"file":"schema.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmCut/YfmCutSpecs/schema.ts"],"names":[],"mappings":";;;AAGA,sCAA0D;AAa1D,MAAM,oBAAoB,GAAG;IACzB,KAAK,EAAE,WAAW;IAClB,OAAO,EAAE,aAAa;CACzB,CAAC;AAEK,MAAM,cAAc,GAAG,CAC1B,IAA0B,EAC1B,WAAgC,EACP,EAAE,CAAC,CAAC;IAC7B,CAAC,eAAO,CAAC,GAAG,CAAC,EAAE;QACX,KAAK,EAAE,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,uBAAe,CAAC,GAAG,EAAC,EAAE,CAAC,eAAO,CAAC,MAAM,CAAC,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,EAAC;QACjF,OAAO,EAAE,GAAG,eAAO,CAAC,QAAQ,IAAI,eAAO,CAAC,UAAU,EAAE;QACpD,KAAK,EAAE,eAAe;QACtB,QAAQ,EAAE;YACN;gBACI,GAAG,EAAE,IAAI,uBAAe,CAAC,GAAG,EAAE;gBAC9B,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAC,CAAC,eAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,eAAO,CAAC,MAAM,CAAC,EAAC,CAAC;aAC9E;SACJ;QACD,KAAK,CAAC,IAAI;YACN,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,UAAU,EAAE,IAAI;QAChB,cAAc,EAAE,IAAI;QACpB,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,MAAM;KAClB;IAED,CAAC,eAAO,CAAC,QAAQ,CAAC,EAAE;QAChB,KAAK,EAAE,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,uBAAe,CAAC,KAAK,EAAC,EAAC;QAChD,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,eAAe;QACtB,QAAQ,EAAE,CAAC,EAAC,GAAG,EAAE,IAAI,uBAAe,CAAC,KAAK,EAAE,EAAC,CAAC;QAC9C,KAAK,CAAC,IAAI;YACN,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,WAAW,EAAE;YACT,OAAO,EACH,WAAW,EAAE,CAAC,eAAO,CAAC,QAAQ,CAAC;gBAC/B,IAAI,EAAE,sBAAsB;gBAC5B,oBAAoB,CAAC,KAAK;YAC9B,aAAa,EAAE,IAAI;SACtB;QACD,iBAAiB,EAAE,IAAI;QACvB,UAAU,EAAE,KAAK;QACjB,cAAc,EAAE,KAAK;QACrB,OAAO,EAAE,MAAM;KAClB;IAED,CAAC,eAAO,CAAC,UAAU,CAAC,EAAE;QAClB,KAAK,EAAE,EAAC,KAAK,EAAE,EAAC,OAAO,EAAE,uBAAe,CAAC,OAAO,EAAC,EAAC;QAClD,OAAO,EAAE,sBAAsB;QAC/B,KAAK,EAAE,eAAe;QACtB,QAAQ,EAAE,CAAC,EAAC,GAAG,EAAE,IAAI,uBAAe,CAAC,OAAO,EAAE,EAAC,CAAC;QAChD,KAAK,CAAC,IAAI;YACN,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,WAAW,EAAE;YACT,OAAO,EACH,WAAW,EAAE,CAAC,eAAO,CAAC,UAAU,CAAC;gBACjC,IAAI,EAAE,wBAAwB;gBAC9B,oBAAoB,CAAC,OAAO;YAChC,aAAa,EAAE,IAAI;SACtB;QACD,iBAAiB,EAAE,IAAI;QACvB,UAAU,EAAE,KAAK;QACjB,cAAc,EAAE,KAAK;QACrB,OAAO,EAAE,MAAM;KAClB;CACJ,CAAC,CAAC;AAhEU,QAAA,cAAc,kBAgExB","sourcesContent":["import type {NodeSpec} from '#pm/model';\nimport type {PlaceholderOptions} from 'src/utils/placeholder';\n\nimport {CutAttr, CutNode, YfmCutClassName} from './const';\n\nexport type YfmCutSchemaOptions = {\n /**\n * @deprecated: use placeholder option in BehaviorPreset instead.\n */\n yfmCutTitlePlaceholder?: NonNullable<NodeSpec['placeholder']>['content'];\n /**\n * @deprecated: use placeholder option in BehaviorPreset instead.\n */\n yfmCutContentPlaceholder?: NonNullable<NodeSpec['placeholder']>['content'];\n};\n\nconst DEFAULT_PLACEHOLDERS = {\n Title: 'Cut title',\n Content: 'Cut content',\n};\n\nexport const getSchemaSpecs = (\n opts?: YfmCutSchemaOptions,\n placeholder?: PlaceholderOptions,\n): Record<CutNode, NodeSpec> => ({\n [CutNode.Cut]: {\n attrs: {class: {default: YfmCutClassName.Cut}, [CutAttr.Markup]: {default: null}},\n content: `${CutNode.CutTitle} ${CutNode.CutContent}`,\n group: 'block yfm-cut',\n parseDOM: [\n {\n tag: `.${YfmCutClassName.Cut}`,\n getAttrs: (node) => ({[CutAttr.Markup]: node.getAttribute(CutAttr.Markup)}),\n },\n ],\n toDOM(node) {\n return ['div', node.attrs, 0];\n },\n selectable: true,\n allowSelection: true,\n defining: true,\n complex: 'root',\n },\n\n [CutNode.CutTitle]: {\n attrs: {class: {default: YfmCutClassName.Title}},\n content: 'inline*',\n group: 'block yfm-cut',\n parseDOM: [{tag: `.${YfmCutClassName.Title}`}],\n toDOM(node) {\n return ['div', node.attrs, 0];\n },\n placeholder: {\n content:\n placeholder?.[CutNode.CutTitle] ??\n opts?.yfmCutTitlePlaceholder ??\n DEFAULT_PLACEHOLDERS.Title,\n alwaysVisible: true,\n },\n definingAsContext: true,\n selectable: false,\n allowSelection: false,\n complex: 'leaf',\n },\n\n [CutNode.CutContent]: {\n attrs: {class: {default: YfmCutClassName.Content}},\n content: '(block | paragraph)+',\n group: 'block yfm-cut',\n parseDOM: [{tag: `.${YfmCutClassName.Content}`}],\n toDOM(node) {\n return ['div', node.attrs, 0];\n },\n placeholder: {\n content:\n placeholder?.[CutNode.CutContent] ??\n opts?.yfmCutContentPlaceholder ??\n DEFAULT_PLACEHOLDERS.Content,\n alwaysVisible: true,\n },\n definingAsContext: true,\n selectable: false,\n allowSelection: false,\n complex: 'leaf',\n },\n});\n"]}
@@ -1,4 +1,4 @@
1
- import { type Command } from 'prosemirror-state';
2
1
  import type { ActionSpec } from "../../../../core/index.js";
2
+ import { type Command } from "../../../../pm/state.js";
3
3
  export declare const createYfmCut: Command;
4
4
  export declare const toYfmCut: ActionSpec;
@@ -1,19 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.toYfmCut = exports.createYfmCut = void 0;
4
- const prosemirror_state_1 = require("prosemirror-state");
5
- // @ts-ignore // TODO: fix cjs build
6
- const prosemirror_utils_1 = require("prosemirror-utils");
4
+ const state_1 = require("../../../../pm/state.js");
5
+ const utils_1 = require("../../../../pm/utils.js");
7
6
  const const_1 = require("../const.js");
8
7
  const createYfmCutNode = (schema) => (content) => {
9
- return (0, const_1.cutType)(schema).create({ class: 'yfm-cut open' }, [
8
+ const className = `${const_1.YfmCutClassName.Cut} ${const_1.YfmCutClassName.Open}`;
9
+ return (0, const_1.cutType)(schema).create({ class: className }, [
10
10
  (0, const_1.cutTitleType)(schema).create(null),
11
11
  (0, const_1.cutContentType)(schema).create(null, content),
12
12
  ]);
13
13
  };
14
14
  const createYfmCut = (state, dispatch) => {
15
15
  const { schema, selection: sel } = state;
16
- const textblock = (0, prosemirror_utils_1.findParentNodeClosestToPos)(sel.$from, (node) => node.isTextblock && !node.type.spec.complex);
16
+ const textblock = (0, utils_1.findParentNodeClosestToPos)(sel.$from, (node) => node.isTextblock && !node.type.spec.complex);
17
17
  if (!textblock)
18
18
  return false;
19
19
  if (dispatch) {
@@ -39,7 +39,7 @@ const createYfmCut = (state, dispatch) => {
39
39
  const tr = state.tr;
40
40
  tr.replaceWith(sliceFromPos, sliceToPos, createYfmCutNode(schema)(tr.doc.slice(sliceFromPos, sliceToPos, false).content));
41
41
  // set selection to start of cut title
42
- tr.setSelection(prosemirror_state_1.TextSelection.create(tr.doc, sliceFromPos + 2));
42
+ tr.setSelection(state_1.TextSelection.create(tr.doc, sliceFromPos + 2));
43
43
  dispatch(tr.scrollIntoView());
44
44
  }
45
45
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"toYfmCut.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmCut/actions/toYfmCut.ts"],"names":[],"mappings":";;;AACA,yDAA8D;AAC9D,oCAAoC;AACpC,yDAA6D;AAG7D,uCAA+D;AAE/D,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC,OAAkC,EAAE,EAAE;IAChF,OAAO,IAAA,eAAO,EAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAC,KAAK,EAAE,cAAc,EAAC,EAAE;QACnD,IAAA,oBAAY,EAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QACjC,IAAA,sBAAc,EAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;KAC/C,CAAC,CAAC;AACP,CAAC,CAAC;AAEK,MAAM,YAAY,GAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;IACrD,MAAM,EAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAC,GAAG,KAAK,CAAC;IAEvC,MAAM,SAAS,GAAG,IAAA,8CAA0B,EACxC,GAAG,CAAC,KAAK,EACT,CAAC,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAC9D,CAAC;IAEF,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAE7B,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC;QACnC,IAAI,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QAExD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACrD,MAAM,gBAAgB,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAE9D,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,8BAA8B;QAC9B,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;YACrC,IAAI,KAAK,GAAG,OAAO,IAAI,IAAI;gBAAE,OAAO;YACpC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;gBAC9D,IAAI,GAAG,IAAI,CAAC;gBACZ,OAAO;YACX,CAAC;YAED,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;YACnE,UAAU,GAAG,gBAAgB,CAAC;YAE9B,IAAI,GAAG,CAAC,EAAE,GAAG,UAAU;gBAAE,IAAI,GAAG,IAAI,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACpB,EAAE,CAAC,WAAW,CACV,YAAY,EACZ,UAAU,EACV,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAClF,CAAC;QACF,sCAAsC;QACtC,EAAE,CAAC,YAAY,CAAC,iCAAa,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;QAChE,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AA7CW,QAAA,YAAY,gBA6CvB;AAEW,QAAA,QAAQ,GAAe;IAChC,QAAQ,CAAC,KAAK;QACV,OAAO,IAAA,oBAAY,EAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,GAAG,CAAC,KAAK,EAAE,QAAQ;QACf,IAAA,oBAAY,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC;CACJ,CAAC","sourcesContent":["import type {Fragment, Node, Schema} from 'prosemirror-model';\nimport {type Command, TextSelection} from 'prosemirror-state';\n// @ts-ignore // TODO: fix cjs build\nimport {findParentNodeClosestToPos} from 'prosemirror-utils';\n\nimport type {ActionSpec} from '../../../../core';\nimport {cutContentType, cutTitleType, cutType} from '../const';\n\nconst createYfmCutNode = (schema: Schema) => (content?: Node | Node[] | Fragment) => {\n return cutType(schema).create({class: 'yfm-cut open'}, [\n cutTitleType(schema).create(null),\n cutContentType(schema).create(null, content),\n ]);\n};\n\nexport const createYfmCut: Command = (state, dispatch) => {\n const {schema, selection: sel} = state;\n\n const textblock = findParentNodeClosestToPos(\n sel.$from,\n (node: Node) => node.isTextblock && !node.type.spec.complex,\n );\n\n if (!textblock) return false;\n\n if (dispatch) {\n const sliceFromPos = textblock.pos;\n let sliceToPos = sliceFromPos + textblock.node.nodeSize;\n\n const tbIndex = sel.$from.index(textblock.depth - 1);\n const tbParent = sel.$from.node(textblock.depth - 1);\n const tbParentStartPos = sel.$from.start(textblock.depth - 1);\n\n let flag = false;\n // find appropriate sliceToPos\n tbParent.forEach((node, offset, index) => {\n if (index < tbIndex || flag) return;\n if (node.type.spec.complex && node.type.spec.complex !== 'root') {\n flag = true;\n return;\n }\n\n const absoluteAfterPos = tbParentStartPos + offset + node.nodeSize;\n sliceToPos = absoluteAfterPos;\n\n if (sel.to < sliceToPos) flag = true;\n });\n\n const tr = state.tr;\n tr.replaceWith(\n sliceFromPos,\n sliceToPos,\n createYfmCutNode(schema)(tr.doc.slice(sliceFromPos, sliceToPos, false).content),\n );\n // set selection to start of cut title\n tr.setSelection(TextSelection.create(tr.doc, sliceFromPos + 2));\n dispatch(tr.scrollIntoView());\n }\n\n return true;\n};\n\nexport const toYfmCut: ActionSpec = {\n isEnable(state) {\n return createYfmCut(state);\n },\n run(state, dispatch) {\n createYfmCut(state, dispatch);\n },\n};\n"]}
1
+ {"version":3,"file":"toYfmCut.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmCut/actions/toYfmCut.ts"],"names":[],"mappings":"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","sourcesContent":["import type {ActionSpec} from '#core';\nimport type {Fragment, Node, Schema} from '#pm/model';\nimport {type Command, TextSelection} from '#pm/state';\nimport {findParentNodeClosestToPos} from '#pm/utils';\n\nimport {YfmCutClassName, cutContentType, cutTitleType, cutType} from '../const';\n\nconst createYfmCutNode = (schema: Schema) => (content?: Node | Node[] | Fragment) => {\n const className = `${YfmCutClassName.Cut} ${YfmCutClassName.Open}` as const;\n return cutType(schema).create({class: className}, [\n cutTitleType(schema).create(null),\n cutContentType(schema).create(null, content),\n ]);\n};\n\nexport const createYfmCut: Command = (state, dispatch) => {\n const {schema, selection: sel} = state;\n\n const textblock = findParentNodeClosestToPos(\n sel.$from,\n (node: Node) => node.isTextblock && !node.type.spec.complex,\n );\n\n if (!textblock) return false;\n\n if (dispatch) {\n const sliceFromPos = textblock.pos;\n let sliceToPos = sliceFromPos + textblock.node.nodeSize;\n\n const tbIndex = sel.$from.index(textblock.depth - 1);\n const tbParent = sel.$from.node(textblock.depth - 1);\n const tbParentStartPos = sel.$from.start(textblock.depth - 1);\n\n let flag = false;\n // find appropriate sliceToPos\n tbParent.forEach((node, offset, index) => {\n if (index < tbIndex || flag) return;\n if (node.type.spec.complex && node.type.spec.complex !== 'root') {\n flag = true;\n return;\n }\n\n const absoluteAfterPos = tbParentStartPos + offset + node.nodeSize;\n sliceToPos = absoluteAfterPos;\n\n if (sel.to < sliceToPos) flag = true;\n });\n\n const tr = state.tr;\n tr.replaceWith(\n sliceFromPos,\n sliceToPos,\n createYfmCutNode(schema)(tr.doc.slice(sliceFromPos, sliceToPos, false).content),\n );\n // set selection to start of cut title\n tr.setSelection(TextSelection.create(tr.doc, sliceFromPos + 2));\n dispatch(tr.scrollIntoView());\n }\n\n return true;\n};\n\nexport const toYfmCut: ActionSpec = {\n isEnable(state) {\n return createYfmCut(state);\n },\n run(state, dispatch) {\n createYfmCut(state, dispatch);\n },\n};\n"]}
@@ -1 +1,9 @@
1
- export { CutNode, cutType, cutTitleType, cutContentType } from "./YfmCutSpecs/index.js";
1
+ export { CutNode, cutType, cutTitleType, cutContentType } from "./YfmCutSpecs/const.js";
2
+ export declare const YfmCutClassName: {
3
+ readonly TitleInner: "g-md-yfm-cut-title-inner";
4
+ readonly Open: "yfm-cut-open";
5
+ readonly Active: "yfm-cut-active";
6
+ readonly Cut: "yfm-cut";
7
+ readonly Title: "yfm-cut-title";
8
+ readonly Content: "yfm-cut-content";
9
+ };
@@ -1,9 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.cutContentType = exports.cutTitleType = exports.cutType = exports.CutNode = void 0;
4
- var YfmCutSpecs_1 = require("./YfmCutSpecs/index.js");
5
- Object.defineProperty(exports, "CutNode", { enumerable: true, get: function () { return YfmCutSpecs_1.CutNode; } });
6
- Object.defineProperty(exports, "cutType", { enumerable: true, get: function () { return YfmCutSpecs_1.cutType; } });
7
- Object.defineProperty(exports, "cutTitleType", { enumerable: true, get: function () { return YfmCutSpecs_1.cutTitleType; } });
8
- Object.defineProperty(exports, "cutContentType", { enumerable: true, get: function () { return YfmCutSpecs_1.cutContentType; } });
3
+ exports.YfmCutClassName = exports.cutContentType = exports.cutTitleType = exports.cutType = exports.CutNode = void 0;
4
+ const const_1 = require("./YfmCutSpecs/const.js");
5
+ var const_2 = require("./YfmCutSpecs/const.js");
6
+ Object.defineProperty(exports, "CutNode", { enumerable: true, get: function () { return const_2.CutNode; } });
7
+ Object.defineProperty(exports, "cutType", { enumerable: true, get: function () { return const_2.cutType; } });
8
+ Object.defineProperty(exports, "cutTitleType", { enumerable: true, get: function () { return const_2.cutTitleType; } });
9
+ Object.defineProperty(exports, "cutContentType", { enumerable: true, get: function () { return const_2.cutContentType; } });
10
+ exports.YfmCutClassName = {
11
+ ...const_1.YfmCutClassName,
12
+ TitleInner: 'g-md-yfm-cut-title-inner',
13
+ Open: 'yfm-cut-open',
14
+ Active: 'yfm-cut-active',
15
+ };
9
16
  //# sourceMappingURL=const.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"const.js","sourceRoot":"../../../../../src","sources":["extensions/yfm/YfmCut/const.ts"],"names":[],"mappings":";;;AAAA,sDAA6E;AAArE,sGAAA,OAAO,OAAA;AAAE,sGAAA,OAAO,OAAA;AAAE,2GAAA,YAAY,OAAA;AAAE,6GAAA,cAAc,OAAA","sourcesContent":["export {CutNode, cutType, cutTitleType, cutContentType} from './YfmCutSpecs';\n"]}
1
+ {"version":3,"file":"const.js","sourceRoot":"../../../../../src","sources":["extensions/yfm/YfmCut/const.ts"],"names":[],"mappings":";;;AAAA,kDAA4E;AAE5E,gDAAmF;AAA3E,gGAAA,OAAO,OAAA;AAAE,gGAAA,OAAO,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,uGAAA,cAAc,OAAA;AAEzC,QAAA,eAAe,GAAG;IAC3B,GAAG,uBAAoB;IACvB,UAAU,EAAE,0BAA0B;IACtC,IAAI,EAAE,cAAc;IACpB,MAAM,EAAE,gBAAgB;CAClB,CAAC","sourcesContent":["import {YfmCutClassName as YfmCutClassNameSpecs} from './YfmCutSpecs/const';\n\nexport {CutNode, cutType, cutTitleType, cutContentType} from './YfmCutSpecs/const';\n\nexport const YfmCutClassName = {\n ...YfmCutClassNameSpecs,\n TitleInner: 'g-md-yfm-cut-title-inner',\n Open: 'yfm-cut-open',\n Active: 'yfm-cut-active',\n} as const;\n"]}
@@ -10,7 +10,4 @@
10
10
  }
11
11
  .ProseMirror.yfm .yfm-cut .yfm-cut-title:focus {
12
12
  outline: 0;
13
- }
14
- .ProseMirror.yfm .yfm-cut.open > .yfm-cut-title:before {
15
- transform: translateY(-50%);
16
13
  }
@@ -1,13 +1,14 @@
1
- .yfm-cut-title .g-md-yfm-cut-title-inner {
1
+ .ProseMirror.yfm .yfm-cut-title > .g-md-yfm-cut-title-inner {
2
2
  cursor: text;
3
3
  }
4
-
5
- .yfm-cut-content {
4
+ .ProseMirror.yfm .yfm-cut-content {
6
5
  display: none;
7
6
  overflow: hidden;
8
7
  transition: height 0.3s ease-in-out;
9
8
  }
10
-
11
- .open > .yfm-cut-content {
9
+ .ProseMirror.yfm .yfm-cut.yfm-cut-open > .yfm-cut-title:before {
10
+ transform: translateY(-50%);
11
+ }
12
+ .ProseMirror.yfm .yfm-cut.yfm-cut-open > .yfm-cut-content {
12
13
  display: revert;
13
14
  }
@@ -1,5 +1,5 @@
1
- import type { Node } from 'prosemirror-model';
2
- import type { NodeView } from 'prosemirror-view';
1
+ import type { Node } from "../../../../pm/model.js";
2
+ import type { NodeView } from "../../../../pm/view.js";
3
3
  import "./yfm-cut-title.css";
4
4
  export declare class YfmCutTitleNodeView implements NodeView {
5
5
  readonly dom: HTMLElement;
@@ -7,4 +7,7 @@ export declare class YfmCutTitleNodeView implements NodeView {
7
7
  private node;
8
8
  constructor(node: Node);
9
9
  update(node: Node): boolean;
10
+ destroy(): void;
11
+ private _onTitleClick;
12
+ private _onTitleInnerClick;
10
13
  }