@jvs-milkdown/components 1.2.4 → 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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/__internal__/meta.ts","../../src/image-inline/config.ts","../../src/__internal__/keep-alive.ts","../../src/__internal__/components/icon.tsx","../../src/__internal__/components/image-input.tsx","../../src/image-inline/components/image-inline.tsx","../../src/image-inline/view.ts","../../src/image-inline/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 InlineImageConfig {\n imageIcon: string | undefined\n uploadButton: string | undefined\n confirmButton: string | undefined\n uploadPlaceholderText: string\n onUpload: (file: File) => Promise<string>\n proxyDomURL?: (url: string) => Promise<string> | string\n}\n\nexport const defaultInlineImageConfig: InlineImageConfig = {\n imageIcon: '🌌',\n uploadButton: 'Upload',\n confirmButton: '⏎',\n uploadPlaceholderText: '/Paste',\n onUpload: (file) => Promise.resolve(URL.createObjectURL(file)),\n}\n\nexport const inlineImageConfig = $ctx(\n defaultInlineImageConfig,\n 'inlineImageConfigCtx'\n)\n\nwithMeta(inlineImageConfig, {\n displayName: 'Config<image-inline>',\n group: 'ImageInline',\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 { h, Fragment, type Ref, defineComponent } from 'vue'\n\nimport type { InlineImageConfig } from '../config'\n\nimport { ImageInput } from '../../__internal__/components/image-input'\nimport { keepAlive } from '../../__internal__/keep-alive'\n\nkeepAlive(h, Fragment)\n\ntype Attrs = {\n src: string\n alt: string\n title: string\n}\n\ntype MilkdownImageInlineProps = {\n selected: Ref<boolean>\n readonly: Ref<boolean>\n setAttr: <T extends keyof Attrs>(attr: T, value: Attrs[T]) => void\n config: InlineImageConfig\n} & {\n [P in keyof Attrs]: Ref<Attrs[P] | undefined>\n}\n\nexport const MilkdownImageInline = defineComponent<MilkdownImageInlineProps>({\n props: {\n src: {\n type: Object,\n required: true,\n },\n alt: {\n type: Object,\n required: true,\n },\n title: {\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, alt, title } = props\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 className=\"empty-image-inline\"\n />\n )\n }\n return (\n <img\n class=\"image-inline\"\n src={src.value}\n alt={alt.value}\n title={title.value}\n />\n )\n }\n },\n})\n","import type { Node } from '@jvs-milkdown/prose/model'\nimport type { NodeViewConstructor } from '@jvs-milkdown/prose/view'\n\nimport { imageSchema } from '@jvs-milkdown/preset-commonmark'\nimport { $view } from '@jvs-milkdown/utils'\nimport DOMPurify from 'dompurify'\nimport { createApp, ref, watchEffect } from 'vue'\n\nimport { withMeta } from '../__internal__/meta'\nimport { MilkdownImageInline } from './components/image-inline'\nimport { inlineImageConfig } from './config'\n\nexport const inlineImageView = $view(\n imageSchema.node,\n (ctx): NodeViewConstructor => {\n return (initialNode, view, getPos) => {\n const src = ref(initialNode.attrs.src)\n const alt = ref(initialNode.attrs.alt)\n const title = ref(initialNode.attrs.title)\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\n const config = ctx.get(inlineImageConfig.key)\n const app = createApp(MilkdownImageInline, {\n src,\n alt,\n title,\n selected,\n readonly,\n setAttr,\n config,\n })\n const dom = document.createElement('span')\n dom.className = 'milkdown-image-inline'\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 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 alt.value = node.attrs.alt\n title.value = node.attrs.title\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\n return false\n },\n selectNode: () => {\n selected.value = true\n },\n deselectNode: () => {\n selected.value = false\n },\n destroy: () => {\n disposeSelectedWatcher()\n app.unmount()\n dom.remove()\n },\n }\n }\n }\n)\n\nwithMeta(inlineImageView, {\n displayName: 'NodeView<image-inline>',\n group: 'ImageInline',\n})\n","import type { MilkdownPlugin } from '@jvs-milkdown/ctx'\n\nimport { inlineImageConfig } from './config'\nimport { inlineImageView } from './view'\n\nexport * from './config'\nexport * from './view'\n\nexport const imageInlineComponent: MilkdownPlugin[] = [\n inlineImageConfig,\n inlineImageView,\n]\n"],"names":["_a","_b","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/__internal__/meta.ts","../../src/image-inline/config.ts","../../src/__internal__/keep-alive.ts","../../src/__internal__/components/icon.tsx","../../src/__internal__/components/image-input.tsx","../../src/image-inline/components/image-inline.tsx","../../src/image-inline/view.ts","../../src/image-inline/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 InlineImageConfig {\n imageIcon: string | undefined\n uploadButton: string | undefined\n confirmButton: string | undefined\n uploadPlaceholderText: string\n onUpload: (file: File) => Promise<string>\n proxyDomURL?: (url: string) => Promise<string> | string\n}\n\nexport const defaultInlineImageConfig: InlineImageConfig = {\n imageIcon: '🌌',\n uploadButton: 'Upload',\n confirmButton: '⏎',\n uploadPlaceholderText: '/Paste',\n onUpload: (file) => Promise.resolve(URL.createObjectURL(file)),\n}\n\nexport const inlineImageConfig = $ctx(\n defaultInlineImageConfig,\n 'inlineImageConfigCtx'\n)\n\nwithMeta(inlineImageConfig, {\n displayName: 'Config<image-inline>',\n group: 'ImageInline',\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 { h, Fragment, type Ref, defineComponent } from 'vue'\n\nimport type { InlineImageConfig } from '../config'\n\nimport { ImageInput } from '../../__internal__/components/image-input'\nimport { keepAlive } from '../../__internal__/keep-alive'\n\nkeepAlive(h, Fragment)\n\ntype Attrs = {\n src: string\n alt: string\n title: string\n}\n\ntype MilkdownImageInlineProps = {\n selected: Ref<boolean>\n readonly: Ref<boolean>\n setAttr: <T extends keyof Attrs>(attr: T, value: Attrs[T]) => void\n config: InlineImageConfig\n} & {\n [P in keyof Attrs]: Ref<Attrs[P] | undefined>\n}\n\nexport const MilkdownImageInline = defineComponent<MilkdownImageInlineProps>({\n props: {\n src: {\n type: Object,\n required: true,\n },\n alt: {\n type: Object,\n required: true,\n },\n title: {\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, alt, title } = props\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 className=\"empty-image-inline\"\n />\n )\n }\n return (\n <img\n class=\"image-inline\"\n src={src.value}\n alt={alt.value}\n title={title.value}\n />\n )\n }\n },\n})\n","import type { Node } from '@jvs-milkdown/prose/model'\nimport type { NodeViewConstructor } from '@jvs-milkdown/prose/view'\n\nimport { imageSchema } from '@jvs-milkdown/preset-commonmark'\nimport { $view } from '@jvs-milkdown/utils'\nimport DOMPurify from 'dompurify'\nimport { createApp, ref, watchEffect } from 'vue'\n\nimport { withMeta } from '../__internal__/meta'\nimport { MilkdownImageInline } from './components/image-inline'\nimport { inlineImageConfig } from './config'\n\nexport const inlineImageView = $view(\n imageSchema.node,\n (ctx): NodeViewConstructor => {\n return (initialNode, view, getPos) => {\n const src = ref(initialNode.attrs.src)\n const alt = ref(initialNode.attrs.alt)\n const title = ref(initialNode.attrs.title)\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\n const config = ctx.get(inlineImageConfig.key)\n const app = createApp(MilkdownImageInline, {\n src,\n alt,\n title,\n selected,\n readonly,\n setAttr,\n config,\n })\n const dom = document.createElement('span')\n dom.className = 'milkdown-image-inline'\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 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 alt.value = node.attrs.alt\n title.value = node.attrs.title\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\n return false\n },\n selectNode: () => {\n selected.value = true\n },\n deselectNode: () => {\n selected.value = false\n },\n destroy: () => {\n disposeSelectedWatcher()\n app.unmount()\n dom.remove()\n },\n }\n }\n }\n)\n\nwithMeta(inlineImageView, {\n displayName: 'NodeView<image-inline>',\n group: 'ImageInline',\n})\n","import type { MilkdownPlugin } from '@jvs-milkdown/ctx'\n\nimport { inlineImageConfig } from './config'\nimport { inlineImageView } from './view'\n\nexport * from './config'\nexport * from './view'\n\nexport const imageInlineComponent: MilkdownPlugin[] = [\n inlineImageConfig,\n inlineImageView,\n]\n"],"names":["_a","_b","Fragment"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAEO,SAAS,QAAA,CACd,QACA,IAAA,EACG;AACH,EAAA,MAAA,CAAO,OAAO,MAAA,EAAQ;AAAA,IACpB,IAAA,EAAM,cAAA,CAAA;AAAA,MACJ,OAAA,EAAS;AAAA,KAAA,EACN,IAAA;AAAA,GAEN,CAAA;AAED,EAAA,OAAO,MAAA;AACT;;ACDO,MAAM,wBAAA,GAA8C;AAAA,EACzD,SAAA,EAAW,WAAA;AAAA,EACX,YAAA,EAAc,QAAA;AAAA,EACd,aAAA,EAAe,QAAA;AAAA,EACf,qBAAA,EAAuB,QAAA;AAAA,EACvB,QAAA,EAAU,CAAC,IAAA,KAAS,OAAA,CAAQ,QAAQ,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAC;AAC/D;AAEO,MAAM,iBAAA,GAAoB,IAAA;AAAA,EAC/B,wBAAA;AAAA,EACA;AACF;AAEA,QAAA,CAAS,iBAAA,EAAmB;AAAA,EAC1B,WAAA,EAAa,sBAAA;AAAA,EACb,KAAA,EAAO;AACT,CAAC,CAAA;;AC3BM,SAAS,aAAa,KAAA,EAAkB;AAAC;;ACIhD,SAAA,CAAU,CAAC,CAAA;AAQJ,SAAS,KAAK,EAAE,IAAA,EAAM,KAAA,EAAO,SAAA,EAAW,SAAQ,EAAc;AACnE,EAAA,uBACE,CAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,IAAA,CAAK,eAAA,EAAiB,SAAS,CAAA;AAAA,MACtC,aAAA,EAAe,OAAA;AAAA,MACf,WAAW,IAAA,GAAO,SAAA,CAAU,SAAS,IAAA,CAAK,IAAA,EAAM,CAAA,GAAI;AAAA;AAAA,GACtD;AAEJ;AAEA,IAAA,CAAK,KAAA,GAAQ;AAAA,EACX,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAU;AAAA;AAEd,CAAA;;AC9BA,SAAA,CAAU,CAAC,CAAA;AAEX,MAAM,MAAA,GAAS,cAAA,CAAe,SAAA,EAAW,CAAC,CAAA;AAmBnC,MAAM,aAAa,eAAA,CAAiC;AAAA,EACzD,KAAA,EAAO;AAAA,IACL,GAAA,EAAK;AAAA,MACH,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,aAAA,EAAe;AAAA,MACb,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,qBAAA,EAAuB;AAAA,MACrB,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU;AAAA;AACZ,GACF;AAAA,EACA,KAAA,CAAM;AAAA,IACJ,QAAA;AAAA,IACA,GAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,qBAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF,EAAG;AAlFL,IAAA,IAAA,EAAA,EAAA,EAAA;AAmFI,IAAA,MAAM,cAAA,GAAiB,IAAI,KAAK,CAAA;AAChC,IAAA,MAAM,eAAe,GAAA,EAAsB;AAC3C,IAAA,MAAM,WAAA,GAAc,GAAA,CAAA,CAAI,EAAA,GAAA,GAAA,CAAI,KAAA,KAAJ,YAAa,EAAE,CAAA;AACvC,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,MAAA,EAAQ,CAAA;AACzB,IAAA,MAAM,kBAAkB,GAAA,CAAA,CAAA,CAAI,EAAA,GAAA,GAAA,CAAI,KAAA,KAAJ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,YAAW,CAAC,CAAA;AACnD,IAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAa;AAC/B,MAAA,MAAM,SAAS,CAAA,CAAE,MAAA;AACjB,MAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,MAAA,eAAA,CAAgB,KAAA,GAAQ,MAAM,MAAA,KAAW,CAAA;AACzC,MAAA,WAAA,CAAY,KAAA,GAAQ,KAAA;AAAA,IACtB,CAAA;AAEA,IAAA,MAAM,UAAA,GAAa,CAAC,GAAA,KAAgB;AAClC,MAAA,IAAI,CAAC,KAAK,OAAO,KAAA;AACjB,MAAA,MAAM,UAAA,GAAa,IAAI,IAAA,EAAK;AAC5B,MAAA,OAAO,wEAAA,CAAyE,IAAA;AAAA,QAC9E;AAAA,OACF;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,SAAA,GAAY,CAAC,CAAA,KAAqB;AAvG5C,MAAA,IAAAA,KAAAC,GAAAA,EAAA,EAAA;AAwGM,MAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,QAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,CAAAA,GAAAA,GAAAA,CAAAD,GAAAA,GAAA,YAAA,CAAa,KAAA,KAAb,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAoB,KAAA,KAApB,IAAA,GAAA,MAAA,GAAAC,GAAAA,CAA2B,IAAA,EAAA,KAA3B,IAAA,GAAA,EAAA,GAAqC,EAAA;AAIjD,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,CAAA,CAAE,eAAA,EAAgB;AAElB,QAAA,IAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AACnB,UAAA,OAAA,CAAQ,GAAG,CAAA;AAAA,QACb;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,qBAAqB,MAAM;AAtHrC,MAAA,IAAAD,KAAAC,GAAAA,EAAA,EAAA;AAuHM,MAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,CAAAA,GAAAA,GAAAA,CAAAD,GAAAA,GAAA,YAAA,CAAa,KAAA,KAAb,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAoB,KAAA,KAApB,IAAA,GAAA,MAAA,GAAAC,GAAAA,CAA2B,IAAA,EAAA,KAA3B,IAAA,GAAA,EAAA,GAAqC,EAAA;AACjD,MAAA,IAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AACnB,QAAA,OAAA,CAAQ,GAAG,CAAA;AAAA,MACb;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAa;AA7HvC,MAAA,IAAAD,GAAAA;AA8HM,MAAA,MAAM,QAAQA,GAAAA,GAAA,CAAA,CAAE,MAAA,CAA4B,KAAA,KAA9B,gBAAAA,GAAAA,CAAsC,CAAA,CAAA;AACpD,MAAA,IAAI,CAAC,IAAA,EAAM;AAEX,MAAA,QAAA,CAAS,IAAI,CAAA,CACV,IAAA,CAAK,CAAC,GAAA,KAAQ;AACb,QAAA,IAAI,CAAC,GAAA,EAAK;AAEV,QAAA,OAAA,CAAQ,GAAG,CAAA;AACX,QAAA,eAAA,CAAgB,KAAA,GAAQ,IAAA;AAAA,MAC1B,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,GAAA,KAAQ;AACd,QAAA,OAAA,CAAQ,MAAM,yCAAyC,CAAA;AACvD,QAAA,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA,MACnB,CAAC,CAAA;AAAA,IACL,CAAA;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,uBACE,CAAA,CAAC,SAAI,KAAA,EAAO,IAAA,CAAK,cAAc,SAAS,CAAA,EAAA,kBACtC,CAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,SAAA,EAAW,OAAM,YAAA,EAAa,CAAA,oBACzC,KAAA,EAAA,EAAI,KAAA,EAAO,KAAK,eAAA,EAAiB,cAAA,CAAe,KAAA,IAAS,OAAO,CAAA,EAAA,kBAC/D,CAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,YAAA;AAAA,UACL,SAAA,EAAU,MAAA;AAAA,UACV,WAAA,EAAa,CAAC,CAAA,KAAM;AAClB,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,CAAA,CAAE,eAAA,EAAgB;AAAA,UACpB,CAAA;AAAA,UACA,UAAU,QAAA,CAAS,KAAA;AAAA,UACnB,KAAA,EAAM,iBAAA;AAAA,UACN,OAAO,WAAA,CAAY,KAAA;AAAA,UACnB,OAAA,EAAS,UAAA;AAAA,UACT,SAAA;AAAA,UACA,OAAA,EAAS,MAAO,cAAA,CAAe,KAAA,GAAQ,IAAA;AAAA,UACvC,MAAA,EAAQ,MAAO,cAAA,CAAe,KAAA,GAAQ;AAAA;AAAA,SAEvC,CAAC,eAAA,CAAgB,yBAChB,CAAA,CAAC,KAAA,EAAA,EAAI,OAAM,aAAA,EAAA,kBACT,CAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,UAAU,QAAA,CAAS,KAAA;AAAA,UACnB,KAAA,EAAM,QAAA;AAAA,UACN,IAAI,IAAA,CAAK,KAAA;AAAA,UACT,IAAA,EAAK,MAAA;AAAA,UACL,MAAA,EAAO,SAAA;AAAA,UACP,QAAA,EAAU;AAAA;AAAA,yBAEZ,CAAA,CAAC,OAAA,EAAA,EAAM,OAAM,UAAA,EAAW,GAAA,EAAK,KAAK,KAAA,EAAA,kBAChC,CAAA,CAAC,QAAK,IAAA,EAAM,YAAA,EAAc,CAC5B,CAAA,kBACA,CAAA,CAAC,UAAK,KAAA,EAAM,MAAA,EAAO,SAAS,MAAG;AA/K/C,QAAA,IAAAA,GAAAA;AA+KkD,QAAA,OAAA,CAAAA,GAAAA,GAAA,YAAA,CAAa,KAAA,KAAb,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAoB,KAAA,EAAA;AAAA,MAAA,CAAA,EAAA,EACnD,qBACH,CACF,CAEJ,CAAA,EACC,YAAY,KAAA,oBACX,CAAA,CAAA,QAAA,EAAA,IAAA,EACG,UAAA,CAAW,WAAA,CAAY,KAAK,CAAA,oBAC3B,CAAA,CAAC,KAAA,EAAA,EAAI,OAAM,eAAA,EAAA,kBACT,CAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAK,WAAA,CAAY,KAAA;AAAA,UACjB,GAAA,EAAI,EAAA;AAAA,UACJ,OAAA,EAAS,CAAC,CAAA,KACR,OAAA,CAAQ,QAAQ,gBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,gBAAA,CAAmB,CAAA,CAAE,CAAA,CAAE,KAAA,CAAM,MAAM;AAAA,UAAC,CAAC;AAAA;AAAA,OAG3D,CAAA,kBAEF,CAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,IAAA;AAAA,YACL,SAAA;AAAA,YACA,CAAC,UAAA,CAAW,WAAA,CAAY,KAAK,CAAA,IAAK;AAAA,WACpC;AAAA,UACA,OAAA,EAAS,MAAM,kBAAA,EAAmB;AAAA,UAClC,KAAA,EACE,CAAC,UAAA,CAAW,WAAA,CAAY,KAAK,CAAA,GACzB,EAAE,OAAA,EAAS,GAAA,EAAK,MAAA,EAAQ,aAAA,EAAc,GACtC;AAAA,SAAA;AAAA,wBAGN,CAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,aAAA,EAAe;AAAA,OAE/B,CAEJ,CAAA;AAAA,IAEJ,CAAA;AAAA,EACF;AACF,CAAC,CAAA;;AC/MD,SAAA,CAAU,GAAGE,UAAQ,CAAA;AAiBd,MAAM,sBAAsB,eAAA,CAA0C;AAAA,EAC3E,KAAA,EAAO;AAAA,IACL,GAAA,EAAK;AAAA,MACH,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,GAAA,EAAK;AAAA,MACH,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA;AACZ,GACF;AAAA,EACA,MAAM,KAAA,EAAO;AACX,IAAA,MAAM,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAM,GAAI,KAAA;AAC5B,IAAA,OAAO,MAAM;AAzDjB,MAAA,IAAA,EAAA;AA0DM,MAAA,IAAI,EAAA,CAAC,EAAA,GAAA,GAAA,CAAI,KAAA,KAAJ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,MAAA,CAAA,EAAQ;AACtB,QAAA,uBACE,CAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAK,KAAA,CAAM,GAAA;AAAA,YACX,UAAU,KAAA,CAAM,QAAA;AAAA,YAChB,UAAU,KAAA,CAAM,QAAA;AAAA,YAChB,SAAS,CAAC,IAAA,KAAS,KAAA,CAAM,OAAA,CAAQ,OAAO,IAAI,CAAA;AAAA,YAC5C,SAAA,EAAW,MAAM,MAAA,CAAO,SAAA;AAAA,YACxB,YAAA,EAAc,MAAM,MAAA,CAAO,YAAA;AAAA,YAC3B,aAAA,EAAe,MAAM,MAAA,CAAO,aAAA;AAAA,YAC5B,qBAAA,EAAuB,MAAM,MAAA,CAAO,qBAAA;AAAA,YACpC,QAAA,EAAU,MAAM,MAAA,CAAO,QAAA;AAAA,YACvB,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,MAEJ;AACA,MAAA,uBACE,CAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,cAAA;AAAA,UACN,KAAK,GAAA,CAAI,KAAA;AAAA,UACT,KAAK,GAAA,CAAI,KAAA;AAAA,UACT,OAAO,KAAA,CAAM;AAAA;AAAA,OACf;AAAA,IAEJ,CAAA;AAAA,EACF;AACF,CAAC,CAAA;;ACxEM,MAAM,eAAA,GAAkB,KAAA;AAAA,EAC7B,WAAA,CAAY,IAAA;AAAA,EACZ,CAAC,GAAA,KAA6B;AAC5B,IAAA,OAAO,CAAC,WAAA,EAAa,IAAA,EAAM,MAAA,KAAW;AACpC,MAAA,MAAM,GAAA,GAAM,GAAA,CAAI,WAAA,CAAY,KAAA,CAAM,GAAG,CAAA;AACrC,MAAA,MAAM,GAAA,GAAM,GAAA,CAAI,WAAA,CAAY,KAAA,CAAM,GAAG,CAAA;AACrC,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,WAAA,CAAY,KAAA,CAAM,KAAK,CAAA;AACzC,MAAA,MAAM,QAAA,GAAW,IAAI,KAAK,CAAA;AAC1B,MAAA,MAAM,QAAA,GAAW,GAAA,CAAI,CAAC,IAAA,CAAK,QAAQ,CAAA;AACnC,MAAA,MAAM,OAAA,GAAU,CAAC,IAAA,EAAc,KAAA,KAAmB;AAChD,QAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AACpB,QAAA,MAAM,MAAM,MAAA,EAAO;AACnB,QAAA,IAAI,OAAO,IAAA,EAAM;AACjB,QAAA,IAAA,CAAK,QAAA;AAAA,UACH,IAAA,CAAK,MAAM,EAAA,CAAG,gBAAA;AAAA,YACZ,GAAA;AAAA,YACA,IAAA;AAAA,YACA,IAAA,KAAS,KAAA,GAAQ,SAAA,CAAU,QAAA,CAAS,KAAe,CAAA,GAAI;AAAA;AACzD,SACF;AAAA,MACF,CAAA;AAEA,MAAA,MAAM,MAAA,GAAS,GAAA,CAAI,GAAA,CAAI,iBAAA,CAAkB,GAAG,CAAA;AAC5C,MAAA,MAAM,GAAA,GAAM,UAAU,mBAAA,EAAqB;AAAA,QACzC,GAAA;AAAA,QACA,GAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,MAAM,GAAA,GAAM,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AACzC,MAAA,GAAA,CAAI,SAAA,GAAY,uBAAA;AAChB,MAAA,MAAM,sBAAA,GAAyB,YAAY,MAAM;AAC/C,QAAA,MAAM,aAAa,QAAA,CAAS,KAAA;AAC5B,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,GAAA,CAAI,SAAA,CAAU,IAAI,UAAU,CAAA;AAAA,QAC9B,CAAA,MAAO;AACL,UAAA,GAAA,CAAI,SAAA,CAAU,OAAO,UAAU,CAAA;AAAA,QACjC;AAAA,MACF,CAAC,CAAA;AACD,MAAA,MAAM,cAAc,MAAA,CAAO,WAAA;AAC3B,MAAA,MAAM,SAAA,GAAY,CAAC,IAAA,KAAe;AAChC,QAAA,IAAI,CAAC,WAAA,EAAa;AAChB,UAAA,GAAA,CAAI,KAAA,GAAQ,KAAK,KAAA,CAAM,GAAA;AAAA,QACzB,CAAA,MAAO;AACL,UAAA,MAAM,UAAA,GAAa,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC7C,UAAA,IAAI,OAAO,eAAe,QAAA,EAAU;AAClC,YAAA,GAAA,CAAI,KAAA,GAAQ,UAAA;AAAA,UACd,CAAA,MAAO;AACL,YAAA,UAAA,CACG,IAAA,CAAK,CAAC,GAAA,KAAQ;AACb,cAAA,GAAA,CAAI,KAAA,GAAQ,GAAA;AAAA,YACd,CAAC,CAAA,CACA,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,UACxB;AAAA,QACF;AACA,QAAA,GAAA,CAAI,KAAA,GAAQ,KAAK,KAAA,CAAM,GAAA;AACvB,QAAA,KAAA,CAAM,KAAA,GAAQ,KAAK,KAAA,CAAM,KAAA;AAAA,MAC3B,CAAA;AACA,MAAA,SAAA,CAAU,WAAW,CAAA;AACrB,MAAA,GAAA,CAAI,MAAM,GAAG,CAAA;AAEb,MAAA,OAAO;AAAA,QACL,GAAA;AAAA,QACA,MAAA,EAAQ,CAAC,WAAA,KAAgB;AACvB,UAAA,IAAI,WAAA,CAAY,IAAA,KAAS,WAAA,CAAY,IAAA,EAAM,OAAO,KAAA;AAElD,UAAA,SAAA,CAAU,WAAW,CAAA;AACrB,UAAA,OAAO,IAAA;AAAA,QACT,CAAA;AAAA,QACA,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,UAAA,IAAI,CAAA,CAAE,MAAA,YAAkB,gBAAA,EAAkB,OAAO,IAAA;AAEjD,UAAA,OAAO,KAAA;AAAA,QACT,CAAA;AAAA,QACA,YAAY,MAAM;AAChB,UAAA,QAAA,CAAS,KAAA,GAAQ,IAAA;AAAA,QACnB,CAAA;AAAA,QACA,cAAc,MAAM;AAClB,UAAA,QAAA,CAAS,KAAA,GAAQ,KAAA;AAAA,QACnB,CAAA;AAAA,QACA,SAAS,MAAM;AACb,UAAA,sBAAA,EAAuB;AACvB,UAAA,GAAA,CAAI,OAAA,EAAQ;AACZ,UAAA,GAAA,CAAI,MAAA,EAAO;AAAA,QACb;AAAA,OACF;AAAA,IACF,CAAA;AAAA,EACF;AACF;AAEA,QAAA,CAAS,eAAA,EAAiB;AAAA,EACxB,WAAA,EAAa,wBAAA;AAAA,EACb,KAAA,EAAO;AACT,CAAC,CAAA;;ACpGM,MAAM,oBAAA,GAAyC;AAAA,EACpD,iBAAA;AAAA,EACA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/link-tooltip/edit/component.tsx"],"names":[],"mappings":"AACA,OAAO,EAA+B,KAAK,GAAG,EAAK,MAAM,KAAK,CAAA;AAE9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAOlD,KAAK,aAAa,GAAG;IACnB,MAAM,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAA;IAC9B,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,QAAQ,sSA8EnB,CAAA"}
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/link-tooltip/edit/component.tsx"],"names":[],"mappings":"AACA,OAAO,EAA+B,KAAK,GAAG,EAAK,MAAM,KAAK,CAAA;AAE9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAOlD,KAAK,aAAa,GAAG;IACnB,MAAM,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAA;IAC9B,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,QAAQ,sSAmFnB,CAAA"}
@@ -179,7 +179,9 @@ const EditLink = defineComponent({
179
179
  const isValidUrl = (url) => {
180
180
  if (!url) return false;
181
181
  const trimmedUrl = url.trim();
182
- return /^(https?:\/\/|\/|\.\.?\/|mailto:|#|[a-zA-Z0-9-]+\.[a-zA-Z]+)/i.test(trimmedUrl);
182
+ return /^(https?:\/\/|\/|\.\.?\/|mailto:|#|[a-zA-Z0-9-]+\.[a-zA-Z]+)/i.test(
183
+ trimmedUrl
184
+ );
183
185
  };
184
186
  const onConfirmEdit = () => {
185
187
  var _a, _b;
@@ -218,7 +220,10 @@ const EditLink = defineComponent({
218
220
  ), link.value ? /* @__PURE__ */ h(
219
221
  Icon,
220
222
  {
221
- class: clsx("button confirm", !isValidUrl(link.value) && "disabled"),
223
+ class: clsx(
224
+ "button confirm",
225
+ !isValidUrl(link.value) && "disabled"
226
+ ),
222
227
  icon: config.value.confirmButton,
223
228
  onClick: onConfirmEdit
224
229
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/__internal__/meta.ts","../../src/link-tooltip/slices.ts","../../src/link-tooltip/command.ts","../../src/link-tooltip/tooltips.ts","../../src/__internal__/keep-alive.ts","../../src/__internal__/components/icon.tsx","../../src/link-tooltip/edit/component.tsx","../../src/link-tooltip/edit/edit-view.ts","../../src/link-tooltip/edit/edit-configure.ts","../../src/link-tooltip/utils.ts","../../src/link-tooltip/preview/component.tsx","../../src/link-tooltip/preview/preview-view.ts","../../src/link-tooltip/preview/preview-configure.ts","../../src/link-tooltip/configure.ts","../../src/link-tooltip/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 type { Mark } from '@jvs-milkdown/prose/model'\n\nimport { $ctx } from '@jvs-milkdown/utils'\n\nimport { withMeta } from '../__internal__/meta'\n\nexport interface LinkToolTipState {\n mode: 'preview' | 'edit'\n}\n\nconst defaultState: LinkToolTipState = {\n mode: 'preview',\n}\n\nexport const linkTooltipState = $ctx({ ...defaultState }, 'linkTooltipStateCtx')\n\nwithMeta(linkTooltipState, {\n displayName: 'State<link-tooltip>',\n group: 'LinkTooltip',\n})\n\nexport interface LinkTooltipAPI {\n addLink: (from: number, to: number) => void\n editLink: (mark: Mark, from: number, to: number) => void\n removeLink: (from: number, to: number) => void\n}\n\nconst defaultAPI: LinkTooltipAPI = {\n addLink: () => {},\n editLink: () => {},\n removeLink: () => {},\n}\n\nexport const linkTooltipAPI = $ctx({ ...defaultAPI }, 'linkTooltipAPICtx')\n\nwithMeta(linkTooltipState, {\n displayName: 'API<link-tooltip>',\n group: 'LinkTooltip',\n})\n\nexport interface LinkTooltipConfig {\n linkIcon: string\n editButton: string\n confirmButton: string\n removeButton: string\n onCopyLink: (link: string) => void\n inputPlaceholder: string\n}\n\nconst defaultConfig: LinkTooltipConfig = {\n linkIcon: '🔗',\n editButton: '✎',\n removeButton: '⌫',\n confirmButton: 'Confirm ⏎',\n onCopyLink: () => {},\n inputPlaceholder: 'Paste link...',\n}\n\nexport const linkTooltipConfig = $ctx(\n {\n ...defaultConfig,\n },\n 'linkTooltipConfigCtx'\n)\n\nwithMeta(linkTooltipState, {\n displayName: 'Config<link-tooltip>',\n group: 'LinkTooltip',\n})\n","import { linkSchema } from '@jvs-milkdown/preset-commonmark'\nimport { $command } from '@jvs-milkdown/utils'\n\nimport { linkTooltipAPI } from './slices'\n\nexport const toggleLinkCommand = $command('ToggleLink', (ctx) => {\n return () => (state) => {\n const { doc, selection } = state\n const mark = linkSchema.type(ctx)\n const hasLink = doc.rangeHasMark(selection.from, selection.to, mark)\n if (hasLink) {\n ctx.get(linkTooltipAPI.key).removeLink(selection.from, selection.to)\n return true\n }\n\n ctx.get(linkTooltipAPI.key).addLink(selection.from, selection.to)\n return true\n }\n})\n","import { tooltipFactory } from '@jvs-milkdown/plugin-tooltip'\n\nimport { withMeta } from '../__internal__/meta'\n\nexport const linkPreviewTooltip = tooltipFactory('LINK_PREVIEW')\nwithMeta(linkPreviewTooltip[0], {\n displayName: 'PreviewTooltipSpec<link-tooltip>',\n group: 'LinkTooltip',\n})\nwithMeta(linkPreviewTooltip[1], {\n displayName: 'PreviewTooltipPlugin<link-tooltip>',\n group: 'LinkTooltip',\n})\nexport const linkEditTooltip = tooltipFactory('LINK_EDIT')\nwithMeta(linkEditTooltip[0], {\n displayName: 'EditTooltipSpec<link-tooltip>',\n group: 'LinkTooltip',\n})\nwithMeta(linkEditTooltip[1], {\n displayName: 'EditTooltipPlugin<link-tooltip>',\n group: 'LinkTooltip',\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 { defineComponent, ref, watch, type Ref, h } from 'vue'\n\nimport type { LinkTooltipConfig } from '../slices'\n\nimport { Icon } from '../../__internal__/components/icon'\nimport { keepAlive } from '../../__internal__/keep-alive'\n\nkeepAlive(h)\n\ntype EditLinkProps = {\n config: Ref<LinkTooltipConfig>\n src: Ref<string>\n onConfirm: (href: string) => void\n onCancel: () => void\n}\n\nexport const EditLink = defineComponent<EditLinkProps>({\n props: {\n config: {\n type: Object,\n required: true,\n },\n src: {\n type: Object,\n required: true,\n },\n onConfirm: {\n type: Function,\n required: true,\n },\n onCancel: {\n type: Function,\n required: true,\n },\n },\n setup({ config, src, onConfirm, onCancel }) {\n const link = ref(src)\n\n watch(src, (value) => {\n link.value = value\n })\n\n const isValidUrl = (url: string) => {\n if (!url) return false\n const trimmedUrl = url.trim()\n // Accept standard http/https links, relative links, anchors, or mailto\n return /^(https?:\\/\\/|\\/|\\.\\.?\\/|mailto:|#|[a-zA-Z0-9-]+\\.[a-zA-Z]+)/i.test(trimmedUrl)\n }\n\n const onConfirmEdit = () => {\n const val = link.value?.trim() ?? ''\n if (isValidUrl(val)) {\n onConfirm(val)\n }\n }\n\n const onKeydown = (e: KeyboardEvent) => {\n e.stopPropagation()\n if (e.key === 'Enter') {\n e.preventDefault()\n const val = link.value?.trim() ?? ''\n if (isValidUrl(val)) {\n onConfirmEdit()\n }\n }\n if (e.key === 'Escape') {\n e.preventDefault()\n onCancel()\n }\n }\n\n return () => {\n return (\n <div class=\"link-edit\">\n <input\n class=\"input-area\"\n placeholder={config.value.inputPlaceholder}\n onKeydown={onKeydown}\n onInput={(e: Event) => {\n link.value = (e.target as HTMLInputElement).value\n }}\n value={link.value}\n />\n {link.value ? (\n <Icon\n class={clsx('button confirm', !isValidUrl(link.value) && 'disabled')}\n icon={config.value.confirmButton}\n onClick={onConfirmEdit}\n />\n ) : null}\n </div>\n )\n }\n },\n})\n","import type { Ctx } from '@jvs-milkdown/ctx'\nimport type { Mark } from '@jvs-milkdown/prose/model'\nimport type { PluginView } from '@jvs-milkdown/prose/state'\nimport type { EditorView } from '@jvs-milkdown/prose/view'\n\nimport { editorViewCtx } from '@jvs-milkdown/core'\nimport { TooltipProvider } from '@jvs-milkdown/plugin-tooltip'\nimport { linkSchema } from '@jvs-milkdown/preset-commonmark'\nimport { posToDOMRect } from '@jvs-milkdown/prose'\nimport { TextSelection } from '@jvs-milkdown/prose/state'\nimport DOMPurify from 'dompurify'\nimport { createApp, ref, type App, type Ref } from 'vue'\n\nimport {\n linkTooltipConfig,\n linkTooltipState,\n type LinkTooltipConfig,\n} from '../slices'\nimport { EditLink } from './component'\n\ninterface Data {\n from: number\n to: number\n mark: Mark | null\n}\n\nconst defaultData: Data = {\n from: -1,\n to: -1,\n mark: null,\n}\n\nexport class LinkEditTooltip implements PluginView {\n #content: HTMLElement\n #provider: TooltipProvider\n #data: Data = { ...defaultData }\n #app: App\n #config: Ref<LinkTooltipConfig>\n #src = ref('')\n\n constructor(\n readonly ctx: Ctx,\n view: EditorView\n ) {\n this.#config = ref(this.ctx.get(linkTooltipConfig.key))\n\n const content = document.createElement('div')\n content.className = 'milkdown-link-edit'\n\n const app = createApp(EditLink, {\n config: this.#config,\n src: this.#src,\n onConfirm: this.#confirmEdit,\n onCancel: this.#reset,\n })\n app.mount(content)\n this.#app = app\n\n this.#content = content\n this.#provider = new TooltipProvider({\n content,\n debounce: 0,\n shouldShow: () => false,\n })\n this.#provider.onHide = () => {\n requestAnimationFrame(() => {\n view.dom.focus({ preventScroll: true })\n })\n }\n this.#provider.update(view)\n }\n\n #reset = () => {\n this.#provider.hide()\n this.ctx.update(linkTooltipState.key, (state) => ({\n ...state,\n mode: 'preview' as const,\n }))\n this.#data = { ...defaultData }\n }\n\n #confirmEdit = (href: string) => {\n const view = this.ctx.get(editorViewCtx)\n const { from, to, mark } = this.#data\n const type = linkSchema.type(this.ctx)\n const link = DOMPurify.sanitize(href)\n if (mark && mark.attrs.href === link) {\n this.#reset()\n return\n }\n\n const tr = view.state.tr\n if (mark) tr.removeMark(from, to, mark)\n\n tr.addMark(from, to, type.create({ href: link }))\n view.dispatch(tr)\n\n this.#reset()\n }\n\n #enterEditMode = (value: string, from: number, to: number) => {\n const config = this.ctx.get(linkTooltipConfig.key)\n this.#config.value = config\n this.#src.value = value\n this.ctx.update(linkTooltipState.key, (state) => ({\n ...state,\n mode: 'edit' as const,\n }))\n const view = this.ctx.get(editorViewCtx)\n view.dispatch(\n view.state.tr.setSelection(TextSelection.create(view.state.doc, from, to))\n )\n this.#provider.show(\n { getBoundingClientRect: () => posToDOMRect(view, from, to) },\n view\n )\n requestAnimationFrame(() => {\n this.#content.querySelector('input')?.focus()\n })\n }\n\n update = (view: EditorView) => {\n const { state } = view\n const { selection } = state\n if (!(selection instanceof TextSelection)) return\n const { from, to } = selection\n if (from === this.#data.from && to === this.#data.to) return\n\n this.#reset()\n }\n\n destroy = () => {\n this.#app.unmount()\n this.#provider.destroy()\n this.#content.remove()\n }\n\n addLink = (from: number, to: number) => {\n this.#data = {\n from,\n to,\n mark: null,\n }\n this.#enterEditMode('', from, to)\n }\n\n editLink = (mark: Mark, from: number, to: number) => {\n this.#data = {\n from,\n to,\n mark,\n }\n this.#enterEditMode(mark.attrs.href, from, to)\n }\n\n removeLink = (from: number, to: number) => {\n const view = this.ctx.get(editorViewCtx)\n\n const tr = view.state.tr\n tr.removeMark(from, to, linkSchema.type(this.ctx))\n view.dispatch(tr)\n\n this.#reset()\n }\n}\n","import type { Ctx } from '@jvs-milkdown/ctx'\n\nimport { linkTooltipAPI } from '../slices'\nimport { linkEditTooltip } from '../tooltips'\nimport { LinkEditTooltip } from './edit-view'\n\nexport function configureLinkEditTooltip(ctx: Ctx) {\n let linkEditTooltipView: LinkEditTooltip | null\n\n ctx.update(linkTooltipAPI.key, (api) => ({\n ...api,\n addLink: (from, to) => {\n linkEditTooltipView?.addLink(from, to)\n },\n editLink: (mark, from, to) => {\n linkEditTooltipView?.editLink(mark, from, to)\n },\n removeLink: (from, to) => {\n linkEditTooltipView?.removeLink(from, to)\n },\n }))\n\n ctx.set(linkEditTooltip.key, {\n view: (view) => {\n linkEditTooltipView = new LinkEditTooltip(ctx, view)\n return linkEditTooltipView\n },\n })\n}\n","import type { Ctx } from '@jvs-milkdown/ctx'\nimport type { Mark, Node } from '@jvs-milkdown/prose/model'\nimport type { EditorView } from '@jvs-milkdown/prose/view'\n\nimport { linkSchema } from '@jvs-milkdown/preset-commonmark'\n\nimport { linkPreviewTooltip } from './tooltips'\n\nexport function findMarkPosition(\n mark: Mark,\n node: Node,\n doc: Node,\n from: number,\n to: number\n) {\n let markPos = { start: -1, end: -1 }\n doc.nodesBetween(from, to, (n, pos) => {\n // stop recursive finding if result is found\n if (markPos.start > -1) return false\n\n if (markPos.start === -1 && mark.isInSet(n.marks) && node === n) {\n markPos = {\n start: pos,\n end: pos + Math.max(n.textContent.length, 1),\n }\n }\n\n return undefined\n })\n\n return markPos\n}\n\nexport function shouldShowPreviewWhenHover(\n ctx: Ctx,\n view: EditorView,\n event: MouseEvent\n) {\n const $pos = view.posAtCoords({ left: event.clientX, top: event.clientY })\n if (!$pos) return\n\n const { pos } = $pos\n const node = view.state.doc.nodeAt(pos)\n\n if (!node) return\n\n const mark = node.marks.find(\n (mark) => mark.type === linkSchema.mark.type(ctx)\n )\n if (!mark) return\n\n const key = linkPreviewTooltip.pluginKey()\n if (!key) return\n\n return { show: true, pos, node, mark }\n}\n","import { defineComponent, type Ref, h } from 'vue'\n\nimport type { LinkTooltipConfig } from '../slices'\n\nimport { Icon } from '../../__internal__/components/icon'\nimport { keepAlive } from '../../__internal__/keep-alive'\n\nkeepAlive(h)\n\ntype PreviewLinkProps = {\n config: Ref<LinkTooltipConfig>\n src: Ref<string>\n onEdit: Ref<() => void>\n onRemove: Ref<() => void>\n}\n\nexport const PreviewLink = defineComponent<PreviewLinkProps>({\n props: {\n config: {\n type: Object,\n required: true,\n },\n src: {\n type: Object,\n required: true,\n },\n onEdit: {\n type: Object,\n required: true,\n },\n onRemove: {\n type: Object,\n required: true,\n },\n },\n setup({ config, src, onEdit, onRemove }) {\n const onClickEditButton = (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n onEdit.value()\n }\n\n const onClickRemoveButton = (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n onRemove.value()\n }\n\n const onClickPreview = (e: Event) => {\n e.preventDefault()\n const link = src.value\n if (navigator.clipboard && link) {\n navigator.clipboard\n .writeText(link)\n .then(() => {\n config.value.onCopyLink(link)\n })\n .catch((e) => console.error(e))\n }\n }\n\n return () => {\n return (\n <div class=\"link-preview\">\n <Icon\n class=\"button link-icon\"\n icon={config.value.linkIcon}\n onClick={onClickPreview}\n />\n <a href={src.value} target=\"_blank\" class=\"link-display\">\n {src.value}\n </a>\n <Icon\n class=\"button link-edit-button\"\n icon={config.value.editButton}\n onClick={onClickEditButton}\n />\n <Icon\n class=\"button link-remove-button\"\n icon={config.value.removeButton}\n onClick={onClickRemoveButton}\n />\n </div>\n )\n }\n },\n})\n","import type { Ctx, Slice } from '@jvs-milkdown/ctx'\nimport type { Mark } from '@jvs-milkdown/prose/model'\nimport type { PluginView } from '@jvs-milkdown/prose/state'\nimport type { EditorView } from '@jvs-milkdown/prose/view'\n\nimport { TooltipProvider } from '@jvs-milkdown/plugin-tooltip'\nimport { createApp, ref, type App, type Ref } from 'vue'\n\nimport type { LinkTooltipConfig, LinkToolTipState } from '../slices'\n\nimport { linkTooltipAPI, linkTooltipConfig, linkTooltipState } from '../slices'\nimport { PreviewLink } from './component'\n\nexport class LinkPreviewTooltip implements PluginView {\n #content: HTMLElement\n #provider: TooltipProvider\n #slice: Slice<LinkToolTipState>\n #config: Ref<LinkTooltipConfig>\n #src = ref('')\n #onEdit = ref(() => {})\n #onRemove = ref(() => {})\n #app: App\n #editorView: EditorView\n\n #hovering = false\n\n constructor(\n readonly ctx: Ctx,\n view: EditorView\n ) {\n this.#editorView = view\n this.#config = ref(this.ctx.get(linkTooltipConfig.key))\n this.#app = createApp(PreviewLink, {\n config: this.#config,\n src: this.#src,\n onEdit: this.#onEdit,\n onRemove: this.#onRemove,\n })\n this.#content = document.createElement('div')\n this.#content.className = 'milkdown-link-preview'\n this.#app.mount(this.#content)\n\n this.#provider = new TooltipProvider({\n debounce: 0,\n content: this.#content,\n shouldShow: () => false,\n })\n this.#provider.update(view)\n this.#slice = ctx.use(linkTooltipState.key)\n this.#slice.on(this.#onStateChange)\n }\n\n #onStateChange = ({ mode }: LinkToolTipState) => {\n if (mode === 'edit') this.#hide()\n }\n\n #onMouseEnter = () => {\n this.#hovering = true\n }\n\n #onMouseLeave = () => {\n this.#hovering = false\n }\n\n #hide = () => {\n this.#provider.hide()\n this.#provider.element.removeEventListener('mouseenter', this.#onMouseEnter)\n this.#provider.element.removeEventListener('mouseleave', this.#onMouseLeave)\n }\n\n show = (mark: Mark, from: number, to: number, rect: DOMRect) => {\n this.#config.value = this.ctx.get(linkTooltipConfig.key)\n this.#src.value = mark.attrs.href\n this.#onEdit.value = () => {\n this.ctx.get(linkTooltipAPI.key).editLink(mark, from, to)\n }\n this.#onRemove.value = () => {\n this.ctx.get(linkTooltipAPI.key).removeLink(from, to)\n this.#hide()\n }\n\n this.#provider.show({ getBoundingClientRect: () => rect }, this.#editorView)\n this.#provider.element.addEventListener('mouseenter', this.#onMouseEnter)\n this.#provider.element.addEventListener('mouseleave', this.#onMouseLeave)\n }\n\n hide = () => {\n if (this.#hovering) return\n\n this.#hide()\n }\n\n update = () => {}\n\n destroy = () => {\n this.#app.unmount()\n this.#slice.off(this.#onStateChange)\n this.#provider.destroy()\n this.#content.remove()\n }\n}\n","import type { Ctx } from '@jvs-milkdown/ctx'\nimport type { EditorView } from '@jvs-milkdown/prose/view'\n\nimport { posToDOMRect } from '@jvs-milkdown/prose'\nimport { debounce } from 'lodash-es'\n\nimport { linkTooltipState } from '../slices'\nimport { linkPreviewTooltip } from '../tooltips'\nimport { findMarkPosition, shouldShowPreviewWhenHover } from '../utils'\nimport { LinkPreviewTooltip } from './preview-view'\n\nexport function configureLinkPreviewTooltip(ctx: Ctx) {\n let linkPreviewTooltipView: LinkPreviewTooltip | null\n\n const DELAY = 50\n const onMouseMove = debounce((view: EditorView, event: MouseEvent) => {\n if (!linkPreviewTooltipView) return\n if (!view.hasFocus()) return\n\n const state = ctx.get(linkTooltipState.key)\n if (state.mode === 'edit') return\n\n const result = shouldShowPreviewWhenHover(ctx, view, event)\n if (result) {\n const position = view.state.doc.resolve(result.pos)\n const markPosition = findMarkPosition(\n result.mark,\n result.node,\n view.state.doc,\n position.before(),\n position.after()\n )\n const from = markPosition.start\n const to = markPosition.end\n linkPreviewTooltipView.show(\n result.mark,\n from,\n to,\n posToDOMRect(view, from, to)\n )\n return\n }\n\n linkPreviewTooltipView.hide()\n }, DELAY)\n\n const onMouseLeave = () => {\n setTimeout(() => {\n linkPreviewTooltipView?.hide()\n }, DELAY)\n }\n\n ctx.set(linkPreviewTooltip.key, {\n props: {\n handleDOMEvents: {\n mousemove: onMouseMove,\n mouseleave: onMouseLeave,\n },\n },\n view: (view) => {\n linkPreviewTooltipView = new LinkPreviewTooltip(ctx, view)\n return linkPreviewTooltipView\n },\n })\n}\n","import type { Ctx } from '@jvs-milkdown/ctx'\n\nimport { configureLinkEditTooltip } from './edit/edit-configure'\nimport { configureLinkPreviewTooltip } from './preview/preview-configure'\n\nexport function configureLinkTooltip(ctx: Ctx) {\n configureLinkPreviewTooltip(ctx)\n configureLinkEditTooltip(ctx)\n}\n","import type { MilkdownPlugin } from '@jvs-milkdown/ctx'\n\nimport { toggleLinkCommand } from './command'\nimport { linkTooltipAPI, linkTooltipConfig, linkTooltipState } from './slices'\nimport { linkEditTooltip, linkPreviewTooltip } from './tooltips'\n\nexport * from './slices'\nexport * from './configure'\nexport * from './tooltips'\nexport * from './command'\n\nexport const linkTooltipPlugin: MilkdownPlugin[] = [\n linkTooltipState,\n linkTooltipAPI,\n linkTooltipConfig,\n linkPreviewTooltip,\n linkEditTooltip,\n toggleLinkCommand,\n].flat()\n"],"names":["__spreadValues","_content","_provider","_app","_config","_src","__privateAdd","__privateGet","__spreadProps","__privateSet","mark","e"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/__internal__/meta.ts","../../src/link-tooltip/slices.ts","../../src/link-tooltip/command.ts","../../src/link-tooltip/tooltips.ts","../../src/__internal__/keep-alive.ts","../../src/__internal__/components/icon.tsx","../../src/link-tooltip/edit/component.tsx","../../src/link-tooltip/edit/edit-view.ts","../../src/link-tooltip/edit/edit-configure.ts","../../src/link-tooltip/utils.ts","../../src/link-tooltip/preview/component.tsx","../../src/link-tooltip/preview/preview-view.ts","../../src/link-tooltip/preview/preview-configure.ts","../../src/link-tooltip/configure.ts","../../src/link-tooltip/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 type { Mark } from '@jvs-milkdown/prose/model'\n\nimport { $ctx } from '@jvs-milkdown/utils'\n\nimport { withMeta } from '../__internal__/meta'\n\nexport interface LinkToolTipState {\n mode: 'preview' | 'edit'\n}\n\nconst defaultState: LinkToolTipState = {\n mode: 'preview',\n}\n\nexport const linkTooltipState = $ctx({ ...defaultState }, 'linkTooltipStateCtx')\n\nwithMeta(linkTooltipState, {\n displayName: 'State<link-tooltip>',\n group: 'LinkTooltip',\n})\n\nexport interface LinkTooltipAPI {\n addLink: (from: number, to: number) => void\n editLink: (mark: Mark, from: number, to: number) => void\n removeLink: (from: number, to: number) => void\n}\n\nconst defaultAPI: LinkTooltipAPI = {\n addLink: () => {},\n editLink: () => {},\n removeLink: () => {},\n}\n\nexport const linkTooltipAPI = $ctx({ ...defaultAPI }, 'linkTooltipAPICtx')\n\nwithMeta(linkTooltipState, {\n displayName: 'API<link-tooltip>',\n group: 'LinkTooltip',\n})\n\nexport interface LinkTooltipConfig {\n linkIcon: string\n editButton: string\n confirmButton: string\n removeButton: string\n onCopyLink: (link: string) => void\n inputPlaceholder: string\n}\n\nconst defaultConfig: LinkTooltipConfig = {\n linkIcon: '🔗',\n editButton: '✎',\n removeButton: '⌫',\n confirmButton: 'Confirm ⏎',\n onCopyLink: () => {},\n inputPlaceholder: 'Paste link...',\n}\n\nexport const linkTooltipConfig = $ctx(\n {\n ...defaultConfig,\n },\n 'linkTooltipConfigCtx'\n)\n\nwithMeta(linkTooltipState, {\n displayName: 'Config<link-tooltip>',\n group: 'LinkTooltip',\n})\n","import { linkSchema } from '@jvs-milkdown/preset-commonmark'\nimport { $command } from '@jvs-milkdown/utils'\n\nimport { linkTooltipAPI } from './slices'\n\nexport const toggleLinkCommand = $command('ToggleLink', (ctx) => {\n return () => (state) => {\n const { doc, selection } = state\n const mark = linkSchema.type(ctx)\n const hasLink = doc.rangeHasMark(selection.from, selection.to, mark)\n if (hasLink) {\n ctx.get(linkTooltipAPI.key).removeLink(selection.from, selection.to)\n return true\n }\n\n ctx.get(linkTooltipAPI.key).addLink(selection.from, selection.to)\n return true\n }\n})\n","import { tooltipFactory } from '@jvs-milkdown/plugin-tooltip'\n\nimport { withMeta } from '../__internal__/meta'\n\nexport const linkPreviewTooltip = tooltipFactory('LINK_PREVIEW')\nwithMeta(linkPreviewTooltip[0], {\n displayName: 'PreviewTooltipSpec<link-tooltip>',\n group: 'LinkTooltip',\n})\nwithMeta(linkPreviewTooltip[1], {\n displayName: 'PreviewTooltipPlugin<link-tooltip>',\n group: 'LinkTooltip',\n})\nexport const linkEditTooltip = tooltipFactory('LINK_EDIT')\nwithMeta(linkEditTooltip[0], {\n displayName: 'EditTooltipSpec<link-tooltip>',\n group: 'LinkTooltip',\n})\nwithMeta(linkEditTooltip[1], {\n displayName: 'EditTooltipPlugin<link-tooltip>',\n group: 'LinkTooltip',\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 { defineComponent, ref, watch, type Ref, h } from 'vue'\n\nimport type { LinkTooltipConfig } from '../slices'\n\nimport { Icon } from '../../__internal__/components/icon'\nimport { keepAlive } from '../../__internal__/keep-alive'\n\nkeepAlive(h)\n\ntype EditLinkProps = {\n config: Ref<LinkTooltipConfig>\n src: Ref<string>\n onConfirm: (href: string) => void\n onCancel: () => void\n}\n\nexport const EditLink = defineComponent<EditLinkProps>({\n props: {\n config: {\n type: Object,\n required: true,\n },\n src: {\n type: Object,\n required: true,\n },\n onConfirm: {\n type: Function,\n required: true,\n },\n onCancel: {\n type: Function,\n required: true,\n },\n },\n setup({ config, src, onConfirm, onCancel }) {\n const link = ref(src)\n\n watch(src, (value) => {\n link.value = value\n })\n\n const isValidUrl = (url: string) => {\n if (!url) return false\n const trimmedUrl = url.trim()\n // Accept standard http/https links, relative links, anchors, or mailto\n return /^(https?:\\/\\/|\\/|\\.\\.?\\/|mailto:|#|[a-zA-Z0-9-]+\\.[a-zA-Z]+)/i.test(\n trimmedUrl\n )\n }\n\n const onConfirmEdit = () => {\n const val = link.value?.trim() ?? ''\n if (isValidUrl(val)) {\n onConfirm(val)\n }\n }\n\n const onKeydown = (e: KeyboardEvent) => {\n e.stopPropagation()\n if (e.key === 'Enter') {\n e.preventDefault()\n const val = link.value?.trim() ?? ''\n if (isValidUrl(val)) {\n onConfirmEdit()\n }\n }\n if (e.key === 'Escape') {\n e.preventDefault()\n onCancel()\n }\n }\n\n return () => {\n return (\n <div class=\"link-edit\">\n <input\n class=\"input-area\"\n placeholder={config.value.inputPlaceholder}\n onKeydown={onKeydown}\n onInput={(e: Event) => {\n link.value = (e.target as HTMLInputElement).value\n }}\n value={link.value}\n />\n {link.value ? (\n <Icon\n class={clsx(\n 'button confirm',\n !isValidUrl(link.value) && 'disabled'\n )}\n icon={config.value.confirmButton}\n onClick={onConfirmEdit}\n />\n ) : null}\n </div>\n )\n }\n },\n})\n","import type { Ctx } from '@jvs-milkdown/ctx'\nimport type { Mark } from '@jvs-milkdown/prose/model'\nimport type { PluginView } from '@jvs-milkdown/prose/state'\nimport type { EditorView } from '@jvs-milkdown/prose/view'\n\nimport { editorViewCtx } from '@jvs-milkdown/core'\nimport { TooltipProvider } from '@jvs-milkdown/plugin-tooltip'\nimport { linkSchema } from '@jvs-milkdown/preset-commonmark'\nimport { posToDOMRect } from '@jvs-milkdown/prose'\nimport { TextSelection } from '@jvs-milkdown/prose/state'\nimport DOMPurify from 'dompurify'\nimport { createApp, ref, type App, type Ref } from 'vue'\n\nimport {\n linkTooltipConfig,\n linkTooltipState,\n type LinkTooltipConfig,\n} from '../slices'\nimport { EditLink } from './component'\n\ninterface Data {\n from: number\n to: number\n mark: Mark | null\n}\n\nconst defaultData: Data = {\n from: -1,\n to: -1,\n mark: null,\n}\n\nexport class LinkEditTooltip implements PluginView {\n #content: HTMLElement\n #provider: TooltipProvider\n #data: Data = { ...defaultData }\n #app: App\n #config: Ref<LinkTooltipConfig>\n #src = ref('')\n\n constructor(\n readonly ctx: Ctx,\n view: EditorView\n ) {\n this.#config = ref(this.ctx.get(linkTooltipConfig.key))\n\n const content = document.createElement('div')\n content.className = 'milkdown-link-edit'\n\n const app = createApp(EditLink, {\n config: this.#config,\n src: this.#src,\n onConfirm: this.#confirmEdit,\n onCancel: this.#reset,\n })\n app.mount(content)\n this.#app = app\n\n this.#content = content\n this.#provider = new TooltipProvider({\n content,\n debounce: 0,\n shouldShow: () => false,\n })\n this.#provider.onHide = () => {\n requestAnimationFrame(() => {\n view.dom.focus({ preventScroll: true })\n })\n }\n this.#provider.update(view)\n }\n\n #reset = () => {\n this.#provider.hide()\n this.ctx.update(linkTooltipState.key, (state) => ({\n ...state,\n mode: 'preview' as const,\n }))\n this.#data = { ...defaultData }\n }\n\n #confirmEdit = (href: string) => {\n const view = this.ctx.get(editorViewCtx)\n const { from, to, mark } = this.#data\n const type = linkSchema.type(this.ctx)\n const link = DOMPurify.sanitize(href)\n if (mark && mark.attrs.href === link) {\n this.#reset()\n return\n }\n\n const tr = view.state.tr\n if (mark) tr.removeMark(from, to, mark)\n\n tr.addMark(from, to, type.create({ href: link }))\n view.dispatch(tr)\n\n this.#reset()\n }\n\n #enterEditMode = (value: string, from: number, to: number) => {\n const config = this.ctx.get(linkTooltipConfig.key)\n this.#config.value = config\n this.#src.value = value\n this.ctx.update(linkTooltipState.key, (state) => ({\n ...state,\n mode: 'edit' as const,\n }))\n const view = this.ctx.get(editorViewCtx)\n view.dispatch(\n view.state.tr.setSelection(TextSelection.create(view.state.doc, from, to))\n )\n this.#provider.show(\n { getBoundingClientRect: () => posToDOMRect(view, from, to) },\n view\n )\n requestAnimationFrame(() => {\n this.#content.querySelector('input')?.focus()\n })\n }\n\n update = (view: EditorView) => {\n const { state } = view\n const { selection } = state\n if (!(selection instanceof TextSelection)) return\n const { from, to } = selection\n if (from === this.#data.from && to === this.#data.to) return\n\n this.#reset()\n }\n\n destroy = () => {\n this.#app.unmount()\n this.#provider.destroy()\n this.#content.remove()\n }\n\n addLink = (from: number, to: number) => {\n this.#data = {\n from,\n to,\n mark: null,\n }\n this.#enterEditMode('', from, to)\n }\n\n editLink = (mark: Mark, from: number, to: number) => {\n this.#data = {\n from,\n to,\n mark,\n }\n this.#enterEditMode(mark.attrs.href, from, to)\n }\n\n removeLink = (from: number, to: number) => {\n const view = this.ctx.get(editorViewCtx)\n\n const tr = view.state.tr\n tr.removeMark(from, to, linkSchema.type(this.ctx))\n view.dispatch(tr)\n\n this.#reset()\n }\n}\n","import type { Ctx } from '@jvs-milkdown/ctx'\n\nimport { linkTooltipAPI } from '../slices'\nimport { linkEditTooltip } from '../tooltips'\nimport { LinkEditTooltip } from './edit-view'\n\nexport function configureLinkEditTooltip(ctx: Ctx) {\n let linkEditTooltipView: LinkEditTooltip | null\n\n ctx.update(linkTooltipAPI.key, (api) => ({\n ...api,\n addLink: (from, to) => {\n linkEditTooltipView?.addLink(from, to)\n },\n editLink: (mark, from, to) => {\n linkEditTooltipView?.editLink(mark, from, to)\n },\n removeLink: (from, to) => {\n linkEditTooltipView?.removeLink(from, to)\n },\n }))\n\n ctx.set(linkEditTooltip.key, {\n view: (view) => {\n linkEditTooltipView = new LinkEditTooltip(ctx, view)\n return linkEditTooltipView\n },\n })\n}\n","import type { Ctx } from '@jvs-milkdown/ctx'\nimport type { Mark, Node } from '@jvs-milkdown/prose/model'\nimport type { EditorView } from '@jvs-milkdown/prose/view'\n\nimport { linkSchema } from '@jvs-milkdown/preset-commonmark'\n\nimport { linkPreviewTooltip } from './tooltips'\n\nexport function findMarkPosition(\n mark: Mark,\n node: Node,\n doc: Node,\n from: number,\n to: number\n) {\n let markPos = { start: -1, end: -1 }\n doc.nodesBetween(from, to, (n, pos) => {\n // stop recursive finding if result is found\n if (markPos.start > -1) return false\n\n if (markPos.start === -1 && mark.isInSet(n.marks) && node === n) {\n markPos = {\n start: pos,\n end: pos + Math.max(n.textContent.length, 1),\n }\n }\n\n return undefined\n })\n\n return markPos\n}\n\nexport function shouldShowPreviewWhenHover(\n ctx: Ctx,\n view: EditorView,\n event: MouseEvent\n) {\n const $pos = view.posAtCoords({ left: event.clientX, top: event.clientY })\n if (!$pos) return\n\n const { pos } = $pos\n const node = view.state.doc.nodeAt(pos)\n\n if (!node) return\n\n const mark = node.marks.find(\n (mark) => mark.type === linkSchema.mark.type(ctx)\n )\n if (!mark) return\n\n const key = linkPreviewTooltip.pluginKey()\n if (!key) return\n\n return { show: true, pos, node, mark }\n}\n","import { defineComponent, type Ref, h } from 'vue'\n\nimport type { LinkTooltipConfig } from '../slices'\n\nimport { Icon } from '../../__internal__/components/icon'\nimport { keepAlive } from '../../__internal__/keep-alive'\n\nkeepAlive(h)\n\ntype PreviewLinkProps = {\n config: Ref<LinkTooltipConfig>\n src: Ref<string>\n onEdit: Ref<() => void>\n onRemove: Ref<() => void>\n}\n\nexport const PreviewLink = defineComponent<PreviewLinkProps>({\n props: {\n config: {\n type: Object,\n required: true,\n },\n src: {\n type: Object,\n required: true,\n },\n onEdit: {\n type: Object,\n required: true,\n },\n onRemove: {\n type: Object,\n required: true,\n },\n },\n setup({ config, src, onEdit, onRemove }) {\n const onClickEditButton = (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n onEdit.value()\n }\n\n const onClickRemoveButton = (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n onRemove.value()\n }\n\n const onClickPreview = (e: Event) => {\n e.preventDefault()\n const link = src.value\n if (navigator.clipboard && link) {\n navigator.clipboard\n .writeText(link)\n .then(() => {\n config.value.onCopyLink(link)\n })\n .catch((e) => console.error(e))\n }\n }\n\n return () => {\n return (\n <div class=\"link-preview\">\n <Icon\n class=\"button link-icon\"\n icon={config.value.linkIcon}\n onClick={onClickPreview}\n />\n <a href={src.value} target=\"_blank\" class=\"link-display\">\n {src.value}\n </a>\n <Icon\n class=\"button link-edit-button\"\n icon={config.value.editButton}\n onClick={onClickEditButton}\n />\n <Icon\n class=\"button link-remove-button\"\n icon={config.value.removeButton}\n onClick={onClickRemoveButton}\n />\n </div>\n )\n }\n },\n})\n","import type { Ctx, Slice } from '@jvs-milkdown/ctx'\nimport type { Mark } from '@jvs-milkdown/prose/model'\nimport type { PluginView } from '@jvs-milkdown/prose/state'\nimport type { EditorView } from '@jvs-milkdown/prose/view'\n\nimport { TooltipProvider } from '@jvs-milkdown/plugin-tooltip'\nimport { createApp, ref, type App, type Ref } from 'vue'\n\nimport type { LinkTooltipConfig, LinkToolTipState } from '../slices'\n\nimport { linkTooltipAPI, linkTooltipConfig, linkTooltipState } from '../slices'\nimport { PreviewLink } from './component'\n\nexport class LinkPreviewTooltip implements PluginView {\n #content: HTMLElement\n #provider: TooltipProvider\n #slice: Slice<LinkToolTipState>\n #config: Ref<LinkTooltipConfig>\n #src = ref('')\n #onEdit = ref(() => {})\n #onRemove = ref(() => {})\n #app: App\n #editorView: EditorView\n\n #hovering = false\n\n constructor(\n readonly ctx: Ctx,\n view: EditorView\n ) {\n this.#editorView = view\n this.#config = ref(this.ctx.get(linkTooltipConfig.key))\n this.#app = createApp(PreviewLink, {\n config: this.#config,\n src: this.#src,\n onEdit: this.#onEdit,\n onRemove: this.#onRemove,\n })\n this.#content = document.createElement('div')\n this.#content.className = 'milkdown-link-preview'\n this.#app.mount(this.#content)\n\n this.#provider = new TooltipProvider({\n debounce: 0,\n content: this.#content,\n shouldShow: () => false,\n })\n this.#provider.update(view)\n this.#slice = ctx.use(linkTooltipState.key)\n this.#slice.on(this.#onStateChange)\n }\n\n #onStateChange = ({ mode }: LinkToolTipState) => {\n if (mode === 'edit') this.#hide()\n }\n\n #onMouseEnter = () => {\n this.#hovering = true\n }\n\n #onMouseLeave = () => {\n this.#hovering = false\n }\n\n #hide = () => {\n this.#provider.hide()\n this.#provider.element.removeEventListener('mouseenter', this.#onMouseEnter)\n this.#provider.element.removeEventListener('mouseleave', this.#onMouseLeave)\n }\n\n show = (mark: Mark, from: number, to: number, rect: DOMRect) => {\n this.#config.value = this.ctx.get(linkTooltipConfig.key)\n this.#src.value = mark.attrs.href\n this.#onEdit.value = () => {\n this.ctx.get(linkTooltipAPI.key).editLink(mark, from, to)\n }\n this.#onRemove.value = () => {\n this.ctx.get(linkTooltipAPI.key).removeLink(from, to)\n this.#hide()\n }\n\n this.#provider.show({ getBoundingClientRect: () => rect }, this.#editorView)\n this.#provider.element.addEventListener('mouseenter', this.#onMouseEnter)\n this.#provider.element.addEventListener('mouseleave', this.#onMouseLeave)\n }\n\n hide = () => {\n if (this.#hovering) return\n\n this.#hide()\n }\n\n update = () => {}\n\n destroy = () => {\n this.#app.unmount()\n this.#slice.off(this.#onStateChange)\n this.#provider.destroy()\n this.#content.remove()\n }\n}\n","import type { Ctx } from '@jvs-milkdown/ctx'\nimport type { EditorView } from '@jvs-milkdown/prose/view'\n\nimport { posToDOMRect } from '@jvs-milkdown/prose'\nimport { debounce } from 'lodash-es'\n\nimport { linkTooltipState } from '../slices'\nimport { linkPreviewTooltip } from '../tooltips'\nimport { findMarkPosition, shouldShowPreviewWhenHover } from '../utils'\nimport { LinkPreviewTooltip } from './preview-view'\n\nexport function configureLinkPreviewTooltip(ctx: Ctx) {\n let linkPreviewTooltipView: LinkPreviewTooltip | null\n\n const DELAY = 50\n const onMouseMove = debounce((view: EditorView, event: MouseEvent) => {\n if (!linkPreviewTooltipView) return\n if (!view.hasFocus()) return\n\n const state = ctx.get(linkTooltipState.key)\n if (state.mode === 'edit') return\n\n const result = shouldShowPreviewWhenHover(ctx, view, event)\n if (result) {\n const position = view.state.doc.resolve(result.pos)\n const markPosition = findMarkPosition(\n result.mark,\n result.node,\n view.state.doc,\n position.before(),\n position.after()\n )\n const from = markPosition.start\n const to = markPosition.end\n linkPreviewTooltipView.show(\n result.mark,\n from,\n to,\n posToDOMRect(view, from, to)\n )\n return\n }\n\n linkPreviewTooltipView.hide()\n }, DELAY)\n\n const onMouseLeave = () => {\n setTimeout(() => {\n linkPreviewTooltipView?.hide()\n }, DELAY)\n }\n\n ctx.set(linkPreviewTooltip.key, {\n props: {\n handleDOMEvents: {\n mousemove: onMouseMove,\n mouseleave: onMouseLeave,\n },\n },\n view: (view) => {\n linkPreviewTooltipView = new LinkPreviewTooltip(ctx, view)\n return linkPreviewTooltipView\n },\n })\n}\n","import type { Ctx } from '@jvs-milkdown/ctx'\n\nimport { configureLinkEditTooltip } from './edit/edit-configure'\nimport { configureLinkPreviewTooltip } from './preview/preview-configure'\n\nexport function configureLinkTooltip(ctx: Ctx) {\n configureLinkPreviewTooltip(ctx)\n configureLinkEditTooltip(ctx)\n}\n","import type { MilkdownPlugin } from '@jvs-milkdown/ctx'\n\nimport { toggleLinkCommand } from './command'\nimport { linkTooltipAPI, linkTooltipConfig, linkTooltipState } from './slices'\nimport { linkEditTooltip, linkPreviewTooltip } from './tooltips'\n\nexport * from './slices'\nexport * from './configure'\nexport * from './tooltips'\nexport * from './command'\n\nexport const linkTooltipPlugin: MilkdownPlugin[] = [\n linkTooltipState,\n linkTooltipAPI,\n linkTooltipConfig,\n linkPreviewTooltip,\n linkEditTooltip,\n toggleLinkCommand,\n].flat()\n"],"names":["__spreadValues","_content","_provider","_app","_config","_src","__privateAdd","__privateGet","__spreadProps","__privateSet","mark","e"],"mappings":"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"}