@docs.plus/extension-hyperlink 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +11 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +11 -21
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +11 -21
- package/dist/index.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/helpers/clickHandler.ts +1 -0
- package/src/helpers/editHyperlink.ts +7 -7
- package/src/helpers/tippyHelper.ts +0 -2
- package/src/index.ts +2 -2
package/dist/index.cjs
CHANGED
|
@@ -116,7 +116,6 @@ class Tooltip {
|
|
|
116
116
|
};
|
|
117
117
|
this.blurHandler = ({ event }) => {
|
|
118
118
|
var _a;
|
|
119
|
-
console.log("blurHandler", { event });
|
|
120
119
|
if (this.preventHide) {
|
|
121
120
|
this.preventHide = false;
|
|
122
121
|
return;
|
|
@@ -169,11 +168,9 @@ class Tooltip {
|
|
|
169
168
|
placement: "bottom",
|
|
170
169
|
hideOnClick: "toggle",
|
|
171
170
|
onClickOutside: (instance, event) => {
|
|
172
|
-
console.log("onClickOutside", { instance, event });
|
|
173
171
|
this.hide();
|
|
174
172
|
},
|
|
175
173
|
onAfterUpdate: (instance, partialProps) => {
|
|
176
|
-
console.log("onAfterUpdate", { instance, partialProps });
|
|
177
174
|
this.show();
|
|
178
175
|
},
|
|
179
176
|
});
|
|
@@ -209,11 +206,6 @@ class Tooltip {
|
|
|
209
206
|
}
|
|
210
207
|
}
|
|
211
208
|
|
|
212
|
-
var tippyHelper = /*#__PURE__*/Object.freeze({
|
|
213
|
-
__proto__: null,
|
|
214
|
-
default: Tooltip
|
|
215
|
-
});
|
|
216
|
-
|
|
217
209
|
function clickHandler(options) {
|
|
218
210
|
// Create the tooltip instance
|
|
219
211
|
let tooltip = new Tooltip(options);
|
|
@@ -226,11 +218,6 @@ function clickHandler(options) {
|
|
|
226
218
|
var _a, _b;
|
|
227
219
|
if (event.button !== 0)
|
|
228
220
|
return false;
|
|
229
|
-
console.log({
|
|
230
|
-
event,
|
|
231
|
-
button: event.button,
|
|
232
|
-
target: event.target,
|
|
233
|
-
});
|
|
234
221
|
// Get the target HTML element and its position
|
|
235
222
|
const nodeTarget = event.target;
|
|
236
223
|
const nodePos = view.posAtDOM(nodeTarget, 0);
|
|
@@ -255,6 +242,7 @@ function clickHandler(options) {
|
|
|
255
242
|
const hyperlinkPreview = options.modals.previewHyperlink({
|
|
256
243
|
link,
|
|
257
244
|
nodePos,
|
|
245
|
+
tippy: tooltip,
|
|
258
246
|
...options,
|
|
259
247
|
});
|
|
260
248
|
// If there is no hyperlink preview, hide the modal
|
|
@@ -302,15 +290,18 @@ function pasteHandler(options) {
|
|
|
302
290
|
}
|
|
303
291
|
|
|
304
292
|
function editHyperlink(options) {
|
|
305
|
-
var _a;
|
|
293
|
+
var _a, _b;
|
|
306
294
|
const { state, dispatch } = options.editor.view;
|
|
307
295
|
const { from, to } = state.selection;
|
|
308
296
|
let link = null;
|
|
309
|
-
const selectedNode = options.editor.view.domAtPos(from
|
|
310
|
-
|
|
311
|
-
if (
|
|
297
|
+
const selectedNode = options.editor.view.domAtPos(from).node;
|
|
298
|
+
const nodeName = selectedNode === null || selectedNode === void 0 ? void 0 : selectedNode.nodeName;
|
|
299
|
+
if (nodeName === "#text") {
|
|
312
300
|
link = (_a = selectedNode.parentNode) === null || _a === void 0 ? void 0 : _a.closest("a");
|
|
313
301
|
}
|
|
302
|
+
else if (nodeName === "P" && ((_b = selectedNode === null || selectedNode === void 0 ? void 0 : selectedNode.firstElementChild) === null || _b === void 0 ? void 0 : _b.localName) === "a") {
|
|
303
|
+
link = selectedNode === null || selectedNode === void 0 ? void 0 : selectedNode.firstElementChild;
|
|
304
|
+
}
|
|
314
305
|
else {
|
|
315
306
|
link = selectedNode === null || selectedNode === void 0 ? void 0 : selectedNode.closest("a");
|
|
316
307
|
}
|
|
@@ -327,9 +318,8 @@ function editHyperlink(options) {
|
|
|
327
318
|
.chain()
|
|
328
319
|
.focus()
|
|
329
320
|
.command(({ tr }) => {
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
tr.replaceWith(nodePos, nodePos + (text === null || text === void 0 ? void 0 : text.length), options.editor.schema.text(text, [
|
|
321
|
+
var _a;
|
|
322
|
+
tr.deleteRange(nodePos, nodePos + ((_a = ((link === null || link === void 0 ? void 0 : link.innerText) || "")) === null || _a === void 0 ? void 0 : _a.length)).replaceWith(nodePos, nodePos, options.editor.schema.text(text, [
|
|
333
323
|
options.editor.schema.marks.hyperlink.create({
|
|
334
324
|
href: sanitizeURL === null || sanitizeURL === void 0 ? void 0 : sanitizeURL.href,
|
|
335
325
|
}),
|
|
@@ -497,6 +487,6 @@ const Hyperlink = core.Mark.create({
|
|
|
497
487
|
});
|
|
498
488
|
|
|
499
489
|
exports.Hyperlink = Hyperlink;
|
|
500
|
-
exports.Tooltip =
|
|
490
|
+
exports.Tooltip = Tooltip;
|
|
501
491
|
exports.default = Hyperlink;
|
|
502
492
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/helpers/autoHyperlink.ts","../src/helpers/tippyHelper.ts","../src/helpers/clickHandler.ts","../src/helpers/pasteHandler.ts","../src/helpers/editHyperlink.ts","../src/hyperlink.ts"],"sourcesContent":["import {\n combineTransactionSteps,\n findChildrenInRange,\n getChangedRanges,\n getMarksBetween,\n NodeWithPos,\n} from \"@tiptap/core\";\nimport { MarkType } from \"@tiptap/pm/model\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { find, test } from \"linkifyjs\";\n\ntype AutoHyperlinkOptions = {\n type: MarkType;\n validate?: (url: string) => boolean;\n};\n\nexport default function autoHyperlink(options: AutoHyperlinkOptions): Plugin {\n return new Plugin({\n key: new PluginKey(\"autoHyperlink\"),\n appendTransaction: (transactions, oldState, newState) => {\n const docChanges =\n transactions.some((transaction) => transaction.docChanged) &&\n !oldState.doc.eq(newState.doc);\n const preventAutoHyperlink = transactions.some((transaction) =>\n transaction.getMeta(\"preventAutoHyperlink\")\n );\n\n if (!docChanges || preventAutoHyperlink) {\n return;\n }\n\n const { tr } = newState;\n const transform = combineTransactionSteps(oldState.doc, [\n ...transactions,\n ]);\n const { mapping } = transform;\n const changes = getChangedRanges(transform);\n\n changes.forEach(({ oldRange, newRange }) => {\n // at first we check if we have to remove links\n getMarksBetween(oldRange.from, oldRange.to, oldState.doc)\n .filter((item) => item.mark.type === options.type)\n .forEach((oldMark) => {\n const newFrom = mapping.map(oldMark.from);\n const newTo = mapping.map(oldMark.to);\n const newMarks = getMarksBetween(\n newFrom,\n newTo,\n newState.doc\n ).filter((item) => item.mark.type === options.type);\n\n if (!newMarks.length) {\n return;\n }\n\n const newMark = newMarks[0];\n const oldLinkText = oldState.doc.textBetween(\n oldMark.from,\n oldMark.to,\n undefined,\n \" \"\n );\n const newLinkText = newState.doc.textBetween(\n newMark.from,\n newMark.to,\n undefined,\n \" \"\n );\n const wasLink = test(oldLinkText);\n const isLink = test(newLinkText);\n\n // remove only the link, if it was a link before too\n // because we don’t want to remove links that were set manually\n if (wasLink && !isLink) {\n tr.removeMark(newMark.from, newMark.to, options.type);\n }\n });\n\n // now let’s see if we can add new links\n const nodesInChangedRanges = findChildrenInRange(\n newState.doc,\n newRange,\n (node) => node.isTextblock\n );\n\n let textBlock: NodeWithPos | undefined;\n let textBeforeWhitespace: string | undefined;\n\n if (nodesInChangedRanges.length > 1) {\n // Grab the first node within the changed ranges (ex. the first of two paragraphs when hitting enter)\n textBlock = nodesInChangedRanges[0];\n textBeforeWhitespace = newState.doc.textBetween(\n textBlock.pos,\n textBlock.pos + textBlock.node.nodeSize,\n undefined,\n \" \"\n );\n } else if (\n nodesInChangedRanges.length &&\n // We want to make sure to include the block seperator argument to treat hard breaks like spaces\n newState.doc\n .textBetween(newRange.from, newRange.to, \" \", \" \")\n .endsWith(\" \")\n ) {\n textBlock = nodesInChangedRanges[0];\n textBeforeWhitespace = newState.doc.textBetween(\n textBlock.pos,\n newRange.to,\n undefined,\n \" \"\n );\n }\n\n if (textBlock && textBeforeWhitespace) {\n const wordsBeforeWhitespace = textBeforeWhitespace\n .split(\" \")\n .filter((s) => s !== \"\");\n\n if (wordsBeforeWhitespace.length <= 0) {\n return false;\n }\n\n const lastWordBeforeSpace =\n wordsBeforeWhitespace[wordsBeforeWhitespace.length - 1];\n const lastWordAndBlockOffset =\n textBlock.pos +\n textBeforeWhitespace.lastIndexOf(lastWordBeforeSpace);\n\n if (!lastWordBeforeSpace) {\n return false;\n }\n\n find(lastWordBeforeSpace)\n .filter((link) => link.isLink)\n .filter((link) => {\n if (options.validate) {\n return options.validate(link.value);\n }\n return true;\n })\n // calculate link position\n .map((link) => ({\n ...link,\n from: lastWordAndBlockOffset + link.start + 1,\n to: lastWordAndBlockOffset + link.end + 1,\n }))\n // add link mark\n .forEach((link) => {\n tr.addMark(\n link.from,\n link.to,\n options.type.create({\n href: link.href,\n })\n );\n });\n }\n });\n\n if (!tr.steps.length) {\n return;\n }\n\n return tr;\n },\n });\n}\n","import tippy, { Instance, Props, roundArrow } from \"tippy.js\";\nimport { Editor } from \"@tiptap/core\";\nimport { EditorView } from \"@tiptap/pm/view\";\nimport { getAttributes, posToDOMRect } from \"@tiptap/core\";\n\ninterface TippyInitOptions {\n editor: Editor;\n validate?: (url: string) => boolean;\n view: EditorView;\n}\n\nclass Tooltip {\n private tippyInstance?: Instance;\n private preventHide: boolean = false;\n private tippyWrapper: HTMLDivElement;\n private editor: Editor;\n private view: EditorView;\n\n constructor(options: TippyInitOptions) {\n this.editor = options.editor;\n this.view = options.view;\n this.tippyWrapper = document.createElement(\"div\");\n this.tippyWrapper.addEventListener(\"mousedown\", this.mousedownHandler, {\n capture: true,\n });\n this.view.dom.addEventListener(\"dragstart\", this.dragstartHandler);\n this.editor.on(\"blur\", this.blurHandler);\n }\n\n init() {\n this.tippyWrapper.innerHTML = \"\";\n\n return { tippyModal: this.tippyWrapper, tippyInstance: this.tippyInstance };\n }\n\n show() {\n this.tippyInstance?.show();\n return true;\n }\n\n hide() {\n setTimeout(() => this.tippyInstance?.hide());\n return false;\n }\n\n private mousedownHandler = () => {\n this.preventHide = true;\n };\n\n private dragstartHandler = () => {\n this.hide();\n };\n\n private blurHandler = ({ event }: { event: FocusEvent }) => {\n console.log(\"blurHandler\", { event });\n if (this.preventHide) {\n this.preventHide = false;\n return;\n }\n if (\n event?.relatedTarget &&\n this.tippyWrapper.parentNode?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n this.hide();\n };\n\n private tippyBlurHandler = (event: FocusEvent) => {\n this.blurHandler({ event });\n };\n\n private createTooltip() {\n if (!this.editor || !this.editor.options) return;\n const { element: editorElement } = this.editor.options;\n const editorIsAttached = !!editorElement.parentElement;\n\n if (this.tippyInstance || !editorIsAttached) {\n return;\n }\n\n this.tippyInstance = tippy(editorElement, {\n duration: 0,\n getReferenceClientRect: null,\n content: this.tippyWrapper,\n interactive: true,\n trigger: \"manual\",\n placement: \"bottom\",\n hideOnClick: \"toggle\",\n onClickOutside: (instance, event) => {\n console.log(\"onClickOutside\", { instance, event });\n this.hide();\n },\n onAfterUpdate: (instance, partialProps) => {\n console.log(\"onAfterUpdate\", { instance, partialProps });\n this.show();\n },\n });\n\n if (this.tippyInstance.popper.firstChild) {\n (this.tippyInstance.popper.firstChild as HTMLElement).addEventListener(\n \"blur\",\n this.tippyBlurHandler\n );\n }\n }\n\n update(view: EditorView, option: any = {}) {\n this.createTooltip();\n\n option.arrow = option?.arrow ?? false;\n\n if (this.tippyInstance) {\n this.tippyInstance.setProps({\n ...option,\n getReferenceClientRect: () => {\n const pos = view.state.selection.from;\n return posToDOMRect(view, pos, pos);\n },\n });\n }\n\n return {};\n }\n\n destroyTooltip() {\n if (this.tippyInstance) {\n this.tippyInstance.destroy();\n this.tippyInstance = undefined;\n this.tippyWrapper.removeEventListener(\"mousedown\", this.mousedownHandler, {\n capture: true,\n });\n this.view.dom.removeEventListener(\"dragstart\", this.dragstartHandler);\n this.editor.off(\"blur\", this.blurHandler);\n }\n }\n}\n\nexport default Tooltip;\n","import { getAttributes } from \"@tiptap/core\";\nimport { MarkType } from \"@tiptap/pm/model\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { Editor } from \"@tiptap/core\";\nimport { EditorView } from \"@tiptap/pm/view\";\nimport Tooltip from \"./tippyHelper\";\n\n// Define type for the ClickHandlerOptions\ntype ClickHandlerOptions = {\n type: MarkType;\n editor: Editor;\n validate?: (url: string) => boolean;\n view: EditorView;\n modals: {\n previewHyperlink?: ((options: any) => HTMLElement) | null;\n setHyperlink?: ((options: any) => HTMLElement) | null;\n };\n};\n\nexport default function clickHandler(options: ClickHandlerOptions): Plugin {\n // Create the tooltip instance\n let tooltip = new Tooltip(options);\n\n // Initialize the tooltip\n let { tippyModal, tippyInstance } = tooltip.init();\n\n return new Plugin({\n key: new PluginKey(\"handleClickHyperlink\"),\n props: {\n handleClick: (view, pos, event) => {\n if (event.button !== 0) return false;\n\n console.log({\n event,\n button: event.button,\n target: event.target,\n });\n\n // Get the target HTML element and its position\n const nodeTarget: HTMLElement = event.target as HTMLElement;\n const nodePos = view.posAtDOM(nodeTarget, 0);\n\n // Find the closest link element to the target element\n const link = nodeTarget?.closest(\"a\");\n\n // Extract attributes from the state\n const attrs = getAttributes(view.state, options.type.name);\n\n // Extract href and target attributes from the link element or the state\n const href = link?.href ?? attrs.href;\n const target = link?.target ?? attrs.target;\n\n // If there is no previewHyperlink modal provided, then open the link in new window\n if (!options.modals.previewHyperlink) {\n if (link && href) {\n window.open(href, target);\n }\n return true;\n }\n\n // if the link does not contain href attribute, hide the tooltip\n if (!link?.href) return tooltip.hide();\n\n // Create a preview of the hyperlink\n const hyperlinkPreview = options.modals.previewHyperlink({\n link,\n nodePos,\n ...options,\n });\n\n // If there is no hyperlink preview, hide the modal\n if (!hyperlinkPreview) return tooltip.hide();\n\n // Empty the modal and append the hyperlink preview box\n\n while (tippyModal.firstChild) {\n tippyModal.removeChild(tippyModal.firstChild);\n }\n\n tippyModal.append(hyperlinkPreview);\n\n // Update the modal position\n tooltip.update(options.view);\n\n return false;\n },\n },\n });\n}\n","import { Editor } from \"@tiptap/core\";\nimport { MarkType } from \"@tiptap/pm/model\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { find } from \"linkifyjs\";\n\ntype PasteHandlerOptions = {\n editor: Editor;\n type: MarkType;\n};\n\nexport function pasteHandler(options: PasteHandlerOptions): Plugin {\n return new Plugin({\n key: new PluginKey(\"handlePasteHyperlink\"),\n props: {\n handlePaste: (view, event, slice) => {\n const { state } = view;\n const { selection } = state;\n const { empty } = selection;\n\n if (empty) {\n return false;\n }\n\n let textContent = \"\";\n\n slice.content.forEach((node) => {\n textContent += node.textContent;\n });\n\n const link = find(textContent).find(\n (item) => item.isLink && item.value === textContent\n );\n\n if (!textContent || !link) {\n return false;\n }\n\n options.editor.commands.setMark(options.type, {\n href: link.href,\n });\n\n return true;\n },\n },\n });\n}\n","import { Editor } from \"@tiptap/core\";\nimport { find } from \"linkifyjs\";\n\ntype EditHyperlinkOptions = {\n editor: Editor;\n validate?: (url: string) => boolean;\n newURL?: string;\n newText?: string;\n};\n\nexport default function editHyperlink(options: EditHyperlinkOptions) {\n const { state, dispatch } = options.editor.view;\n const { from, to } = state.selection;\n let link: HTMLAnchorElement | null = null;\n\n const selectedNode = options.editor.view.domAtPos(from - 1)\n .node as HTMLElement;\n\n if (selectedNode?.nodeName === \"#text\") {\n link = (selectedNode.parentNode as HTMLElement)?.closest(\"a\");\n } else {\n link = selectedNode?.closest(\"a\");\n }\n\n if (!link) return true;\n\n const text = options.newText || link?.innerText;\n // Get the position of the link in the editor view\n const nodePos = options.editor.view.posAtDOM(link, 0);\n\n const sanitizeURL = find(options.newURL || link.href)\n .filter((link) => link.isLink)\n .filter((link) => (options.validate ? options.validate(link.value) : true))\n .at(0);\n\n return options.editor\n .chain()\n .focus()\n .command(({ tr }) => {\n // The command replaces the range from nodePos to nodePos + length of the text\n // with a new text node with the provided text and a link mark with the sanitized URL\n tr.replaceWith(\n nodePos,\n nodePos + text?.length,\n options.editor.schema.text(text, [\n options.editor.schema.marks.hyperlink.create({\n href: sanitizeURL?.href,\n }),\n ])\n );\n\n return true;\n })\n .run();\n}\n","import { Mark, markPasteRule, mergeAttributes } from \"@tiptap/core\";\nimport { Plugin } from \"@tiptap/pm/state\";\nimport { find, registerCustomProtocol, reset } from \"linkifyjs\";\nimport autoHyperlink from \"./helpers/autoHyperlink\";\nimport clickHandler from \"./helpers/clickHandler\";\nimport { pasteHandler } from \"./helpers/pasteHandler\";\nimport editHyperlinkHelper from \"./helpers/editHyperlink\";\n\nexport interface LinkProtocolOptions {\n scheme: string;\n optionalSlashes?: boolean;\n}\n\nexport interface HyperlinkOptions {\n /**\n * If enabled, it adds links as you type.\n */\n autoHyperlink: boolean;\n /**\n * An array of custom protocols to be registered with linkifyjs.\n */\n protocols: Array<LinkProtocolOptions | string>;\n /**\n * If enabled, links will be opened on click.\n */\n openOnClick: boolean;\n /**\n * Adds a link to the current selection if the pasted content only contains an url.\n */\n hyperlinkOnPaste: boolean;\n /**\n * A list of HTML attributes to be rendered.\n */\n HTMLAttributes: Record<string, any>;\n /**\n * A list of modals to be rendered.\n * @default null\n * @example\n */\n modals: {\n previewHyperlink?: ((options: any) => HTMLElement) | null;\n setHyperlink?: ((options: any) => HTMLElement) | null;\n };\n /**\n * A validation function that modifies link verification for the auto linker.\n * @param url - The url to be validated.\n * @returns - True if the url is valid, false otherwise.\n */\n validate?: (url: string) => boolean;\n}\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n link: {\n /**\n * Edit the hyperlink's text\n */\n editHyperLinkText: (text: string) => ReturnType;\n\n /**\n * Edit the hyperlink's href value\n */\n editHyperLinkHref: (href: string) => ReturnType;\n\n /**\n * Edit the hyperlink's\n */\n editHyperlink: (attributes?: { newText?: string; newURL?: string }) => ReturnType;\n\n /**\n * Set a hyperlink\n */\n setHyperlink: (attributes?: { href: string; target?: string | null }) => ReturnType;\n\n /**\n * Unset a link mark\n */\n unsetHyperlink: () => ReturnType;\n };\n }\n}\n\nexport const Hyperlink = Mark.create<HyperlinkOptions>({\n name: \"hyperlink\",\n\n priority: 1000,\n\n keepOnSplit: false,\n\n onCreate() {\n this.options.protocols.forEach((protocol) => {\n if (typeof protocol === \"string\") {\n registerCustomProtocol(protocol);\n return;\n }\n registerCustomProtocol(protocol.scheme, protocol.optionalSlashes);\n });\n },\n\n onDestroy() {\n reset();\n },\n\n inclusive() {\n return this.options.autoHyperlink;\n },\n\n addOptions() {\n return {\n openOnClick: true,\n hyperlinkOnPaste: true,\n autoHyperlink: true,\n protocols: [],\n HTMLAttributes: {\n target: \"_blank\",\n rel: \"noopener noreferrer nofollow\",\n class: null,\n },\n modals: {\n previewHyperlink: null,\n setHyperlink: null,\n },\n validate: undefined,\n };\n },\n\n addAttributes() {\n return {\n href: {\n default: null,\n },\n target: {\n default: this.options.HTMLAttributes.target,\n },\n class: {\n default: this.options.HTMLAttributes.class,\n },\n };\n },\n\n parseHTML() {\n return [{ tag: 'a[href]:not([href *= \"javascript:\" i])' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\"a\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n\n addCommands() {\n return {\n setHyperlink:\n (attributes) =>\n ({ editor, chain }) => {\n if (!this.options.modals.setHyperlink) {\n return chain()\n .setMark(this.name, attributes)\n .setMeta(\"preventAutohyperlink\", true)\n .run();\n } else {\n this.options.modals.setHyperlink({\n editor,\n validate: this.options.validate,\n extentionName: this.name,\n attributes,\n });\n return true;\n }\n },\n\n editHyperlink:\n (attributes) =>\n ({ editor }) => {\n return editHyperlinkHelper({\n ...attributes,\n editor,\n validate: this.options.validate,\n });\n },\n\n editHyperLinkText:\n (newText) =>\n ({ editor }) => {\n return editHyperlinkHelper({\n editor,\n newText,\n validate: this.options.validate,\n });\n },\n\n editHyperLinkHref:\n (newURL) =>\n ({ editor }) => {\n return editHyperlinkHelper({\n editor,\n validate: this.options.validate,\n newURL,\n });\n },\n\n unsetHyperlink:\n () =>\n ({ chain }) => {\n return chain()\n .unsetMark(this.name, { extendEmptyMarkRange: true })\n .setMeta(\"preventAutohyperlink\", true)\n .run();\n },\n };\n },\n\n addPasteRules() {\n return [\n markPasteRule({\n find: (text) =>\n find(text)\n .filter((link) => {\n if (this.options.validate) {\n return this.options.validate(link.value);\n }\n\n return true;\n })\n .filter((link) => link.isLink)\n .map((link) => ({\n text: link.value,\n index: link.start,\n data: link,\n })),\n type: this.type,\n getAttributes: (match) => ({\n href: match.data?.href,\n }),\n }),\n ];\n },\n\n addProseMirrorPlugins() {\n const plugins: Plugin[] = [];\n\n if (this.options.autoHyperlink) {\n plugins.push(\n autoHyperlink({\n type: this.type,\n validate: this.options.validate,\n })\n );\n }\n\n if (this.options.openOnClick) {\n plugins.push(\n clickHandler({\n type: this.type,\n editor: this.editor,\n validate: this.options.validate,\n view: this.editor.view,\n modals: this.options.modals,\n })\n );\n }\n\n if (this.options.hyperlinkOnPaste) {\n plugins.push(\n pasteHandler({\n editor: this.editor,\n type: this.type,\n })\n );\n }\n\n return plugins;\n },\n});\n"],"names":["Plugin","PluginKey","combineTransactionSteps","getChangedRanges","getMarksBetween","test","findChildrenInRange","find","posToDOMRect","getAttributes","Mark","registerCustomProtocol","reset","mergeAttributes","editHyperlinkHelper","markPasteRule"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/helpers/autoHyperlink.ts","../src/helpers/tippyHelper.ts","../src/helpers/clickHandler.ts","../src/helpers/pasteHandler.ts","../src/helpers/editHyperlink.ts","../src/hyperlink.ts"],"sourcesContent":["import {\n combineTransactionSteps,\n findChildrenInRange,\n getChangedRanges,\n getMarksBetween,\n NodeWithPos,\n} from \"@tiptap/core\";\nimport { MarkType } from \"@tiptap/pm/model\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { find, test } from \"linkifyjs\";\n\ntype AutoHyperlinkOptions = {\n type: MarkType;\n validate?: (url: string) => boolean;\n};\n\nexport default function autoHyperlink(options: AutoHyperlinkOptions): Plugin {\n return new Plugin({\n key: new PluginKey(\"autoHyperlink\"),\n appendTransaction: (transactions, oldState, newState) => {\n const docChanges =\n transactions.some((transaction) => transaction.docChanged) &&\n !oldState.doc.eq(newState.doc);\n const preventAutoHyperlink = transactions.some((transaction) =>\n transaction.getMeta(\"preventAutoHyperlink\")\n );\n\n if (!docChanges || preventAutoHyperlink) {\n return;\n }\n\n const { tr } = newState;\n const transform = combineTransactionSteps(oldState.doc, [\n ...transactions,\n ]);\n const { mapping } = transform;\n const changes = getChangedRanges(transform);\n\n changes.forEach(({ oldRange, newRange }) => {\n // at first we check if we have to remove links\n getMarksBetween(oldRange.from, oldRange.to, oldState.doc)\n .filter((item) => item.mark.type === options.type)\n .forEach((oldMark) => {\n const newFrom = mapping.map(oldMark.from);\n const newTo = mapping.map(oldMark.to);\n const newMarks = getMarksBetween(\n newFrom,\n newTo,\n newState.doc\n ).filter((item) => item.mark.type === options.type);\n\n if (!newMarks.length) {\n return;\n }\n\n const newMark = newMarks[0];\n const oldLinkText = oldState.doc.textBetween(\n oldMark.from,\n oldMark.to,\n undefined,\n \" \"\n );\n const newLinkText = newState.doc.textBetween(\n newMark.from,\n newMark.to,\n undefined,\n \" \"\n );\n const wasLink = test(oldLinkText);\n const isLink = test(newLinkText);\n\n // remove only the link, if it was a link before too\n // because we don’t want to remove links that were set manually\n if (wasLink && !isLink) {\n tr.removeMark(newMark.from, newMark.to, options.type);\n }\n });\n\n // now let’s see if we can add new links\n const nodesInChangedRanges = findChildrenInRange(\n newState.doc,\n newRange,\n (node) => node.isTextblock\n );\n\n let textBlock: NodeWithPos | undefined;\n let textBeforeWhitespace: string | undefined;\n\n if (nodesInChangedRanges.length > 1) {\n // Grab the first node within the changed ranges (ex. the first of two paragraphs when hitting enter)\n textBlock = nodesInChangedRanges[0];\n textBeforeWhitespace = newState.doc.textBetween(\n textBlock.pos,\n textBlock.pos + textBlock.node.nodeSize,\n undefined,\n \" \"\n );\n } else if (\n nodesInChangedRanges.length &&\n // We want to make sure to include the block seperator argument to treat hard breaks like spaces\n newState.doc\n .textBetween(newRange.from, newRange.to, \" \", \" \")\n .endsWith(\" \")\n ) {\n textBlock = nodesInChangedRanges[0];\n textBeforeWhitespace = newState.doc.textBetween(\n textBlock.pos,\n newRange.to,\n undefined,\n \" \"\n );\n }\n\n if (textBlock && textBeforeWhitespace) {\n const wordsBeforeWhitespace = textBeforeWhitespace\n .split(\" \")\n .filter((s) => s !== \"\");\n\n if (wordsBeforeWhitespace.length <= 0) {\n return false;\n }\n\n const lastWordBeforeSpace =\n wordsBeforeWhitespace[wordsBeforeWhitespace.length - 1];\n const lastWordAndBlockOffset =\n textBlock.pos +\n textBeforeWhitespace.lastIndexOf(lastWordBeforeSpace);\n\n if (!lastWordBeforeSpace) {\n return false;\n }\n\n find(lastWordBeforeSpace)\n .filter((link) => link.isLink)\n .filter((link) => {\n if (options.validate) {\n return options.validate(link.value);\n }\n return true;\n })\n // calculate link position\n .map((link) => ({\n ...link,\n from: lastWordAndBlockOffset + link.start + 1,\n to: lastWordAndBlockOffset + link.end + 1,\n }))\n // add link mark\n .forEach((link) => {\n tr.addMark(\n link.from,\n link.to,\n options.type.create({\n href: link.href,\n })\n );\n });\n }\n });\n\n if (!tr.steps.length) {\n return;\n }\n\n return tr;\n },\n });\n}\n","import tippy, { Instance, Props, roundArrow } from \"tippy.js\";\nimport { Editor } from \"@tiptap/core\";\nimport { EditorView } from \"@tiptap/pm/view\";\nimport { getAttributes, posToDOMRect } from \"@tiptap/core\";\n\ninterface TippyInitOptions {\n editor: Editor;\n validate?: (url: string) => boolean;\n view: EditorView;\n}\n\nclass Tooltip {\n private tippyInstance?: Instance;\n private preventHide: boolean = false;\n private tippyWrapper: HTMLDivElement;\n private editor: Editor;\n private view: EditorView;\n\n constructor(options: TippyInitOptions) {\n this.editor = options.editor;\n this.view = options.view;\n this.tippyWrapper = document.createElement(\"div\");\n this.tippyWrapper.addEventListener(\"mousedown\", this.mousedownHandler, {\n capture: true,\n });\n this.view.dom.addEventListener(\"dragstart\", this.dragstartHandler);\n this.editor.on(\"blur\", this.blurHandler);\n }\n\n init() {\n this.tippyWrapper.innerHTML = \"\";\n\n return { tippyModal: this.tippyWrapper, tippyInstance: this.tippyInstance };\n }\n\n show() {\n this.tippyInstance?.show();\n return true;\n }\n\n hide() {\n setTimeout(() => this.tippyInstance?.hide());\n return false;\n }\n\n private mousedownHandler = () => {\n this.preventHide = true;\n };\n\n private dragstartHandler = () => {\n this.hide();\n };\n\n private blurHandler = ({ event }: { event: FocusEvent }) => {\n if (this.preventHide) {\n this.preventHide = false;\n return;\n }\n if (\n event?.relatedTarget &&\n this.tippyWrapper.parentNode?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n this.hide();\n };\n\n private tippyBlurHandler = (event: FocusEvent) => {\n this.blurHandler({ event });\n };\n\n private createTooltip() {\n if (!this.editor || !this.editor.options) return;\n const { element: editorElement } = this.editor.options;\n const editorIsAttached = !!editorElement.parentElement;\n\n if (this.tippyInstance || !editorIsAttached) {\n return;\n }\n\n this.tippyInstance = tippy(editorElement, {\n duration: 0,\n getReferenceClientRect: null,\n content: this.tippyWrapper,\n interactive: true,\n trigger: \"manual\",\n placement: \"bottom\",\n hideOnClick: \"toggle\",\n onClickOutside: (instance, event) => {\n this.hide();\n },\n onAfterUpdate: (instance, partialProps) => {\n this.show();\n },\n });\n\n if (this.tippyInstance.popper.firstChild) {\n (this.tippyInstance.popper.firstChild as HTMLElement).addEventListener(\n \"blur\",\n this.tippyBlurHandler\n );\n }\n }\n\n update(view: EditorView, option: any = {}) {\n this.createTooltip();\n\n option.arrow = option?.arrow ?? false;\n\n if (this.tippyInstance) {\n this.tippyInstance.setProps({\n ...option,\n getReferenceClientRect: () => {\n const pos = view.state.selection.from;\n return posToDOMRect(view, pos, pos);\n },\n });\n }\n\n return {};\n }\n\n destroyTooltip() {\n if (this.tippyInstance) {\n this.tippyInstance.destroy();\n this.tippyInstance = undefined;\n this.tippyWrapper.removeEventListener(\"mousedown\", this.mousedownHandler, {\n capture: true,\n });\n this.view.dom.removeEventListener(\"dragstart\", this.dragstartHandler);\n this.editor.off(\"blur\", this.blurHandler);\n }\n }\n}\n\nexport default Tooltip;\n","import { getAttributes } from \"@tiptap/core\";\nimport { MarkType } from \"@tiptap/pm/model\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { Editor } from \"@tiptap/core\";\nimport { EditorView } from \"@tiptap/pm/view\";\nimport Tooltip from \"./tippyHelper\";\n\n// Define type for the ClickHandlerOptions\ntype ClickHandlerOptions = {\n type: MarkType;\n editor: Editor;\n validate?: (url: string) => boolean;\n view: EditorView;\n modals: {\n previewHyperlink?: ((options: any) => HTMLElement) | null;\n setHyperlink?: ((options: any) => HTMLElement) | null;\n };\n};\n\nexport default function clickHandler(options: ClickHandlerOptions): Plugin {\n // Create the tooltip instance\n let tooltip = new Tooltip(options);\n\n // Initialize the tooltip\n let { tippyModal, tippyInstance } = tooltip.init();\n\n return new Plugin({\n key: new PluginKey(\"handleClickHyperlink\"),\n props: {\n handleClick: (view, pos, event) => {\n if (event.button !== 0) return false;\n\n // Get the target HTML element and its position\n const nodeTarget: HTMLElement = event.target as HTMLElement;\n const nodePos = view.posAtDOM(nodeTarget, 0);\n\n // Find the closest link element to the target element\n const link = nodeTarget?.closest(\"a\");\n\n // Extract attributes from the state\n const attrs = getAttributes(view.state, options.type.name);\n\n // Extract href and target attributes from the link element or the state\n const href = link?.href ?? attrs.href;\n const target = link?.target ?? attrs.target;\n\n // If there is no previewHyperlink modal provided, then open the link in new window\n if (!options.modals.previewHyperlink) {\n if (link && href) {\n window.open(href, target);\n }\n return true;\n }\n\n // if the link does not contain href attribute, hide the tooltip\n if (!link?.href) return tooltip.hide();\n\n // Create a preview of the hyperlink\n const hyperlinkPreview = options.modals.previewHyperlink({\n link,\n nodePos,\n tippy: tooltip,\n ...options,\n });\n\n // If there is no hyperlink preview, hide the modal\n if (!hyperlinkPreview) return tooltip.hide();\n\n // Empty the modal and append the hyperlink preview box\n\n while (tippyModal.firstChild) {\n tippyModal.removeChild(tippyModal.firstChild);\n }\n\n tippyModal.append(hyperlinkPreview);\n\n // Update the modal position\n tooltip.update(options.view);\n\n return false;\n },\n },\n });\n}\n","import { Editor } from \"@tiptap/core\";\nimport { MarkType } from \"@tiptap/pm/model\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { find } from \"linkifyjs\";\n\ntype PasteHandlerOptions = {\n editor: Editor;\n type: MarkType;\n};\n\nexport function pasteHandler(options: PasteHandlerOptions): Plugin {\n return new Plugin({\n key: new PluginKey(\"handlePasteHyperlink\"),\n props: {\n handlePaste: (view, event, slice) => {\n const { state } = view;\n const { selection } = state;\n const { empty } = selection;\n\n if (empty) {\n return false;\n }\n\n let textContent = \"\";\n\n slice.content.forEach((node) => {\n textContent += node.textContent;\n });\n\n const link = find(textContent).find(\n (item) => item.isLink && item.value === textContent\n );\n\n if (!textContent || !link) {\n return false;\n }\n\n options.editor.commands.setMark(options.type, {\n href: link.href,\n });\n\n return true;\n },\n },\n });\n}\n","import { Editor } from \"@tiptap/core\";\nimport { find } from \"linkifyjs\";\n\ntype EditHyperlinkOptions = {\n editor: Editor;\n validate?: (url: string) => boolean;\n newURL?: string;\n newText?: string;\n};\n\nexport default function editHyperlink(options: EditHyperlinkOptions) {\n const { state, dispatch } = options.editor.view;\n const { from, to } = state.selection;\n let link: HTMLAnchorElement | null = null;\n\n const selectedNode = options.editor.view.domAtPos(from).node as HTMLElement;\n const nodeName = selectedNode?.nodeName;\n\n if (nodeName === \"#text\") {\n link = (selectedNode.parentNode as HTMLElement)?.closest(\"a\");\n } else if (nodeName === \"P\" && selectedNode?.firstElementChild?.localName === \"a\") {\n link = selectedNode?.firstElementChild as HTMLAnchorElement;\n } else {\n link = selectedNode?.closest(\"a\");\n }\n\n if (!link) return true;\n\n const text = options.newText || link?.innerText;\n // Get the position of the link in the editor view\n const nodePos = options.editor.view.posAtDOM(link, 0);\n\n const sanitizeURL = find(options.newURL || link.href)\n .filter((link) => link.isLink)\n .filter((link) => (options.validate ? options.validate(link.value) : true))\n .at(0);\n\n return options.editor\n .chain()\n .focus()\n .command(({ tr }) => {\n tr.deleteRange(nodePos, nodePos + (link?.innerText || \"\")?.length).replaceWith(\n nodePos,\n nodePos,\n options.editor.schema.text(text, [\n options.editor.schema.marks.hyperlink.create({\n href: sanitizeURL?.href,\n }),\n ])\n );\n\n return true;\n })\n .run();\n}\n","import { Mark, markPasteRule, mergeAttributes } from \"@tiptap/core\";\nimport { Plugin } from \"@tiptap/pm/state\";\nimport { find, registerCustomProtocol, reset } from \"linkifyjs\";\nimport autoHyperlink from \"./helpers/autoHyperlink\";\nimport clickHandler from \"./helpers/clickHandler\";\nimport { pasteHandler } from \"./helpers/pasteHandler\";\nimport editHyperlinkHelper from \"./helpers/editHyperlink\";\n\nexport interface LinkProtocolOptions {\n scheme: string;\n optionalSlashes?: boolean;\n}\n\nexport interface HyperlinkOptions {\n /**\n * If enabled, it adds links as you type.\n */\n autoHyperlink: boolean;\n /**\n * An array of custom protocols to be registered with linkifyjs.\n */\n protocols: Array<LinkProtocolOptions | string>;\n /**\n * If enabled, links will be opened on click.\n */\n openOnClick: boolean;\n /**\n * Adds a link to the current selection if the pasted content only contains an url.\n */\n hyperlinkOnPaste: boolean;\n /**\n * A list of HTML attributes to be rendered.\n */\n HTMLAttributes: Record<string, any>;\n /**\n * A list of modals to be rendered.\n * @default null\n * @example\n */\n modals: {\n previewHyperlink?: ((options: any) => HTMLElement) | null;\n setHyperlink?: ((options: any) => HTMLElement) | null;\n };\n /**\n * A validation function that modifies link verification for the auto linker.\n * @param url - The url to be validated.\n * @returns - True if the url is valid, false otherwise.\n */\n validate?: (url: string) => boolean;\n}\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n link: {\n /**\n * Edit the hyperlink's text\n */\n editHyperLinkText: (text: string) => ReturnType;\n\n /**\n * Edit the hyperlink's href value\n */\n editHyperLinkHref: (href: string) => ReturnType;\n\n /**\n * Edit the hyperlink's\n */\n editHyperlink: (attributes?: { newText?: string; newURL?: string }) => ReturnType;\n\n /**\n * Set a hyperlink\n */\n setHyperlink: (attributes?: { href: string; target?: string | null }) => ReturnType;\n\n /**\n * Unset a link mark\n */\n unsetHyperlink: () => ReturnType;\n };\n }\n}\n\nexport const Hyperlink = Mark.create<HyperlinkOptions>({\n name: \"hyperlink\",\n\n priority: 1000,\n\n keepOnSplit: false,\n\n onCreate() {\n this.options.protocols.forEach((protocol) => {\n if (typeof protocol === \"string\") {\n registerCustomProtocol(protocol);\n return;\n }\n registerCustomProtocol(protocol.scheme, protocol.optionalSlashes);\n });\n },\n\n onDestroy() {\n reset();\n },\n\n inclusive() {\n return this.options.autoHyperlink;\n },\n\n addOptions() {\n return {\n openOnClick: true,\n hyperlinkOnPaste: true,\n autoHyperlink: true,\n protocols: [],\n HTMLAttributes: {\n target: \"_blank\",\n rel: \"noopener noreferrer nofollow\",\n class: null,\n },\n modals: {\n previewHyperlink: null,\n setHyperlink: null,\n },\n validate: undefined,\n };\n },\n\n addAttributes() {\n return {\n href: {\n default: null,\n },\n target: {\n default: this.options.HTMLAttributes.target,\n },\n class: {\n default: this.options.HTMLAttributes.class,\n },\n };\n },\n\n parseHTML() {\n return [{ tag: 'a[href]:not([href *= \"javascript:\" i])' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\"a\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n\n addCommands() {\n return {\n setHyperlink:\n (attributes) =>\n ({ editor, chain }) => {\n if (!this.options.modals.setHyperlink) {\n return chain()\n .setMark(this.name, attributes)\n .setMeta(\"preventAutohyperlink\", true)\n .run();\n } else {\n this.options.modals.setHyperlink({\n editor,\n validate: this.options.validate,\n extentionName: this.name,\n attributes,\n });\n return true;\n }\n },\n\n editHyperlink:\n (attributes) =>\n ({ editor }) => {\n return editHyperlinkHelper({\n ...attributes,\n editor,\n validate: this.options.validate,\n });\n },\n\n editHyperLinkText:\n (newText) =>\n ({ editor }) => {\n return editHyperlinkHelper({\n editor,\n newText,\n validate: this.options.validate,\n });\n },\n\n editHyperLinkHref:\n (newURL) =>\n ({ editor }) => {\n return editHyperlinkHelper({\n editor,\n validate: this.options.validate,\n newURL,\n });\n },\n\n unsetHyperlink:\n () =>\n ({ chain }) => {\n return chain()\n .unsetMark(this.name, { extendEmptyMarkRange: true })\n .setMeta(\"preventAutohyperlink\", true)\n .run();\n },\n };\n },\n\n addPasteRules() {\n return [\n markPasteRule({\n find: (text) =>\n find(text)\n .filter((link) => {\n if (this.options.validate) {\n return this.options.validate(link.value);\n }\n\n return true;\n })\n .filter((link) => link.isLink)\n .map((link) => ({\n text: link.value,\n index: link.start,\n data: link,\n })),\n type: this.type,\n getAttributes: (match) => ({\n href: match.data?.href,\n }),\n }),\n ];\n },\n\n addProseMirrorPlugins() {\n const plugins: Plugin[] = [];\n\n if (this.options.autoHyperlink) {\n plugins.push(\n autoHyperlink({\n type: this.type,\n validate: this.options.validate,\n })\n );\n }\n\n if (this.options.openOnClick) {\n plugins.push(\n clickHandler({\n type: this.type,\n editor: this.editor,\n validate: this.options.validate,\n view: this.editor.view,\n modals: this.options.modals,\n })\n );\n }\n\n if (this.options.hyperlinkOnPaste) {\n plugins.push(\n pasteHandler({\n editor: this.editor,\n type: this.type,\n })\n );\n }\n\n return plugins;\n },\n});\n"],"names":["Plugin","PluginKey","combineTransactionSteps","getChangedRanges","getMarksBetween","test","findChildrenInRange","find","posToDOMRect","getAttributes","Mark","registerCustomProtocol","reset","mergeAttributes","editHyperlinkHelper","markPasteRule"],"mappings":";;;;;;;;;AAgBwB,SAAA,aAAa,CAAC,OAA6B,EAAA;IACjE,OAAO,IAAIA,YAAM,CAAC;AAChB,QAAA,GAAG,EAAE,IAAIC,eAAS,CAAC,eAAe,CAAC;QACnC,iBAAiB,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,KAAI;AACtD,YAAA,MAAM,UAAU,GACd,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,UAAU,CAAC;gBAC1D,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACjC,YAAA,MAAM,oBAAoB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,KACzD,WAAW,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAC5C,CAAC;AAEF,YAAA,IAAI,CAAC,UAAU,IAAI,oBAAoB,EAAE;gBACvC,OAAO;AACR,aAAA;AAED,YAAA,MAAM,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC;AACxB,YAAA,MAAM,SAAS,GAAGC,4BAAuB,CAAC,QAAQ,CAAC,GAAG,EAAE;AACtD,gBAAA,GAAG,YAAY;AAChB,aAAA,CAAC,CAAC;AACH,YAAA,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;AAC9B,YAAA,MAAM,OAAO,GAAGC,qBAAgB,CAAC,SAAS,CAAC,CAAC;YAE5C,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAI;;AAEzC,gBAAAC,oBAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC;AACtD,qBAAA,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC;AACjD,qBAAA,OAAO,CAAC,CAAC,OAAO,KAAI;oBACnB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACtC,oBAAA,MAAM,QAAQ,GAAGA,oBAAe,CAC9B,OAAO,EACP,KAAK,EACL,QAAQ,CAAC,GAAG,CACb,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpD,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;wBACpB,OAAO;AACR,qBAAA;AAED,oBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAC5B,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAC1C,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,EAAE,EACV,SAAS,EACT,GAAG,CACJ,CAAC;oBACF,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAC1C,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,EAAE,EACV,SAAS,EACT,GAAG,CACJ,CAAC;AACF,oBAAA,MAAM,OAAO,GAAGC,cAAI,CAAC,WAAW,CAAC,CAAC;AAClC,oBAAA,MAAM,MAAM,GAAGA,cAAI,CAAC,WAAW,CAAC,CAAC;;;AAIjC,oBAAA,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE;AACtB,wBAAA,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AACvD,qBAAA;AACH,iBAAC,CAAC,CAAC;;AAGL,gBAAA,MAAM,oBAAoB,GAAGC,wBAAmB,CAC9C,QAAQ,CAAC,GAAG,EACZ,QAAQ,EACR,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAC3B,CAAC;AAEF,gBAAA,IAAI,SAAkC,CAAC;AACvC,gBAAA,IAAI,oBAAwC,CAAC;AAE7C,gBAAA,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEnC,oBAAA,SAAS,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;oBACpC,oBAAoB,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAC7C,SAAS,CAAC,GAAG,EACb,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EACvC,SAAS,EACT,GAAG,CACJ,CAAC;AACH,iBAAA;qBAAM,IACL,oBAAoB,CAAC,MAAM;;AAE3B,oBAAA,QAAQ,CAAC,GAAG;AACT,yBAAA,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;yBACjD,QAAQ,CAAC,GAAG,CAAC,EAChB;AACA,oBAAA,SAAS,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;AACpC,oBAAA,oBAAoB,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAC7C,SAAS,CAAC,GAAG,EACb,QAAQ,CAAC,EAAE,EACX,SAAS,EACT,GAAG,CACJ,CAAC;AACH,iBAAA;gBAED,IAAI,SAAS,IAAI,oBAAoB,EAAE;oBACrC,MAAM,qBAAqB,GAAG,oBAAoB;yBAC/C,KAAK,CAAC,GAAG,CAAC;yBACV,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AAE3B,oBAAA,IAAI,qBAAqB,CAAC,MAAM,IAAI,CAAC,EAAE;AACrC,wBAAA,OAAO,KAAK,CAAC;AACd,qBAAA;oBAED,MAAM,mBAAmB,GACvB,qBAAqB,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC1D,oBAAA,MAAM,sBAAsB,GAC1B,SAAS,CAAC,GAAG;AACb,wBAAA,oBAAoB,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;oBAExD,IAAI,CAAC,mBAAmB,EAAE;AACxB,wBAAA,OAAO,KAAK,CAAC;AACd,qBAAA;oBAEDC,cAAI,CAAC,mBAAmB,CAAC;yBACtB,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC;AAC7B,yBAAA,MAAM,CAAC,CAAC,IAAI,KAAI;wBACf,IAAI,OAAO,CAAC,QAAQ,EAAE;4BACpB,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrC,yBAAA;AACD,wBAAA,OAAO,IAAI,CAAC;AACd,qBAAC,CAAC;;AAED,yBAAA,GAAG,CAAC,CAAC,IAAI,MAAM;AACd,wBAAA,GAAG,IAAI;AACP,wBAAA,IAAI,EAAE,sBAAsB,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;AAC7C,wBAAA,EAAE,EAAE,sBAAsB,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AAC1C,qBAAA,CAAC,CAAC;;AAEF,yBAAA,OAAO,CAAC,CAAC,IAAI,KAAI;AAChB,wBAAA,EAAE,CAAC,OAAO,CACR,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,EAAE,EACP,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;4BAClB,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,yBAAA,CAAC,CACH,CAAC;AACJ,qBAAC,CAAC,CAAC;AACN,iBAAA;AACH,aAAC,CAAC,CAAC;AAEH,YAAA,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE;gBACpB,OAAO;AACR,aAAA;AAED,YAAA,OAAO,EAAE,CAAC;SACX;AACF,KAAA,CAAC,CAAC;AACL;;AC3JA,MAAM,OAAO,CAAA;AAOX,IAAA,WAAA,CAAY,OAAyB,EAAA;QAL7B,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;QAgC7B,IAAgB,CAAA,gBAAA,GAAG,MAAK;AAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC1B,SAAC,CAAC;QAEM,IAAgB,CAAA,gBAAA,GAAG,MAAK;YAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;AACd,SAAC,CAAC;AAEM,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,EAAE,KAAK,EAAyB,KAAI;;YACzD,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;gBACzB,OAAO;AACR,aAAA;AACD,YAAA,IACE,CAAA,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,aAAa;AACpB,iBAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,KAAK,CAAC,aAAqB,CAAC,CAAA,EACnE;gBACA,OAAO;AACR,aAAA;YACD,IAAI,CAAC,IAAI,EAAE,CAAC;AACd,SAAC,CAAC;AAEM,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,KAAiB,KAAI;AAC/C,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9B,SAAC,CAAC;AAlDA,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AAC7B,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE;AACrE,YAAA,OAAO,EAAE,IAAI;AACd,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;KAC1C;IAED,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,EAAE,CAAC;AAEjC,QAAA,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;KAC7E;IAED,IAAI,GAAA;;AACF,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,EAAE,CAAC;AAC3B,QAAA,OAAO,IAAI,CAAC;KACb;IAED,IAAI,GAAA;AACF,QAAA,UAAU,CAAC,MAAK,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,0CAAE,IAAI,EAAE,CAAA,EAAA,CAAC,CAAC;AAC7C,QAAA,OAAO,KAAK,CAAC;KACd;IA4BO,aAAa,GAAA;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QACjD,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AACvD,QAAA,MAAM,gBAAgB,GAAG,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC;AAEvD,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,gBAAgB,EAAE;YAC3C,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,EAAE;AACxC,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,sBAAsB,EAAE,IAAI;YAC5B,OAAO,EAAE,IAAI,CAAC,YAAY;AAC1B,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,OAAO,EAAE,QAAQ;AACjB,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,WAAW,EAAE,QAAQ;AACrB,YAAA,cAAc,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAI;gBAClC,IAAI,CAAC,IAAI,EAAE,CAAC;aACb;AACD,YAAA,aAAa,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAI;gBACxC,IAAI,CAAC,IAAI,EAAE,CAAC;aACb;AACF,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE;AACvC,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAA0B,CAAC,gBAAgB,CACpE,MAAM,EACN,IAAI,CAAC,gBAAgB,CACtB,CAAC;AACH,SAAA;KACF;AAED,IAAA,MAAM,CAAC,IAAgB,EAAE,MAAA,GAAc,EAAE,EAAA;;QACvC,IAAI,CAAC,aAAa,EAAE,CAAC;AAErB,QAAA,MAAM,CAAC,KAAK,GAAG,CAAA,EAAA,GAAA,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CAAC;QAEtC,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC1B,gBAAA,GAAG,MAAM;gBACT,sBAAsB,EAAE,MAAK;oBAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;oBACtC,OAAOC,iBAAY,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;iBACrC;AACF,aAAA,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,OAAO,EAAE,CAAC;KACX;IAED,cAAc,GAAA;QACZ,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;YAC/B,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE;AACxE,gBAAA,OAAO,EAAE,IAAI;AACd,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACtE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AAC3C,SAAA;KACF;AACF;;AClHuB,SAAA,YAAY,CAAC,OAA4B,EAAA;;AAE/D,IAAA,IAAI,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;;IAGnC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAEnD,OAAO,IAAIR,YAAM,CAAC;AAChB,QAAA,GAAG,EAAE,IAAIC,eAAS,CAAC,sBAAsB,CAAC;AAC1C,QAAA,KAAK,EAAE;YACL,WAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,KAAI;;AAChC,gBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,oBAAA,OAAO,KAAK,CAAC;;AAGrC,gBAAA,MAAM,UAAU,GAAgB,KAAK,CAAC,MAAqB,CAAC;gBAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;;AAG7C,gBAAA,MAAM,IAAI,GAAG,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,OAAO,CAAC,GAAG,CAAC,CAAC;;AAGtC,gBAAA,MAAM,KAAK,GAAGQ,kBAAa,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAG3D,gBAAA,MAAM,IAAI,GAAG,CAAA,EAAA,GAAA,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CAAC,IAAI,CAAC;AACtC,gBAAA,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CAAC,MAAM,CAAC;;AAG5C,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE;oBACpC,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,wBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3B,qBAAA;AACD,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;;gBAGD,IAAI,EAAC,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,IAAI,CAAA;AAAE,oBAAA,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;;AAGvC,gBAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC;oBACvD,IAAI;oBACJ,OAAO;AACP,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,GAAG,OAAO;AACX,iBAAA,CAAC,CAAC;;AAGH,gBAAA,IAAI,CAAC,gBAAgB;AAAE,oBAAA,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;;gBAI7C,OAAO,UAAU,CAAC,UAAU,EAAE;AAC5B,oBAAA,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/C,iBAAA;AAED,gBAAA,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;;AAGpC,gBAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7B,gBAAA,OAAO,KAAK,CAAC;aACd;AACF,SAAA;AACF,KAAA,CAAC,CAAC;AACL;;ACzEM,SAAU,YAAY,CAAC,OAA4B,EAAA;IACvD,OAAO,IAAIT,YAAM,CAAC;AAChB,QAAA,GAAG,EAAE,IAAIC,eAAS,CAAC,sBAAsB,CAAC;AAC1C,QAAA,KAAK,EAAE;YACL,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,KAAI;AAClC,gBAAA,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;AACvB,gBAAA,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;AAC5B,gBAAA,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;AAE5B,gBAAA,IAAI,KAAK,EAAE;AACT,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;gBAED,IAAI,WAAW,GAAG,EAAE,CAAC;gBAErB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC7B,oBAAA,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC;AAClC,iBAAC,CAAC,CAAC;gBAEH,MAAM,IAAI,GAAGM,cAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CACjC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,CACpD,CAAC;AAEF,gBAAA,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE;AACzB,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;gBAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;oBAC5C,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,iBAAA,CAAC,CAAC;AAEH,gBAAA,OAAO,IAAI,CAAC;aACb;AACF,SAAA;AACF,KAAA,CAAC,CAAC;AACL;;ACnCwB,SAAA,aAAa,CAAC,OAA6B,EAAA;;IACjE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;IAChD,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC;IACrC,IAAI,IAAI,GAA6B,IAAI,CAAC;AAE1C,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAmB,CAAC;IAC5E,MAAM,QAAQ,GAAG,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAZ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,YAAY,CAAE,QAAQ,CAAC;IAExC,IAAI,QAAQ,KAAK,OAAO,EAAE;QACxB,IAAI,GAAG,CAAC,EAAA,GAAA,YAAY,CAAC,UAA0B,0CAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAC/D,KAAA;AAAM,SAAA,IAAI,QAAQ,KAAK,GAAG,IAAI,CAAA,MAAA,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAZ,YAAY,CAAE,iBAAiB,0CAAE,SAAS,MAAK,GAAG,EAAE;QACjF,IAAI,GAAG,YAAY,KAAZ,IAAA,IAAA,YAAY,uBAAZ,YAAY,CAAE,iBAAsC,CAAC;AAC7D,KAAA;AAAM,SAAA;QACL,IAAI,GAAG,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAZ,YAAY,CAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AACnC,KAAA;AAED,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI,CAAC;AAEvB,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,KAAI,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,SAAS,CAAA,CAAC;;AAEhD,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAEtD,MAAM,WAAW,GAAGA,cAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC;SAClD,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC;SAC7B,MAAM,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;SAC1E,EAAE,CAAC,CAAC,CAAC,CAAC;IAET,OAAO,OAAO,CAAC,MAAM;AAClB,SAAA,KAAK,EAAE;AACP,SAAA,KAAK,EAAE;AACP,SAAA,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,KAAI;;AAClB,QAAA,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,IAAG,CAAA,EAAA,IAAC,CAAA,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,SAAS,KAAI,EAAE,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAA,CAAC,CAAC,WAAW,CAC5E,OAAO,EACP,OAAO,EACP,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE;YAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;AAC3C,gBAAA,IAAI,EAAE,WAAW,KAAA,IAAA,IAAX,WAAW,KAAX,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,WAAW,CAAE,IAAI;aACxB,CAAC;AACH,SAAA,CAAC,CACH,CAAC;AAEF,QAAA,OAAO,IAAI,CAAC;AACd,KAAC,CAAC;AACD,SAAA,GAAG,EAAE,CAAC;AACX;;AC4Ba,MAAA,SAAS,GAAGG,SAAI,CAAC,MAAM,CAAmB;AACrD,IAAA,IAAI,EAAE,WAAW;AAEjB,IAAA,QAAQ,EAAE,IAAI;AAEd,IAAA,WAAW,EAAE,KAAK;IAElB,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAC1C,YAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;gBAChCC,gCAAsB,CAAC,QAAQ,CAAC,CAAC;gBACjC,OAAO;AACR,aAAA;YACDA,gCAAsB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;AACpE,SAAC,CAAC,CAAC;KACJ;IAED,SAAS,GAAA;AACP,QAAAC,eAAK,EAAE,CAAC;KACT;IAED,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;KACnC;IAED,UAAU,GAAA;QACR,OAAO;AACL,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,cAAc,EAAE;AACd,gBAAA,MAAM,EAAE,QAAQ;AAChB,gBAAA,GAAG,EAAE,8BAA8B;AACnC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA,MAAM,EAAE;AACN,gBAAA,gBAAgB,EAAE,IAAI;AACtB,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA;AACD,YAAA,QAAQ,EAAE,SAAS;SACpB,CAAC;KACH;IAED,aAAa,GAAA;QACX,OAAO;AACL,YAAA,IAAI,EAAE;AACJ,gBAAA,OAAO,EAAE,IAAI;AACd,aAAA;AACD,YAAA,MAAM,EAAE;AACN,gBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM;AAC5C,aAAA;AACD,YAAA,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK;AAC3C,aAAA;SACF,CAAC;KACH;IAED,SAAS,GAAA;AACP,QAAA,OAAO,CAAC,EAAE,GAAG,EAAE,wCAAwC,EAAE,CAAC,CAAC;KAC5D;IAED,UAAU,CAAC,EAAE,cAAc,EAAE,EAAA;AAC3B,QAAA,OAAO,CAAC,GAAG,EAAEC,oBAAe,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;KAC/E;IAED,WAAW,GAAA;QACT,OAAO;AACL,YAAA,YAAY,EACV,CAAC,UAAU,KACX,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAI;gBACpB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE;AACrC,oBAAA,OAAO,KAAK,EAAE;AACX,yBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;AAC9B,yBAAA,OAAO,CAAC,sBAAsB,EAAE,IAAI,CAAC;AACrC,yBAAA,GAAG,EAAE,CAAC;AACV,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;wBAC/B,MAAM;AACN,wBAAA,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;wBAC/B,aAAa,EAAE,IAAI,CAAC,IAAI;wBACxB,UAAU;AACX,qBAAA,CAAC,CAAC;AACH,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;aACF;YAEH,aAAa,EACX,CAAC,UAAU,KACX,CAAC,EAAE,MAAM,EAAE,KAAI;AACb,gBAAA,OAAOC,aAAmB,CAAC;AACzB,oBAAA,GAAG,UAAU;oBACb,MAAM;AACN,oBAAA,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;AAChC,iBAAA,CAAC,CAAC;aACJ;YAEH,iBAAiB,EACf,CAAC,OAAO,KACR,CAAC,EAAE,MAAM,EAAE,KAAI;AACb,gBAAA,OAAOA,aAAmB,CAAC;oBACzB,MAAM;oBACN,OAAO;AACP,oBAAA,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;AAChC,iBAAA,CAAC,CAAC;aACJ;YAEH,iBAAiB,EACf,CAAC,MAAM,KACP,CAAC,EAAE,MAAM,EAAE,KAAI;AACb,gBAAA,OAAOA,aAAmB,CAAC;oBACzB,MAAM;AACN,oBAAA,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;oBAC/B,MAAM;AACP,iBAAA,CAAC,CAAC;aACJ;YAEH,cAAc,EACZ,MACA,CAAC,EAAE,KAAK,EAAE,KAAI;AACZ,gBAAA,OAAO,KAAK,EAAE;qBACX,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;AACpD,qBAAA,OAAO,CAAC,sBAAsB,EAAE,IAAI,CAAC;AACrC,qBAAA,GAAG,EAAE,CAAC;aACV;SACJ,CAAC;KACH;IAED,aAAa,GAAA;QACX,OAAO;AACL,YAAAC,kBAAa,CAAC;gBACZ,IAAI,EAAE,CAAC,IAAI,KACTR,cAAI,CAAC,IAAI,CAAC;AACP,qBAAA,MAAM,CAAC,CAAC,IAAI,KAAI;AACf,oBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;wBACzB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1C,qBAAA;AAED,oBAAA,OAAO,IAAI,CAAC;AACd,iBAAC,CAAC;qBACD,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC;AAC7B,qBAAA,GAAG,CAAC,CAAC,IAAI,MAAM;oBACd,IAAI,EAAE,IAAI,CAAC,KAAK;oBAChB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,oBAAA,IAAI,EAAE,IAAI;AACX,iBAAA,CAAC,CAAC;gBACP,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,gBAAA,aAAa,EAAE,CAAC,KAAK,KAAI;;AAAC,oBAAA,QAAC;AACzB,wBAAA,IAAI,EAAE,CAAA,EAAA,GAAA,KAAK,CAAC,IAAI,0CAAE,IAAI;AACvB,qBAAA,EAAC;AAAA,iBAAA;aACH,CAAC;SACH,CAAC;KACH;IAED,qBAAqB,GAAA;QACnB,MAAM,OAAO,GAAa,EAAE,CAAC;AAE7B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;AAC9B,YAAA,OAAO,CAAC,IAAI,CACV,aAAa,CAAC;gBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,gBAAA,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;AAChC,aAAA,CAAC,CACH,CAAC;AACH,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;AAC5B,YAAA,OAAO,CAAC,IAAI,CACV,YAAY,CAAC;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,gBAAA,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;AAC/B,gBAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;AACtB,gBAAA,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;AAC5B,aAAA,CAAC,CACH,CAAC;AACH,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;AACjC,YAAA,OAAO,CAAC,IAAI,CACV,YAAY,CAAC;gBACX,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,aAAA,CAAC,CACH,CAAC;AACH,SAAA;AAED,QAAA,OAAO,OAAO,CAAC;KAChB;AACF,CAAA;;;;;;"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -112,7 +112,6 @@ class Tooltip {
|
|
|
112
112
|
};
|
|
113
113
|
this.blurHandler = ({ event }) => {
|
|
114
114
|
var _a;
|
|
115
|
-
console.log("blurHandler", { event });
|
|
116
115
|
if (this.preventHide) {
|
|
117
116
|
this.preventHide = false;
|
|
118
117
|
return;
|
|
@@ -165,11 +164,9 @@ class Tooltip {
|
|
|
165
164
|
placement: "bottom",
|
|
166
165
|
hideOnClick: "toggle",
|
|
167
166
|
onClickOutside: (instance, event) => {
|
|
168
|
-
console.log("onClickOutside", { instance, event });
|
|
169
167
|
this.hide();
|
|
170
168
|
},
|
|
171
169
|
onAfterUpdate: (instance, partialProps) => {
|
|
172
|
-
console.log("onAfterUpdate", { instance, partialProps });
|
|
173
170
|
this.show();
|
|
174
171
|
},
|
|
175
172
|
});
|
|
@@ -205,11 +202,6 @@ class Tooltip {
|
|
|
205
202
|
}
|
|
206
203
|
}
|
|
207
204
|
|
|
208
|
-
var tippyHelper = /*#__PURE__*/Object.freeze({
|
|
209
|
-
__proto__: null,
|
|
210
|
-
default: Tooltip
|
|
211
|
-
});
|
|
212
|
-
|
|
213
205
|
function clickHandler(options) {
|
|
214
206
|
// Create the tooltip instance
|
|
215
207
|
let tooltip = new Tooltip(options);
|
|
@@ -222,11 +214,6 @@ function clickHandler(options) {
|
|
|
222
214
|
var _a, _b;
|
|
223
215
|
if (event.button !== 0)
|
|
224
216
|
return false;
|
|
225
|
-
console.log({
|
|
226
|
-
event,
|
|
227
|
-
button: event.button,
|
|
228
|
-
target: event.target,
|
|
229
|
-
});
|
|
230
217
|
// Get the target HTML element and its position
|
|
231
218
|
const nodeTarget = event.target;
|
|
232
219
|
const nodePos = view.posAtDOM(nodeTarget, 0);
|
|
@@ -251,6 +238,7 @@ function clickHandler(options) {
|
|
|
251
238
|
const hyperlinkPreview = options.modals.previewHyperlink({
|
|
252
239
|
link,
|
|
253
240
|
nodePos,
|
|
241
|
+
tippy: tooltip,
|
|
254
242
|
...options,
|
|
255
243
|
});
|
|
256
244
|
// If there is no hyperlink preview, hide the modal
|
|
@@ -298,15 +286,18 @@ function pasteHandler(options) {
|
|
|
298
286
|
}
|
|
299
287
|
|
|
300
288
|
function editHyperlink(options) {
|
|
301
|
-
var _a;
|
|
289
|
+
var _a, _b;
|
|
302
290
|
const { state, dispatch } = options.editor.view;
|
|
303
291
|
const { from, to } = state.selection;
|
|
304
292
|
let link = null;
|
|
305
|
-
const selectedNode = options.editor.view.domAtPos(from
|
|
306
|
-
|
|
307
|
-
if (
|
|
293
|
+
const selectedNode = options.editor.view.domAtPos(from).node;
|
|
294
|
+
const nodeName = selectedNode === null || selectedNode === void 0 ? void 0 : selectedNode.nodeName;
|
|
295
|
+
if (nodeName === "#text") {
|
|
308
296
|
link = (_a = selectedNode.parentNode) === null || _a === void 0 ? void 0 : _a.closest("a");
|
|
309
297
|
}
|
|
298
|
+
else if (nodeName === "P" && ((_b = selectedNode === null || selectedNode === void 0 ? void 0 : selectedNode.firstElementChild) === null || _b === void 0 ? void 0 : _b.localName) === "a") {
|
|
299
|
+
link = selectedNode === null || selectedNode === void 0 ? void 0 : selectedNode.firstElementChild;
|
|
300
|
+
}
|
|
310
301
|
else {
|
|
311
302
|
link = selectedNode === null || selectedNode === void 0 ? void 0 : selectedNode.closest("a");
|
|
312
303
|
}
|
|
@@ -323,9 +314,8 @@ function editHyperlink(options) {
|
|
|
323
314
|
.chain()
|
|
324
315
|
.focus()
|
|
325
316
|
.command(({ tr }) => {
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
tr.replaceWith(nodePos, nodePos + (text === null || text === void 0 ? void 0 : text.length), options.editor.schema.text(text, [
|
|
317
|
+
var _a;
|
|
318
|
+
tr.deleteRange(nodePos, nodePos + ((_a = ((link === null || link === void 0 ? void 0 : link.innerText) || "")) === null || _a === void 0 ? void 0 : _a.length)).replaceWith(nodePos, nodePos, options.editor.schema.text(text, [
|
|
329
319
|
options.editor.schema.marks.hyperlink.create({
|
|
330
320
|
href: sanitizeURL === null || sanitizeURL === void 0 ? void 0 : sanitizeURL.href,
|
|
331
321
|
}),
|
|
@@ -492,5 +482,5 @@ const Hyperlink = Mark.create({
|
|
|
492
482
|
},
|
|
493
483
|
});
|
|
494
484
|
|
|
495
|
-
export { Hyperlink,
|
|
485
|
+
export { Hyperlink, Tooltip, Hyperlink as default };
|
|
496
486
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/helpers/autoHyperlink.ts","../src/helpers/tippyHelper.ts","../src/helpers/clickHandler.ts","../src/helpers/pasteHandler.ts","../src/helpers/editHyperlink.ts","../src/hyperlink.ts"],"sourcesContent":["import {\n combineTransactionSteps,\n findChildrenInRange,\n getChangedRanges,\n getMarksBetween,\n NodeWithPos,\n} from \"@tiptap/core\";\nimport { MarkType } from \"@tiptap/pm/model\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { find, test } from \"linkifyjs\";\n\ntype AutoHyperlinkOptions = {\n type: MarkType;\n validate?: (url: string) => boolean;\n};\n\nexport default function autoHyperlink(options: AutoHyperlinkOptions): Plugin {\n return new Plugin({\n key: new PluginKey(\"autoHyperlink\"),\n appendTransaction: (transactions, oldState, newState) => {\n const docChanges =\n transactions.some((transaction) => transaction.docChanged) &&\n !oldState.doc.eq(newState.doc);\n const preventAutoHyperlink = transactions.some((transaction) =>\n transaction.getMeta(\"preventAutoHyperlink\")\n );\n\n if (!docChanges || preventAutoHyperlink) {\n return;\n }\n\n const { tr } = newState;\n const transform = combineTransactionSteps(oldState.doc, [\n ...transactions,\n ]);\n const { mapping } = transform;\n const changes = getChangedRanges(transform);\n\n changes.forEach(({ oldRange, newRange }) => {\n // at first we check if we have to remove links\n getMarksBetween(oldRange.from, oldRange.to, oldState.doc)\n .filter((item) => item.mark.type === options.type)\n .forEach((oldMark) => {\n const newFrom = mapping.map(oldMark.from);\n const newTo = mapping.map(oldMark.to);\n const newMarks = getMarksBetween(\n newFrom,\n newTo,\n newState.doc\n ).filter((item) => item.mark.type === options.type);\n\n if (!newMarks.length) {\n return;\n }\n\n const newMark = newMarks[0];\n const oldLinkText = oldState.doc.textBetween(\n oldMark.from,\n oldMark.to,\n undefined,\n \" \"\n );\n const newLinkText = newState.doc.textBetween(\n newMark.from,\n newMark.to,\n undefined,\n \" \"\n );\n const wasLink = test(oldLinkText);\n const isLink = test(newLinkText);\n\n // remove only the link, if it was a link before too\n // because we don’t want to remove links that were set manually\n if (wasLink && !isLink) {\n tr.removeMark(newMark.from, newMark.to, options.type);\n }\n });\n\n // now let’s see if we can add new links\n const nodesInChangedRanges = findChildrenInRange(\n newState.doc,\n newRange,\n (node) => node.isTextblock\n );\n\n let textBlock: NodeWithPos | undefined;\n let textBeforeWhitespace: string | undefined;\n\n if (nodesInChangedRanges.length > 1) {\n // Grab the first node within the changed ranges (ex. the first of two paragraphs when hitting enter)\n textBlock = nodesInChangedRanges[0];\n textBeforeWhitespace = newState.doc.textBetween(\n textBlock.pos,\n textBlock.pos + textBlock.node.nodeSize,\n undefined,\n \" \"\n );\n } else if (\n nodesInChangedRanges.length &&\n // We want to make sure to include the block seperator argument to treat hard breaks like spaces\n newState.doc\n .textBetween(newRange.from, newRange.to, \" \", \" \")\n .endsWith(\" \")\n ) {\n textBlock = nodesInChangedRanges[0];\n textBeforeWhitespace = newState.doc.textBetween(\n textBlock.pos,\n newRange.to,\n undefined,\n \" \"\n );\n }\n\n if (textBlock && textBeforeWhitespace) {\n const wordsBeforeWhitespace = textBeforeWhitespace\n .split(\" \")\n .filter((s) => s !== \"\");\n\n if (wordsBeforeWhitespace.length <= 0) {\n return false;\n }\n\n const lastWordBeforeSpace =\n wordsBeforeWhitespace[wordsBeforeWhitespace.length - 1];\n const lastWordAndBlockOffset =\n textBlock.pos +\n textBeforeWhitespace.lastIndexOf(lastWordBeforeSpace);\n\n if (!lastWordBeforeSpace) {\n return false;\n }\n\n find(lastWordBeforeSpace)\n .filter((link) => link.isLink)\n .filter((link) => {\n if (options.validate) {\n return options.validate(link.value);\n }\n return true;\n })\n // calculate link position\n .map((link) => ({\n ...link,\n from: lastWordAndBlockOffset + link.start + 1,\n to: lastWordAndBlockOffset + link.end + 1,\n }))\n // add link mark\n .forEach((link) => {\n tr.addMark(\n link.from,\n link.to,\n options.type.create({\n href: link.href,\n })\n );\n });\n }\n });\n\n if (!tr.steps.length) {\n return;\n }\n\n return tr;\n },\n });\n}\n","import tippy, { Instance, Props, roundArrow } from \"tippy.js\";\nimport { Editor } from \"@tiptap/core\";\nimport { EditorView } from \"@tiptap/pm/view\";\nimport { getAttributes, posToDOMRect } from \"@tiptap/core\";\n\ninterface TippyInitOptions {\n editor: Editor;\n validate?: (url: string) => boolean;\n view: EditorView;\n}\n\nclass Tooltip {\n private tippyInstance?: Instance;\n private preventHide: boolean = false;\n private tippyWrapper: HTMLDivElement;\n private editor: Editor;\n private view: EditorView;\n\n constructor(options: TippyInitOptions) {\n this.editor = options.editor;\n this.view = options.view;\n this.tippyWrapper = document.createElement(\"div\");\n this.tippyWrapper.addEventListener(\"mousedown\", this.mousedownHandler, {\n capture: true,\n });\n this.view.dom.addEventListener(\"dragstart\", this.dragstartHandler);\n this.editor.on(\"blur\", this.blurHandler);\n }\n\n init() {\n this.tippyWrapper.innerHTML = \"\";\n\n return { tippyModal: this.tippyWrapper, tippyInstance: this.tippyInstance };\n }\n\n show() {\n this.tippyInstance?.show();\n return true;\n }\n\n hide() {\n setTimeout(() => this.tippyInstance?.hide());\n return false;\n }\n\n private mousedownHandler = () => {\n this.preventHide = true;\n };\n\n private dragstartHandler = () => {\n this.hide();\n };\n\n private blurHandler = ({ event }: { event: FocusEvent }) => {\n console.log(\"blurHandler\", { event });\n if (this.preventHide) {\n this.preventHide = false;\n return;\n }\n if (\n event?.relatedTarget &&\n this.tippyWrapper.parentNode?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n this.hide();\n };\n\n private tippyBlurHandler = (event: FocusEvent) => {\n this.blurHandler({ event });\n };\n\n private createTooltip() {\n if (!this.editor || !this.editor.options) return;\n const { element: editorElement } = this.editor.options;\n const editorIsAttached = !!editorElement.parentElement;\n\n if (this.tippyInstance || !editorIsAttached) {\n return;\n }\n\n this.tippyInstance = tippy(editorElement, {\n duration: 0,\n getReferenceClientRect: null,\n content: this.tippyWrapper,\n interactive: true,\n trigger: \"manual\",\n placement: \"bottom\",\n hideOnClick: \"toggle\",\n onClickOutside: (instance, event) => {\n console.log(\"onClickOutside\", { instance, event });\n this.hide();\n },\n onAfterUpdate: (instance, partialProps) => {\n console.log(\"onAfterUpdate\", { instance, partialProps });\n this.show();\n },\n });\n\n if (this.tippyInstance.popper.firstChild) {\n (this.tippyInstance.popper.firstChild as HTMLElement).addEventListener(\n \"blur\",\n this.tippyBlurHandler\n );\n }\n }\n\n update(view: EditorView, option: any = {}) {\n this.createTooltip();\n\n option.arrow = option?.arrow ?? false;\n\n if (this.tippyInstance) {\n this.tippyInstance.setProps({\n ...option,\n getReferenceClientRect: () => {\n const pos = view.state.selection.from;\n return posToDOMRect(view, pos, pos);\n },\n });\n }\n\n return {};\n }\n\n destroyTooltip() {\n if (this.tippyInstance) {\n this.tippyInstance.destroy();\n this.tippyInstance = undefined;\n this.tippyWrapper.removeEventListener(\"mousedown\", this.mousedownHandler, {\n capture: true,\n });\n this.view.dom.removeEventListener(\"dragstart\", this.dragstartHandler);\n this.editor.off(\"blur\", this.blurHandler);\n }\n }\n}\n\nexport default Tooltip;\n","import { getAttributes } from \"@tiptap/core\";\nimport { MarkType } from \"@tiptap/pm/model\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { Editor } from \"@tiptap/core\";\nimport { EditorView } from \"@tiptap/pm/view\";\nimport Tooltip from \"./tippyHelper\";\n\n// Define type for the ClickHandlerOptions\ntype ClickHandlerOptions = {\n type: MarkType;\n editor: Editor;\n validate?: (url: string) => boolean;\n view: EditorView;\n modals: {\n previewHyperlink?: ((options: any) => HTMLElement) | null;\n setHyperlink?: ((options: any) => HTMLElement) | null;\n };\n};\n\nexport default function clickHandler(options: ClickHandlerOptions): Plugin {\n // Create the tooltip instance\n let tooltip = new Tooltip(options);\n\n // Initialize the tooltip\n let { tippyModal, tippyInstance } = tooltip.init();\n\n return new Plugin({\n key: new PluginKey(\"handleClickHyperlink\"),\n props: {\n handleClick: (view, pos, event) => {\n if (event.button !== 0) return false;\n\n console.log({\n event,\n button: event.button,\n target: event.target,\n });\n\n // Get the target HTML element and its position\n const nodeTarget: HTMLElement = event.target as HTMLElement;\n const nodePos = view.posAtDOM(nodeTarget, 0);\n\n // Find the closest link element to the target element\n const link = nodeTarget?.closest(\"a\");\n\n // Extract attributes from the state\n const attrs = getAttributes(view.state, options.type.name);\n\n // Extract href and target attributes from the link element or the state\n const href = link?.href ?? attrs.href;\n const target = link?.target ?? attrs.target;\n\n // If there is no previewHyperlink modal provided, then open the link in new window\n if (!options.modals.previewHyperlink) {\n if (link && href) {\n window.open(href, target);\n }\n return true;\n }\n\n // if the link does not contain href attribute, hide the tooltip\n if (!link?.href) return tooltip.hide();\n\n // Create a preview of the hyperlink\n const hyperlinkPreview = options.modals.previewHyperlink({\n link,\n nodePos,\n ...options,\n });\n\n // If there is no hyperlink preview, hide the modal\n if (!hyperlinkPreview) return tooltip.hide();\n\n // Empty the modal and append the hyperlink preview box\n\n while (tippyModal.firstChild) {\n tippyModal.removeChild(tippyModal.firstChild);\n }\n\n tippyModal.append(hyperlinkPreview);\n\n // Update the modal position\n tooltip.update(options.view);\n\n return false;\n },\n },\n });\n}\n","import { Editor } from \"@tiptap/core\";\nimport { MarkType } from \"@tiptap/pm/model\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { find } from \"linkifyjs\";\n\ntype PasteHandlerOptions = {\n editor: Editor;\n type: MarkType;\n};\n\nexport function pasteHandler(options: PasteHandlerOptions): Plugin {\n return new Plugin({\n key: new PluginKey(\"handlePasteHyperlink\"),\n props: {\n handlePaste: (view, event, slice) => {\n const { state } = view;\n const { selection } = state;\n const { empty } = selection;\n\n if (empty) {\n return false;\n }\n\n let textContent = \"\";\n\n slice.content.forEach((node) => {\n textContent += node.textContent;\n });\n\n const link = find(textContent).find(\n (item) => item.isLink && item.value === textContent\n );\n\n if (!textContent || !link) {\n return false;\n }\n\n options.editor.commands.setMark(options.type, {\n href: link.href,\n });\n\n return true;\n },\n },\n });\n}\n","import { Editor } from \"@tiptap/core\";\nimport { find } from \"linkifyjs\";\n\ntype EditHyperlinkOptions = {\n editor: Editor;\n validate?: (url: string) => boolean;\n newURL?: string;\n newText?: string;\n};\n\nexport default function editHyperlink(options: EditHyperlinkOptions) {\n const { state, dispatch } = options.editor.view;\n const { from, to } = state.selection;\n let link: HTMLAnchorElement | null = null;\n\n const selectedNode = options.editor.view.domAtPos(from - 1)\n .node as HTMLElement;\n\n if (selectedNode?.nodeName === \"#text\") {\n link = (selectedNode.parentNode as HTMLElement)?.closest(\"a\");\n } else {\n link = selectedNode?.closest(\"a\");\n }\n\n if (!link) return true;\n\n const text = options.newText || link?.innerText;\n // Get the position of the link in the editor view\n const nodePos = options.editor.view.posAtDOM(link, 0);\n\n const sanitizeURL = find(options.newURL || link.href)\n .filter((link) => link.isLink)\n .filter((link) => (options.validate ? options.validate(link.value) : true))\n .at(0);\n\n return options.editor\n .chain()\n .focus()\n .command(({ tr }) => {\n // The command replaces the range from nodePos to nodePos + length of the text\n // with a new text node with the provided text and a link mark with the sanitized URL\n tr.replaceWith(\n nodePos,\n nodePos + text?.length,\n options.editor.schema.text(text, [\n options.editor.schema.marks.hyperlink.create({\n href: sanitizeURL?.href,\n }),\n ])\n );\n\n return true;\n })\n .run();\n}\n","import { Mark, markPasteRule, mergeAttributes } from \"@tiptap/core\";\nimport { Plugin } from \"@tiptap/pm/state\";\nimport { find, registerCustomProtocol, reset } from \"linkifyjs\";\nimport autoHyperlink from \"./helpers/autoHyperlink\";\nimport clickHandler from \"./helpers/clickHandler\";\nimport { pasteHandler } from \"./helpers/pasteHandler\";\nimport editHyperlinkHelper from \"./helpers/editHyperlink\";\n\nexport interface LinkProtocolOptions {\n scheme: string;\n optionalSlashes?: boolean;\n}\n\nexport interface HyperlinkOptions {\n /**\n * If enabled, it adds links as you type.\n */\n autoHyperlink: boolean;\n /**\n * An array of custom protocols to be registered with linkifyjs.\n */\n protocols: Array<LinkProtocolOptions | string>;\n /**\n * If enabled, links will be opened on click.\n */\n openOnClick: boolean;\n /**\n * Adds a link to the current selection if the pasted content only contains an url.\n */\n hyperlinkOnPaste: boolean;\n /**\n * A list of HTML attributes to be rendered.\n */\n HTMLAttributes: Record<string, any>;\n /**\n * A list of modals to be rendered.\n * @default null\n * @example\n */\n modals: {\n previewHyperlink?: ((options: any) => HTMLElement) | null;\n setHyperlink?: ((options: any) => HTMLElement) | null;\n };\n /**\n * A validation function that modifies link verification for the auto linker.\n * @param url - The url to be validated.\n * @returns - True if the url is valid, false otherwise.\n */\n validate?: (url: string) => boolean;\n}\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n link: {\n /**\n * Edit the hyperlink's text\n */\n editHyperLinkText: (text: string) => ReturnType;\n\n /**\n * Edit the hyperlink's href value\n */\n editHyperLinkHref: (href: string) => ReturnType;\n\n /**\n * Edit the hyperlink's\n */\n editHyperlink: (attributes?: { newText?: string; newURL?: string }) => ReturnType;\n\n /**\n * Set a hyperlink\n */\n setHyperlink: (attributes?: { href: string; target?: string | null }) => ReturnType;\n\n /**\n * Unset a link mark\n */\n unsetHyperlink: () => ReturnType;\n };\n }\n}\n\nexport const Hyperlink = Mark.create<HyperlinkOptions>({\n name: \"hyperlink\",\n\n priority: 1000,\n\n keepOnSplit: false,\n\n onCreate() {\n this.options.protocols.forEach((protocol) => {\n if (typeof protocol === \"string\") {\n registerCustomProtocol(protocol);\n return;\n }\n registerCustomProtocol(protocol.scheme, protocol.optionalSlashes);\n });\n },\n\n onDestroy() {\n reset();\n },\n\n inclusive() {\n return this.options.autoHyperlink;\n },\n\n addOptions() {\n return {\n openOnClick: true,\n hyperlinkOnPaste: true,\n autoHyperlink: true,\n protocols: [],\n HTMLAttributes: {\n target: \"_blank\",\n rel: \"noopener noreferrer nofollow\",\n class: null,\n },\n modals: {\n previewHyperlink: null,\n setHyperlink: null,\n },\n validate: undefined,\n };\n },\n\n addAttributes() {\n return {\n href: {\n default: null,\n },\n target: {\n default: this.options.HTMLAttributes.target,\n },\n class: {\n default: this.options.HTMLAttributes.class,\n },\n };\n },\n\n parseHTML() {\n return [{ tag: 'a[href]:not([href *= \"javascript:\" i])' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\"a\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n\n addCommands() {\n return {\n setHyperlink:\n (attributes) =>\n ({ editor, chain }) => {\n if (!this.options.modals.setHyperlink) {\n return chain()\n .setMark(this.name, attributes)\n .setMeta(\"preventAutohyperlink\", true)\n .run();\n } else {\n this.options.modals.setHyperlink({\n editor,\n validate: this.options.validate,\n extentionName: this.name,\n attributes,\n });\n return true;\n }\n },\n\n editHyperlink:\n (attributes) =>\n ({ editor }) => {\n return editHyperlinkHelper({\n ...attributes,\n editor,\n validate: this.options.validate,\n });\n },\n\n editHyperLinkText:\n (newText) =>\n ({ editor }) => {\n return editHyperlinkHelper({\n editor,\n newText,\n validate: this.options.validate,\n });\n },\n\n editHyperLinkHref:\n (newURL) =>\n ({ editor }) => {\n return editHyperlinkHelper({\n editor,\n validate: this.options.validate,\n newURL,\n });\n },\n\n unsetHyperlink:\n () =>\n ({ chain }) => {\n return chain()\n .unsetMark(this.name, { extendEmptyMarkRange: true })\n .setMeta(\"preventAutohyperlink\", true)\n .run();\n },\n };\n },\n\n addPasteRules() {\n return [\n markPasteRule({\n find: (text) =>\n find(text)\n .filter((link) => {\n if (this.options.validate) {\n return this.options.validate(link.value);\n }\n\n return true;\n })\n .filter((link) => link.isLink)\n .map((link) => ({\n text: link.value,\n index: link.start,\n data: link,\n })),\n type: this.type,\n getAttributes: (match) => ({\n href: match.data?.href,\n }),\n }),\n ];\n },\n\n addProseMirrorPlugins() {\n const plugins: Plugin[] = [];\n\n if (this.options.autoHyperlink) {\n plugins.push(\n autoHyperlink({\n type: this.type,\n validate: this.options.validate,\n })\n );\n }\n\n if (this.options.openOnClick) {\n plugins.push(\n clickHandler({\n type: this.type,\n editor: this.editor,\n validate: this.options.validate,\n view: this.editor.view,\n modals: this.options.modals,\n })\n );\n }\n\n if (this.options.hyperlinkOnPaste) {\n plugins.push(\n pasteHandler({\n editor: this.editor,\n type: this.type,\n })\n );\n }\n\n return plugins;\n },\n});\n"],"names":["editHyperlinkHelper"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/helpers/autoHyperlink.ts","../src/helpers/tippyHelper.ts","../src/helpers/clickHandler.ts","../src/helpers/pasteHandler.ts","../src/helpers/editHyperlink.ts","../src/hyperlink.ts"],"sourcesContent":["import {\n combineTransactionSteps,\n findChildrenInRange,\n getChangedRanges,\n getMarksBetween,\n NodeWithPos,\n} from \"@tiptap/core\";\nimport { MarkType } from \"@tiptap/pm/model\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { find, test } from \"linkifyjs\";\n\ntype AutoHyperlinkOptions = {\n type: MarkType;\n validate?: (url: string) => boolean;\n};\n\nexport default function autoHyperlink(options: AutoHyperlinkOptions): Plugin {\n return new Plugin({\n key: new PluginKey(\"autoHyperlink\"),\n appendTransaction: (transactions, oldState, newState) => {\n const docChanges =\n transactions.some((transaction) => transaction.docChanged) &&\n !oldState.doc.eq(newState.doc);\n const preventAutoHyperlink = transactions.some((transaction) =>\n transaction.getMeta(\"preventAutoHyperlink\")\n );\n\n if (!docChanges || preventAutoHyperlink) {\n return;\n }\n\n const { tr } = newState;\n const transform = combineTransactionSteps(oldState.doc, [\n ...transactions,\n ]);\n const { mapping } = transform;\n const changes = getChangedRanges(transform);\n\n changes.forEach(({ oldRange, newRange }) => {\n // at first we check if we have to remove links\n getMarksBetween(oldRange.from, oldRange.to, oldState.doc)\n .filter((item) => item.mark.type === options.type)\n .forEach((oldMark) => {\n const newFrom = mapping.map(oldMark.from);\n const newTo = mapping.map(oldMark.to);\n const newMarks = getMarksBetween(\n newFrom,\n newTo,\n newState.doc\n ).filter((item) => item.mark.type === options.type);\n\n if (!newMarks.length) {\n return;\n }\n\n const newMark = newMarks[0];\n const oldLinkText = oldState.doc.textBetween(\n oldMark.from,\n oldMark.to,\n undefined,\n \" \"\n );\n const newLinkText = newState.doc.textBetween(\n newMark.from,\n newMark.to,\n undefined,\n \" \"\n );\n const wasLink = test(oldLinkText);\n const isLink = test(newLinkText);\n\n // remove only the link, if it was a link before too\n // because we don’t want to remove links that were set manually\n if (wasLink && !isLink) {\n tr.removeMark(newMark.from, newMark.to, options.type);\n }\n });\n\n // now let’s see if we can add new links\n const nodesInChangedRanges = findChildrenInRange(\n newState.doc,\n newRange,\n (node) => node.isTextblock\n );\n\n let textBlock: NodeWithPos | undefined;\n let textBeforeWhitespace: string | undefined;\n\n if (nodesInChangedRanges.length > 1) {\n // Grab the first node within the changed ranges (ex. the first of two paragraphs when hitting enter)\n textBlock = nodesInChangedRanges[0];\n textBeforeWhitespace = newState.doc.textBetween(\n textBlock.pos,\n textBlock.pos + textBlock.node.nodeSize,\n undefined,\n \" \"\n );\n } else if (\n nodesInChangedRanges.length &&\n // We want to make sure to include the block seperator argument to treat hard breaks like spaces\n newState.doc\n .textBetween(newRange.from, newRange.to, \" \", \" \")\n .endsWith(\" \")\n ) {\n textBlock = nodesInChangedRanges[0];\n textBeforeWhitespace = newState.doc.textBetween(\n textBlock.pos,\n newRange.to,\n undefined,\n \" \"\n );\n }\n\n if (textBlock && textBeforeWhitespace) {\n const wordsBeforeWhitespace = textBeforeWhitespace\n .split(\" \")\n .filter((s) => s !== \"\");\n\n if (wordsBeforeWhitespace.length <= 0) {\n return false;\n }\n\n const lastWordBeforeSpace =\n wordsBeforeWhitespace[wordsBeforeWhitespace.length - 1];\n const lastWordAndBlockOffset =\n textBlock.pos +\n textBeforeWhitespace.lastIndexOf(lastWordBeforeSpace);\n\n if (!lastWordBeforeSpace) {\n return false;\n }\n\n find(lastWordBeforeSpace)\n .filter((link) => link.isLink)\n .filter((link) => {\n if (options.validate) {\n return options.validate(link.value);\n }\n return true;\n })\n // calculate link position\n .map((link) => ({\n ...link,\n from: lastWordAndBlockOffset + link.start + 1,\n to: lastWordAndBlockOffset + link.end + 1,\n }))\n // add link mark\n .forEach((link) => {\n tr.addMark(\n link.from,\n link.to,\n options.type.create({\n href: link.href,\n })\n );\n });\n }\n });\n\n if (!tr.steps.length) {\n return;\n }\n\n return tr;\n },\n });\n}\n","import tippy, { Instance, Props, roundArrow } from \"tippy.js\";\nimport { Editor } from \"@tiptap/core\";\nimport { EditorView } from \"@tiptap/pm/view\";\nimport { getAttributes, posToDOMRect } from \"@tiptap/core\";\n\ninterface TippyInitOptions {\n editor: Editor;\n validate?: (url: string) => boolean;\n view: EditorView;\n}\n\nclass Tooltip {\n private tippyInstance?: Instance;\n private preventHide: boolean = false;\n private tippyWrapper: HTMLDivElement;\n private editor: Editor;\n private view: EditorView;\n\n constructor(options: TippyInitOptions) {\n this.editor = options.editor;\n this.view = options.view;\n this.tippyWrapper = document.createElement(\"div\");\n this.tippyWrapper.addEventListener(\"mousedown\", this.mousedownHandler, {\n capture: true,\n });\n this.view.dom.addEventListener(\"dragstart\", this.dragstartHandler);\n this.editor.on(\"blur\", this.blurHandler);\n }\n\n init() {\n this.tippyWrapper.innerHTML = \"\";\n\n return { tippyModal: this.tippyWrapper, tippyInstance: this.tippyInstance };\n }\n\n show() {\n this.tippyInstance?.show();\n return true;\n }\n\n hide() {\n setTimeout(() => this.tippyInstance?.hide());\n return false;\n }\n\n private mousedownHandler = () => {\n this.preventHide = true;\n };\n\n private dragstartHandler = () => {\n this.hide();\n };\n\n private blurHandler = ({ event }: { event: FocusEvent }) => {\n if (this.preventHide) {\n this.preventHide = false;\n return;\n }\n if (\n event?.relatedTarget &&\n this.tippyWrapper.parentNode?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n this.hide();\n };\n\n private tippyBlurHandler = (event: FocusEvent) => {\n this.blurHandler({ event });\n };\n\n private createTooltip() {\n if (!this.editor || !this.editor.options) return;\n const { element: editorElement } = this.editor.options;\n const editorIsAttached = !!editorElement.parentElement;\n\n if (this.tippyInstance || !editorIsAttached) {\n return;\n }\n\n this.tippyInstance = tippy(editorElement, {\n duration: 0,\n getReferenceClientRect: null,\n content: this.tippyWrapper,\n interactive: true,\n trigger: \"manual\",\n placement: \"bottom\",\n hideOnClick: \"toggle\",\n onClickOutside: (instance, event) => {\n this.hide();\n },\n onAfterUpdate: (instance, partialProps) => {\n this.show();\n },\n });\n\n if (this.tippyInstance.popper.firstChild) {\n (this.tippyInstance.popper.firstChild as HTMLElement).addEventListener(\n \"blur\",\n this.tippyBlurHandler\n );\n }\n }\n\n update(view: EditorView, option: any = {}) {\n this.createTooltip();\n\n option.arrow = option?.arrow ?? false;\n\n if (this.tippyInstance) {\n this.tippyInstance.setProps({\n ...option,\n getReferenceClientRect: () => {\n const pos = view.state.selection.from;\n return posToDOMRect(view, pos, pos);\n },\n });\n }\n\n return {};\n }\n\n destroyTooltip() {\n if (this.tippyInstance) {\n this.tippyInstance.destroy();\n this.tippyInstance = undefined;\n this.tippyWrapper.removeEventListener(\"mousedown\", this.mousedownHandler, {\n capture: true,\n });\n this.view.dom.removeEventListener(\"dragstart\", this.dragstartHandler);\n this.editor.off(\"blur\", this.blurHandler);\n }\n }\n}\n\nexport default Tooltip;\n","import { getAttributes } from \"@tiptap/core\";\nimport { MarkType } from \"@tiptap/pm/model\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { Editor } from \"@tiptap/core\";\nimport { EditorView } from \"@tiptap/pm/view\";\nimport Tooltip from \"./tippyHelper\";\n\n// Define type for the ClickHandlerOptions\ntype ClickHandlerOptions = {\n type: MarkType;\n editor: Editor;\n validate?: (url: string) => boolean;\n view: EditorView;\n modals: {\n previewHyperlink?: ((options: any) => HTMLElement) | null;\n setHyperlink?: ((options: any) => HTMLElement) | null;\n };\n};\n\nexport default function clickHandler(options: ClickHandlerOptions): Plugin {\n // Create the tooltip instance\n let tooltip = new Tooltip(options);\n\n // Initialize the tooltip\n let { tippyModal, tippyInstance } = tooltip.init();\n\n return new Plugin({\n key: new PluginKey(\"handleClickHyperlink\"),\n props: {\n handleClick: (view, pos, event) => {\n if (event.button !== 0) return false;\n\n // Get the target HTML element and its position\n const nodeTarget: HTMLElement = event.target as HTMLElement;\n const nodePos = view.posAtDOM(nodeTarget, 0);\n\n // Find the closest link element to the target element\n const link = nodeTarget?.closest(\"a\");\n\n // Extract attributes from the state\n const attrs = getAttributes(view.state, options.type.name);\n\n // Extract href and target attributes from the link element or the state\n const href = link?.href ?? attrs.href;\n const target = link?.target ?? attrs.target;\n\n // If there is no previewHyperlink modal provided, then open the link in new window\n if (!options.modals.previewHyperlink) {\n if (link && href) {\n window.open(href, target);\n }\n return true;\n }\n\n // if the link does not contain href attribute, hide the tooltip\n if (!link?.href) return tooltip.hide();\n\n // Create a preview of the hyperlink\n const hyperlinkPreview = options.modals.previewHyperlink({\n link,\n nodePos,\n tippy: tooltip,\n ...options,\n });\n\n // If there is no hyperlink preview, hide the modal\n if (!hyperlinkPreview) return tooltip.hide();\n\n // Empty the modal and append the hyperlink preview box\n\n while (tippyModal.firstChild) {\n tippyModal.removeChild(tippyModal.firstChild);\n }\n\n tippyModal.append(hyperlinkPreview);\n\n // Update the modal position\n tooltip.update(options.view);\n\n return false;\n },\n },\n });\n}\n","import { Editor } from \"@tiptap/core\";\nimport { MarkType } from \"@tiptap/pm/model\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { find } from \"linkifyjs\";\n\ntype PasteHandlerOptions = {\n editor: Editor;\n type: MarkType;\n};\n\nexport function pasteHandler(options: PasteHandlerOptions): Plugin {\n return new Plugin({\n key: new PluginKey(\"handlePasteHyperlink\"),\n props: {\n handlePaste: (view, event, slice) => {\n const { state } = view;\n const { selection } = state;\n const { empty } = selection;\n\n if (empty) {\n return false;\n }\n\n let textContent = \"\";\n\n slice.content.forEach((node) => {\n textContent += node.textContent;\n });\n\n const link = find(textContent).find(\n (item) => item.isLink && item.value === textContent\n );\n\n if (!textContent || !link) {\n return false;\n }\n\n options.editor.commands.setMark(options.type, {\n href: link.href,\n });\n\n return true;\n },\n },\n });\n}\n","import { Editor } from \"@tiptap/core\";\nimport { find } from \"linkifyjs\";\n\ntype EditHyperlinkOptions = {\n editor: Editor;\n validate?: (url: string) => boolean;\n newURL?: string;\n newText?: string;\n};\n\nexport default function editHyperlink(options: EditHyperlinkOptions) {\n const { state, dispatch } = options.editor.view;\n const { from, to } = state.selection;\n let link: HTMLAnchorElement | null = null;\n\n const selectedNode = options.editor.view.domAtPos(from).node as HTMLElement;\n const nodeName = selectedNode?.nodeName;\n\n if (nodeName === \"#text\") {\n link = (selectedNode.parentNode as HTMLElement)?.closest(\"a\");\n } else if (nodeName === \"P\" && selectedNode?.firstElementChild?.localName === \"a\") {\n link = selectedNode?.firstElementChild as HTMLAnchorElement;\n } else {\n link = selectedNode?.closest(\"a\");\n }\n\n if (!link) return true;\n\n const text = options.newText || link?.innerText;\n // Get the position of the link in the editor view\n const nodePos = options.editor.view.posAtDOM(link, 0);\n\n const sanitizeURL = find(options.newURL || link.href)\n .filter((link) => link.isLink)\n .filter((link) => (options.validate ? options.validate(link.value) : true))\n .at(0);\n\n return options.editor\n .chain()\n .focus()\n .command(({ tr }) => {\n tr.deleteRange(nodePos, nodePos + (link?.innerText || \"\")?.length).replaceWith(\n nodePos,\n nodePos,\n options.editor.schema.text(text, [\n options.editor.schema.marks.hyperlink.create({\n href: sanitizeURL?.href,\n }),\n ])\n );\n\n return true;\n })\n .run();\n}\n","import { Mark, markPasteRule, mergeAttributes } from \"@tiptap/core\";\nimport { Plugin } from \"@tiptap/pm/state\";\nimport { find, registerCustomProtocol, reset } from \"linkifyjs\";\nimport autoHyperlink from \"./helpers/autoHyperlink\";\nimport clickHandler from \"./helpers/clickHandler\";\nimport { pasteHandler } from \"./helpers/pasteHandler\";\nimport editHyperlinkHelper from \"./helpers/editHyperlink\";\n\nexport interface LinkProtocolOptions {\n scheme: string;\n optionalSlashes?: boolean;\n}\n\nexport interface HyperlinkOptions {\n /**\n * If enabled, it adds links as you type.\n */\n autoHyperlink: boolean;\n /**\n * An array of custom protocols to be registered with linkifyjs.\n */\n protocols: Array<LinkProtocolOptions | string>;\n /**\n * If enabled, links will be opened on click.\n */\n openOnClick: boolean;\n /**\n * Adds a link to the current selection if the pasted content only contains an url.\n */\n hyperlinkOnPaste: boolean;\n /**\n * A list of HTML attributes to be rendered.\n */\n HTMLAttributes: Record<string, any>;\n /**\n * A list of modals to be rendered.\n * @default null\n * @example\n */\n modals: {\n previewHyperlink?: ((options: any) => HTMLElement) | null;\n setHyperlink?: ((options: any) => HTMLElement) | null;\n };\n /**\n * A validation function that modifies link verification for the auto linker.\n * @param url - The url to be validated.\n * @returns - True if the url is valid, false otherwise.\n */\n validate?: (url: string) => boolean;\n}\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n link: {\n /**\n * Edit the hyperlink's text\n */\n editHyperLinkText: (text: string) => ReturnType;\n\n /**\n * Edit the hyperlink's href value\n */\n editHyperLinkHref: (href: string) => ReturnType;\n\n /**\n * Edit the hyperlink's\n */\n editHyperlink: (attributes?: { newText?: string; newURL?: string }) => ReturnType;\n\n /**\n * Set a hyperlink\n */\n setHyperlink: (attributes?: { href: string; target?: string | null }) => ReturnType;\n\n /**\n * Unset a link mark\n */\n unsetHyperlink: () => ReturnType;\n };\n }\n}\n\nexport const Hyperlink = Mark.create<HyperlinkOptions>({\n name: \"hyperlink\",\n\n priority: 1000,\n\n keepOnSplit: false,\n\n onCreate() {\n this.options.protocols.forEach((protocol) => {\n if (typeof protocol === \"string\") {\n registerCustomProtocol(protocol);\n return;\n }\n registerCustomProtocol(protocol.scheme, protocol.optionalSlashes);\n });\n },\n\n onDestroy() {\n reset();\n },\n\n inclusive() {\n return this.options.autoHyperlink;\n },\n\n addOptions() {\n return {\n openOnClick: true,\n hyperlinkOnPaste: true,\n autoHyperlink: true,\n protocols: [],\n HTMLAttributes: {\n target: \"_blank\",\n rel: \"noopener noreferrer nofollow\",\n class: null,\n },\n modals: {\n previewHyperlink: null,\n setHyperlink: null,\n },\n validate: undefined,\n };\n },\n\n addAttributes() {\n return {\n href: {\n default: null,\n },\n target: {\n default: this.options.HTMLAttributes.target,\n },\n class: {\n default: this.options.HTMLAttributes.class,\n },\n };\n },\n\n parseHTML() {\n return [{ tag: 'a[href]:not([href *= \"javascript:\" i])' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\"a\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n\n addCommands() {\n return {\n setHyperlink:\n (attributes) =>\n ({ editor, chain }) => {\n if (!this.options.modals.setHyperlink) {\n return chain()\n .setMark(this.name, attributes)\n .setMeta(\"preventAutohyperlink\", true)\n .run();\n } else {\n this.options.modals.setHyperlink({\n editor,\n validate: this.options.validate,\n extentionName: this.name,\n attributes,\n });\n return true;\n }\n },\n\n editHyperlink:\n (attributes) =>\n ({ editor }) => {\n return editHyperlinkHelper({\n ...attributes,\n editor,\n validate: this.options.validate,\n });\n },\n\n editHyperLinkText:\n (newText) =>\n ({ editor }) => {\n return editHyperlinkHelper({\n editor,\n newText,\n validate: this.options.validate,\n });\n },\n\n editHyperLinkHref:\n (newURL) =>\n ({ editor }) => {\n return editHyperlinkHelper({\n editor,\n validate: this.options.validate,\n newURL,\n });\n },\n\n unsetHyperlink:\n () =>\n ({ chain }) => {\n return chain()\n .unsetMark(this.name, { extendEmptyMarkRange: true })\n .setMeta(\"preventAutohyperlink\", true)\n .run();\n },\n };\n },\n\n addPasteRules() {\n return [\n markPasteRule({\n find: (text) =>\n find(text)\n .filter((link) => {\n if (this.options.validate) {\n return this.options.validate(link.value);\n }\n\n return true;\n })\n .filter((link) => link.isLink)\n .map((link) => ({\n text: link.value,\n index: link.start,\n data: link,\n })),\n type: this.type,\n getAttributes: (match) => ({\n href: match.data?.href,\n }),\n }),\n ];\n },\n\n addProseMirrorPlugins() {\n const plugins: Plugin[] = [];\n\n if (this.options.autoHyperlink) {\n plugins.push(\n autoHyperlink({\n type: this.type,\n validate: this.options.validate,\n })\n );\n }\n\n if (this.options.openOnClick) {\n plugins.push(\n clickHandler({\n type: this.type,\n editor: this.editor,\n validate: this.options.validate,\n view: this.editor.view,\n modals: this.options.modals,\n })\n );\n }\n\n if (this.options.hyperlinkOnPaste) {\n plugins.push(\n pasteHandler({\n editor: this.editor,\n type: this.type,\n })\n );\n }\n\n return plugins;\n },\n});\n"],"names":["editHyperlinkHelper"],"mappings":"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"}
|
package/dist/index.umd.js
CHANGED
|
@@ -113,7 +113,6 @@
|
|
|
113
113
|
};
|
|
114
114
|
this.blurHandler = ({ event }) => {
|
|
115
115
|
var _a;
|
|
116
|
-
console.log("blurHandler", { event });
|
|
117
116
|
if (this.preventHide) {
|
|
118
117
|
this.preventHide = false;
|
|
119
118
|
return;
|
|
@@ -166,11 +165,9 @@
|
|
|
166
165
|
placement: "bottom",
|
|
167
166
|
hideOnClick: "toggle",
|
|
168
167
|
onClickOutside: (instance, event) => {
|
|
169
|
-
console.log("onClickOutside", { instance, event });
|
|
170
168
|
this.hide();
|
|
171
169
|
},
|
|
172
170
|
onAfterUpdate: (instance, partialProps) => {
|
|
173
|
-
console.log("onAfterUpdate", { instance, partialProps });
|
|
174
171
|
this.show();
|
|
175
172
|
},
|
|
176
173
|
});
|
|
@@ -206,11 +203,6 @@
|
|
|
206
203
|
}
|
|
207
204
|
}
|
|
208
205
|
|
|
209
|
-
var tippyHelper = /*#__PURE__*/Object.freeze({
|
|
210
|
-
__proto__: null,
|
|
211
|
-
default: Tooltip
|
|
212
|
-
});
|
|
213
|
-
|
|
214
206
|
function clickHandler(options) {
|
|
215
207
|
// Create the tooltip instance
|
|
216
208
|
let tooltip = new Tooltip(options);
|
|
@@ -223,11 +215,6 @@
|
|
|
223
215
|
var _a, _b;
|
|
224
216
|
if (event.button !== 0)
|
|
225
217
|
return false;
|
|
226
|
-
console.log({
|
|
227
|
-
event,
|
|
228
|
-
button: event.button,
|
|
229
|
-
target: event.target,
|
|
230
|
-
});
|
|
231
218
|
// Get the target HTML element and its position
|
|
232
219
|
const nodeTarget = event.target;
|
|
233
220
|
const nodePos = view.posAtDOM(nodeTarget, 0);
|
|
@@ -252,6 +239,7 @@
|
|
|
252
239
|
const hyperlinkPreview = options.modals.previewHyperlink({
|
|
253
240
|
link,
|
|
254
241
|
nodePos,
|
|
242
|
+
tippy: tooltip,
|
|
255
243
|
...options,
|
|
256
244
|
});
|
|
257
245
|
// If there is no hyperlink preview, hide the modal
|
|
@@ -299,15 +287,18 @@
|
|
|
299
287
|
}
|
|
300
288
|
|
|
301
289
|
function editHyperlink(options) {
|
|
302
|
-
var _a;
|
|
290
|
+
var _a, _b;
|
|
303
291
|
const { state, dispatch } = options.editor.view;
|
|
304
292
|
const { from, to } = state.selection;
|
|
305
293
|
let link = null;
|
|
306
|
-
const selectedNode = options.editor.view.domAtPos(from
|
|
307
|
-
|
|
308
|
-
if (
|
|
294
|
+
const selectedNode = options.editor.view.domAtPos(from).node;
|
|
295
|
+
const nodeName = selectedNode === null || selectedNode === void 0 ? void 0 : selectedNode.nodeName;
|
|
296
|
+
if (nodeName === "#text") {
|
|
309
297
|
link = (_a = selectedNode.parentNode) === null || _a === void 0 ? void 0 : _a.closest("a");
|
|
310
298
|
}
|
|
299
|
+
else if (nodeName === "P" && ((_b = selectedNode === null || selectedNode === void 0 ? void 0 : selectedNode.firstElementChild) === null || _b === void 0 ? void 0 : _b.localName) === "a") {
|
|
300
|
+
link = selectedNode === null || selectedNode === void 0 ? void 0 : selectedNode.firstElementChild;
|
|
301
|
+
}
|
|
311
302
|
else {
|
|
312
303
|
link = selectedNode === null || selectedNode === void 0 ? void 0 : selectedNode.closest("a");
|
|
313
304
|
}
|
|
@@ -324,9 +315,8 @@
|
|
|
324
315
|
.chain()
|
|
325
316
|
.focus()
|
|
326
317
|
.command(({ tr }) => {
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
tr.replaceWith(nodePos, nodePos + (text === null || text === void 0 ? void 0 : text.length), options.editor.schema.text(text, [
|
|
318
|
+
var _a;
|
|
319
|
+
tr.deleteRange(nodePos, nodePos + ((_a = ((link === null || link === void 0 ? void 0 : link.innerText) || "")) === null || _a === void 0 ? void 0 : _a.length)).replaceWith(nodePos, nodePos, options.editor.schema.text(text, [
|
|
330
320
|
options.editor.schema.marks.hyperlink.create({
|
|
331
321
|
href: sanitizeURL === null || sanitizeURL === void 0 ? void 0 : sanitizeURL.href,
|
|
332
322
|
}),
|
|
@@ -494,7 +484,7 @@
|
|
|
494
484
|
});
|
|
495
485
|
|
|
496
486
|
exports.Hyperlink = Hyperlink;
|
|
497
|
-
exports.Tooltip =
|
|
487
|
+
exports.Tooltip = Tooltip;
|
|
498
488
|
exports.default = Hyperlink;
|
|
499
489
|
|
|
500
490
|
Object.defineProperty(exports, '__esModule', { value: true });
|
package/dist/index.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../src/helpers/autoHyperlink.ts","../src/helpers/tippyHelper.ts","../src/helpers/clickHandler.ts","../src/helpers/pasteHandler.ts","../src/helpers/editHyperlink.ts","../src/hyperlink.ts"],"sourcesContent":["import {\n combineTransactionSteps,\n findChildrenInRange,\n getChangedRanges,\n getMarksBetween,\n NodeWithPos,\n} from \"@tiptap/core\";\nimport { MarkType } from \"@tiptap/pm/model\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { find, test } from \"linkifyjs\";\n\ntype AutoHyperlinkOptions = {\n type: MarkType;\n validate?: (url: string) => boolean;\n};\n\nexport default function autoHyperlink(options: AutoHyperlinkOptions): Plugin {\n return new Plugin({\n key: new PluginKey(\"autoHyperlink\"),\n appendTransaction: (transactions, oldState, newState) => {\n const docChanges =\n transactions.some((transaction) => transaction.docChanged) &&\n !oldState.doc.eq(newState.doc);\n const preventAutoHyperlink = transactions.some((transaction) =>\n transaction.getMeta(\"preventAutoHyperlink\")\n );\n\n if (!docChanges || preventAutoHyperlink) {\n return;\n }\n\n const { tr } = newState;\n const transform = combineTransactionSteps(oldState.doc, [\n ...transactions,\n ]);\n const { mapping } = transform;\n const changes = getChangedRanges(transform);\n\n changes.forEach(({ oldRange, newRange }) => {\n // at first we check if we have to remove links\n getMarksBetween(oldRange.from, oldRange.to, oldState.doc)\n .filter((item) => item.mark.type === options.type)\n .forEach((oldMark) => {\n const newFrom = mapping.map(oldMark.from);\n const newTo = mapping.map(oldMark.to);\n const newMarks = getMarksBetween(\n newFrom,\n newTo,\n newState.doc\n ).filter((item) => item.mark.type === options.type);\n\n if (!newMarks.length) {\n return;\n }\n\n const newMark = newMarks[0];\n const oldLinkText = oldState.doc.textBetween(\n oldMark.from,\n oldMark.to,\n undefined,\n \" \"\n );\n const newLinkText = newState.doc.textBetween(\n newMark.from,\n newMark.to,\n undefined,\n \" \"\n );\n const wasLink = test(oldLinkText);\n const isLink = test(newLinkText);\n\n // remove only the link, if it was a link before too\n // because we don’t want to remove links that were set manually\n if (wasLink && !isLink) {\n tr.removeMark(newMark.from, newMark.to, options.type);\n }\n });\n\n // now let’s see if we can add new links\n const nodesInChangedRanges = findChildrenInRange(\n newState.doc,\n newRange,\n (node) => node.isTextblock\n );\n\n let textBlock: NodeWithPos | undefined;\n let textBeforeWhitespace: string | undefined;\n\n if (nodesInChangedRanges.length > 1) {\n // Grab the first node within the changed ranges (ex. the first of two paragraphs when hitting enter)\n textBlock = nodesInChangedRanges[0];\n textBeforeWhitespace = newState.doc.textBetween(\n textBlock.pos,\n textBlock.pos + textBlock.node.nodeSize,\n undefined,\n \" \"\n );\n } else if (\n nodesInChangedRanges.length &&\n // We want to make sure to include the block seperator argument to treat hard breaks like spaces\n newState.doc\n .textBetween(newRange.from, newRange.to, \" \", \" \")\n .endsWith(\" \")\n ) {\n textBlock = nodesInChangedRanges[0];\n textBeforeWhitespace = newState.doc.textBetween(\n textBlock.pos,\n newRange.to,\n undefined,\n \" \"\n );\n }\n\n if (textBlock && textBeforeWhitespace) {\n const wordsBeforeWhitespace = textBeforeWhitespace\n .split(\" \")\n .filter((s) => s !== \"\");\n\n if (wordsBeforeWhitespace.length <= 0) {\n return false;\n }\n\n const lastWordBeforeSpace =\n wordsBeforeWhitespace[wordsBeforeWhitespace.length - 1];\n const lastWordAndBlockOffset =\n textBlock.pos +\n textBeforeWhitespace.lastIndexOf(lastWordBeforeSpace);\n\n if (!lastWordBeforeSpace) {\n return false;\n }\n\n find(lastWordBeforeSpace)\n .filter((link) => link.isLink)\n .filter((link) => {\n if (options.validate) {\n return options.validate(link.value);\n }\n return true;\n })\n // calculate link position\n .map((link) => ({\n ...link,\n from: lastWordAndBlockOffset + link.start + 1,\n to: lastWordAndBlockOffset + link.end + 1,\n }))\n // add link mark\n .forEach((link) => {\n tr.addMark(\n link.from,\n link.to,\n options.type.create({\n href: link.href,\n })\n );\n });\n }\n });\n\n if (!tr.steps.length) {\n return;\n }\n\n return tr;\n },\n });\n}\n","import tippy, { Instance, Props, roundArrow } from \"tippy.js\";\nimport { Editor } from \"@tiptap/core\";\nimport { EditorView } from \"@tiptap/pm/view\";\nimport { getAttributes, posToDOMRect } from \"@tiptap/core\";\n\ninterface TippyInitOptions {\n editor: Editor;\n validate?: (url: string) => boolean;\n view: EditorView;\n}\n\nclass Tooltip {\n private tippyInstance?: Instance;\n private preventHide: boolean = false;\n private tippyWrapper: HTMLDivElement;\n private editor: Editor;\n private view: EditorView;\n\n constructor(options: TippyInitOptions) {\n this.editor = options.editor;\n this.view = options.view;\n this.tippyWrapper = document.createElement(\"div\");\n this.tippyWrapper.addEventListener(\"mousedown\", this.mousedownHandler, {\n capture: true,\n });\n this.view.dom.addEventListener(\"dragstart\", this.dragstartHandler);\n this.editor.on(\"blur\", this.blurHandler);\n }\n\n init() {\n this.tippyWrapper.innerHTML = \"\";\n\n return { tippyModal: this.tippyWrapper, tippyInstance: this.tippyInstance };\n }\n\n show() {\n this.tippyInstance?.show();\n return true;\n }\n\n hide() {\n setTimeout(() => this.tippyInstance?.hide());\n return false;\n }\n\n private mousedownHandler = () => {\n this.preventHide = true;\n };\n\n private dragstartHandler = () => {\n this.hide();\n };\n\n private blurHandler = ({ event }: { event: FocusEvent }) => {\n console.log(\"blurHandler\", { event });\n if (this.preventHide) {\n this.preventHide = false;\n return;\n }\n if (\n event?.relatedTarget &&\n this.tippyWrapper.parentNode?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n this.hide();\n };\n\n private tippyBlurHandler = (event: FocusEvent) => {\n this.blurHandler({ event });\n };\n\n private createTooltip() {\n if (!this.editor || !this.editor.options) return;\n const { element: editorElement } = this.editor.options;\n const editorIsAttached = !!editorElement.parentElement;\n\n if (this.tippyInstance || !editorIsAttached) {\n return;\n }\n\n this.tippyInstance = tippy(editorElement, {\n duration: 0,\n getReferenceClientRect: null,\n content: this.tippyWrapper,\n interactive: true,\n trigger: \"manual\",\n placement: \"bottom\",\n hideOnClick: \"toggle\",\n onClickOutside: (instance, event) => {\n console.log(\"onClickOutside\", { instance, event });\n this.hide();\n },\n onAfterUpdate: (instance, partialProps) => {\n console.log(\"onAfterUpdate\", { instance, partialProps });\n this.show();\n },\n });\n\n if (this.tippyInstance.popper.firstChild) {\n (this.tippyInstance.popper.firstChild as HTMLElement).addEventListener(\n \"blur\",\n this.tippyBlurHandler\n );\n }\n }\n\n update(view: EditorView, option: any = {}) {\n this.createTooltip();\n\n option.arrow = option?.arrow ?? false;\n\n if (this.tippyInstance) {\n this.tippyInstance.setProps({\n ...option,\n getReferenceClientRect: () => {\n const pos = view.state.selection.from;\n return posToDOMRect(view, pos, pos);\n },\n });\n }\n\n return {};\n }\n\n destroyTooltip() {\n if (this.tippyInstance) {\n this.tippyInstance.destroy();\n this.tippyInstance = undefined;\n this.tippyWrapper.removeEventListener(\"mousedown\", this.mousedownHandler, {\n capture: true,\n });\n this.view.dom.removeEventListener(\"dragstart\", this.dragstartHandler);\n this.editor.off(\"blur\", this.blurHandler);\n }\n }\n}\n\nexport default Tooltip;\n","import { getAttributes } from \"@tiptap/core\";\nimport { MarkType } from \"@tiptap/pm/model\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { Editor } from \"@tiptap/core\";\nimport { EditorView } from \"@tiptap/pm/view\";\nimport Tooltip from \"./tippyHelper\";\n\n// Define type for the ClickHandlerOptions\ntype ClickHandlerOptions = {\n type: MarkType;\n editor: Editor;\n validate?: (url: string) => boolean;\n view: EditorView;\n modals: {\n previewHyperlink?: ((options: any) => HTMLElement) | null;\n setHyperlink?: ((options: any) => HTMLElement) | null;\n };\n};\n\nexport default function clickHandler(options: ClickHandlerOptions): Plugin {\n // Create the tooltip instance\n let tooltip = new Tooltip(options);\n\n // Initialize the tooltip\n let { tippyModal, tippyInstance } = tooltip.init();\n\n return new Plugin({\n key: new PluginKey(\"handleClickHyperlink\"),\n props: {\n handleClick: (view, pos, event) => {\n if (event.button !== 0) return false;\n\n console.log({\n event,\n button: event.button,\n target: event.target,\n });\n\n // Get the target HTML element and its position\n const nodeTarget: HTMLElement = event.target as HTMLElement;\n const nodePos = view.posAtDOM(nodeTarget, 0);\n\n // Find the closest link element to the target element\n const link = nodeTarget?.closest(\"a\");\n\n // Extract attributes from the state\n const attrs = getAttributes(view.state, options.type.name);\n\n // Extract href and target attributes from the link element or the state\n const href = link?.href ?? attrs.href;\n const target = link?.target ?? attrs.target;\n\n // If there is no previewHyperlink modal provided, then open the link in new window\n if (!options.modals.previewHyperlink) {\n if (link && href) {\n window.open(href, target);\n }\n return true;\n }\n\n // if the link does not contain href attribute, hide the tooltip\n if (!link?.href) return tooltip.hide();\n\n // Create a preview of the hyperlink\n const hyperlinkPreview = options.modals.previewHyperlink({\n link,\n nodePos,\n ...options,\n });\n\n // If there is no hyperlink preview, hide the modal\n if (!hyperlinkPreview) return tooltip.hide();\n\n // Empty the modal and append the hyperlink preview box\n\n while (tippyModal.firstChild) {\n tippyModal.removeChild(tippyModal.firstChild);\n }\n\n tippyModal.append(hyperlinkPreview);\n\n // Update the modal position\n tooltip.update(options.view);\n\n return false;\n },\n },\n });\n}\n","import { Editor } from \"@tiptap/core\";\nimport { MarkType } from \"@tiptap/pm/model\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { find } from \"linkifyjs\";\n\ntype PasteHandlerOptions = {\n editor: Editor;\n type: MarkType;\n};\n\nexport function pasteHandler(options: PasteHandlerOptions): Plugin {\n return new Plugin({\n key: new PluginKey(\"handlePasteHyperlink\"),\n props: {\n handlePaste: (view, event, slice) => {\n const { state } = view;\n const { selection } = state;\n const { empty } = selection;\n\n if (empty) {\n return false;\n }\n\n let textContent = \"\";\n\n slice.content.forEach((node) => {\n textContent += node.textContent;\n });\n\n const link = find(textContent).find(\n (item) => item.isLink && item.value === textContent\n );\n\n if (!textContent || !link) {\n return false;\n }\n\n options.editor.commands.setMark(options.type, {\n href: link.href,\n });\n\n return true;\n },\n },\n });\n}\n","import { Editor } from \"@tiptap/core\";\nimport { find } from \"linkifyjs\";\n\ntype EditHyperlinkOptions = {\n editor: Editor;\n validate?: (url: string) => boolean;\n newURL?: string;\n newText?: string;\n};\n\nexport default function editHyperlink(options: EditHyperlinkOptions) {\n const { state, dispatch } = options.editor.view;\n const { from, to } = state.selection;\n let link: HTMLAnchorElement | null = null;\n\n const selectedNode = options.editor.view.domAtPos(from - 1)\n .node as HTMLElement;\n\n if (selectedNode?.nodeName === \"#text\") {\n link = (selectedNode.parentNode as HTMLElement)?.closest(\"a\");\n } else {\n link = selectedNode?.closest(\"a\");\n }\n\n if (!link) return true;\n\n const text = options.newText || link?.innerText;\n // Get the position of the link in the editor view\n const nodePos = options.editor.view.posAtDOM(link, 0);\n\n const sanitizeURL = find(options.newURL || link.href)\n .filter((link) => link.isLink)\n .filter((link) => (options.validate ? options.validate(link.value) : true))\n .at(0);\n\n return options.editor\n .chain()\n .focus()\n .command(({ tr }) => {\n // The command replaces the range from nodePos to nodePos + length of the text\n // with a new text node with the provided text and a link mark with the sanitized URL\n tr.replaceWith(\n nodePos,\n nodePos + text?.length,\n options.editor.schema.text(text, [\n options.editor.schema.marks.hyperlink.create({\n href: sanitizeURL?.href,\n }),\n ])\n );\n\n return true;\n })\n .run();\n}\n","import { Mark, markPasteRule, mergeAttributes } from \"@tiptap/core\";\nimport { Plugin } from \"@tiptap/pm/state\";\nimport { find, registerCustomProtocol, reset } from \"linkifyjs\";\nimport autoHyperlink from \"./helpers/autoHyperlink\";\nimport clickHandler from \"./helpers/clickHandler\";\nimport { pasteHandler } from \"./helpers/pasteHandler\";\nimport editHyperlinkHelper from \"./helpers/editHyperlink\";\n\nexport interface LinkProtocolOptions {\n scheme: string;\n optionalSlashes?: boolean;\n}\n\nexport interface HyperlinkOptions {\n /**\n * If enabled, it adds links as you type.\n */\n autoHyperlink: boolean;\n /**\n * An array of custom protocols to be registered with linkifyjs.\n */\n protocols: Array<LinkProtocolOptions | string>;\n /**\n * If enabled, links will be opened on click.\n */\n openOnClick: boolean;\n /**\n * Adds a link to the current selection if the pasted content only contains an url.\n */\n hyperlinkOnPaste: boolean;\n /**\n * A list of HTML attributes to be rendered.\n */\n HTMLAttributes: Record<string, any>;\n /**\n * A list of modals to be rendered.\n * @default null\n * @example\n */\n modals: {\n previewHyperlink?: ((options: any) => HTMLElement) | null;\n setHyperlink?: ((options: any) => HTMLElement) | null;\n };\n /**\n * A validation function that modifies link verification for the auto linker.\n * @param url - The url to be validated.\n * @returns - True if the url is valid, false otherwise.\n */\n validate?: (url: string) => boolean;\n}\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n link: {\n /**\n * Edit the hyperlink's text\n */\n editHyperLinkText: (text: string) => ReturnType;\n\n /**\n * Edit the hyperlink's href value\n */\n editHyperLinkHref: (href: string) => ReturnType;\n\n /**\n * Edit the hyperlink's\n */\n editHyperlink: (attributes?: { newText?: string; newURL?: string }) => ReturnType;\n\n /**\n * Set a hyperlink\n */\n setHyperlink: (attributes?: { href: string; target?: string | null }) => ReturnType;\n\n /**\n * Unset a link mark\n */\n unsetHyperlink: () => ReturnType;\n };\n }\n}\n\nexport const Hyperlink = Mark.create<HyperlinkOptions>({\n name: \"hyperlink\",\n\n priority: 1000,\n\n keepOnSplit: false,\n\n onCreate() {\n this.options.protocols.forEach((protocol) => {\n if (typeof protocol === \"string\") {\n registerCustomProtocol(protocol);\n return;\n }\n registerCustomProtocol(protocol.scheme, protocol.optionalSlashes);\n });\n },\n\n onDestroy() {\n reset();\n },\n\n inclusive() {\n return this.options.autoHyperlink;\n },\n\n addOptions() {\n return {\n openOnClick: true,\n hyperlinkOnPaste: true,\n autoHyperlink: true,\n protocols: [],\n HTMLAttributes: {\n target: \"_blank\",\n rel: \"noopener noreferrer nofollow\",\n class: null,\n },\n modals: {\n previewHyperlink: null,\n setHyperlink: null,\n },\n validate: undefined,\n };\n },\n\n addAttributes() {\n return {\n href: {\n default: null,\n },\n target: {\n default: this.options.HTMLAttributes.target,\n },\n class: {\n default: this.options.HTMLAttributes.class,\n },\n };\n },\n\n parseHTML() {\n return [{ tag: 'a[href]:not([href *= \"javascript:\" i])' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\"a\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n\n addCommands() {\n return {\n setHyperlink:\n (attributes) =>\n ({ editor, chain }) => {\n if (!this.options.modals.setHyperlink) {\n return chain()\n .setMark(this.name, attributes)\n .setMeta(\"preventAutohyperlink\", true)\n .run();\n } else {\n this.options.modals.setHyperlink({\n editor,\n validate: this.options.validate,\n extentionName: this.name,\n attributes,\n });\n return true;\n }\n },\n\n editHyperlink:\n (attributes) =>\n ({ editor }) => {\n return editHyperlinkHelper({\n ...attributes,\n editor,\n validate: this.options.validate,\n });\n },\n\n editHyperLinkText:\n (newText) =>\n ({ editor }) => {\n return editHyperlinkHelper({\n editor,\n newText,\n validate: this.options.validate,\n });\n },\n\n editHyperLinkHref:\n (newURL) =>\n ({ editor }) => {\n return editHyperlinkHelper({\n editor,\n validate: this.options.validate,\n newURL,\n });\n },\n\n unsetHyperlink:\n () =>\n ({ chain }) => {\n return chain()\n .unsetMark(this.name, { extendEmptyMarkRange: true })\n .setMeta(\"preventAutohyperlink\", true)\n .run();\n },\n };\n },\n\n addPasteRules() {\n return [\n markPasteRule({\n find: (text) =>\n find(text)\n .filter((link) => {\n if (this.options.validate) {\n return this.options.validate(link.value);\n }\n\n return true;\n })\n .filter((link) => link.isLink)\n .map((link) => ({\n text: link.value,\n index: link.start,\n data: link,\n })),\n type: this.type,\n getAttributes: (match) => ({\n href: match.data?.href,\n }),\n }),\n ];\n },\n\n addProseMirrorPlugins() {\n const plugins: Plugin[] = [];\n\n if (this.options.autoHyperlink) {\n plugins.push(\n autoHyperlink({\n type: this.type,\n validate: this.options.validate,\n })\n );\n }\n\n if (this.options.openOnClick) {\n plugins.push(\n clickHandler({\n type: this.type,\n editor: this.editor,\n validate: this.options.validate,\n view: this.editor.view,\n modals: this.options.modals,\n })\n );\n }\n\n if (this.options.hyperlinkOnPaste) {\n plugins.push(\n pasteHandler({\n editor: this.editor,\n type: this.type,\n })\n );\n }\n\n return plugins;\n },\n});\n"],"names":["Plugin","PluginKey","combineTransactionSteps","getChangedRanges","getMarksBetween","test","findChildrenInRange","find","posToDOMRect","getAttributes","Mark","registerCustomProtocol","reset","mergeAttributes","editHyperlinkHelper","markPasteRule"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../src/helpers/autoHyperlink.ts","../src/helpers/tippyHelper.ts","../src/helpers/clickHandler.ts","../src/helpers/pasteHandler.ts","../src/helpers/editHyperlink.ts","../src/hyperlink.ts"],"sourcesContent":["import {\n combineTransactionSteps,\n findChildrenInRange,\n getChangedRanges,\n getMarksBetween,\n NodeWithPos,\n} from \"@tiptap/core\";\nimport { MarkType } from \"@tiptap/pm/model\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { find, test } from \"linkifyjs\";\n\ntype AutoHyperlinkOptions = {\n type: MarkType;\n validate?: (url: string) => boolean;\n};\n\nexport default function autoHyperlink(options: AutoHyperlinkOptions): Plugin {\n return new Plugin({\n key: new PluginKey(\"autoHyperlink\"),\n appendTransaction: (transactions, oldState, newState) => {\n const docChanges =\n transactions.some((transaction) => transaction.docChanged) &&\n !oldState.doc.eq(newState.doc);\n const preventAutoHyperlink = transactions.some((transaction) =>\n transaction.getMeta(\"preventAutoHyperlink\")\n );\n\n if (!docChanges || preventAutoHyperlink) {\n return;\n }\n\n const { tr } = newState;\n const transform = combineTransactionSteps(oldState.doc, [\n ...transactions,\n ]);\n const { mapping } = transform;\n const changes = getChangedRanges(transform);\n\n changes.forEach(({ oldRange, newRange }) => {\n // at first we check if we have to remove links\n getMarksBetween(oldRange.from, oldRange.to, oldState.doc)\n .filter((item) => item.mark.type === options.type)\n .forEach((oldMark) => {\n const newFrom = mapping.map(oldMark.from);\n const newTo = mapping.map(oldMark.to);\n const newMarks = getMarksBetween(\n newFrom,\n newTo,\n newState.doc\n ).filter((item) => item.mark.type === options.type);\n\n if (!newMarks.length) {\n return;\n }\n\n const newMark = newMarks[0];\n const oldLinkText = oldState.doc.textBetween(\n oldMark.from,\n oldMark.to,\n undefined,\n \" \"\n );\n const newLinkText = newState.doc.textBetween(\n newMark.from,\n newMark.to,\n undefined,\n \" \"\n );\n const wasLink = test(oldLinkText);\n const isLink = test(newLinkText);\n\n // remove only the link, if it was a link before too\n // because we don’t want to remove links that were set manually\n if (wasLink && !isLink) {\n tr.removeMark(newMark.from, newMark.to, options.type);\n }\n });\n\n // now let’s see if we can add new links\n const nodesInChangedRanges = findChildrenInRange(\n newState.doc,\n newRange,\n (node) => node.isTextblock\n );\n\n let textBlock: NodeWithPos | undefined;\n let textBeforeWhitespace: string | undefined;\n\n if (nodesInChangedRanges.length > 1) {\n // Grab the first node within the changed ranges (ex. the first of two paragraphs when hitting enter)\n textBlock = nodesInChangedRanges[0];\n textBeforeWhitespace = newState.doc.textBetween(\n textBlock.pos,\n textBlock.pos + textBlock.node.nodeSize,\n undefined,\n \" \"\n );\n } else if (\n nodesInChangedRanges.length &&\n // We want to make sure to include the block seperator argument to treat hard breaks like spaces\n newState.doc\n .textBetween(newRange.from, newRange.to, \" \", \" \")\n .endsWith(\" \")\n ) {\n textBlock = nodesInChangedRanges[0];\n textBeforeWhitespace = newState.doc.textBetween(\n textBlock.pos,\n newRange.to,\n undefined,\n \" \"\n );\n }\n\n if (textBlock && textBeforeWhitespace) {\n const wordsBeforeWhitespace = textBeforeWhitespace\n .split(\" \")\n .filter((s) => s !== \"\");\n\n if (wordsBeforeWhitespace.length <= 0) {\n return false;\n }\n\n const lastWordBeforeSpace =\n wordsBeforeWhitespace[wordsBeforeWhitespace.length - 1];\n const lastWordAndBlockOffset =\n textBlock.pos +\n textBeforeWhitespace.lastIndexOf(lastWordBeforeSpace);\n\n if (!lastWordBeforeSpace) {\n return false;\n }\n\n find(lastWordBeforeSpace)\n .filter((link) => link.isLink)\n .filter((link) => {\n if (options.validate) {\n return options.validate(link.value);\n }\n return true;\n })\n // calculate link position\n .map((link) => ({\n ...link,\n from: lastWordAndBlockOffset + link.start + 1,\n to: lastWordAndBlockOffset + link.end + 1,\n }))\n // add link mark\n .forEach((link) => {\n tr.addMark(\n link.from,\n link.to,\n options.type.create({\n href: link.href,\n })\n );\n });\n }\n });\n\n if (!tr.steps.length) {\n return;\n }\n\n return tr;\n },\n });\n}\n","import tippy, { Instance, Props, roundArrow } from \"tippy.js\";\nimport { Editor } from \"@tiptap/core\";\nimport { EditorView } from \"@tiptap/pm/view\";\nimport { getAttributes, posToDOMRect } from \"@tiptap/core\";\n\ninterface TippyInitOptions {\n editor: Editor;\n validate?: (url: string) => boolean;\n view: EditorView;\n}\n\nclass Tooltip {\n private tippyInstance?: Instance;\n private preventHide: boolean = false;\n private tippyWrapper: HTMLDivElement;\n private editor: Editor;\n private view: EditorView;\n\n constructor(options: TippyInitOptions) {\n this.editor = options.editor;\n this.view = options.view;\n this.tippyWrapper = document.createElement(\"div\");\n this.tippyWrapper.addEventListener(\"mousedown\", this.mousedownHandler, {\n capture: true,\n });\n this.view.dom.addEventListener(\"dragstart\", this.dragstartHandler);\n this.editor.on(\"blur\", this.blurHandler);\n }\n\n init() {\n this.tippyWrapper.innerHTML = \"\";\n\n return { tippyModal: this.tippyWrapper, tippyInstance: this.tippyInstance };\n }\n\n show() {\n this.tippyInstance?.show();\n return true;\n }\n\n hide() {\n setTimeout(() => this.tippyInstance?.hide());\n return false;\n }\n\n private mousedownHandler = () => {\n this.preventHide = true;\n };\n\n private dragstartHandler = () => {\n this.hide();\n };\n\n private blurHandler = ({ event }: { event: FocusEvent }) => {\n if (this.preventHide) {\n this.preventHide = false;\n return;\n }\n if (\n event?.relatedTarget &&\n this.tippyWrapper.parentNode?.contains(event.relatedTarget as Node)\n ) {\n return;\n }\n this.hide();\n };\n\n private tippyBlurHandler = (event: FocusEvent) => {\n this.blurHandler({ event });\n };\n\n private createTooltip() {\n if (!this.editor || !this.editor.options) return;\n const { element: editorElement } = this.editor.options;\n const editorIsAttached = !!editorElement.parentElement;\n\n if (this.tippyInstance || !editorIsAttached) {\n return;\n }\n\n this.tippyInstance = tippy(editorElement, {\n duration: 0,\n getReferenceClientRect: null,\n content: this.tippyWrapper,\n interactive: true,\n trigger: \"manual\",\n placement: \"bottom\",\n hideOnClick: \"toggle\",\n onClickOutside: (instance, event) => {\n this.hide();\n },\n onAfterUpdate: (instance, partialProps) => {\n this.show();\n },\n });\n\n if (this.tippyInstance.popper.firstChild) {\n (this.tippyInstance.popper.firstChild as HTMLElement).addEventListener(\n \"blur\",\n this.tippyBlurHandler\n );\n }\n }\n\n update(view: EditorView, option: any = {}) {\n this.createTooltip();\n\n option.arrow = option?.arrow ?? false;\n\n if (this.tippyInstance) {\n this.tippyInstance.setProps({\n ...option,\n getReferenceClientRect: () => {\n const pos = view.state.selection.from;\n return posToDOMRect(view, pos, pos);\n },\n });\n }\n\n return {};\n }\n\n destroyTooltip() {\n if (this.tippyInstance) {\n this.tippyInstance.destroy();\n this.tippyInstance = undefined;\n this.tippyWrapper.removeEventListener(\"mousedown\", this.mousedownHandler, {\n capture: true,\n });\n this.view.dom.removeEventListener(\"dragstart\", this.dragstartHandler);\n this.editor.off(\"blur\", this.blurHandler);\n }\n }\n}\n\nexport default Tooltip;\n","import { getAttributes } from \"@tiptap/core\";\nimport { MarkType } from \"@tiptap/pm/model\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { Editor } from \"@tiptap/core\";\nimport { EditorView } from \"@tiptap/pm/view\";\nimport Tooltip from \"./tippyHelper\";\n\n// Define type for the ClickHandlerOptions\ntype ClickHandlerOptions = {\n type: MarkType;\n editor: Editor;\n validate?: (url: string) => boolean;\n view: EditorView;\n modals: {\n previewHyperlink?: ((options: any) => HTMLElement) | null;\n setHyperlink?: ((options: any) => HTMLElement) | null;\n };\n};\n\nexport default function clickHandler(options: ClickHandlerOptions): Plugin {\n // Create the tooltip instance\n let tooltip = new Tooltip(options);\n\n // Initialize the tooltip\n let { tippyModal, tippyInstance } = tooltip.init();\n\n return new Plugin({\n key: new PluginKey(\"handleClickHyperlink\"),\n props: {\n handleClick: (view, pos, event) => {\n if (event.button !== 0) return false;\n\n // Get the target HTML element and its position\n const nodeTarget: HTMLElement = event.target as HTMLElement;\n const nodePos = view.posAtDOM(nodeTarget, 0);\n\n // Find the closest link element to the target element\n const link = nodeTarget?.closest(\"a\");\n\n // Extract attributes from the state\n const attrs = getAttributes(view.state, options.type.name);\n\n // Extract href and target attributes from the link element or the state\n const href = link?.href ?? attrs.href;\n const target = link?.target ?? attrs.target;\n\n // If there is no previewHyperlink modal provided, then open the link in new window\n if (!options.modals.previewHyperlink) {\n if (link && href) {\n window.open(href, target);\n }\n return true;\n }\n\n // if the link does not contain href attribute, hide the tooltip\n if (!link?.href) return tooltip.hide();\n\n // Create a preview of the hyperlink\n const hyperlinkPreview = options.modals.previewHyperlink({\n link,\n nodePos,\n tippy: tooltip,\n ...options,\n });\n\n // If there is no hyperlink preview, hide the modal\n if (!hyperlinkPreview) return tooltip.hide();\n\n // Empty the modal and append the hyperlink preview box\n\n while (tippyModal.firstChild) {\n tippyModal.removeChild(tippyModal.firstChild);\n }\n\n tippyModal.append(hyperlinkPreview);\n\n // Update the modal position\n tooltip.update(options.view);\n\n return false;\n },\n },\n });\n}\n","import { Editor } from \"@tiptap/core\";\nimport { MarkType } from \"@tiptap/pm/model\";\nimport { Plugin, PluginKey } from \"@tiptap/pm/state\";\nimport { find } from \"linkifyjs\";\n\ntype PasteHandlerOptions = {\n editor: Editor;\n type: MarkType;\n};\n\nexport function pasteHandler(options: PasteHandlerOptions): Plugin {\n return new Plugin({\n key: new PluginKey(\"handlePasteHyperlink\"),\n props: {\n handlePaste: (view, event, slice) => {\n const { state } = view;\n const { selection } = state;\n const { empty } = selection;\n\n if (empty) {\n return false;\n }\n\n let textContent = \"\";\n\n slice.content.forEach((node) => {\n textContent += node.textContent;\n });\n\n const link = find(textContent).find(\n (item) => item.isLink && item.value === textContent\n );\n\n if (!textContent || !link) {\n return false;\n }\n\n options.editor.commands.setMark(options.type, {\n href: link.href,\n });\n\n return true;\n },\n },\n });\n}\n","import { Editor } from \"@tiptap/core\";\nimport { find } from \"linkifyjs\";\n\ntype EditHyperlinkOptions = {\n editor: Editor;\n validate?: (url: string) => boolean;\n newURL?: string;\n newText?: string;\n};\n\nexport default function editHyperlink(options: EditHyperlinkOptions) {\n const { state, dispatch } = options.editor.view;\n const { from, to } = state.selection;\n let link: HTMLAnchorElement | null = null;\n\n const selectedNode = options.editor.view.domAtPos(from).node as HTMLElement;\n const nodeName = selectedNode?.nodeName;\n\n if (nodeName === \"#text\") {\n link = (selectedNode.parentNode as HTMLElement)?.closest(\"a\");\n } else if (nodeName === \"P\" && selectedNode?.firstElementChild?.localName === \"a\") {\n link = selectedNode?.firstElementChild as HTMLAnchorElement;\n } else {\n link = selectedNode?.closest(\"a\");\n }\n\n if (!link) return true;\n\n const text = options.newText || link?.innerText;\n // Get the position of the link in the editor view\n const nodePos = options.editor.view.posAtDOM(link, 0);\n\n const sanitizeURL = find(options.newURL || link.href)\n .filter((link) => link.isLink)\n .filter((link) => (options.validate ? options.validate(link.value) : true))\n .at(0);\n\n return options.editor\n .chain()\n .focus()\n .command(({ tr }) => {\n tr.deleteRange(nodePos, nodePos + (link?.innerText || \"\")?.length).replaceWith(\n nodePos,\n nodePos,\n options.editor.schema.text(text, [\n options.editor.schema.marks.hyperlink.create({\n href: sanitizeURL?.href,\n }),\n ])\n );\n\n return true;\n })\n .run();\n}\n","import { Mark, markPasteRule, mergeAttributes } from \"@tiptap/core\";\nimport { Plugin } from \"@tiptap/pm/state\";\nimport { find, registerCustomProtocol, reset } from \"linkifyjs\";\nimport autoHyperlink from \"./helpers/autoHyperlink\";\nimport clickHandler from \"./helpers/clickHandler\";\nimport { pasteHandler } from \"./helpers/pasteHandler\";\nimport editHyperlinkHelper from \"./helpers/editHyperlink\";\n\nexport interface LinkProtocolOptions {\n scheme: string;\n optionalSlashes?: boolean;\n}\n\nexport interface HyperlinkOptions {\n /**\n * If enabled, it adds links as you type.\n */\n autoHyperlink: boolean;\n /**\n * An array of custom protocols to be registered with linkifyjs.\n */\n protocols: Array<LinkProtocolOptions | string>;\n /**\n * If enabled, links will be opened on click.\n */\n openOnClick: boolean;\n /**\n * Adds a link to the current selection if the pasted content only contains an url.\n */\n hyperlinkOnPaste: boolean;\n /**\n * A list of HTML attributes to be rendered.\n */\n HTMLAttributes: Record<string, any>;\n /**\n * A list of modals to be rendered.\n * @default null\n * @example\n */\n modals: {\n previewHyperlink?: ((options: any) => HTMLElement) | null;\n setHyperlink?: ((options: any) => HTMLElement) | null;\n };\n /**\n * A validation function that modifies link verification for the auto linker.\n * @param url - The url to be validated.\n * @returns - True if the url is valid, false otherwise.\n */\n validate?: (url: string) => boolean;\n}\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n link: {\n /**\n * Edit the hyperlink's text\n */\n editHyperLinkText: (text: string) => ReturnType;\n\n /**\n * Edit the hyperlink's href value\n */\n editHyperLinkHref: (href: string) => ReturnType;\n\n /**\n * Edit the hyperlink's\n */\n editHyperlink: (attributes?: { newText?: string; newURL?: string }) => ReturnType;\n\n /**\n * Set a hyperlink\n */\n setHyperlink: (attributes?: { href: string; target?: string | null }) => ReturnType;\n\n /**\n * Unset a link mark\n */\n unsetHyperlink: () => ReturnType;\n };\n }\n}\n\nexport const Hyperlink = Mark.create<HyperlinkOptions>({\n name: \"hyperlink\",\n\n priority: 1000,\n\n keepOnSplit: false,\n\n onCreate() {\n this.options.protocols.forEach((protocol) => {\n if (typeof protocol === \"string\") {\n registerCustomProtocol(protocol);\n return;\n }\n registerCustomProtocol(protocol.scheme, protocol.optionalSlashes);\n });\n },\n\n onDestroy() {\n reset();\n },\n\n inclusive() {\n return this.options.autoHyperlink;\n },\n\n addOptions() {\n return {\n openOnClick: true,\n hyperlinkOnPaste: true,\n autoHyperlink: true,\n protocols: [],\n HTMLAttributes: {\n target: \"_blank\",\n rel: \"noopener noreferrer nofollow\",\n class: null,\n },\n modals: {\n previewHyperlink: null,\n setHyperlink: null,\n },\n validate: undefined,\n };\n },\n\n addAttributes() {\n return {\n href: {\n default: null,\n },\n target: {\n default: this.options.HTMLAttributes.target,\n },\n class: {\n default: this.options.HTMLAttributes.class,\n },\n };\n },\n\n parseHTML() {\n return [{ tag: 'a[href]:not([href *= \"javascript:\" i])' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\"a\", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n\n addCommands() {\n return {\n setHyperlink:\n (attributes) =>\n ({ editor, chain }) => {\n if (!this.options.modals.setHyperlink) {\n return chain()\n .setMark(this.name, attributes)\n .setMeta(\"preventAutohyperlink\", true)\n .run();\n } else {\n this.options.modals.setHyperlink({\n editor,\n validate: this.options.validate,\n extentionName: this.name,\n attributes,\n });\n return true;\n }\n },\n\n editHyperlink:\n (attributes) =>\n ({ editor }) => {\n return editHyperlinkHelper({\n ...attributes,\n editor,\n validate: this.options.validate,\n });\n },\n\n editHyperLinkText:\n (newText) =>\n ({ editor }) => {\n return editHyperlinkHelper({\n editor,\n newText,\n validate: this.options.validate,\n });\n },\n\n editHyperLinkHref:\n (newURL) =>\n ({ editor }) => {\n return editHyperlinkHelper({\n editor,\n validate: this.options.validate,\n newURL,\n });\n },\n\n unsetHyperlink:\n () =>\n ({ chain }) => {\n return chain()\n .unsetMark(this.name, { extendEmptyMarkRange: true })\n .setMeta(\"preventAutohyperlink\", true)\n .run();\n },\n };\n },\n\n addPasteRules() {\n return [\n markPasteRule({\n find: (text) =>\n find(text)\n .filter((link) => {\n if (this.options.validate) {\n return this.options.validate(link.value);\n }\n\n return true;\n })\n .filter((link) => link.isLink)\n .map((link) => ({\n text: link.value,\n index: link.start,\n data: link,\n })),\n type: this.type,\n getAttributes: (match) => ({\n href: match.data?.href,\n }),\n }),\n ];\n },\n\n addProseMirrorPlugins() {\n const plugins: Plugin[] = [];\n\n if (this.options.autoHyperlink) {\n plugins.push(\n autoHyperlink({\n type: this.type,\n validate: this.options.validate,\n })\n );\n }\n\n if (this.options.openOnClick) {\n plugins.push(\n clickHandler({\n type: this.type,\n editor: this.editor,\n validate: this.options.validate,\n view: this.editor.view,\n modals: this.options.modals,\n })\n );\n }\n\n if (this.options.hyperlinkOnPaste) {\n plugins.push(\n pasteHandler({\n editor: this.editor,\n type: this.type,\n })\n );\n }\n\n return plugins;\n },\n});\n"],"names":["Plugin","PluginKey","combineTransactionSteps","getChangedRanges","getMarksBetween","test","findChildrenInRange","find","posToDOMRect","getAttributes","Mark","registerCustomProtocol","reset","mergeAttributes","editHyperlinkHelper","markPasteRule"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -13,11 +13,13 @@ export default function editHyperlink(options: EditHyperlinkOptions) {
|
|
|
13
13
|
const { from, to } = state.selection;
|
|
14
14
|
let link: HTMLAnchorElement | null = null;
|
|
15
15
|
|
|
16
|
-
const selectedNode = options.editor.view.domAtPos(from
|
|
17
|
-
|
|
16
|
+
const selectedNode = options.editor.view.domAtPos(from).node as HTMLElement;
|
|
17
|
+
const nodeName = selectedNode?.nodeName;
|
|
18
18
|
|
|
19
|
-
if (
|
|
19
|
+
if (nodeName === "#text") {
|
|
20
20
|
link = (selectedNode.parentNode as HTMLElement)?.closest("a");
|
|
21
|
+
} else if (nodeName === "P" && selectedNode?.firstElementChild?.localName === "a") {
|
|
22
|
+
link = selectedNode?.firstElementChild as HTMLAnchorElement;
|
|
21
23
|
} else {
|
|
22
24
|
link = selectedNode?.closest("a");
|
|
23
25
|
}
|
|
@@ -37,11 +39,9 @@ export default function editHyperlink(options: EditHyperlinkOptions) {
|
|
|
37
39
|
.chain()
|
|
38
40
|
.focus()
|
|
39
41
|
.command(({ tr }) => {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
tr.replaceWith(
|
|
42
|
+
tr.deleteRange(nodePos, nodePos + (link?.innerText || "")?.length).replaceWith(
|
|
43
|
+
nodePos,
|
|
43
44
|
nodePos,
|
|
44
|
-
nodePos + text?.length,
|
|
45
45
|
options.editor.schema.text(text, [
|
|
46
46
|
options.editor.schema.marks.hyperlink.create({
|
|
47
47
|
href: sanitizeURL?.href,
|
|
@@ -87,11 +87,9 @@ class Tooltip {
|
|
|
87
87
|
placement: "bottom",
|
|
88
88
|
hideOnClick: "toggle",
|
|
89
89
|
onClickOutside: (instance, event) => {
|
|
90
|
-
console.log("onClickOutside", { instance, event });
|
|
91
90
|
this.hide();
|
|
92
91
|
},
|
|
93
92
|
onAfterUpdate: (instance, partialProps) => {
|
|
94
|
-
console.log("onAfterUpdate", { instance, partialProps });
|
|
95
93
|
this.show();
|
|
96
94
|
},
|
|
97
95
|
});
|