@jvs-milkdown/components 1.1.5 → 1.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/lib/image-block/index.js +345 -75
- package/lib/image-block/index.js.map +1 -1
- package/lib/image-inline/index.js +27 -6
- package/lib/image-inline/index.js.map +1 -1
- package/lib/link-tooltip/index.js +18 -4
- package/lib/link-tooltip/index.js.map +1 -1
- package/lib/table-block/index.js +139 -53
- package/lib/table-block/index.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +53 -79
- package/src/__internal__/components/image-input.tsx +36 -12
- package/src/image-block/__tests__/paste-rule.spec.ts +20 -0
- package/src/image-block/convert-plugin.ts +147 -0
- package/src/image-block/index.ts +6 -0
- package/src/image-block/paste-rule.ts +138 -0
- package/src/image-block/schema.ts +15 -0
- package/src/image-block/view/components/image-block.tsx +5 -0
- package/src/image-block/view/components/image-viewer.tsx +4 -0
- package/src/image-block/view/index.ts +8 -0
- package/src/link-tooltip/edit/component.tsx +18 -3
- package/src/table-block/dnd/create-drag-handler.ts +5 -1
- package/src/table-block/dnd/drag-over-handler.ts +29 -1
- package/src/table-block/dnd/preview.ts +3 -3
- package/src/table-block/view/component.tsx +121 -39
- package/src/table-block/view/drag.ts +29 -16
- package/src/table-block/view/utils.ts +6 -1
- package/lib/__internal__/components/icon.d.ts +0 -24
- package/lib/__internal__/components/icon.d.ts.map +0 -1
- package/lib/__internal__/components/image-input.d.ts +0 -17
- package/lib/__internal__/components/image-input.d.ts.map +0 -1
- package/lib/__internal__/keep-alive.d.ts +0 -2
- package/lib/__internal__/keep-alive.d.ts.map +0 -1
- package/lib/__internal__/meta.d.ts +0 -3
- package/lib/__internal__/meta.d.ts.map +0 -1
- package/lib/__tests__/setup.d.ts +0 -2
- package/lib/__tests__/setup.d.ts.map +0 -1
- package/lib/code-block/config.d.ts +0 -23
- package/lib/code-block/config.d.ts.map +0 -1
- package/lib/code-block/index.d.ts +0 -5
- package/lib/code-block/index.d.ts.map +0 -1
- package/lib/code-block/view/components/code-block.d.ts +0 -16
- package/lib/code-block/view/components/code-block.d.ts.map +0 -1
- package/lib/code-block/view/components/copy-button.d.ts +0 -9
- package/lib/code-block/view/components/copy-button.d.ts.map +0 -1
- package/lib/code-block/view/components/language-picker.d.ts +0 -5
- package/lib/code-block/view/components/language-picker.d.ts.map +0 -1
- package/lib/code-block/view/components/preview-panel.d.ts +0 -9
- package/lib/code-block/view/components/preview-panel.d.ts.map +0 -1
- package/lib/code-block/view/index.d.ts +0 -3
- package/lib/code-block/view/index.d.ts.map +0 -1
- package/lib/code-block/view/loader.d.ts +0 -13
- package/lib/code-block/view/loader.d.ts.map +0 -1
- package/lib/code-block/view/node-view.d.ts +0 -40
- package/lib/code-block/view/node-view.d.ts.map +0 -1
- package/lib/image-block/config.d.ts +0 -16
- package/lib/image-block/config.d.ts.map +0 -1
- package/lib/image-block/index.d.ts +0 -7
- package/lib/image-block/index.d.ts.map +0 -1
- package/lib/image-block/remark-plugin.d.ts +0 -2
- package/lib/image-block/remark-plugin.d.ts.map +0 -1
- package/lib/image-block/schema.d.ts +0 -3
- package/lib/image-block/schema.d.ts.map +0 -1
- package/lib/image-block/view/components/__tests__/image-viewer.onImageLoadError.spec.d.ts +0 -2
- package/lib/image-block/view/components/__tests__/image-viewer.onImageLoadError.spec.d.ts.map +0 -1
- package/lib/image-block/view/components/image-block.d.ts +0 -18
- package/lib/image-block/view/components/image-block.d.ts.map +0 -1
- package/lib/image-block/view/components/image-viewer.d.ts +0 -3
- package/lib/image-block/view/components/image-viewer.d.ts.map +0 -1
- package/lib/image-block/view/index.d.ts +0 -3
- package/lib/image-block/view/index.d.ts.map +0 -1
- package/lib/image-inline/components/image-inline.d.ts +0 -18
- package/lib/image-inline/components/image-inline.d.ts.map +0 -1
- package/lib/image-inline/config.d.ts +0 -11
- package/lib/image-inline/config.d.ts.map +0 -1
- package/lib/image-inline/index.d.ts +0 -5
- package/lib/image-inline/index.d.ts.map +0 -1
- package/lib/image-inline/view.d.ts +0 -3
- package/lib/image-inline/view.d.ts.map +0 -1
- package/lib/link-tooltip/command.d.ts +0 -2
- package/lib/link-tooltip/command.d.ts.map +0 -1
- package/lib/link-tooltip/configure.d.ts +0 -3
- package/lib/link-tooltip/configure.d.ts.map +0 -1
- package/lib/link-tooltip/edit/component.d.ts +0 -11
- package/lib/link-tooltip/edit/component.d.ts.map +0 -1
- package/lib/link-tooltip/edit/edit-configure.d.ts +0 -3
- package/lib/link-tooltip/edit/edit-configure.d.ts.map +0 -1
- package/lib/link-tooltip/edit/edit-view.d.ts +0 -15
- package/lib/link-tooltip/edit/edit-view.d.ts.map +0 -1
- package/lib/link-tooltip/index.d.ts +0 -7
- package/lib/link-tooltip/index.d.ts.map +0 -1
- package/lib/link-tooltip/preview/component.d.ts +0 -11
- package/lib/link-tooltip/preview/component.d.ts.map +0 -1
- package/lib/link-tooltip/preview/preview-configure.d.ts +0 -3
- package/lib/link-tooltip/preview/preview-configure.d.ts.map +0 -1
- package/lib/link-tooltip/preview/preview-view.d.ts +0 -14
- package/lib/link-tooltip/preview/preview-view.d.ts.map +0 -1
- package/lib/link-tooltip/slices.d.ts +0 -34
- package/lib/link-tooltip/slices.d.ts.map +0 -1
- package/lib/link-tooltip/tooltips.d.ts +0 -3
- package/lib/link-tooltip/tooltips.d.ts.map +0 -1
- package/lib/link-tooltip/utils.d.ts +0 -14
- package/lib/link-tooltip/utils.d.ts.map +0 -1
- package/lib/list-item-block/component.d.ts +0 -19
- package/lib/list-item-block/component.d.ts.map +0 -1
- package/lib/list-item-block/config.d.ts +0 -13
- package/lib/list-item-block/config.d.ts.map +0 -1
- package/lib/list-item-block/index.d.ts +0 -6
- package/lib/list-item-block/index.d.ts.map +0 -1
- package/lib/list-item-block/view.d.ts +0 -3
- package/lib/list-item-block/view.d.ts.map +0 -1
- package/lib/table-block/config.d.ts +0 -8
- package/lib/table-block/config.d.ts.map +0 -1
- package/lib/table-block/dnd/calc-drag-over.d.ts +0 -3
- package/lib/table-block/dnd/calc-drag-over.d.ts.map +0 -1
- package/lib/table-block/dnd/create-drag-handler.d.ts +0 -5
- package/lib/table-block/dnd/create-drag-handler.d.ts.map +0 -1
- package/lib/table-block/dnd/drag-over-handler.d.ts +0 -3
- package/lib/table-block/dnd/drag-over-handler.d.ts.map +0 -1
- package/lib/table-block/dnd/prepare-dnd-context.d.ts +0 -3
- package/lib/table-block/dnd/prepare-dnd-context.d.ts.map +0 -1
- package/lib/table-block/dnd/preview.d.ts +0 -3
- package/lib/table-block/dnd/preview.d.ts.map +0 -1
- package/lib/table-block/index.d.ts +0 -5
- package/lib/table-block/index.d.ts.map +0 -1
- package/lib/table-block/view/component.d.ts +0 -16
- package/lib/table-block/view/component.d.ts.map +0 -1
- package/lib/table-block/view/drag.d.ts +0 -7
- package/lib/table-block/view/drag.d.ts.map +0 -1
- package/lib/table-block/view/index.d.ts +0 -2
- package/lib/table-block/view/index.d.ts.map +0 -1
- package/lib/table-block/view/operation.d.ts +0 -13
- package/lib/table-block/view/operation.d.ts.map +0 -1
- package/lib/table-block/view/pointer.d.ts +0 -7
- package/lib/table-block/view/pointer.d.ts.map +0 -1
- package/lib/table-block/view/types.d.ts +0 -28
- package/lib/table-block/view/types.d.ts.map +0 -1
- package/lib/table-block/view/utils.d.ts +0 -12
- package/lib/table-block/view/utils.d.ts.map +0 -1
- package/lib/table-block/view/view.d.ts +0 -22
- package/lib/table-block/view/view.d.ts.map +0 -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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"}
|
package/lib/table-block/index.js
CHANGED
|
@@ -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,
|
|
3
|
+
import { h, defineComponent, ref, onMounted, watch, onBeforeUnmount, shallowRef, createApp, triggerRef } from 'vue';
|
|
4
4
|
import { computePosition, offset } from '@floating-ui/dom';
|
|
5
|
-
import {
|
|
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
|
|
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)
|
|
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
|
-
|
|
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
|
-
|
|
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)
|
|
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(
|
|
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
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
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
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
if (selection
|
|
874
|
-
const
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
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
|
-
|
|
884
|
-
|
|
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
|
-
|
|
940
|
-
onDragover: (e) =>
|
|
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
|
-
|
|
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
|
-
|
|
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
|
{
|