@jvs-milkdown/components 1.2.5 → 1.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/__internal__/components/image-input.d.ts.map +1 -1
- package/lib/image-block/config.d.ts +0 -3
- package/lib/image-block/config.d.ts.map +1 -1
- package/lib/image-block/index.js +96 -93
- package/lib/image-block/index.js.map +1 -1
- package/lib/image-block/paste-rule.d.ts.map +1 -1
- package/lib/image-block/view/components/image-viewer.d.ts.map +1 -1
- package/lib/image-inline/index.js +7 -2
- package/lib/image-inline/index.js.map +1 -1
- package/lib/link-tooltip/edit/component.d.ts.map +1 -1
- package/lib/link-tooltip/index.js +7 -2
- package/lib/link-tooltip/index.js.map +1 -1
- package/lib/table-block/index.js.map +1 -1
- package/lib/table-block/view/utils.d.ts.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/src/__internal__/components/image-input.tsx +14 -5
- package/src/image-block/config.ts +0 -6
- package/src/image-block/paste-rule.ts +0 -2
- package/src/image-block/view/components/image-viewer.tsx +25 -26
- package/src/link-tooltip/edit/component.tsx +7 -2
- package/src/table-block/view/component.tsx +1 -1
- package/src/table-block/view/utils.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/__internal__/meta.ts","../../src/image-block/config.ts","../../src/image-block/schema.ts","../../src/image-block/convert-plugin.ts","../../src/image-block/paste-rule.ts","../../src/image-block/remark-plugin.ts","../../src/__internal__/keep-alive.ts","../../src/__internal__/components/icon.tsx","../../src/__internal__/components/image-input.tsx","../../src/image-block/view/components/image-viewer.tsx","../../src/image-block/view/components/image-block.tsx","../../src/image-block/view/index.ts","../../src/image-block/index.ts"],"sourcesContent":["import type { Meta, MilkdownPlugin } from '@jvs-milkdown/ctx'\n\nexport function withMeta<T extends MilkdownPlugin>(\n plugin: T,\n meta: Partial<Meta> & Pick<Meta, 'displayName'>\n): T {\n Object.assign(plugin, {\n meta: {\n package: '@jvs-milkdown/components',\n ...meta,\n },\n })\n\n return plugin\n}\n","import { $ctx } from '@jvs-milkdown/utils'\n\nimport { withMeta } from '../__internal__/meta'\n\nexport interface ImageBlockConfig {\n imageIcon: string | undefined\n captionIcon: string | undefined\n cropIcon: string | undefined\n borderIcon: string | undefined\n confirmIcon: string | undefined\n cancelIcon: string | undefined\n resetCropIcon: string | undefined\n uploadButton: string | undefined\n confirmButton: string | undefined\n uploadPlaceholderText: string\n captionPlaceholderText: string\n onUpload: (file: File) => Promise<string>\n proxyDomURL?: (url: string) => Promise<string> | string\n onImageLoadError?: (event: Event) => void | Promise<void>\n maxWidth?: number\n maxHeight?: number\n}\n\nexport const defaultImageBlockConfig: ImageBlockConfig = {\n imageIcon: '🌌',\n captionIcon: '💬',\n cropIcon: '✂️',\n borderIcon: '🔲',\n confirmIcon: '✓',\n cancelIcon: '✕',\n resetCropIcon: '↩',\n uploadButton: 'Upload file',\n confirmButton: 'Confirm ⏎',\n uploadPlaceholderText: 'or paste the image link ...',\n captionPlaceholderText: 'Image caption',\n onUpload: (file) => Promise.resolve(URL.createObjectURL(file)),\n}\n\nexport const imageBlockConfig = $ctx(\n defaultImageBlockConfig,\n 'imageBlockConfigCtx'\n)\n\nwithMeta(imageBlockConfig, {\n displayName: 'Config<image-block>',\n group: 'ImageBlock',\n})\n","import { expectDomTypeError } from '@jvs-milkdown/exception'\nimport { $nodeSchema } from '@jvs-milkdown/utils'\n\nimport { withMeta } from '../__internal__/meta'\n\nexport const IMAGE_DATA_TYPE = 'image-block'\n\nexport const imageBlockSchema = $nodeSchema('image-block', () => {\n return {\n inline: false,\n group: 'block',\n selectable: true,\n draggable: true,\n isolating: true,\n marks: '',\n atom: true,\n priority: 100,\n attrs: {\n src: { default: '', validate: 'string' },\n caption: { default: '', validate: 'string' },\n ratio: { default: 1, validate: 'number' },\n align: { default: null },\n cropRatio: { default: 'free', validate: 'string' },\n cropTop: { default: 0, validate: 'number' },\n cropLeft: { default: 0, validate: 'number' },\n cropWidth: { default: 1, validate: 'number' },\n cropHeight: { default: 1, validate: 'number' },\n borderWidth: { default: 0, validate: 'number' },\n borderColor: { default: '#000000', validate: 'string' },\n borderStyle: { default: 'none', validate: 'string' },\n },\n parseDOM: [\n {\n tag: `img[data-type=\"${IMAGE_DATA_TYPE}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom)\n\n return {\n src: dom.getAttribute('src') || '',\n caption: dom.getAttribute('caption') || '',\n ratio: Number(dom.getAttribute('ratio') ?? 1),\n align: dom.getAttribute('align') || null,\n cropRatio: dom.getAttribute('cropRatio') || 'free',\n cropTop: Number(dom.getAttribute('cropTop') ?? 0),\n cropLeft: Number(dom.getAttribute('cropLeft') ?? 0),\n cropWidth: Number(dom.getAttribute('cropWidth') ?? 1),\n cropHeight: Number(dom.getAttribute('cropHeight') ?? 1),\n borderWidth: Number(dom.getAttribute('borderWidth') ?? 0),\n borderColor: dom.getAttribute('borderColor') || '#000000',\n borderStyle: dom.getAttribute('borderStyle') || 'none',\n }\n },\n },\n {\n tag: 'img[src]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom)\n if (dom.getAttribute('data-type') === IMAGE_DATA_TYPE) return false\n\n return {\n src: dom.getAttribute('src') || '',\n caption: dom.getAttribute('alt') || dom.getAttribute('title') || '',\n ratio: 1,\n }\n },\n },\n ],\n toDOM: (node) => ['img', { 'data-type': IMAGE_DATA_TYPE, ...node.attrs }],\n parseMarkdown: {\n match: ({ type }) => type === 'image-block',\n runner: (state, node, type) => {\n const src = node.url as string\n const caption = node.title as string\n let ratio = Number((node.alt as string) || 1)\n if (Number.isNaN(ratio) || ratio === 0) ratio = 1\n\n state.addNode(type, {\n src,\n caption,\n ratio,\n })\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'image-block',\n runner: (state, node) => {\n state.openNode('paragraph')\n state.addNode('image', undefined, undefined, {\n title: node.attrs.caption,\n url: node.attrs.src,\n alt: `${Number.parseFloat(node.attrs.ratio).toFixed(2)}`,\n })\n state.closeNode()\n },\n },\n }\n})\n\nwithMeta(imageBlockSchema.node, {\n displayName: 'NodeSchema<image-block>',\n group: 'ImageBlock',\n})\n","import type { Node as ProsemirrorNode } from '@jvs-milkdown/prose/model'\n\nimport { imageSchema, paragraphSchema } from '@jvs-milkdown/preset-commonmark'\nimport { Plugin, PluginKey } from '@jvs-milkdown/prose/state'\nimport { $prose } from '@jvs-milkdown/utils'\n\nimport { withMeta } from '../__internal__/meta'\nimport { imageBlockConfig } from './config'\nimport { imageBlockSchema } from './schema'\n\nexport const imageBlockConvertPlugin = $prose((ctx) => {\n const imageType = imageSchema.type(ctx)\n const imageBlockType = imageBlockSchema.type(ctx)\n const paragraphType = paragraphSchema.type(ctx)\n\n const pluginKey = new PluginKey('MILKDOWN_IMAGE_BLOCK_CONVERT')\n\n let uploading = false\n\n return new Plugin({\n key: pluginKey,\n appendTransaction(transactions, _oldState, newState) {\n if (!transactions.some((tr) => tr.docChanged)) return null\n\n const replacements: {\n from: number\n to: number\n blocks: ProsemirrorNode[]\n }[] = []\n\n // Debug: log all paragraphs with their children\n let foundImages = 0\n newState.doc.descendants((node) => {\n if (node.type === imageType) foundImages++\n })\n if (foundImages > 0) {\n // inline images found\n }\n\n newState.doc.descendants((node, pos) => {\n if (node.type !== paragraphType) return\n\n const images: ProsemirrorNode[] = []\n let hasOtherContent = false\n\n for (let i = 0; i < node.childCount; i++) {\n const child = node.child(i)\n if (child.type === imageType) {\n images.push(child)\n } else if (child.type.name === 'hardbreak') {\n continue\n } else if (child.isText && child.text?.trim() === '') {\n continue\n } else {\n hasOtherContent = true\n break\n }\n }\n\n if (hasOtherContent || images.length === 0) return\n\n const blocks = images\n .map((img) =>\n imageBlockType.create({\n src: img.attrs.src,\n caption: img.attrs.alt || img.attrs.title || '',\n ratio: 1,\n })\n )\n .filter(Boolean)\n\n if (blocks.length > 0) {\n replacements.push({ from: pos, to: pos + node.nodeSize, blocks })\n }\n })\n\n if (replacements.length === 0) return null\n\n const { tr } = newState\n for (let i = replacements.length - 1; i >= 0; i--) {\n const r = replacements[i]!\n tr.replaceWith(r.from, r.to, r.blocks)\n }\n\n return tr\n },\n view() {\n return {\n update(view) {\n if (uploading) return\n\n const config = ctx.get(imageBlockConfig.key)\n const imagesToUpload: { pos: number; src: string }[] = []\n\n view.state.doc.descendants((node, pos) => {\n if (node.type.name !== 'image-block') return\n const src: string = node.attrs.src\n if (!src || src.startsWith('data:') || src.startsWith('blob:'))\n return\n if (!/^https?:\\/\\//i.test(src)) return\n imagesToUpload.push({ pos, src })\n })\n\n if (imagesToUpload.length === 0) return\n\n uploading = true\n\n void Promise.allSettled(\n imagesToUpload.map(async ({ pos, src }) => {\n const resp = await fetch(src)\n const blob = await resp.blob()\n const ext = blob.type.split('/')[1] || 'png'\n const file = new File([blob], `pasted-image.${ext}`, {\n type: blob.type,\n })\n const uploadedUrl = await config.onUpload(file)\n\n const $pos = view.state.doc.resolve(pos)\n const nodeAtPos = $pos.nodeAfter\n if (\n nodeAtPos &&\n nodeAtPos.type.name === 'image-block' &&\n nodeAtPos.attrs.src === src\n ) {\n view.dispatch(\n view.state.tr\n .setNodeMarkup(pos, undefined, {\n ...nodeAtPos.attrs,\n src: uploadedUrl,\n })\n .setMeta(pluginKey, { uploaded: true })\n )\n }\n })\n ).finally(() => {\n uploading = false\n })\n },\n }\n },\n })\n})\n\nwithMeta(imageBlockConvertPlugin, {\n displayName: 'Prose<image-block-convert>',\n group: 'ImageBlock',\n})\n","import { imageSchema, paragraphSchema } from '@jvs-milkdown/preset-commonmark'\nimport {\n type Fragment as FragmentType,\n Fragment,\n type Node as ProsemirrorNode,\n Slice,\n} from '@jvs-milkdown/prose/model'\nimport { $pasteRule } from '@jvs-milkdown/utils'\n\nimport { withMeta } from '../__internal__/meta'\nimport { imageBlockSchema } from './schema'\n\nfunction toImageBlock(\n imageNode: ProsemirrorNode,\n imageBlockType: ProsemirrorNode['type']\n): ProsemirrorNode | null {\n return imageBlockType.create({\n src: imageNode.attrs.src,\n caption: imageNode.attrs.alt || imageNode.attrs.title || '',\n ratio: 1,\n })\n}\n\n\n\n/// A paste rule that converts standalone inline images to image-block nodes.\n/// Handles the slice structures produced when pasting HTML from external pages\n/// or from another instance of the same editor:\n/// 1. Bare `image` at fragment top-level (after Slice.maxOpen unwraps)\n/// 2. `paragraph > image` (paragraph with single image child)\n/// 3. `paragraph > [image, hard_break, ...]` (image with trailing breaks)\nexport const imageBlockPasteRule = $pasteRule((ctx) => ({\n priority: 90,\n run: (slice, _view, isPlainText) => {\n if (isPlainText) return slice\n\n const paragraphType = paragraphSchema.type(ctx)\n const imageType = imageSchema.type(ctx)\n const imageBlockType = imageBlockSchema.type(ctx)\n\n function convertFragment(fragment: FragmentType): FragmentType {\n const nodes: ProsemirrorNode[] = []\n let changed = false\n\n fragment.forEach((node) => {\n // Case 1: bare inline image at top level (after Slice.maxOpen unwraps paragraph)\n if (node.type === imageType) {\n const imageBlock = toImageBlock(node, imageBlockType)\n if (imageBlock) {\n nodes.push(imageBlock)\n changed = true\n return\n }\n }\n\n // Case 2, 3 & Mixed: Any paragraph containing images\n if (node.type === paragraphType) {\n let hasImage = false\n node.content.forEach((child) => {\n if (child.type === imageType) hasImage = true\n })\n\n if (hasImage) {\n let currentParaNodes: ProsemirrorNode[] = []\n let isFirstInsideParent = nodes.length === 0\n\n node.content.forEach((child) => {\n if (child.type === imageType) {\n // If it's the first element in the parent slice (meaning we might need an openStart anchor)\n // OR we have accumulated text nodes, push a paragraph.\n if (currentParaNodes.length > 0 || isFirstInsideParent) {\n nodes.push(node.copy(Fragment.from(currentParaNodes)))\n currentParaNodes = []\n }\n const imageBlock = toImageBlock(child, imageBlockType)\n if (imageBlock) {\n nodes.push(imageBlock)\n }\n isFirstInsideParent = false\n } else {\n currentParaNodes.push(child)\n }\n })\n // ALWAYS push the trailing paragraph at the end, even if empty.\n // This guarantees that if the fragment replacement ends here, it's a paragraph,\n // which safegaurds openEnd anchors from throwing ProseMirror slice geometry errors.\n nodes.push(node.copy(Fragment.from(currentParaNodes)))\n\n changed = true\n return\n }\n }\n\n // Recurse into children\n if (node.content.size > 0) {\n const fixedContent = convertFragment(node.content)\n if (fixedContent !== node.content) {\n changed = true\n nodes.push(node.copy(fixedContent))\n return\n }\n }\n\n nodes.push(node)\n })\n\n return changed ? Fragment.from(nodes) : fragment\n }\n\n const fragment = convertFragment(slice.content)\n return new Slice(fragment, slice.openStart, slice.openEnd)\n },\n}))\n\nwithMeta(imageBlockPasteRule, {\n displayName: 'PasteRule<image-block>',\n group: 'ImageBlock',\n})\n","import type { Node } from '@jvs-milkdown/transformer'\n\nimport { $remark } from '@jvs-milkdown/utils'\nimport { visit } from 'unist-util-visit'\n\nimport { withMeta } from '../__internal__/meta'\n\nfunction visitImage(ast: Node) {\n return visit(\n ast,\n 'paragraph',\n (\n node: Node & { children?: Node[] },\n index: number,\n parent: Node & { children: Node[] }\n ) => {\n if (node.children?.length !== 1) return\n const firstChild = node.children?.[0]\n if (!firstChild || firstChild.type !== 'image') return\n\n const { url, alt, title } = firstChild as Node & {\n url: string\n alt: string\n title: string\n }\n const newNode = {\n type: 'image-block',\n url,\n alt,\n title,\n }\n\n parent.children.splice(index, 1, newNode)\n }\n )\n}\n\nexport const remarkImageBlockPlugin = $remark(\n 'remark-image-block',\n () => () => visitImage\n)\n\nwithMeta(remarkImageBlockPlugin.plugin, {\n displayName: 'Remark<remarkImageBlock>',\n group: 'ImageBlock',\n})\n\nwithMeta(remarkImageBlockPlugin.options, {\n displayName: 'RemarkConfig<remarkImageBlock>',\n group: 'ImageBlock',\n})\n","// Prevent tree-shaking from removing Vue's `h` and `Fragment`,\n// which are required at runtime for TSX to work.\nexport function keepAlive(..._args: unknown[]) {}\n","import clsx from 'clsx'\nimport DOMPurify from 'dompurify'\nimport { h } from 'vue'\n\nimport { keepAlive } from '../keep-alive'\n\nkeepAlive(h)\n\ntype IconProps = {\n icon?: string | null\n class?: string\n onClick?: (event: PointerEvent) => void\n}\n\nexport function Icon({ icon, class: className, onClick }: IconProps) {\n return (\n <span\n class={clsx('milkdown-icon', className)}\n onPointerdown={onClick}\n innerHTML={icon ? DOMPurify.sanitize(icon.trim()) : undefined}\n />\n )\n}\n\nIcon.props = {\n icon: {\n type: String,\n required: false,\n },\n class: {\n type: String,\n required: false,\n },\n onClick: {\n type: Function,\n required: false,\n },\n}\n","import clsx from 'clsx'\nimport { customAlphabet } from 'nanoid'\nimport { defineComponent, ref, h, type Ref } from 'vue'\n\nimport { keepAlive } from '../keep-alive'\nimport { Icon } from './icon'\n\nkeepAlive(h)\n\nconst nanoid = customAlphabet('abcdefg', 8)\n\ntype ImageInputProps = {\n src: Ref<string | undefined>\n selected: Ref<boolean>\n readonly: Ref<boolean>\n setLink: (link: string) => void\n\n imageIcon?: string\n uploadButton?: string\n confirmButton?: string\n uploadPlaceholderText?: string\n\n className?: string\n\n onUpload: (file: File) => Promise<string>\n onImageLoadError?: (event: Event) => void | Promise<void>\n}\n\nexport const ImageInput = defineComponent<ImageInputProps>({\n props: {\n src: {\n type: Object,\n required: true,\n },\n selected: {\n type: Object,\n required: true,\n },\n readonly: {\n type: Object,\n required: true,\n },\n setLink: {\n type: Function,\n required: true,\n },\n imageIcon: {\n type: String,\n required: false,\n },\n uploadButton: {\n type: String,\n required: false,\n },\n confirmButton: {\n type: String,\n required: false,\n },\n uploadPlaceholderText: {\n type: String,\n required: false,\n },\n onUpload: {\n type: Function,\n required: true,\n },\n onImageLoadError: {\n type: Function,\n required: false,\n },\n },\n setup({\n readonly,\n src,\n setLink,\n onUpload,\n imageIcon,\n uploadButton,\n confirmButton,\n uploadPlaceholderText,\n className,\n onImageLoadError,\n }) {\n const focusLinkInput = ref(false)\n const linkInputRef = ref<HTMLInputElement>()\n const currentLink = ref(src.value ?? '')\n const uuid = ref(nanoid())\n const hidePlaceholder = ref(src.value?.length !== 0)\n const onEditLink = (e: Event) => {\n const target = e.target as HTMLInputElement\n const value = target.value\n hidePlaceholder.value = value.length !== 0\n currentLink.value = value\n }\n\n const isValidUrl = (url: string) => {\n if (!url) return false\n const trimmedUrl = url.trim()\n return /^(https?:\\/\\/|\\/|\\.\\.?\\/|data:image\\/|blob:|[a-zA-Z0-9-]+\\.[a-zA-Z]+)/i.test(trimmedUrl)\n }\n\n const onKeydown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n const val = linkInputRef.value?.value?.trim() ?? ''\n\n // Stop bubbling so ProseMirror doesn't handle the Enter key \n // regardless of whether the URL is valid or not.\n e.preventDefault()\n e.stopPropagation()\n\n if (isValidUrl(val)) {\n setLink(val)\n }\n }\n }\n\n const onConfirmLinkInput = () => {\n const val = linkInputRef.value?.value?.trim() ?? ''\n if (isValidUrl(val)) {\n setLink(val)\n }\n }\n\n const onUploadFile = (e: Event) => {\n const file = (e.target as HTMLInputElement).files?.[0]\n if (!file) return\n\n onUpload(file)\n .then((url) => {\n if (!url) return\n\n setLink(url)\n hidePlaceholder.value = true\n })\n .catch((err) => {\n console.error('An error occurred while uploading image')\n console.error(err)\n })\n }\n\n return () => {\n return (\n <div class={clsx('image-edit', className)}>\n <Icon icon={imageIcon} class=\"image-icon\" />\n <div class={clsx('link-importer', focusLinkInput.value && 'focus')}>\n <input\n ref={linkInputRef}\n draggable=\"true\"\n onDragstart={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n disabled={readonly.value}\n class=\"link-input-area\"\n value={currentLink.value}\n onInput={onEditLink}\n onKeydown={onKeydown}\n onFocus={() => (focusLinkInput.value = true)}\n onBlur={() => (focusLinkInput.value = false)}\n />\n {!hidePlaceholder.value && (\n <div class=\"placeholder\">\n <input\n disabled={readonly.value}\n class=\"hidden\"\n id={uuid.value}\n type=\"file\"\n accept=\"image/*\"\n onChange={onUploadFile}\n />\n <label class=\"uploader\" for={uuid.value}>\n <Icon icon={uploadButton} />\n </label>\n <span class=\"text\" onClick={() => linkInputRef.value?.focus()}>\n {uploadPlaceholderText}\n </span>\n </div>\n )}\n </div>\n {currentLink.value && (\n <>\n {isValidUrl(currentLink.value) && (\n <div class=\"image-preview\">\n <img\n src={currentLink.value}\n alt=\"\"\n onError={(e) =>\n Promise.resolve(onImageLoadError?.(e)).catch(() => { })\n }\n />\n </div>\n )}\n <div\n class={clsx('confirm', !isValidUrl(currentLink.value) && 'disabled')}\n onClick={() => onConfirmLinkInput()}\n style={!isValidUrl(currentLink.value) ? { opacity: 0.5, cursor: 'not-allowed' } : undefined}\n >\n <Icon icon={confirmButton} />\n </div>\n </>\n )}\n </div>\n )\n }\n },\n})\n","import { defineComponent, ref, h, Fragment } from 'vue'\n\nimport type { MilkdownImageBlockProps } from './image-block'\n\nimport { Icon } from '../../../__internal__/components/icon'\nimport { keepAlive } from '../../../__internal__/keep-alive'\nimport { IMAGE_DATA_TYPE } from '../../schema'\n\nkeepAlive(h, Fragment)\n\nconst ratioMap: Record<string, number> = {\n '1:1': 1,\n '4:3': 4 / 3,\n '3:2': 3 / 2,\n '16:9': 16 / 9,\n}\n\nexport const ImageViewer = defineComponent<MilkdownImageBlockProps>({\n props: {\n src: { type: Object, required: true },\n caption: { type: Object, required: true },\n ratio: { type: Object, required: true },\n align: { type: Object, required: true },\n cropRatio: { type: Object, required: true },\n cropTop: { type: Object, required: true },\n cropLeft: { type: Object, required: true },\n cropWidth: { type: Object, required: true },\n cropHeight: { type: Object, required: true },\n borderWidth: { type: Object, required: true },\n borderColor: { type: Object, required: true },\n borderStyle: { type: Object, required: true },\n selected: { type: Object, required: true },\n readonly: { type: Object, required: true },\n setAttr: { type: Function, required: true },\n config: { type: Object, required: true },\n },\n setup({\n src,\n caption,\n ratio,\n readonly,\n setAttr,\n config,\n cropRatio,\n cropTop,\n cropLeft,\n cropWidth,\n cropHeight,\n borderWidth,\n borderColor,\n borderStyle,\n }) {\n const imageRef = ref<HTMLImageElement>()\n const wrapperRef = ref<HTMLDivElement>()\n const showCaption = ref(Boolean(caption.value?.length))\n const timer = ref(0)\n const showBorderPanel = ref(false)\n const isCropping = ref(false)\n\n const baseDisplayW = ref(0)\n const baseDisplayH = ref(0)\n const liveRatio = ref<number | null>(null)\n const localBorderWidth = ref<number | null>(null)\n const localBorderColor = ref<string | null>(null)\n\n // Local crop state for interactive editing\n const localCrop = ref({ top: 0, left: 0, width: 1, height: 1 })\n\n let resizeDir = ''\n let startY = 0\n let startX = 0\n let startHeight = 0\n let startWidth = 0\n\n const isCropped = () => {\n const t = cropTop.value ?? 0\n const l = cropLeft.value ?? 0\n const w = cropWidth.value ?? 1\n const h = cropHeight.value ?? 1\n return t > 0.001 || l > 0.001 || w < 0.999 || h < 0.999\n }\n\n const onImageLoad = () => {\n const image = imageRef.value\n if (!image) return\n const host = image.closest('.milkdown-image-block')\n if (!host) return\n\n let maxWidth = host.getBoundingClientRect().width\n if (!maxWidth) return\n\n if (config.maxWidth && config.maxWidth < maxWidth)\n maxWidth = config.maxWidth\n\n const height = image.naturalHeight\n const width = image.naturalWidth\n if (!height || !width) return\n\n const aspect = width / height\n\n let transformedWidth = width < maxWidth ? width : maxWidth\n let transformedHeight = transformedWidth / aspect\n\n if (config.maxHeight && transformedHeight > config.maxHeight) {\n transformedHeight = config.maxHeight\n transformedWidth = transformedHeight * aspect\n }\n\n baseDisplayH.value = transformedHeight\n baseDisplayW.value = transformedWidth\n }\n\n const onToggleCaption = (e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (readonly.value) return\n showCaption.value = !showCaption.value\n }\n\n const onInputCaption = (e: Event) => {\n const target = e.target as HTMLInputElement\n const value = target.value\n if (timer.value) window.clearTimeout(timer.value)\n\n timer.value = window.setTimeout(() => {\n setAttr('caption', value)\n }, 1000)\n }\n\n const onBlurCaption = (e: Event) => {\n const target = e.target as HTMLInputElement\n const value = target.value\n if (timer.value) {\n window.clearTimeout(timer.value)\n timer.value = 0\n }\n\n setAttr('caption', value)\n }\n\n const onResizeHandlePointerMove = (e: PointerEvent) => {\n e.preventDefault()\n\n const deltaY = e.clientY - startY\n const deltaX = e.clientX - startX\n\n const aspect = startHeight / (startWidth || 1)\n let dhY = resizeDir.includes('bottom') ? deltaY : -deltaY\n let dhX = 0\n\n if (resizeDir.includes('right')) {\n dhX = deltaX * aspect\n } else if (resizeDir.includes('left')) {\n dhX = -deltaX * aspect\n }\n\n const dh = Math.abs(dhX) > Math.abs(dhY) ? dhX : dhY\n let newWrapperHeight = startHeight + dh\n\n let newWrapperWidth = newWrapperHeight * (startWidth / (startHeight || 1))\n\n if (newWrapperHeight < 20) {\n newWrapperHeight = 20\n newWrapperWidth = newWrapperHeight * (startWidth / (startHeight || 1))\n }\n\n if (newWrapperWidth < 20) {\n newWrapperWidth = 20\n newWrapperHeight = newWrapperWidth / (startWidth / (startHeight || 1))\n }\n\n const image = imageRef.value\n const host = image?.closest('.milkdown-image-block')\n const hostWidth = host?.getBoundingClientRect().width\n const maxW =\n config.maxWidth && hostWidth\n ? Math.min(config.maxWidth, hostWidth)\n : hostWidth || Infinity\n\n if (newWrapperWidth > maxW) {\n newWrapperWidth = maxW\n newWrapperHeight = newWrapperWidth / (startWidth / (startHeight || 1))\n }\n\n if (config.maxHeight && newWrapperHeight > config.maxHeight) {\n newWrapperHeight = config.maxHeight\n }\n\n const cHeight =\n isCropped() && !isCropping.value ? (cropHeight.value ?? 1) : 1\n const newBaseHeight = newWrapperHeight / cHeight\n\n const newRatio = newBaseHeight / (baseDisplayH.value || 1)\n liveRatio.value = Number(newRatio.toFixed(2))\n }\n\n const onResizeHandlePointerUp = () => {\n window.removeEventListener('pointermove', onResizeHandlePointerMove)\n window.removeEventListener('pointerup', onResizeHandlePointerUp)\n\n if (liveRatio.value !== null) {\n setAttr('ratio', liveRatio.value)\n liveRatio.value = null\n }\n }\n\n const onResizeHandlePointerDown = (e: PointerEvent, dir: string) => {\n if (readonly.value) return\n e.preventDefault()\n e.stopPropagation()\n resizeDir = dir\n startY = e.clientY\n startX = e.clientX\n const wrapper = wrapperRef.value\n if (wrapper) {\n startHeight = wrapper.getBoundingClientRect().height\n startWidth = wrapper.getBoundingClientRect().width\n }\n liveRatio.value = ratio.value ?? 1\n window.addEventListener('pointermove', onResizeHandlePointerMove)\n window.addEventListener('pointerup', onResizeHandlePointerUp)\n }\n\n // --- Crop box interaction ---\n const borderStyleOptions = [\n { label: 'none', value: 'none' },\n { label: 'solid', value: 'solid' },\n { label: 'dashed', value: 'dashed' },\n { label: 'dotted', value: 'dotted' },\n ]\n\n const onToggleCropPanel = (e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (readonly.value) return\n showBorderPanel.value = false\n if (isCropping.value) {\n isCropping.value = false\n } else {\n startCropping()\n }\n }\n\n const onToggleBorderPanel = (e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (readonly.value) return\n showBorderPanel.value = !showBorderPanel.value\n }\n\n const closePanels = () => {\n showBorderPanel.value = false\n }\n\n const startCropping = () => {\n localCrop.value = {\n top: cropTop.value ?? 0,\n left: cropLeft.value ?? 0,\n width: cropWidth.value ?? 1,\n height: cropHeight.value ?? 1,\n }\n isCropping.value = true\n }\n\n const applyCrop = () => {\n setAttr('cropTop', localCrop.value.top)\n setAttr('cropLeft', localCrop.value.left)\n setAttr('cropWidth', localCrop.value.width)\n setAttr('cropHeight', localCrop.value.height)\n isCropping.value = false\n }\n\n const cancelCrop = () => {\n isCropping.value = false\n }\n\n const resetCrop = () => {\n setAttr('cropTop', 0)\n setAttr('cropLeft', 0)\n setAttr('cropWidth', 1)\n setAttr('cropHeight', 1)\n }\n\n // Crop box drag state\n let cropDragType = '' // 'move' | 'nw' | 'ne' | 'sw' | 'se' | 'n' | 's' | 'e' | 'w'\n let cropStartX = 0\n let cropStartY = 0\n let cropStartBox = { top: 0, left: 0, width: 1, height: 1 }\n\n const onCropBoxPointerDown = (e: PointerEvent, type: string) => {\n e.preventDefault()\n e.stopPropagation()\n cropDragType = type\n cropStartX = e.clientX\n cropStartY = e.clientY\n cropStartBox = { ...localCrop.value }\n window.addEventListener('pointermove', onCropBoxPointerMove)\n window.addEventListener('pointerup', onCropBoxPointerUp)\n }\n\n const onCropBoxPointerMove = (e: PointerEvent) => {\n const wrapper = wrapperRef.value\n if (!wrapper) return\n const rect = wrapper.getBoundingClientRect()\n if (!rect.width || !rect.height) return\n\n const dx = (e.clientX - cropStartX) / rect.width\n const dy = (e.clientY - cropStartY) / rect.height\n\n const ar = ratioMap[cropRatio.value ?? 'free']\n let box = { ...cropStartBox }\n\n if (cropDragType === 'move') {\n box.left = Math.max(0, Math.min(1 - box.width, cropStartBox.left + dx))\n box.top = Math.max(0, Math.min(1 - box.height, cropStartBox.top + dy))\n } else {\n const isLeft =\n cropDragType === 'nw' || cropDragType === 'sw' || cropDragType === 'w'\n const isTop =\n cropDragType === 'nw' || cropDragType === 'ne' || cropDragType === 'n'\n const isRight =\n cropDragType === 'ne' || cropDragType === 'se' || cropDragType === 'e'\n const isBottom =\n cropDragType === 'sw' || cropDragType === 'se' || cropDragType === 's'\n const isHorizontal = cropDragType === 'n' || cropDragType === 's'\n const isVertical = cropDragType === 'e' || cropDragType === 'w'\n\n let newLeft = cropStartBox.left\n let newTop = cropStartBox.top\n let newWidth = cropStartBox.width\n let newHeight = cropStartBox.height\n\n if (isLeft) {\n newWidth = cropStartBox.width - dx\n newLeft = cropStartBox.left + dx\n } else if (isRight) {\n newWidth = cropStartBox.width + dx\n }\n\n if (isTop) {\n newHeight = cropStartBox.height - dy\n newTop = cropStartBox.top + dy\n } else if (isBottom) {\n newHeight = cropStartBox.height + dy\n }\n\n // Enforce aspect ratio if set (only for corner handles)\n if (ar && !isHorizontal && !isVertical) {\n const cropPixelW = newWidth * rect.width\n const desiredH = cropPixelW / ar / rect.height\n\n if (isTop) {\n newTop = newTop + newHeight - desiredH\n }\n newHeight = desiredH\n }\n\n // Clamp\n if (newWidth < 0.05) newWidth = 0.05\n if (newHeight < 0.05) newHeight = 0.05\n if (newLeft < 0) {\n newWidth += newLeft\n newLeft = 0\n }\n if (newTop < 0) {\n newHeight += newTop\n newTop = 0\n }\n if (newLeft + newWidth > 1) newWidth = 1 - newLeft\n if (newTop + newHeight > 1) newHeight = 1 - newTop\n\n box = { left: newLeft, top: newTop, width: newWidth, height: newHeight }\n }\n\n localCrop.value = box\n }\n\n const onCropBoxPointerUp = () => {\n window.removeEventListener('pointermove', onCropBoxPointerMove)\n window.removeEventListener('pointerup', onCropBoxPointerUp)\n cropDragType = ''\n }\n\n return () => {\n const currentBorderStyle = borderStyle.value ?? 'none'\n const currentBorderWidth =\n localBorderWidth.value !== null\n ? localBorderWidth.value\n : (borderWidth.value ?? 0)\n const currentBorderColor =\n localBorderColor.value !== null\n ? localBorderColor.value\n : (borderColor.value ?? '#000000')\n const cTop = cropTop.value ?? 0\n const cLeft = cropLeft.value ?? 0\n const cWidth = cropWidth.value ?? 1\n const cHeight = cropHeight.value ?? 1\n\n const cropped = isCropped()\n\n const borderStyleStr =\n currentBorderStyle !== 'none' && currentBorderWidth > 0\n ? `${currentBorderWidth}px ${currentBorderStyle} ${currentBorderColor}`\n : undefined\n\n const currentRatio =\n liveRatio.value !== null ? liveRatio.value : (ratio.value ?? 1)\n\n let baseW = baseDisplayW.value * currentRatio\n let baseH = baseDisplayH.value * currentRatio\n\n const image = imageRef.value\n const host = image?.closest('.milkdown-image-block')\n const hostWidth = host?.getBoundingClientRect().width\n const maxW =\n config.maxWidth && hostWidth\n ? Math.min(config.maxWidth, hostWidth)\n : hostWidth || Infinity\n\n const visibleW = isCropping.value\n ? baseW\n : cropped\n ? baseW * cWidth\n : baseW\n\n if (visibleW > maxW && maxW > 0) {\n const scale = maxW / visibleW\n baseW = baseW * scale\n baseH = baseH * scale\n }\n\n const cropPxW = baseW * cWidth\n const cropPxH = baseH * cHeight\n const cropPxL = baseW * cLeft\n const cropPxT = baseH * cTop\n\n const wrapperStyle: Record<string, string> = {\n minWidth: '20px',\n minHeight: '20px',\n border: !isCropping.value ? (borderStyleStr ?? '') : '',\n }\n if (cropped && !isCropping.value && cropPxW > 0 && cropPxH > 0) {\n wrapperStyle.width = `${cropPxW}px`\n wrapperStyle.height = `${cropPxH}px`\n }\n const cropClipStyle: Record<string, string> | null =\n cropped && !isCropping.value && baseW > 0 && baseH > 0\n ? {\n width: `${cropPxW}px`,\n height: `${cropPxH}px`,\n overflow: 'hidden',\n }\n : null\n\n const imgStyle: Record<string, string> = {\n minWidth: '0px',\n minHeight: '0px',\n }\n if (cropped && !isCropping.value && baseW > 0 && baseH > 0) {\n imgStyle.width = `${baseW}px`\n imgStyle.height = `${baseH}px`\n imgStyle.maxWidth = 'none'\n imgStyle.marginLeft = `${-cropPxL}px`\n imgStyle.marginTop = `${-cropPxT}px`\n } else {\n if (baseH > 0 && baseW > 0) {\n imgStyle.width = `${baseW}px`\n imgStyle.height = `${baseH}px`\n if (config.maxWidth) imgStyle.maxWidth = `${config.maxWidth}px`\n }\n }\n\n return (\n <>\n {!isCropping.value ? (\n <div\n class=\"image-toolbar\"\n onClick={(e) => e.stopPropagation()}\n onMousedown={(e) => e.stopPropagation()}\n onDragstart={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n >\n <div\n class=\"image-toolbar-item\"\n title=\"标题\"\n onClick={onToggleCaption}\n >\n <Icon icon={config.captionIcon} />\n </div>\n {config.cropIcon ? (\n <div\n class=\"image-toolbar-item\"\n title=\"裁剪\"\n onClick={onToggleCropPanel}\n >\n <Icon icon={config.cropIcon} />\n </div>\n ) : null}\n {cropped ? (\n <div\n class=\"image-toolbar-item\"\n title=\"恢复裁剪\"\n onClick={(e: MouseEvent) => {\n e.stopPropagation()\n resetCrop()\n }}\n >\n <Icon icon={config.resetCropIcon ?? '↩'} />\n </div>\n ) : null}\n {config.borderIcon ? (\n <div\n class=\"image-toolbar-item\"\n title=\"边框\"\n onClick={onToggleBorderPanel}\n >\n <Icon icon={config.borderIcon} />\n </div>\n ) : null}\n\n {showBorderPanel.value ? (\n <div\n class=\"setting-panel border-panel\"\n draggable=\"true\"\n onClick={(e) => e.stopPropagation()}\n onMousedown={(e) => e.stopPropagation()}\n onPointerdown={(e) => e.stopPropagation()}\n onDragstart={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n >\n <div class=\"setting-panel-title\">{'边框设置'}</div>\n <div class=\"setting-row\">\n <span class=\"setting-label\">{'样式'}</span>\n <div class=\"border-style-options\">\n {borderStyleOptions.map((opt) => (\n <div\n class={`border-style-option ${currentBorderStyle === opt.value ? 'active' : ''}`}\n onClick={(e: MouseEvent) => {\n e.stopPropagation()\n setAttr('borderStyle', opt.value)\n }}\n >\n {opt.label === 'none'\n ? '无'\n : opt.label === 'solid'\n ? '实线'\n : opt.label === 'dashed'\n ? '虚线'\n : '点线'}\n </div>\n ))}\n </div>\n </div>\n {currentBorderStyle !== 'none' ? (\n <div class=\"setting-row\">\n <span class=\"setting-label\">{'宽度'}</span>\n <input\n draggable=\"true\"\n type=\"range\"\n min=\"1\"\n max=\"10\"\n value={currentBorderWidth}\n onInput={(e: Event) => {\n const target = e.target as HTMLInputElement\n localBorderWidth.value = Number(target.value)\n }}\n onChange={(e: Event) => {\n const target = e.target as HTMLInputElement\n setAttr('borderWidth', Number(target.value))\n localBorderWidth.value = null\n }}\n onClick={(e: MouseEvent) => e.stopPropagation()}\n onMousedown={(e: MouseEvent) => e.stopPropagation()}\n onPointerdown={(e: PointerEvent) => e.stopPropagation()}\n onDragstart={(e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n />\n <span class=\"setting-value\">{currentBorderWidth}px</span>\n </div>\n ) : null}\n {currentBorderStyle !== 'none' ? (\n <div class=\"setting-row\">\n <span class=\"setting-label\">{'颜色'}</span>\n <input\n draggable=\"true\"\n type=\"color\"\n value={currentBorderColor}\n onInput={(e: Event) => {\n const target = e.target as HTMLInputElement\n localBorderColor.value = target.value\n }}\n onChange={(e: Event) => {\n const target = e.target as HTMLInputElement\n setAttr('borderColor', target.value)\n localBorderColor.value = null\n }}\n onClick={(e: MouseEvent) => e.stopPropagation()}\n onMousedown={(e: MouseEvent) => e.stopPropagation()}\n onPointerdown={(e: PointerEvent) => e.stopPropagation()}\n onDragstart={(e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n />\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n\n <div\n class={`image-wrapper${isCropping.value ? ' cropping' : ''}`}\n ref={wrapperRef}\n style={wrapperStyle}\n onClick={closePanels}\n >\n {cropClipStyle ? (\n <div class=\"crop-clip\" style={cropClipStyle}>\n <img\n draggable=\"false\"\n ref={imageRef}\n data-type={IMAGE_DATA_TYPE}\n onLoad={onImageLoad}\n src={src.value}\n alt={caption.value}\n style={imgStyle}\n onError={(e) =>\n Promise.resolve(config.onImageLoadError?.(e)).catch(\n () => {}\n )\n }\n />\n </div>\n ) : (\n <img\n draggable=\"false\"\n ref={imageRef}\n data-type={IMAGE_DATA_TYPE}\n onLoad={onImageLoad}\n src={src.value}\n alt={caption.value}\n style={imgStyle}\n onError={(e) =>\n Promise.resolve(config.onImageLoadError?.(e)).catch(() => {})\n }\n />\n )}\n\n {/* Crop overlay */}\n {isCropping.value ? (\n <div class=\"crop-overlay\" onClick={(e) => e.stopPropagation()}>\n <div\n class=\"crop-box\"\n style={{\n top: `${(localCrop.value.top * 100).toFixed(2)}%`,\n left: `${(localCrop.value.left * 100).toFixed(2)}%`,\n width: `${(localCrop.value.width * 100).toFixed(2)}%`,\n height: `${(localCrop.value.height * 100).toFixed(2)}%`,\n }}\n onPointerdown={(e: PointerEvent) =>\n onCropBoxPointerDown(e, 'move')\n }\n >\n {/* 3x3 grid lines */}\n <div class=\"crop-grid\">\n <div class=\"crop-grid-line horizontal first\" />\n <div class=\"crop-grid-line horizontal second\" />\n <div class=\"crop-grid-line vertical first\" />\n <div class=\"crop-grid-line vertical second\" />\n </div>\n {/* Corner handles */}\n <div\n class=\"crop-handle nw\"\n onPointerdown={(e: PointerEvent) =>\n onCropBoxPointerDown(e, 'nw')\n }\n />\n <div\n class=\"crop-handle ne\"\n onPointerdown={(e: PointerEvent) =>\n onCropBoxPointerDown(e, 'ne')\n }\n />\n <div\n class=\"crop-handle sw\"\n onPointerdown={(e: PointerEvent) =>\n onCropBoxPointerDown(e, 'sw')\n }\n />\n <div\n class=\"crop-handle se\"\n onPointerdown={(e: PointerEvent) =>\n onCropBoxPointerDown(e, 'se')\n }\n />\n {/* Edge midpoint handles */}\n <div\n class=\"crop-handle n\"\n onPointerdown={(e: PointerEvent) =>\n onCropBoxPointerDown(e, 'n')\n }\n />\n <div\n class=\"crop-handle s\"\n onPointerdown={(e: PointerEvent) =>\n onCropBoxPointerDown(e, 's')\n }\n />\n <div\n class=\"crop-handle e\"\n onPointerdown={(e: PointerEvent) =>\n onCropBoxPointerDown(e, 'e')\n }\n />\n <div\n class=\"crop-handle w\"\n onPointerdown={(e: PointerEvent) =>\n onCropBoxPointerDown(e, 'w')\n }\n />\n </div>\n {/* Bottom toolbar */}\n <div class=\"crop-toolbar\">\n <div\n class=\"crop-toolbar-btn\"\n onClick={(e: MouseEvent) => {\n e.stopPropagation()\n applyCrop()\n }}\n >\n <Icon icon={config.confirmIcon ?? '✓'} />\n </div>\n <div\n class=\"crop-toolbar-btn\"\n onClick={(e: MouseEvent) => {\n e.stopPropagation()\n cancelCrop()\n }}\n >\n <Icon icon={config.cancelIcon ?? '✕'} />\n </div>\n </div>\n </div>\n ) : null}\n\n {!isCropping.value ? (\n <>\n <div\n class=\"image-resize-handle top-left\"\n onPointerdown={(e) =>\n onResizeHandlePointerDown(e, 'top-left')\n }\n />\n <div\n class=\"image-resize-handle top-right\"\n onPointerdown={(e) =>\n onResizeHandlePointerDown(e, 'top-right')\n }\n />\n <div\n class=\"image-resize-handle bottom-left\"\n onPointerdown={(e) =>\n onResizeHandlePointerDown(e, 'bottom-left')\n }\n />\n <div\n class=\"image-resize-handle bottom-right\"\n onPointerdown={(e) =>\n onResizeHandlePointerDown(e, 'bottom-right')\n }\n />\n </>\n ) : null}\n </div>\n {showCaption.value && (\n <input\n draggable=\"true\"\n onDragstart={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n class=\"caption-input\"\n placeholder={config?.captionPlaceholderText}\n onInput={onInputCaption}\n onBlur={onBlurCaption}\n value={caption.value}\n />\n )}\n </>\n )\n }\n },\n})\n","import { h, Fragment, type Ref, defineComponent } from 'vue'\n\nimport type { ImageBlockConfig } from '../../config'\n\nimport { ImageInput } from '../../../__internal__/components/image-input'\nimport { keepAlive } from '../../../__internal__/keep-alive'\nimport { ImageViewer } from './image-viewer'\n\nkeepAlive(h, Fragment)\n\ntype Attrs = {\n src: string\n caption: string\n ratio: number\n align: string | null\n cropRatio: string\n cropTop: number\n cropLeft: number\n cropWidth: number\n cropHeight: number\n borderWidth: number\n borderColor: string\n borderStyle: string\n}\n\nexport type MilkdownImageBlockProps = {\n selected: Ref<boolean>\n readonly: Ref<boolean>\n setAttr: <T extends keyof Attrs>(attr: T, value: Attrs[T]) => void\n config: ImageBlockConfig\n} & {\n [P in keyof Attrs]: Ref<Attrs[P] | undefined>\n}\n\nexport const MilkdownImageBlock = defineComponent<MilkdownImageBlockProps>({\n props: {\n src: {\n type: Object,\n required: true,\n },\n caption: {\n type: Object,\n required: true,\n },\n ratio: {\n type: Object,\n required: true,\n },\n align: {\n type: Object,\n required: true,\n },\n cropRatio: {\n type: Object,\n required: true,\n },\n cropTop: {\n type: Object,\n required: true,\n },\n cropLeft: {\n type: Object,\n required: true,\n },\n cropWidth: {\n type: Object,\n required: true,\n },\n cropHeight: {\n type: Object,\n required: true,\n },\n borderWidth: {\n type: Object,\n required: true,\n },\n borderColor: {\n type: Object,\n required: true,\n },\n borderStyle: {\n type: Object,\n required: true,\n },\n selected: {\n type: Object,\n required: true,\n },\n readonly: {\n type: Object,\n required: true,\n },\n setAttr: {\n type: Function,\n required: true,\n },\n config: {\n type: Object,\n required: true,\n },\n },\n setup(props) {\n const { src } = props\n\n return () => {\n if (!src.value?.length) {\n return (\n <ImageInput\n src={props.src}\n selected={props.selected}\n readonly={props.readonly}\n setLink={(link) => props.setAttr('src', link)}\n imageIcon={props.config.imageIcon}\n uploadButton={props.config.uploadButton}\n confirmButton={props.config.confirmButton}\n uploadPlaceholderText={props.config.uploadPlaceholderText}\n onUpload={props.config.onUpload}\n onImageLoadError={props.config.onImageLoadError}\n />\n )\n }\n return <ImageViewer {...props} />\n }\n },\n})\n","import type { Node } from '@jvs-milkdown/prose/model'\nimport type { NodeViewConstructor } from '@jvs-milkdown/prose/view'\n\nimport { $view } from '@jvs-milkdown/utils'\nimport DOMPurify from 'dompurify'\nimport { createApp, ref, watchEffect } from 'vue'\n\nimport { withMeta } from '../../__internal__/meta'\nimport { imageBlockConfig } from '../config'\nimport { imageBlockSchema } from '../schema'\nimport { MilkdownImageBlock } from './components/image-block'\n\nexport const imageBlockView = $view(\n imageBlockSchema.node,\n (ctx): NodeViewConstructor => {\n return (initialNode, view, getPos) => {\n const src = ref(initialNode.attrs.src)\n const caption = ref(initialNode.attrs.caption)\n const ratio = ref(initialNode.attrs.ratio)\n const align = ref(initialNode.attrs.align)\n const cropRatio = ref(initialNode.attrs.cropRatio)\n const cropTop = ref(initialNode.attrs.cropTop)\n const cropLeft = ref(initialNode.attrs.cropLeft)\n const cropWidth = ref(initialNode.attrs.cropWidth)\n const cropHeight = ref(initialNode.attrs.cropHeight)\n const borderWidth = ref(initialNode.attrs.borderWidth)\n const borderColor = ref(initialNode.attrs.borderColor)\n const borderStyle = ref(initialNode.attrs.borderStyle)\n const selected = ref(false)\n const readonly = ref(!view.editable)\n const setAttr = (attr: string, value: unknown) => {\n if (!view.editable) return\n const pos = getPos()\n if (pos == null) return\n view.dispatch(\n view.state.tr.setNodeAttribute(\n pos,\n attr,\n attr === 'src' ? DOMPurify.sanitize(value as string) : value\n )\n )\n }\n const config = ctx.get(imageBlockConfig.key)\n const app = createApp(MilkdownImageBlock, {\n src,\n caption,\n ratio,\n align,\n cropRatio,\n cropTop,\n cropLeft,\n cropWidth,\n cropHeight,\n borderWidth,\n borderColor,\n borderStyle,\n selected,\n readonly,\n setAttr,\n config,\n })\n const dom = document.createElement('div')\n dom.className = 'milkdown-image-block'\n dom.dataset.align = initialNode.attrs.align || 'center'\n const disposeSelectedWatcher = watchEffect(() => {\n const isSelected = selected.value\n if (isSelected) {\n dom.classList.add('selected')\n } else {\n dom.classList.remove('selected')\n }\n })\n const disposeAlignWatcher = watchEffect(() => {\n dom.dataset.align = align.value || 'center'\n })\n const disposeCropWatcher = watchEffect(() => {\n dom.dataset.cropRatio = cropRatio.value || 'free'\n })\n const disposeBorderWatcher = watchEffect(() => {\n const w = borderWidth.value ?? 0\n const c = borderColor.value ?? '#000000'\n const s = borderStyle.value ?? 'none'\n dom.dataset.borderWidth = String(w)\n dom.dataset.borderColor = c\n dom.dataset.borderStyle = s\n })\n const proxyDomURL = config.proxyDomURL\n const bindAttrs = (node: Node) => {\n if (!proxyDomURL) {\n src.value = node.attrs.src\n } else {\n const proxiedURL = proxyDomURL(node.attrs.src)\n if (typeof proxiedURL === 'string') {\n src.value = proxiedURL\n } else {\n proxiedURL\n .then((url) => {\n src.value = url\n })\n .catch(console.error)\n }\n }\n ratio.value = node.attrs.ratio\n caption.value = node.attrs.caption\n align.value = node.attrs.align\n cropRatio.value = node.attrs.cropRatio\n cropTop.value = node.attrs.cropTop\n cropLeft.value = node.attrs.cropLeft\n cropWidth.value = node.attrs.cropWidth\n cropHeight.value = node.attrs.cropHeight\n borderWidth.value = node.attrs.borderWidth\n borderColor.value = node.attrs.borderColor\n borderStyle.value = node.attrs.borderStyle\n\n readonly.value = !view.editable\n }\n\n bindAttrs(initialNode)\n app.mount(dom)\n\n return {\n dom,\n update: (updatedNode) => {\n if (updatedNode.type !== initialNode.type) return false\n\n bindAttrs(updatedNode)\n return true\n },\n stopEvent: (e) => {\n if (e.target instanceof HTMLInputElement) return true\n if (e.target instanceof HTMLElement && e.target.tagName === 'INPUT')\n return true\n const target = e.target as HTMLElement\n if (target.closest?.('.setting-panel, .image-toolbar, .crop-overlay'))\n return true\n\n return false\n },\n selectNode: () => {\n selected.value = true\n },\n deselectNode: () => {\n selected.value = false\n },\n destroy: () => {\n disposeSelectedWatcher()\n disposeAlignWatcher()\n disposeCropWatcher()\n disposeBorderWatcher()\n app.unmount()\n dom.remove()\n },\n }\n }\n }\n)\n\nwithMeta(imageBlockView, {\n displayName: 'NodeView<image-block>',\n group: 'ImageBlock',\n})\n","import type { MilkdownPlugin } from '@jvs-milkdown/ctx'\n\nimport { imageBlockConfig } from './config'\nimport { imageBlockConvertPlugin } from './convert-plugin'\nimport { imageBlockPasteRule } from './paste-rule'\nimport { remarkImageBlockPlugin } from './remark-plugin'\nimport { imageBlockSchema } from './schema'\nimport { imageBlockView } from './view'\n\nexport * from './schema'\nexport * from './remark-plugin'\nexport * from './config'\nexport * from './view'\nexport * from './paste-rule'\nexport * from './convert-plugin'\n\nexport const imageBlockComponent: MilkdownPlugin[] = [\n remarkImageBlockPlugin,\n imageBlockSchema,\n imageBlockView,\n imageBlockConfig,\n imageBlockPasteRule,\n imageBlockConvertPlugin,\n].flat()\n"],"names":["__spreadValues","tr","fragment","Fragment","_a","_b","h"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/__internal__/meta.ts","../../src/image-block/config.ts","../../src/image-block/schema.ts","../../src/image-block/convert-plugin.ts","../../src/image-block/paste-rule.ts","../../src/image-block/remark-plugin.ts","../../src/__internal__/keep-alive.ts","../../src/__internal__/components/icon.tsx","../../src/__internal__/components/image-input.tsx","../../src/image-block/view/components/image-viewer.tsx","../../src/image-block/view/components/image-block.tsx","../../src/image-block/view/index.ts","../../src/image-block/index.ts"],"sourcesContent":["import type { Meta, MilkdownPlugin } from '@jvs-milkdown/ctx'\n\nexport function withMeta<T extends MilkdownPlugin>(\n plugin: T,\n meta: Partial<Meta> & Pick<Meta, 'displayName'>\n): T {\n Object.assign(plugin, {\n meta: {\n package: '@jvs-milkdown/components',\n ...meta,\n },\n })\n\n return plugin\n}\n","import { $ctx } from '@jvs-milkdown/utils'\n\nimport { withMeta } from '../__internal__/meta'\n\nexport interface ImageBlockConfig {\n imageIcon: string | undefined\n captionIcon: string | undefined\n cropIcon: string | undefined\n borderIcon: string | undefined\n uploadButton: string | undefined\n confirmButton: string | undefined\n uploadPlaceholderText: string\n captionPlaceholderText: string\n onUpload: (file: File) => Promise<string>\n proxyDomURL?: (url: string) => Promise<string> | string\n onImageLoadError?: (event: Event) => void | Promise<void>\n maxWidth?: number\n maxHeight?: number\n}\n\nexport const defaultImageBlockConfig: ImageBlockConfig = {\n imageIcon: '🌌',\n captionIcon: '💬',\n cropIcon: '✂️',\n borderIcon: '🔲',\n uploadButton: 'Upload file',\n confirmButton: 'Confirm ⏎',\n uploadPlaceholderText: 'or paste the image link ...',\n captionPlaceholderText: 'Image caption',\n onUpload: (file) => Promise.resolve(URL.createObjectURL(file)),\n}\n\nexport const imageBlockConfig = $ctx(\n defaultImageBlockConfig,\n 'imageBlockConfigCtx'\n)\n\nwithMeta(imageBlockConfig, {\n displayName: 'Config<image-block>',\n group: 'ImageBlock',\n})\n","import { expectDomTypeError } from '@jvs-milkdown/exception'\nimport { $nodeSchema } from '@jvs-milkdown/utils'\n\nimport { withMeta } from '../__internal__/meta'\n\nexport const IMAGE_DATA_TYPE = 'image-block'\n\nexport const imageBlockSchema = $nodeSchema('image-block', () => {\n return {\n inline: false,\n group: 'block',\n selectable: true,\n draggable: true,\n isolating: true,\n marks: '',\n atom: true,\n priority: 100,\n attrs: {\n src: { default: '', validate: 'string' },\n caption: { default: '', validate: 'string' },\n ratio: { default: 1, validate: 'number' },\n align: { default: null },\n cropRatio: { default: 'free', validate: 'string' },\n cropTop: { default: 0, validate: 'number' },\n cropLeft: { default: 0, validate: 'number' },\n cropWidth: { default: 1, validate: 'number' },\n cropHeight: { default: 1, validate: 'number' },\n borderWidth: { default: 0, validate: 'number' },\n borderColor: { default: '#000000', validate: 'string' },\n borderStyle: { default: 'none', validate: 'string' },\n },\n parseDOM: [\n {\n tag: `img[data-type=\"${IMAGE_DATA_TYPE}\"]`,\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom)\n\n return {\n src: dom.getAttribute('src') || '',\n caption: dom.getAttribute('caption') || '',\n ratio: Number(dom.getAttribute('ratio') ?? 1),\n align: dom.getAttribute('align') || null,\n cropRatio: dom.getAttribute('cropRatio') || 'free',\n cropTop: Number(dom.getAttribute('cropTop') ?? 0),\n cropLeft: Number(dom.getAttribute('cropLeft') ?? 0),\n cropWidth: Number(dom.getAttribute('cropWidth') ?? 1),\n cropHeight: Number(dom.getAttribute('cropHeight') ?? 1),\n borderWidth: Number(dom.getAttribute('borderWidth') ?? 0),\n borderColor: dom.getAttribute('borderColor') || '#000000',\n borderStyle: dom.getAttribute('borderStyle') || 'none',\n }\n },\n },\n {\n tag: 'img[src]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom)\n if (dom.getAttribute('data-type') === IMAGE_DATA_TYPE) return false\n\n return {\n src: dom.getAttribute('src') || '',\n caption: dom.getAttribute('alt') || dom.getAttribute('title') || '',\n ratio: 1,\n }\n },\n },\n ],\n toDOM: (node) => ['img', { 'data-type': IMAGE_DATA_TYPE, ...node.attrs }],\n parseMarkdown: {\n match: ({ type }) => type === 'image-block',\n runner: (state, node, type) => {\n const src = node.url as string\n const caption = node.title as string\n let ratio = Number((node.alt as string) || 1)\n if (Number.isNaN(ratio) || ratio === 0) ratio = 1\n\n state.addNode(type, {\n src,\n caption,\n ratio,\n })\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'image-block',\n runner: (state, node) => {\n state.openNode('paragraph')\n state.addNode('image', undefined, undefined, {\n title: node.attrs.caption,\n url: node.attrs.src,\n alt: `${Number.parseFloat(node.attrs.ratio).toFixed(2)}`,\n })\n state.closeNode()\n },\n },\n }\n})\n\nwithMeta(imageBlockSchema.node, {\n displayName: 'NodeSchema<image-block>',\n group: 'ImageBlock',\n})\n","import type { Node as ProsemirrorNode } from '@jvs-milkdown/prose/model'\n\nimport { imageSchema, paragraphSchema } from '@jvs-milkdown/preset-commonmark'\nimport { Plugin, PluginKey } from '@jvs-milkdown/prose/state'\nimport { $prose } from '@jvs-milkdown/utils'\n\nimport { withMeta } from '../__internal__/meta'\nimport { imageBlockConfig } from './config'\nimport { imageBlockSchema } from './schema'\n\nexport const imageBlockConvertPlugin = $prose((ctx) => {\n const imageType = imageSchema.type(ctx)\n const imageBlockType = imageBlockSchema.type(ctx)\n const paragraphType = paragraphSchema.type(ctx)\n\n const pluginKey = new PluginKey('MILKDOWN_IMAGE_BLOCK_CONVERT')\n\n let uploading = false\n\n return new Plugin({\n key: pluginKey,\n appendTransaction(transactions, _oldState, newState) {\n if (!transactions.some((tr) => tr.docChanged)) return null\n\n const replacements: {\n from: number\n to: number\n blocks: ProsemirrorNode[]\n }[] = []\n\n // Debug: log all paragraphs with their children\n let foundImages = 0\n newState.doc.descendants((node) => {\n if (node.type === imageType) foundImages++\n })\n if (foundImages > 0) {\n // inline images found\n }\n\n newState.doc.descendants((node, pos) => {\n if (node.type !== paragraphType) return\n\n const images: ProsemirrorNode[] = []\n let hasOtherContent = false\n\n for (let i = 0; i < node.childCount; i++) {\n const child = node.child(i)\n if (child.type === imageType) {\n images.push(child)\n } else if (child.type.name === 'hardbreak') {\n continue\n } else if (child.isText && child.text?.trim() === '') {\n continue\n } else {\n hasOtherContent = true\n break\n }\n }\n\n if (hasOtherContent || images.length === 0) return\n\n const blocks = images\n .map((img) =>\n imageBlockType.create({\n src: img.attrs.src,\n caption: img.attrs.alt || img.attrs.title || '',\n ratio: 1,\n })\n )\n .filter(Boolean)\n\n if (blocks.length > 0) {\n replacements.push({ from: pos, to: pos + node.nodeSize, blocks })\n }\n })\n\n if (replacements.length === 0) return null\n\n const { tr } = newState\n for (let i = replacements.length - 1; i >= 0; i--) {\n const r = replacements[i]!\n tr.replaceWith(r.from, r.to, r.blocks)\n }\n\n return tr\n },\n view() {\n return {\n update(view) {\n if (uploading) return\n\n const config = ctx.get(imageBlockConfig.key)\n const imagesToUpload: { pos: number; src: string }[] = []\n\n view.state.doc.descendants((node, pos) => {\n if (node.type.name !== 'image-block') return\n const src: string = node.attrs.src\n if (!src || src.startsWith('data:') || src.startsWith('blob:'))\n return\n if (!/^https?:\\/\\//i.test(src)) return\n imagesToUpload.push({ pos, src })\n })\n\n if (imagesToUpload.length === 0) return\n\n uploading = true\n\n void Promise.allSettled(\n imagesToUpload.map(async ({ pos, src }) => {\n const resp = await fetch(src)\n const blob = await resp.blob()\n const ext = blob.type.split('/')[1] || 'png'\n const file = new File([blob], `pasted-image.${ext}`, {\n type: blob.type,\n })\n const uploadedUrl = await config.onUpload(file)\n\n const $pos = view.state.doc.resolve(pos)\n const nodeAtPos = $pos.nodeAfter\n if (\n nodeAtPos &&\n nodeAtPos.type.name === 'image-block' &&\n nodeAtPos.attrs.src === src\n ) {\n view.dispatch(\n view.state.tr\n .setNodeMarkup(pos, undefined, {\n ...nodeAtPos.attrs,\n src: uploadedUrl,\n })\n .setMeta(pluginKey, { uploaded: true })\n )\n }\n })\n ).finally(() => {\n uploading = false\n })\n },\n }\n },\n })\n})\n\nwithMeta(imageBlockConvertPlugin, {\n displayName: 'Prose<image-block-convert>',\n group: 'ImageBlock',\n})\n","import { imageSchema, paragraphSchema } from '@jvs-milkdown/preset-commonmark'\nimport {\n type Fragment as FragmentType,\n Fragment,\n type Node as ProsemirrorNode,\n Slice,\n} from '@jvs-milkdown/prose/model'\nimport { $pasteRule } from '@jvs-milkdown/utils'\n\nimport { withMeta } from '../__internal__/meta'\nimport { imageBlockSchema } from './schema'\n\nfunction toImageBlock(\n imageNode: ProsemirrorNode,\n imageBlockType: ProsemirrorNode['type']\n): ProsemirrorNode | null {\n return imageBlockType.create({\n src: imageNode.attrs.src,\n caption: imageNode.attrs.alt || imageNode.attrs.title || '',\n ratio: 1,\n })\n}\n\n/// A paste rule that converts standalone inline images to image-block nodes.\n/// Handles the slice structures produced when pasting HTML from external pages\n/// or from another instance of the same editor:\n/// 1. Bare `image` at fragment top-level (after Slice.maxOpen unwraps)\n/// 2. `paragraph > image` (paragraph with single image child)\n/// 3. `paragraph > [image, hard_break, ...]` (image with trailing breaks)\nexport const imageBlockPasteRule = $pasteRule((ctx) => ({\n priority: 90,\n run: (slice, _view, isPlainText) => {\n if (isPlainText) return slice\n\n const paragraphType = paragraphSchema.type(ctx)\n const imageType = imageSchema.type(ctx)\n const imageBlockType = imageBlockSchema.type(ctx)\n\n function convertFragment(fragment: FragmentType): FragmentType {\n const nodes: ProsemirrorNode[] = []\n let changed = false\n\n fragment.forEach((node) => {\n // Case 1: bare inline image at top level (after Slice.maxOpen unwraps paragraph)\n if (node.type === imageType) {\n const imageBlock = toImageBlock(node, imageBlockType)\n if (imageBlock) {\n nodes.push(imageBlock)\n changed = true\n return\n }\n }\n\n // Case 2, 3 & Mixed: Any paragraph containing images\n if (node.type === paragraphType) {\n let hasImage = false\n node.content.forEach((child) => {\n if (child.type === imageType) hasImage = true\n })\n\n if (hasImage) {\n let currentParaNodes: ProsemirrorNode[] = []\n let isFirstInsideParent = nodes.length === 0\n\n node.content.forEach((child) => {\n if (child.type === imageType) {\n // If it's the first element in the parent slice (meaning we might need an openStart anchor)\n // OR we have accumulated text nodes, push a paragraph.\n if (currentParaNodes.length > 0 || isFirstInsideParent) {\n nodes.push(node.copy(Fragment.from(currentParaNodes)))\n currentParaNodes = []\n }\n const imageBlock = toImageBlock(child, imageBlockType)\n if (imageBlock) {\n nodes.push(imageBlock)\n }\n isFirstInsideParent = false\n } else {\n currentParaNodes.push(child)\n }\n })\n // ALWAYS push the trailing paragraph at the end, even if empty.\n // This guarantees that if the fragment replacement ends here, it's a paragraph,\n // which safegaurds openEnd anchors from throwing ProseMirror slice geometry errors.\n nodes.push(node.copy(Fragment.from(currentParaNodes)))\n\n changed = true\n return\n }\n }\n\n // Recurse into children\n if (node.content.size > 0) {\n const fixedContent = convertFragment(node.content)\n if (fixedContent !== node.content) {\n changed = true\n nodes.push(node.copy(fixedContent))\n return\n }\n }\n\n nodes.push(node)\n })\n\n return changed ? Fragment.from(nodes) : fragment\n }\n\n const fragment = convertFragment(slice.content)\n return new Slice(fragment, slice.openStart, slice.openEnd)\n },\n}))\n\nwithMeta(imageBlockPasteRule, {\n displayName: 'PasteRule<image-block>',\n group: 'ImageBlock',\n})\n","import type { Node } from '@jvs-milkdown/transformer'\n\nimport { $remark } from '@jvs-milkdown/utils'\nimport { visit } from 'unist-util-visit'\n\nimport { withMeta } from '../__internal__/meta'\n\nfunction visitImage(ast: Node) {\n return visit(\n ast,\n 'paragraph',\n (\n node: Node & { children?: Node[] },\n index: number,\n parent: Node & { children: Node[] }\n ) => {\n if (node.children?.length !== 1) return\n const firstChild = node.children?.[0]\n if (!firstChild || firstChild.type !== 'image') return\n\n const { url, alt, title } = firstChild as Node & {\n url: string\n alt: string\n title: string\n }\n const newNode = {\n type: 'image-block',\n url,\n alt,\n title,\n }\n\n parent.children.splice(index, 1, newNode)\n }\n )\n}\n\nexport const remarkImageBlockPlugin = $remark(\n 'remark-image-block',\n () => () => visitImage\n)\n\nwithMeta(remarkImageBlockPlugin.plugin, {\n displayName: 'Remark<remarkImageBlock>',\n group: 'ImageBlock',\n})\n\nwithMeta(remarkImageBlockPlugin.options, {\n displayName: 'RemarkConfig<remarkImageBlock>',\n group: 'ImageBlock',\n})\n","// Prevent tree-shaking from removing Vue's `h` and `Fragment`,\n// which are required at runtime for TSX to work.\nexport function keepAlive(..._args: unknown[]) {}\n","import clsx from 'clsx'\nimport DOMPurify from 'dompurify'\nimport { h } from 'vue'\n\nimport { keepAlive } from '../keep-alive'\n\nkeepAlive(h)\n\ntype IconProps = {\n icon?: string | null\n class?: string\n onClick?: (event: PointerEvent) => void\n}\n\nexport function Icon({ icon, class: className, onClick }: IconProps) {\n return (\n <span\n class={clsx('milkdown-icon', className)}\n onPointerdown={onClick}\n innerHTML={icon ? DOMPurify.sanitize(icon.trim()) : undefined}\n />\n )\n}\n\nIcon.props = {\n icon: {\n type: String,\n required: false,\n },\n class: {\n type: String,\n required: false,\n },\n onClick: {\n type: Function,\n required: false,\n },\n}\n","import clsx from 'clsx'\nimport { customAlphabet } from 'nanoid'\nimport { defineComponent, ref, h, type Ref } from 'vue'\n\nimport { keepAlive } from '../keep-alive'\nimport { Icon } from './icon'\n\nkeepAlive(h)\n\nconst nanoid = customAlphabet('abcdefg', 8)\n\ntype ImageInputProps = {\n src: Ref<string | undefined>\n selected: Ref<boolean>\n readonly: Ref<boolean>\n setLink: (link: string) => void\n\n imageIcon?: string\n uploadButton?: string\n confirmButton?: string\n uploadPlaceholderText?: string\n\n className?: string\n\n onUpload: (file: File) => Promise<string>\n onImageLoadError?: (event: Event) => void | Promise<void>\n}\n\nexport const ImageInput = defineComponent<ImageInputProps>({\n props: {\n src: {\n type: Object,\n required: true,\n },\n selected: {\n type: Object,\n required: true,\n },\n readonly: {\n type: Object,\n required: true,\n },\n setLink: {\n type: Function,\n required: true,\n },\n imageIcon: {\n type: String,\n required: false,\n },\n uploadButton: {\n type: String,\n required: false,\n },\n confirmButton: {\n type: String,\n required: false,\n },\n uploadPlaceholderText: {\n type: String,\n required: false,\n },\n onUpload: {\n type: Function,\n required: true,\n },\n onImageLoadError: {\n type: Function,\n required: false,\n },\n },\n setup({\n readonly,\n src,\n setLink,\n onUpload,\n imageIcon,\n uploadButton,\n confirmButton,\n uploadPlaceholderText,\n className,\n onImageLoadError,\n }) {\n const focusLinkInput = ref(false)\n const linkInputRef = ref<HTMLInputElement>()\n const currentLink = ref(src.value ?? '')\n const uuid = ref(nanoid())\n const hidePlaceholder = ref(src.value?.length !== 0)\n const onEditLink = (e: Event) => {\n const target = e.target as HTMLInputElement\n const value = target.value\n hidePlaceholder.value = value.length !== 0\n currentLink.value = value\n }\n\n const isValidUrl = (url: string) => {\n if (!url) return false\n const trimmedUrl = url.trim()\n return /^(https?:\\/\\/|\\/|\\.\\.?\\/|data:image\\/|blob:|[a-zA-Z0-9-]+\\.[a-zA-Z]+)/i.test(\n trimmedUrl\n )\n }\n\n const onKeydown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n const val = linkInputRef.value?.value?.trim() ?? ''\n\n // Stop bubbling so ProseMirror doesn't handle the Enter key\n // regardless of whether the URL is valid or not.\n e.preventDefault()\n e.stopPropagation()\n\n if (isValidUrl(val)) {\n setLink(val)\n }\n }\n }\n\n const onConfirmLinkInput = () => {\n const val = linkInputRef.value?.value?.trim() ?? ''\n if (isValidUrl(val)) {\n setLink(val)\n }\n }\n\n const onUploadFile = (e: Event) => {\n const file = (e.target as HTMLInputElement).files?.[0]\n if (!file) return\n\n onUpload(file)\n .then((url) => {\n if (!url) return\n\n setLink(url)\n hidePlaceholder.value = true\n })\n .catch((err) => {\n console.error('An error occurred while uploading image')\n console.error(err)\n })\n }\n\n return () => {\n return (\n <div class={clsx('image-edit', className)}>\n <Icon icon={imageIcon} class=\"image-icon\" />\n <div class={clsx('link-importer', focusLinkInput.value && 'focus')}>\n <input\n ref={linkInputRef}\n draggable=\"true\"\n onDragstart={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n disabled={readonly.value}\n class=\"link-input-area\"\n value={currentLink.value}\n onInput={onEditLink}\n onKeydown={onKeydown}\n onFocus={() => (focusLinkInput.value = true)}\n onBlur={() => (focusLinkInput.value = false)}\n />\n {!hidePlaceholder.value && (\n <div class=\"placeholder\">\n <input\n disabled={readonly.value}\n class=\"hidden\"\n id={uuid.value}\n type=\"file\"\n accept=\"image/*\"\n onChange={onUploadFile}\n />\n <label class=\"uploader\" for={uuid.value}>\n <Icon icon={uploadButton} />\n </label>\n <span class=\"text\" onClick={() => linkInputRef.value?.focus()}>\n {uploadPlaceholderText}\n </span>\n </div>\n )}\n </div>\n {currentLink.value && (\n <>\n {isValidUrl(currentLink.value) && (\n <div class=\"image-preview\">\n <img\n src={currentLink.value}\n alt=\"\"\n onError={(e) =>\n Promise.resolve(onImageLoadError?.(e)).catch(() => {})\n }\n />\n </div>\n )}\n <div\n class={clsx(\n 'confirm',\n !isValidUrl(currentLink.value) && 'disabled'\n )}\n onClick={() => onConfirmLinkInput()}\n style={\n !isValidUrl(currentLink.value)\n ? { opacity: 0.5, cursor: 'not-allowed' }\n : undefined\n }\n >\n <Icon icon={confirmButton} />\n </div>\n </>\n )}\n </div>\n )\n }\n },\n})\n","import { defineComponent, ref, h, Fragment, onMounted, onUnmounted } from 'vue'\n\nimport type { MilkdownImageBlockProps } from './image-block'\n\nimport { Icon } from '../../../__internal__/components/icon'\nimport { keepAlive } from '../../../__internal__/keep-alive'\nimport { IMAGE_DATA_TYPE } from '../../schema'\n\nkeepAlive(h, Fragment)\n\nconst ratioMap: Record<string, number> = {\n '1:1': 1,\n '4:3': 4 / 3,\n '3:2': 3 / 2,\n '16:9': 16 / 9,\n}\n\nexport const ImageViewer = defineComponent<MilkdownImageBlockProps>({\n props: {\n src: { type: Object, required: true },\n caption: { type: Object, required: true },\n ratio: { type: Object, required: true },\n align: { type: Object, required: true },\n cropRatio: { type: Object, required: true },\n cropTop: { type: Object, required: true },\n cropLeft: { type: Object, required: true },\n cropWidth: { type: Object, required: true },\n cropHeight: { type: Object, required: true },\n borderWidth: { type: Object, required: true },\n borderColor: { type: Object, required: true },\n borderStyle: { type: Object, required: true },\n selected: { type: Object, required: true },\n readonly: { type: Object, required: true },\n setAttr: { type: Function, required: true },\n config: { type: Object, required: true },\n },\n setup({\n src,\n caption,\n ratio,\n readonly,\n setAttr,\n config,\n cropRatio,\n cropTop,\n cropLeft,\n cropWidth,\n cropHeight,\n borderWidth,\n borderColor,\n borderStyle,\n }) {\n const imageRef = ref<HTMLImageElement>()\n const wrapperRef = ref<HTMLDivElement>()\n const showCaption = ref(Boolean(caption.value?.length))\n const timer = ref(0)\n const showBorderPanel = ref(false)\n const isCropping = ref(false)\n\n const baseDisplayW = ref(0)\n const baseDisplayH = ref(0)\n const liveRatio = ref<number | null>(null)\n const localBorderWidth = ref<number | null>(null)\n const localBorderColor = ref<string | null>(null)\n\n // Local crop state for interactive editing\n const localCrop = ref({ top: 0, left: 0, width: 1, height: 1 })\n\n let resizeDir = ''\n let startY = 0\n let startX = 0\n let startHeight = 0\n let startWidth = 0\n\n const isCropped = () => {\n const t = cropTop.value ?? 0\n const l = cropLeft.value ?? 0\n const w = cropWidth.value ?? 1\n const h = cropHeight.value ?? 1\n return t > 0.001 || l > 0.001 || w < 0.999 || h < 0.999\n }\n\n const onImageLoad = () => {\n const image = imageRef.value\n if (!image) return\n const host = image.closest('.milkdown-image-block')\n if (!host) return\n\n let maxWidth = host.getBoundingClientRect().width\n if (!maxWidth) return\n\n if (config.maxWidth && config.maxWidth < maxWidth)\n maxWidth = config.maxWidth\n\n const height = image.naturalHeight\n const width = image.naturalWidth\n if (!height || !width) return\n\n const aspect = width / height\n\n let transformedWidth = width < maxWidth ? width : maxWidth\n let transformedHeight = transformedWidth / aspect\n\n if (config.maxHeight && transformedHeight > config.maxHeight) {\n transformedHeight = config.maxHeight\n transformedWidth = transformedHeight * aspect\n }\n\n baseDisplayH.value = transformedHeight\n baseDisplayW.value = transformedWidth\n }\n\n const onToggleCaption = (e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (readonly.value) return\n showCaption.value = !showCaption.value\n }\n\n const onInputCaption = (e: Event) => {\n const target = e.target as HTMLInputElement\n const value = target.value\n if (timer.value) window.clearTimeout(timer.value)\n\n timer.value = window.setTimeout(() => {\n setAttr('caption', value)\n }, 1000)\n }\n\n const onBlurCaption = (e: Event) => {\n const target = e.target as HTMLInputElement\n const value = target.value\n if (timer.value) {\n window.clearTimeout(timer.value)\n timer.value = 0\n }\n\n setAttr('caption', value)\n }\n\n const onResizeHandlePointerMove = (e: PointerEvent) => {\n e.preventDefault()\n\n const deltaY = e.clientY - startY\n const deltaX = e.clientX - startX\n\n const aspect = startHeight / (startWidth || 1)\n let dhY = resizeDir.includes('bottom') ? deltaY : -deltaY\n let dhX = 0\n\n if (resizeDir.includes('right')) {\n dhX = deltaX * aspect\n } else if (resizeDir.includes('left')) {\n dhX = -deltaX * aspect\n }\n\n const dh = Math.abs(dhX) > Math.abs(dhY) ? dhX : dhY\n let newWrapperHeight = startHeight + dh\n\n let newWrapperWidth = newWrapperHeight * (startWidth / (startHeight || 1))\n\n if (newWrapperHeight < 20) {\n newWrapperHeight = 20\n newWrapperWidth = newWrapperHeight * (startWidth / (startHeight || 1))\n }\n\n if (newWrapperWidth < 20) {\n newWrapperWidth = 20\n newWrapperHeight = newWrapperWidth / (startWidth / (startHeight || 1))\n }\n\n const image = imageRef.value\n const host = image?.closest('.milkdown-image-block')\n const hostWidth = host?.getBoundingClientRect().width\n const maxW =\n config.maxWidth && hostWidth\n ? Math.min(config.maxWidth, hostWidth)\n : hostWidth || Infinity\n\n if (newWrapperWidth > maxW) {\n newWrapperWidth = maxW\n newWrapperHeight = newWrapperWidth / (startWidth / (startHeight || 1))\n }\n\n if (config.maxHeight && newWrapperHeight > config.maxHeight) {\n newWrapperHeight = config.maxHeight\n }\n\n const cHeight =\n isCropped() && !isCropping.value ? (cropHeight.value ?? 1) : 1\n const newBaseHeight = newWrapperHeight / cHeight\n\n const newRatio = newBaseHeight / (baseDisplayH.value || 1)\n liveRatio.value = Number(newRatio.toFixed(2))\n }\n\n const onResizeHandlePointerUp = () => {\n window.removeEventListener('pointermove', onResizeHandlePointerMove)\n window.removeEventListener('pointerup', onResizeHandlePointerUp)\n\n if (liveRatio.value !== null) {\n setAttr('ratio', liveRatio.value)\n liveRatio.value = null\n }\n }\n\n const onResizeHandlePointerDown = (e: PointerEvent, dir: string) => {\n if (readonly.value) return\n e.preventDefault()\n e.stopPropagation()\n resizeDir = dir\n startY = e.clientY\n startX = e.clientX\n const wrapper = wrapperRef.value\n if (wrapper) {\n startHeight = wrapper.getBoundingClientRect().height\n startWidth = wrapper.getBoundingClientRect().width\n }\n liveRatio.value = ratio.value ?? 1\n window.addEventListener('pointermove', onResizeHandlePointerMove)\n window.addEventListener('pointerup', onResizeHandlePointerUp)\n }\n\n // --- Crop box interaction ---\n const borderStyleOptions = [\n { label: 'none', value: 'none' },\n { label: 'solid', value: 'solid' },\n { label: 'dashed', value: 'dashed' },\n { label: 'dotted', value: 'dotted' },\n ]\n\n const onToggleCropPanel = (e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (readonly.value) return\n showBorderPanel.value = false\n if (isCropping.value) {\n isCropping.value = false\n } else {\n startCropping()\n }\n }\n\n const onToggleBorderPanel = (e: MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (readonly.value) return\n showBorderPanel.value = !showBorderPanel.value\n }\n\n const closePanels = () => {\n showBorderPanel.value = false\n }\n\n const startCropping = () => {\n localCrop.value = {\n top: cropTop.value ?? 0,\n left: cropLeft.value ?? 0,\n width: cropWidth.value ?? 1,\n height: cropHeight.value ?? 1,\n }\n isCropping.value = true\n }\n\n const applyCrop = () => {\n if (!isCropping.value) return\n setAttr('cropTop', localCrop.value.top)\n setAttr('cropLeft', localCrop.value.left)\n setAttr('cropWidth', localCrop.value.width)\n setAttr('cropHeight', localCrop.value.height)\n isCropping.value = false\n }\n\n // Global listener for clicking outside to apply crop\n const handleGlobalPointerDown = (e: PointerEvent) => {\n if (!isCropping.value) return\n if (wrapperRef.value && !wrapperRef.value.contains(e.target as Node)) {\n applyCrop()\n }\n }\n\n onMounted(() => {\n window.addEventListener('pointerdown', handleGlobalPointerDown)\n })\n\n onUnmounted(() => {\n window.removeEventListener('pointerdown', handleGlobalPointerDown)\n })\n\n const resetCrop = () => {\n setAttr('cropTop', 0)\n setAttr('cropLeft', 0)\n setAttr('cropWidth', 1)\n setAttr('cropHeight', 1)\n }\n\n // Crop box drag state\n let cropDragType = '' // 'move' | 'nw' | 'ne' | 'sw' | 'se' | 'n' | 's' | 'e' | 'w'\n let cropStartX = 0\n let cropStartY = 0\n let cropStartBox = { top: 0, left: 0, width: 1, height: 1 }\n\n const onCropBoxPointerDown = (e: PointerEvent, type: string) => {\n e.preventDefault()\n e.stopPropagation()\n cropDragType = type\n cropStartX = e.clientX\n cropStartY = e.clientY\n cropStartBox = { ...localCrop.value }\n window.addEventListener('pointermove', onCropBoxPointerMove)\n window.addEventListener('pointerup', onCropBoxPointerUp)\n }\n\n const onCropBoxPointerMove = (e: PointerEvent) => {\n const wrapper = wrapperRef.value\n if (!wrapper) return\n const rect = wrapper.getBoundingClientRect()\n if (!rect.width || !rect.height) return\n\n const dx = (e.clientX - cropStartX) / rect.width\n const dy = (e.clientY - cropStartY) / rect.height\n\n const ar = ratioMap[cropRatio.value ?? 'free']\n let box = { ...cropStartBox }\n\n if (cropDragType === 'move') {\n box.left = Math.max(0, Math.min(1 - box.width, cropStartBox.left + dx))\n box.top = Math.max(0, Math.min(1 - box.height, cropStartBox.top + dy))\n } else {\n const isLeft =\n cropDragType === 'nw' || cropDragType === 'sw' || cropDragType === 'w'\n const isTop =\n cropDragType === 'nw' || cropDragType === 'ne' || cropDragType === 'n'\n const isRight =\n cropDragType === 'ne' || cropDragType === 'se' || cropDragType === 'e'\n const isBottom =\n cropDragType === 'sw' || cropDragType === 'se' || cropDragType === 's'\n const isHorizontal = cropDragType === 'n' || cropDragType === 's'\n const isVertical = cropDragType === 'e' || cropDragType === 'w'\n\n let newLeft = cropStartBox.left\n let newTop = cropStartBox.top\n let newWidth = cropStartBox.width\n let newHeight = cropStartBox.height\n\n if (isLeft) {\n newWidth = cropStartBox.width - dx\n newLeft = cropStartBox.left + dx\n } else if (isRight) {\n newWidth = cropStartBox.width + dx\n }\n\n if (isTop) {\n newHeight = cropStartBox.height - dy\n newTop = cropStartBox.top + dy\n } else if (isBottom) {\n newHeight = cropStartBox.height + dy\n }\n\n // Enforce aspect ratio if set (only for corner handles)\n if (ar && !isHorizontal && !isVertical) {\n const cropPixelW = newWidth * rect.width\n const desiredH = cropPixelW / ar / rect.height\n\n if (isTop) {\n newTop = newTop + newHeight - desiredH\n }\n newHeight = desiredH\n }\n\n // Clamp\n if (newWidth < 0.05) newWidth = 0.05\n if (newHeight < 0.05) newHeight = 0.05\n if (newLeft < 0) {\n newWidth += newLeft\n newLeft = 0\n }\n if (newTop < 0) {\n newHeight += newTop\n newTop = 0\n }\n if (newLeft + newWidth > 1) newWidth = 1 - newLeft\n if (newTop + newHeight > 1) newHeight = 1 - newTop\n\n box = { left: newLeft, top: newTop, width: newWidth, height: newHeight }\n }\n\n localCrop.value = box\n }\n\n const onCropBoxPointerUp = () => {\n window.removeEventListener('pointermove', onCropBoxPointerMove)\n window.removeEventListener('pointerup', onCropBoxPointerUp)\n cropDragType = ''\n }\n\n return () => {\n const currentBorderStyle = borderStyle.value ?? 'none'\n const currentBorderWidth =\n localBorderWidth.value !== null\n ? localBorderWidth.value\n : (borderWidth.value ?? 0)\n const currentBorderColor =\n localBorderColor.value !== null\n ? localBorderColor.value\n : (borderColor.value ?? '#000000')\n const cTop = cropTop.value ?? 0\n const cLeft = cropLeft.value ?? 0\n const cWidth = cropWidth.value ?? 1\n const cHeight = cropHeight.value ?? 1\n\n const cropped = isCropped()\n\n const borderStyleStr =\n currentBorderStyle !== 'none' && currentBorderWidth > 0\n ? `${currentBorderWidth}px ${currentBorderStyle} ${currentBorderColor}`\n : undefined\n\n const currentRatio =\n liveRatio.value !== null ? liveRatio.value : (ratio.value ?? 1)\n\n let baseW = baseDisplayW.value * currentRatio\n let baseH = baseDisplayH.value * currentRatio\n\n const image = imageRef.value\n const host = image?.closest('.milkdown-image-block')\n const hostWidth = host?.getBoundingClientRect().width\n const maxW =\n config.maxWidth && hostWidth\n ? Math.min(config.maxWidth, hostWidth)\n : hostWidth || Infinity\n\n const visibleW = isCropping.value\n ? baseW\n : cropped\n ? baseW * cWidth\n : baseW\n\n if (visibleW > maxW && maxW > 0) {\n const scale = maxW / visibleW\n baseW = baseW * scale\n baseH = baseH * scale\n }\n\n const cropPxW = baseW * cWidth\n const cropPxH = baseH * cHeight\n const cropPxL = baseW * cLeft\n const cropPxT = baseH * cTop\n\n const wrapperStyle: Record<string, string> = {\n minWidth: '20px',\n minHeight: '20px',\n border: !isCropping.value ? (borderStyleStr ?? '') : '',\n }\n if (cropped && !isCropping.value && cropPxW > 0 && cropPxH > 0) {\n wrapperStyle.width = `${cropPxW}px`\n wrapperStyle.height = `${cropPxH}px`\n }\n const cropClipStyle: Record<string, string> | null =\n cropped && !isCropping.value && baseW > 0 && baseH > 0\n ? {\n width: `${cropPxW}px`,\n height: `${cropPxH}px`,\n overflow: 'hidden',\n }\n : null\n\n const imgStyle: Record<string, string> = {\n minWidth: '0px',\n minHeight: '0px',\n }\n if (cropped && !isCropping.value && baseW > 0 && baseH > 0) {\n imgStyle.width = `${baseW}px`\n imgStyle.height = `${baseH}px`\n imgStyle.maxWidth = 'none'\n imgStyle.marginLeft = `${-cropPxL}px`\n imgStyle.marginTop = `${-cropPxT}px`\n } else {\n if (baseH > 0 && baseW > 0) {\n imgStyle.width = `${baseW}px`\n imgStyle.height = `${baseH}px`\n if (config.maxWidth) imgStyle.maxWidth = `${config.maxWidth}px`\n }\n }\n\n return (\n <>\n {!isCropping.value ? (\n <div\n class=\"image-toolbar\"\n onClick={(e) => e.stopPropagation()}\n onMousedown={(e) => e.stopPropagation()}\n onDragstart={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n >\n <div\n class=\"image-toolbar-item\"\n title=\"标题\"\n onClick={onToggleCaption}\n >\n <Icon icon={config.captionIcon} />\n </div>\n {config.cropIcon ? (\n <div\n class=\"image-toolbar-item\"\n title=\"裁剪\"\n onClick={onToggleCropPanel}\n >\n <Icon icon={config.cropIcon} />\n </div>\n ) : null}\n {cropped ? (\n <div\n class=\"image-toolbar-item\"\n title=\"恢复裁剪\"\n onClick={(e: MouseEvent) => {\n e.stopPropagation()\n resetCrop()\n }}\n >\n <Icon icon={'↩'} />\n </div>\n ) : null}\n {config.borderIcon ? (\n <div\n class=\"image-toolbar-item\"\n title=\"边框\"\n onClick={onToggleBorderPanel}\n >\n <Icon icon={config.borderIcon} />\n </div>\n ) : null}\n\n {showBorderPanel.value ? (\n <div\n class=\"setting-panel border-panel\"\n draggable=\"true\"\n onClick={(e) => e.stopPropagation()}\n onMousedown={(e) => e.stopPropagation()}\n onPointerdown={(e) => e.stopPropagation()}\n onDragstart={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n >\n <div class=\"setting-panel-title\">{'边框设置'}</div>\n <div class=\"setting-row\">\n <span class=\"setting-label\">{'样式'}</span>\n <div class=\"border-style-options\">\n {borderStyleOptions.map((opt) => (\n <div\n class={`border-style-option ${currentBorderStyle === opt.value ? 'active' : ''}`}\n onClick={(e: MouseEvent) => {\n e.stopPropagation()\n setAttr('borderStyle', opt.value)\n }}\n >\n {opt.label === 'none'\n ? '无'\n : opt.label === 'solid'\n ? '实线'\n : opt.label === 'dashed'\n ? '虚线'\n : '点线'}\n </div>\n ))}\n </div>\n </div>\n {currentBorderStyle !== 'none' ? (\n <div class=\"setting-row\">\n <span class=\"setting-label\">{'宽度'}</span>\n <input\n draggable=\"true\"\n type=\"range\"\n min=\"1\"\n max=\"10\"\n value={currentBorderWidth}\n onInput={(e: Event) => {\n const target = e.target as HTMLInputElement\n localBorderWidth.value = Number(target.value)\n }}\n onChange={(e: Event) => {\n const target = e.target as HTMLInputElement\n setAttr('borderWidth', Number(target.value))\n localBorderWidth.value = null\n }}\n onClick={(e: MouseEvent) => e.stopPropagation()}\n onMousedown={(e: MouseEvent) => e.stopPropagation()}\n onPointerdown={(e: PointerEvent) => e.stopPropagation()}\n onDragstart={(e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n />\n <span class=\"setting-value\">{currentBorderWidth}px</span>\n </div>\n ) : null}\n {currentBorderStyle !== 'none' ? (\n <div class=\"setting-row\">\n <span class=\"setting-label\">{'颜色'}</span>\n <input\n draggable=\"true\"\n type=\"color\"\n value={currentBorderColor}\n onInput={(e: Event) => {\n const target = e.target as HTMLInputElement\n localBorderColor.value = target.value\n }}\n onChange={(e: Event) => {\n const target = e.target as HTMLInputElement\n setAttr('borderColor', target.value)\n localBorderColor.value = null\n }}\n onClick={(e: MouseEvent) => e.stopPropagation()}\n onMousedown={(e: MouseEvent) => e.stopPropagation()}\n onPointerdown={(e: PointerEvent) => e.stopPropagation()}\n onDragstart={(e: DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n />\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n\n <div\n class={`image-wrapper${isCropping.value ? ' cropping' : ''}`}\n ref={wrapperRef}\n style={wrapperStyle}\n onClick={closePanels}\n >\n {cropClipStyle ? (\n <div class=\"crop-clip\" style={cropClipStyle}>\n <img\n draggable=\"false\"\n ref={imageRef}\n data-type={IMAGE_DATA_TYPE}\n onLoad={onImageLoad}\n src={src.value}\n alt={caption.value}\n style={imgStyle}\n onError={(e) =>\n Promise.resolve(config.onImageLoadError?.(e)).catch(\n () => {}\n )\n }\n />\n </div>\n ) : (\n <img\n draggable=\"false\"\n ref={imageRef}\n data-type={IMAGE_DATA_TYPE}\n onLoad={onImageLoad}\n src={src.value}\n alt={caption.value}\n style={imgStyle}\n onError={(e) =>\n Promise.resolve(config.onImageLoadError?.(e)).catch(() => {})\n }\n />\n )}\n\n {/* Crop overlay */}\n {isCropping.value ? (\n <div\n class=\"crop-overlay\"\n onClick={(e) => {\n e.stopPropagation()\n applyCrop()\n }}\n >\n <div\n class=\"crop-box\"\n onClick={(e) => e.stopPropagation()}\n style={{\n top: `${(localCrop.value.top * 100).toFixed(2)}%`,\n left: `${(localCrop.value.left * 100).toFixed(2)}%`,\n width: `${(localCrop.value.width * 100).toFixed(2)}%`,\n height: `${(localCrop.value.height * 100).toFixed(2)}%`,\n }}\n onPointerdown={(e: PointerEvent) =>\n onCropBoxPointerDown(e, 'move')\n }\n >\n {/* 3x3 grid lines */}\n <div class=\"crop-grid\">\n <div class=\"crop-grid-line horizontal first\" />\n <div class=\"crop-grid-line horizontal second\" />\n <div class=\"crop-grid-line vertical first\" />\n <div class=\"crop-grid-line vertical second\" />\n </div>\n {/* Corner handles */}\n <div\n class=\"crop-handle nw\"\n onPointerdown={(e: PointerEvent) =>\n onCropBoxPointerDown(e, 'nw')\n }\n />\n <div\n class=\"crop-handle ne\"\n onPointerdown={(e: PointerEvent) =>\n onCropBoxPointerDown(e, 'ne')\n }\n />\n <div\n class=\"crop-handle sw\"\n onPointerdown={(e: PointerEvent) =>\n onCropBoxPointerDown(e, 'sw')\n }\n />\n <div\n class=\"crop-handle se\"\n onPointerdown={(e: PointerEvent) =>\n onCropBoxPointerDown(e, 'se')\n }\n />\n {/* Edge midpoint handles */}\n <div\n class=\"crop-handle n\"\n onPointerdown={(e: PointerEvent) =>\n onCropBoxPointerDown(e, 'n')\n }\n />\n <div\n class=\"crop-handle s\"\n onPointerdown={(e: PointerEvent) =>\n onCropBoxPointerDown(e, 's')\n }\n />\n <div\n class=\"crop-handle e\"\n onPointerdown={(e: PointerEvent) =>\n onCropBoxPointerDown(e, 'e')\n }\n />\n <div\n class=\"crop-handle w\"\n onPointerdown={(e: PointerEvent) =>\n onCropBoxPointerDown(e, 'w')\n }\n />\n </div>\n </div>\n ) : null}\n\n {!isCropping.value ? (\n <>\n <div\n class=\"image-resize-handle top-left\"\n onPointerdown={(e) =>\n onResizeHandlePointerDown(e, 'top-left')\n }\n />\n <div\n class=\"image-resize-handle top-right\"\n onPointerdown={(e) =>\n onResizeHandlePointerDown(e, 'top-right')\n }\n />\n <div\n class=\"image-resize-handle bottom-left\"\n onPointerdown={(e) =>\n onResizeHandlePointerDown(e, 'bottom-left')\n }\n />\n <div\n class=\"image-resize-handle bottom-right\"\n onPointerdown={(e) =>\n onResizeHandlePointerDown(e, 'bottom-right')\n }\n />\n </>\n ) : null}\n </div>\n {showCaption.value && (\n <input\n draggable=\"true\"\n onDragstart={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n class=\"caption-input\"\n placeholder={config?.captionPlaceholderText}\n onInput={onInputCaption}\n onBlur={onBlurCaption}\n value={caption.value}\n />\n )}\n </>\n )\n }\n },\n})\n","import { h, Fragment, type Ref, defineComponent } from 'vue'\n\nimport type { ImageBlockConfig } from '../../config'\n\nimport { ImageInput } from '../../../__internal__/components/image-input'\nimport { keepAlive } from '../../../__internal__/keep-alive'\nimport { ImageViewer } from './image-viewer'\n\nkeepAlive(h, Fragment)\n\ntype Attrs = {\n src: string\n caption: string\n ratio: number\n align: string | null\n cropRatio: string\n cropTop: number\n cropLeft: number\n cropWidth: number\n cropHeight: number\n borderWidth: number\n borderColor: string\n borderStyle: string\n}\n\nexport type MilkdownImageBlockProps = {\n selected: Ref<boolean>\n readonly: Ref<boolean>\n setAttr: <T extends keyof Attrs>(attr: T, value: Attrs[T]) => void\n config: ImageBlockConfig\n} & {\n [P in keyof Attrs]: Ref<Attrs[P] | undefined>\n}\n\nexport const MilkdownImageBlock = defineComponent<MilkdownImageBlockProps>({\n props: {\n src: {\n type: Object,\n required: true,\n },\n caption: {\n type: Object,\n required: true,\n },\n ratio: {\n type: Object,\n required: true,\n },\n align: {\n type: Object,\n required: true,\n },\n cropRatio: {\n type: Object,\n required: true,\n },\n cropTop: {\n type: Object,\n required: true,\n },\n cropLeft: {\n type: Object,\n required: true,\n },\n cropWidth: {\n type: Object,\n required: true,\n },\n cropHeight: {\n type: Object,\n required: true,\n },\n borderWidth: {\n type: Object,\n required: true,\n },\n borderColor: {\n type: Object,\n required: true,\n },\n borderStyle: {\n type: Object,\n required: true,\n },\n selected: {\n type: Object,\n required: true,\n },\n readonly: {\n type: Object,\n required: true,\n },\n setAttr: {\n type: Function,\n required: true,\n },\n config: {\n type: Object,\n required: true,\n },\n },\n setup(props) {\n const { src } = props\n\n return () => {\n if (!src.value?.length) {\n return (\n <ImageInput\n src={props.src}\n selected={props.selected}\n readonly={props.readonly}\n setLink={(link) => props.setAttr('src', link)}\n imageIcon={props.config.imageIcon}\n uploadButton={props.config.uploadButton}\n confirmButton={props.config.confirmButton}\n uploadPlaceholderText={props.config.uploadPlaceholderText}\n onUpload={props.config.onUpload}\n onImageLoadError={props.config.onImageLoadError}\n />\n )\n }\n return <ImageViewer {...props} />\n }\n },\n})\n","import type { Node } from '@jvs-milkdown/prose/model'\nimport type { NodeViewConstructor } from '@jvs-milkdown/prose/view'\n\nimport { $view } from '@jvs-milkdown/utils'\nimport DOMPurify from 'dompurify'\nimport { createApp, ref, watchEffect } from 'vue'\n\nimport { withMeta } from '../../__internal__/meta'\nimport { imageBlockConfig } from '../config'\nimport { imageBlockSchema } from '../schema'\nimport { MilkdownImageBlock } from './components/image-block'\n\nexport const imageBlockView = $view(\n imageBlockSchema.node,\n (ctx): NodeViewConstructor => {\n return (initialNode, view, getPos) => {\n const src = ref(initialNode.attrs.src)\n const caption = ref(initialNode.attrs.caption)\n const ratio = ref(initialNode.attrs.ratio)\n const align = ref(initialNode.attrs.align)\n const cropRatio = ref(initialNode.attrs.cropRatio)\n const cropTop = ref(initialNode.attrs.cropTop)\n const cropLeft = ref(initialNode.attrs.cropLeft)\n const cropWidth = ref(initialNode.attrs.cropWidth)\n const cropHeight = ref(initialNode.attrs.cropHeight)\n const borderWidth = ref(initialNode.attrs.borderWidth)\n const borderColor = ref(initialNode.attrs.borderColor)\n const borderStyle = ref(initialNode.attrs.borderStyle)\n const selected = ref(false)\n const readonly = ref(!view.editable)\n const setAttr = (attr: string, value: unknown) => {\n if (!view.editable) return\n const pos = getPos()\n if (pos == null) return\n view.dispatch(\n view.state.tr.setNodeAttribute(\n pos,\n attr,\n attr === 'src' ? DOMPurify.sanitize(value as string) : value\n )\n )\n }\n const config = ctx.get(imageBlockConfig.key)\n const app = createApp(MilkdownImageBlock, {\n src,\n caption,\n ratio,\n align,\n cropRatio,\n cropTop,\n cropLeft,\n cropWidth,\n cropHeight,\n borderWidth,\n borderColor,\n borderStyle,\n selected,\n readonly,\n setAttr,\n config,\n })\n const dom = document.createElement('div')\n dom.className = 'milkdown-image-block'\n dom.dataset.align = initialNode.attrs.align || 'center'\n const disposeSelectedWatcher = watchEffect(() => {\n const isSelected = selected.value\n if (isSelected) {\n dom.classList.add('selected')\n } else {\n dom.classList.remove('selected')\n }\n })\n const disposeAlignWatcher = watchEffect(() => {\n dom.dataset.align = align.value || 'center'\n })\n const disposeCropWatcher = watchEffect(() => {\n dom.dataset.cropRatio = cropRatio.value || 'free'\n })\n const disposeBorderWatcher = watchEffect(() => {\n const w = borderWidth.value ?? 0\n const c = borderColor.value ?? '#000000'\n const s = borderStyle.value ?? 'none'\n dom.dataset.borderWidth = String(w)\n dom.dataset.borderColor = c\n dom.dataset.borderStyle = s\n })\n const proxyDomURL = config.proxyDomURL\n const bindAttrs = (node: Node) => {\n if (!proxyDomURL) {\n src.value = node.attrs.src\n } else {\n const proxiedURL = proxyDomURL(node.attrs.src)\n if (typeof proxiedURL === 'string') {\n src.value = proxiedURL\n } else {\n proxiedURL\n .then((url) => {\n src.value = url\n })\n .catch(console.error)\n }\n }\n ratio.value = node.attrs.ratio\n caption.value = node.attrs.caption\n align.value = node.attrs.align\n cropRatio.value = node.attrs.cropRatio\n cropTop.value = node.attrs.cropTop\n cropLeft.value = node.attrs.cropLeft\n cropWidth.value = node.attrs.cropWidth\n cropHeight.value = node.attrs.cropHeight\n borderWidth.value = node.attrs.borderWidth\n borderColor.value = node.attrs.borderColor\n borderStyle.value = node.attrs.borderStyle\n\n readonly.value = !view.editable\n }\n\n bindAttrs(initialNode)\n app.mount(dom)\n\n return {\n dom,\n update: (updatedNode) => {\n if (updatedNode.type !== initialNode.type) return false\n\n bindAttrs(updatedNode)\n return true\n },\n stopEvent: (e) => {\n if (e.target instanceof HTMLInputElement) return true\n if (e.target instanceof HTMLElement && e.target.tagName === 'INPUT')\n return true\n const target = e.target as HTMLElement\n if (target.closest?.('.setting-panel, .image-toolbar, .crop-overlay'))\n return true\n\n return false\n },\n selectNode: () => {\n selected.value = true\n },\n deselectNode: () => {\n selected.value = false\n },\n destroy: () => {\n disposeSelectedWatcher()\n disposeAlignWatcher()\n disposeCropWatcher()\n disposeBorderWatcher()\n app.unmount()\n dom.remove()\n },\n }\n }\n }\n)\n\nwithMeta(imageBlockView, {\n displayName: 'NodeView<image-block>',\n group: 'ImageBlock',\n})\n","import type { MilkdownPlugin } from '@jvs-milkdown/ctx'\n\nimport { imageBlockConfig } from './config'\nimport { imageBlockConvertPlugin } from './convert-plugin'\nimport { imageBlockPasteRule } from './paste-rule'\nimport { remarkImageBlockPlugin } from './remark-plugin'\nimport { imageBlockSchema } from './schema'\nimport { imageBlockView } from './view'\n\nexport * from './schema'\nexport * from './remark-plugin'\nexport * from './config'\nexport * from './view'\nexport * from './paste-rule'\nexport * from './convert-plugin'\n\nexport const imageBlockComponent: MilkdownPlugin[] = [\n remarkImageBlockPlugin,\n imageBlockSchema,\n imageBlockView,\n imageBlockConfig,\n imageBlockPasteRule,\n imageBlockConvertPlugin,\n].flat()\n"],"names":["__spreadValues","tr","fragment","Fragment","_a","_b","h"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paste-rule.d.ts","sourceRoot":"","sources":["../../src/image-block/paste-rule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"paste-rule.d.ts","sourceRoot":"","sources":["../../src/image-block/paste-rule.ts"],"names":[],"mappings":"AA6BA,eAAO,MAAM,mBAAmB,0CAiF7B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-viewer.d.ts","sourceRoot":"","sources":["../../../../src/image-block/view/components/image-viewer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAe5D,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"image-viewer.d.ts","sourceRoot":"","sources":["../../../../src/image-block/view/components/image-viewer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAe5D,eAAO,MAAM,WAAW,0TA6wBtB,CAAA"}
|
|
@@ -147,7 +147,9 @@ const ImageInput = defineComponent({
|
|
|
147
147
|
const isValidUrl = (url) => {
|
|
148
148
|
if (!url) return false;
|
|
149
149
|
const trimmedUrl = url.trim();
|
|
150
|
-
return /^(https?:\/\/|\/|\.\.?\/|data:image\/|blob:|[a-zA-Z0-9-]+\.[a-zA-Z]+)/i.test(
|
|
150
|
+
return /^(https?:\/\/|\/|\.\.?\/|data:image\/|blob:|[a-zA-Z0-9-]+\.[a-zA-Z]+)/i.test(
|
|
151
|
+
trimmedUrl
|
|
152
|
+
);
|
|
151
153
|
};
|
|
152
154
|
const onKeydown = (e) => {
|
|
153
155
|
var _a2, _b2, _c;
|
|
@@ -222,7 +224,10 @@ const ImageInput = defineComponent({
|
|
|
222
224
|
)), /* @__PURE__ */ h(
|
|
223
225
|
"div",
|
|
224
226
|
{
|
|
225
|
-
class: clsx(
|
|
227
|
+
class: clsx(
|
|
228
|
+
"confirm",
|
|
229
|
+
!isValidUrl(currentLink.value) && "disabled"
|
|
230
|
+
),
|
|
226
231
|
onClick: () => onConfirmLinkInput(),
|
|
227
232
|
style: !isValidUrl(currentLink.value) ? { opacity: 0.5, cursor: "not-allowed" } : void 0
|
|
228
233
|
},
|