@jvs-milkdown/components 1.1.5 → 1.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/LICENSE +21 -0
  2. package/lib/__internal__/components/image-input.d.ts.map +1 -1
  3. package/lib/image-block/convert-plugin.d.ts +2 -0
  4. package/lib/image-block/convert-plugin.d.ts.map +1 -0
  5. package/lib/image-block/index.d.ts +2 -0
  6. package/lib/image-block/index.d.ts.map +1 -1
  7. package/lib/image-block/index.js +345 -75
  8. package/lib/image-block/index.js.map +1 -1
  9. package/lib/image-block/paste-rule.d.ts +2 -0
  10. package/lib/image-block/paste-rule.d.ts.map +1 -0
  11. package/lib/image-block/schema.d.ts.map +1 -1
  12. package/lib/image-block/view/components/image-block.d.ts +1 -0
  13. package/lib/image-block/view/components/image-block.d.ts.map +1 -1
  14. package/lib/image-block/view/components/image-viewer.d.ts.map +1 -1
  15. package/lib/image-block/view/index.d.ts.map +1 -1
  16. package/lib/image-inline/index.js +27 -6
  17. package/lib/image-inline/index.js.map +1 -1
  18. package/lib/link-tooltip/edit/component.d.ts.map +1 -1
  19. package/lib/link-tooltip/index.js +18 -4
  20. package/lib/link-tooltip/index.js.map +1 -1
  21. package/lib/table-block/dnd/drag-over-handler.d.ts.map +1 -1
  22. package/lib/table-block/index.js +139 -53
  23. package/lib/table-block/index.js.map +1 -1
  24. package/lib/table-block/view/component.d.ts.map +1 -1
  25. package/lib/table-block/view/drag.d.ts +3 -0
  26. package/lib/table-block/view/drag.d.ts.map +1 -1
  27. package/lib/table-block/view/utils.d.ts.map +1 -1
  28. package/lib/tsconfig.tsbuildinfo +1 -1
  29. package/package.json +53 -79
  30. package/src/__internal__/components/image-input.tsx +45 -12
  31. package/src/image-block/__tests__/paste-rule.spec.ts +20 -0
  32. package/src/image-block/convert-plugin.ts +147 -0
  33. package/src/image-block/index.ts +6 -0
  34. package/src/image-block/paste-rule.ts +138 -0
  35. package/src/image-block/schema.ts +15 -0
  36. package/src/image-block/view/components/image-block.tsx +5 -0
  37. package/src/image-block/view/components/image-viewer.tsx +4 -0
  38. package/src/image-block/view/index.ts +8 -0
  39. package/src/link-tooltip/edit/component.tsx +27 -3
  40. package/src/table-block/dnd/create-drag-handler.ts +5 -1
  41. package/src/table-block/dnd/drag-over-handler.ts +29 -1
  42. package/src/table-block/dnd/preview.ts +3 -3
  43. package/src/table-block/view/component.tsx +121 -39
  44. package/src/table-block/view/drag.ts +29 -16
  45. package/src/table-block/view/utils.ts +6 -1
@@ -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 { 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 onConfirmEdit = () => {\n onConfirm(link.value)\n }\n\n const onKeydown = (e: KeyboardEvent) => {\n e.stopPropagation()\n if (e.key === 'Enter') {\n e.preventDefault()\n onConfirmEdit()\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=\"button confirm\"\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(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 style={!isValidUrl(link.value) ? { opacity: 0.5, cursor: 'not-allowed' } : undefined}\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 +1 @@
1
- {"version":3,"file":"drag-over-handler.d.ts","sourceRoot":"","sources":["../../../src/table-block/dnd/drag-over-handler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAMzC,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAuGxE"}
1
+ {"version":3,"file":"drag-over-handler.d.ts","sourceRoot":"","sources":["../../../src/table-block/dnd/drag-over-handler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAMzC,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAmIxE"}
@@ -1,8 +1,8 @@
1
1
  import { $ctx, $view } from '@jvs-milkdown/utils';
2
2
  import { selectColCommand, moveColCommand, selectRowCommand, moveRowCommand, mergeCellsCommand, setAlignCommand, deleteSelectedCellsCommand, addColAfterCommand, addColBeforeCommand, addRowAfterCommand, addRowBeforeCommand, tableSchema } from '@jvs-milkdown/preset-gfm';
3
- import { h, onMounted, onUnmounted, defineComponent, ref, onBeforeUnmount, shallowRef, createApp, triggerRef } from 'vue';
3
+ import { h, defineComponent, ref, onMounted, watch, onBeforeUnmount, shallowRef, createApp, triggerRef } from 'vue';
4
4
  import { computePosition, offset } from '@floating-ui/dom';
5
- import { CellSelection, findTable, selectedRect, splitCellWithType } from '@jvs-milkdown/prose/tables';
5
+ import { findTable, CellSelection, selectedRect, splitCellWithType, mergeCells, splitCell } from '@jvs-milkdown/prose/tables';
6
6
  import clsx from 'clsx';
7
7
  import DOMPurify from 'dompurify';
8
8
  import { editorViewCtx, commandsCtx } from '@jvs-milkdown/core';
@@ -155,7 +155,8 @@ function clearPreview(previewRoot) {
155
155
  while (previewRoot.firstChild) previewRoot.removeChild(previewRoot.firstChild);
156
156
  }
157
157
  function renderPreview(axis, preview, previewRoot, tableContent, index) {
158
- const { width: tableWidth, height: tableHeight } = tableContent.querySelector("tbody").getBoundingClientRect();
158
+ const tableBodyOrContent = tableContent.querySelector("tbody") || tableContent;
159
+ const { width: tableWidth, height: tableHeight } = tableBodyOrContent.getBoundingClientRect();
159
160
  if (axis === "y") {
160
161
  const rows = tableContent.querySelectorAll("tr");
161
162
  const row = rows[index];
@@ -232,7 +233,10 @@ function handleDrag(refs, event, ctx, fn) {
232
233
  const view = ctx == null ? void 0 : ctx.get(editorViewCtx);
233
234
  if (!(view == null ? void 0 : view.editable)) return;
234
235
  event.stopPropagation();
235
- if (event.dataTransfer) event.dataTransfer.effectAllowed = "move";
236
+ if (event.dataTransfer) {
237
+ event.dataTransfer.effectAllowed = "move";
238
+ event.dataTransfer.setData("text/plain", "milkdown-table-drag");
239
+ }
236
240
  const context = prepareDndContext(refs);
237
241
  if (!context) return;
238
242
  requestAnimationFrame(() => {
@@ -268,7 +272,8 @@ function recoveryStateBetweenUpdate(refs, view, node) {
268
272
  if (!node) return;
269
273
  if (!view) return;
270
274
  const { selection } = view.state;
271
- if (!(selection instanceof CellSelection)) return;
275
+ const isCellSelection = (sel) => sel && typeof sel.isColSelection === "function" && typeof sel.forEachCell === "function";
276
+ if (!isCellSelection(selection)) return;
272
277
  const { $from } = selection;
273
278
  const table = findTable($from);
274
279
  if (!table || table.node !== node) return;
@@ -317,7 +322,7 @@ function getDragOverRow(table, pointerY) {
317
322
  }
318
323
 
319
324
  function createDragOverHandler(refs) {
320
- return throttle((e) => {
325
+ const updatePosition = throttle((e) => {
321
326
  const context = prepareDndContext(refs);
322
327
  if (!context) return;
323
328
  const { preview, content, contentRoot, xHandle, yHandle } = context;
@@ -389,22 +394,48 @@ function createDragOverHandler(refs) {
389
394
  }
390
395
  }
391
396
  }, 20);
397
+ return (e) => {
398
+ const context = prepareDndContext(refs);
399
+ if (!context) return;
400
+ const { preview, contentRoot } = context;
401
+ if (preview.dataset.show === "false") return;
402
+ e.preventDefault();
403
+ e.stopPropagation();
404
+ const info = refs.dragInfo.value;
405
+ if (info) {
406
+ if (info.type === "col") {
407
+ const dragOverColumn = getDragOverColumn(contentRoot, e.clientX);
408
+ if (dragOverColumn) {
409
+ info.endIndex = dragOverColumn[1];
410
+ }
411
+ } else if (info.type === "row") {
412
+ const dragOverRow = getDragOverRow(contentRoot, e.clientY);
413
+ if (dragOverRow) {
414
+ info.endIndex = dragOverRow[1];
415
+ }
416
+ }
417
+ }
418
+ updatePosition(e);
419
+ };
392
420
  }
393
421
 
394
422
  function useDragHandlers(refs, ctx, getPos) {
395
423
  const { dragPreviewRef, yLineHandleRef, xLineHandleRef, dragInfo } = refs;
396
424
  const dragRow = createDragRowHandler(refs, ctx);
397
425
  const dragCol = createDragColHandler(refs, ctx);
398
- const onDragEnd = () => {
426
+ const onDragEnd = (e) => {
399
427
  const preview = dragPreviewRef.value;
400
428
  if (!preview) return;
401
429
  if (preview.dataset.show === "false") return;
430
+ e.preventDefault();
431
+ e.stopPropagation();
402
432
  const previewRoot = preview == null ? void 0 : preview.querySelector("tbody");
403
433
  while (previewRoot == null ? void 0 : previewRoot.firstChild)
404
434
  previewRoot == null ? void 0 : previewRoot.removeChild(previewRoot.firstChild);
405
435
  if (preview) preview.dataset.show = "false";
436
+ dragInfo.value = void 0;
406
437
  };
407
- const onDrop = () => {
438
+ const onDrop = (e) => {
408
439
  var _a;
409
440
  const preview = dragPreviewRef.value;
410
441
  if (!preview) return;
@@ -416,9 +447,18 @@ function useDragHandlers(refs, ctx, getPos) {
416
447
  if (!info) return;
417
448
  if (!ctx) return;
418
449
  if (preview.dataset.show === "false") return;
450
+ e.preventDefault();
451
+ e.stopPropagation();
419
452
  yHandle.dataset.show = "false";
420
453
  xHandle.dataset.show = "false";
421
- if (info.startIndex === info.endIndex) return;
454
+ if (info.startIndex === info.endIndex) {
455
+ const previewRoot2 = preview == null ? void 0 : preview.querySelector("tbody");
456
+ while (previewRoot2 == null ? void 0 : previewRoot2.firstChild)
457
+ previewRoot2 == null ? void 0 : previewRoot2.removeChild(previewRoot2.firstChild);
458
+ preview.dataset.show = "false";
459
+ dragInfo.value = void 0;
460
+ return;
461
+ }
422
462
  const commands = ctx.get(commandsCtx);
423
463
  const payload = {
424
464
  from: info.startIndex,
@@ -442,24 +482,22 @@ function useDragHandlers(refs, ctx, getPos) {
442
482
  const index = [info.endIndex, 0];
443
483
  refs.hoverIndex.value = index;
444
484
  }
485
+ const previewRoot = preview == null ? void 0 : preview.querySelector("tbody");
486
+ while (previewRoot == null ? void 0 : previewRoot.firstChild)
487
+ previewRoot == null ? void 0 : previewRoot.removeChild(previewRoot.firstChild);
488
+ preview.dataset.show = "false";
489
+ dragInfo.value = void 0;
445
490
  requestAnimationFrame(() => {
446
491
  ctx.get(editorViewCtx).focus();
447
492
  });
448
493
  };
449
494
  const onDragOver = createDragOverHandler(refs);
450
- onMounted(() => {
451
- window.addEventListener("dragover", onDragOver);
452
- window.addEventListener("dragend", onDragEnd);
453
- window.addEventListener("drop", onDrop);
454
- });
455
- onUnmounted(() => {
456
- window.removeEventListener("dragover", onDragOver);
457
- window.removeEventListener("dragend", onDragEnd);
458
- window.removeEventListener("drop", onDrop);
459
- });
460
495
  return {
461
496
  dragRow,
462
- dragCol
497
+ dragCol,
498
+ onDragOver,
499
+ onDrop,
500
+ onDragEnd
463
501
  };
464
502
  }
465
503
 
@@ -720,7 +758,11 @@ const TableBlock = defineComponent({
720
758
  dragInfo
721
759
  };
722
760
  const { pointerLeave, pointerMove } = usePointerHandlers();
723
- const { dragRow, dragCol } = useDragHandlers(refs, ctx, getPos);
761
+ const { dragRow, dragCol, onDragOver, onDragEnd, onDrop } = useDragHandlers(
762
+ refs,
763
+ ctx,
764
+ getPos
765
+ );
724
766
  const {
725
767
  addRowByIndex,
726
768
  addColByIndex,
@@ -747,18 +789,10 @@ const TableBlock = defineComponent({
747
789
  showCellToolbar.value = false;
748
790
  return;
749
791
  }
750
- if (selection instanceof CellSelection) {
751
- let _cellCount = 0;
752
- let hasMerged = false;
753
- selection.forEachCell((cell) => {
754
- var _a, _b;
755
- _cellCount++;
756
- if (((_a = cell.attrs.rowspan) != null ? _a : 1) > 1 || ((_b = cell.attrs.colspan) != null ? _b : 1) > 1) {
757
- hasMerged = true;
758
- }
759
- });
760
- canMerge.value = _cellCount > 1;
761
- canSplit.value = hasMerged;
792
+ const isCellSelection = (sel) => sel && typeof sel.isColSelection === "function" && typeof sel.forEachCell === "function";
793
+ if (isCellSelection(selection)) {
794
+ canMerge.value = mergeCells(view.state);
795
+ canSplit.value = splitCell(view.state);
762
796
  } else {
763
797
  showCellToolbar.value = false;
764
798
  return;
@@ -767,6 +801,10 @@ const TableBlock = defineComponent({
767
801
  showCellToolbar.value = false;
768
802
  return;
769
803
  }
804
+ if (activeColIndex.value !== -1 || activeRowIndex.value !== -1) {
805
+ showCellToolbar.value = false;
806
+ return;
807
+ }
770
808
  showCellToolbar.value = true;
771
809
  requestAnimationFrame(() => {
772
810
  const toolbar = cellToolbarRef.value;
@@ -867,23 +905,29 @@ const TableBlock = defineComponent({
867
905
  const activeColIndex = ref(-1);
868
906
  const activeRowIndex = ref(-1);
869
907
  const dispatchListener = () => {
870
- updateCellToolbar();
871
- const { selection } = view.state;
872
- if (selection instanceof CellSelection) {
873
- if (selection.isColSelection()) {
874
- const { $head } = selection;
875
- activeColIndex.value = $head.index($head.depth - 1);
876
- activeRowIndex.value = -1;
877
- } else if (selection.isRowSelection()) {
878
- activeColIndex.value = -1;
908
+ setTimeout(() => {
909
+ const { selection } = view.state;
910
+ const isCellSelection = (sel) => sel && typeof sel.isColSelection === "function" && typeof sel.forEachCell === "function";
911
+ if (isCellSelection(selection)) {
912
+ const selAny = selection;
913
+ if (selAny.isColSelection()) {
914
+ const $headCell = selAny.$headCell;
915
+ activeColIndex.value = $headCell ? $headCell.index($headCell.depth) : -1;
916
+ activeRowIndex.value = -1;
917
+ } else if (selAny.isRowSelection()) {
918
+ const $headCell = selAny.$headCell;
919
+ activeColIndex.value = -1;
920
+ activeRowIndex.value = $headCell ? $headCell.index($headCell.depth - 1) : -1;
921
+ } else {
922
+ activeColIndex.value = -1;
923
+ activeRowIndex.value = -1;
924
+ }
879
925
  } else {
880
926
  activeColIndex.value = -1;
881
927
  activeRowIndex.value = -1;
882
928
  }
883
- } else {
884
- activeColIndex.value = -1;
885
- activeRowIndex.value = -1;
886
- }
929
+ updateCellToolbar();
930
+ }, 0);
887
931
  };
888
932
  onMounted(() => {
889
933
  requestAnimationFrame(() => {
@@ -925,6 +969,9 @@ const TableBlock = defineComponent({
925
969
  });
926
970
  }
927
971
  });
972
+ watch(node, () => {
973
+ dispatchListener();
974
+ });
928
975
  onBeforeUnmount(() => {
929
976
  view.dom.removeEventListener("keyup", dispatchListener);
930
977
  view.dom.removeEventListener("pointerup", dispatchListener);
@@ -932,12 +979,25 @@ const TableBlock = defineComponent({
932
979
  if (mo) mo.disconnect();
933
980
  });
934
981
  return () => {
935
- updateCellToolbar();
936
982
  return /* @__PURE__ */ h(
937
983
  "div",
938
984
  {
939
- onDragstart: (e) => e.preventDefault(),
940
- onDragover: (e) => e.preventDefault(),
985
+ onDragend: onDragEnd,
986
+ onDragover: (e) => {
987
+ e.preventDefault();
988
+ onDragOver(e);
989
+ if (dragInfo.value) {
990
+ e.stopPropagation();
991
+ }
992
+ },
993
+ onDrop: (e) => {
994
+ const isDragging = !!dragInfo.value;
995
+ onDrop(e);
996
+ if (isDragging) {
997
+ e.preventDefault();
998
+ e.stopPropagation();
999
+ }
1000
+ },
941
1001
  onDragleave: (e) => e.preventDefault(),
942
1002
  onPointermove: pointerMove,
943
1003
  onPointerleave: pointerLeave,
@@ -952,7 +1012,7 @@ const TableBlock = defineComponent({
952
1012
  contenteditable: "false",
953
1013
  onPointerdown: (e) => e.stopPropagation()
954
1014
  },
955
- canMerge.value && /* @__PURE__ */ h(
1015
+ /* @__PURE__ */ h(
956
1016
  "button",
957
1017
  {
958
1018
  type: "button",
@@ -961,7 +1021,7 @@ const TableBlock = defineComponent({
961
1021
  },
962
1022
  /* @__PURE__ */ h(Icon, { icon: config.renderButton("merge_cells") })
963
1023
  ),
964
- canSplit.value && /* @__PURE__ */ h(
1024
+ /* @__PURE__ */ h(
965
1025
  "button",
966
1026
  {
967
1027
  type: "button",
@@ -986,6 +1046,7 @@ const TableBlock = defineComponent({
986
1046
  onClick: () => {
987
1047
  hoverIndex.value = [0, i];
988
1048
  selectCol();
1049
+ dispatchListener();
989
1050
  activeColIndex.value = i;
990
1051
  activeRowIndex.value = -1;
991
1052
  },
@@ -1042,7 +1103,9 @@ const TableBlock = defineComponent({
1042
1103
  }
1043
1104
  },
1044
1105
  /* @__PURE__ */ h(Icon, { icon: config.renderButton("delete_col") })
1045
- )
1106
+ ),
1107
+ canMerge.value && /* @__PURE__ */ h("button", { type: "button", onPointerdown: onMergeCells }, /* @__PURE__ */ h(Icon, { icon: config.renderButton("merge_cells") })),
1108
+ canSplit.value && /* @__PURE__ */ h("button", { type: "button", onPointerdown: onSplitCell }, /* @__PURE__ */ h(Icon, { icon: config.renderButton("split_cell") }))
1046
1109
  )
1047
1110
  ))), /* @__PURE__ */ h("div", { contenteditable: "false", class: "add-dots-col" }, [
1048
1111
  ...colBounds.value.map((b) => b.left),
@@ -1085,6 +1148,7 @@ const TableBlock = defineComponent({
1085
1148
  onClick: () => {
1086
1149
  hoverIndex.value = [i, 0];
1087
1150
  selectRow();
1151
+ dispatchListener();
1088
1152
  activeRowIndex.value = i;
1089
1153
  activeColIndex.value = -1;
1090
1154
  },
@@ -1107,7 +1171,9 @@ const TableBlock = defineComponent({
1107
1171
  }
1108
1172
  },
1109
1173
  /* @__PURE__ */ h(Icon, { icon: config.renderButton("delete_row") })
1110
- )
1174
+ ),
1175
+ canMerge.value && /* @__PURE__ */ h("button", { type: "button", onPointerdown: onMergeCells }, /* @__PURE__ */ h(Icon, { icon: config.renderButton("merge_cells") })),
1176
+ canSplit.value && /* @__PURE__ */ h("button", { type: "button", onPointerdown: onSplitCell }, /* @__PURE__ */ h(Icon, { icon: config.renderButton("split_cell") }))
1111
1177
  )
1112
1178
  ))), /* @__PURE__ */ h("div", { contenteditable: "false", class: "add-dots-row" }, [
1113
1179
  ...rowBounds.value.map((b) => b.top),
@@ -1131,6 +1197,26 @@ const TableBlock = defineComponent({
1131
1197
  ref: dragPreviewRef
1132
1198
  },
1133
1199
  /* @__PURE__ */ h("table", null, /* @__PURE__ */ h("tbody", null))
1200
+ ), /* @__PURE__ */ h(
1201
+ "div",
1202
+ {
1203
+ "data-show": "false",
1204
+ contenteditable: "false",
1205
+ "data-display-type": "indicator",
1206
+ "data-role": "x-line-drag-handle",
1207
+ class: "handle line-handle",
1208
+ ref: xLineHandleRef
1209
+ }
1210
+ ), /* @__PURE__ */ h(
1211
+ "div",
1212
+ {
1213
+ "data-show": "false",
1214
+ contenteditable: "false",
1215
+ "data-display-type": "indicator",
1216
+ "data-role": "y-line-drag-handle",
1217
+ class: "handle line-handle",
1218
+ ref: yLineHandleRef
1219
+ }
1134
1220
  ), /* @__PURE__ */ h("table", { ref: contentWrapperFunctionRef, class: "children" }, /* @__PURE__ */ h("colgroup", null, colWidths.value.map((w, i) => /* @__PURE__ */ h(
1135
1221
  "col",
1136
1222
  {