/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * */ import type { BaseSelection, DOMConversionMap, EditorConfig, LexicalCommand, LexicalNode, LexicalUpdateJSON, NodeKey, RangeSelection, SerializedElementNode } from 'lexical'; import { ElementNode, Spread } from 'lexical'; export type LinkAttributes = { rel?: null | string; target?: null | string; title?: null | string; }; export type AutoLinkAttributes = Partial>; export type SerializedLinkNode = Spread<{ url: string; }, Spread>; type LinkHTMLElementType = HTMLAnchorElement | HTMLSpanElement; /** @noInheritDoc */ export declare class LinkNode extends ElementNode { /** @internal */ __url: string; /** @internal */ __target: null | string; /** @internal */ __rel: null | string; /** @internal */ __title: null | string; static getType(): string; static clone(node: LinkNode): LinkNode; constructor(url?: string, attributes?: LinkAttributes, key?: NodeKey); createDOM(config: EditorConfig): LinkHTMLElementType; updateLinkDOM(prevNode: this | null, anchor: LinkHTMLElementType, config: EditorConfig): void; updateDOM(prevNode: this, anchor: LinkHTMLElementType, config: EditorConfig): boolean; static importDOM(): DOMConversionMap | null; static importJSON(serializedNode: SerializedLinkNode): LinkNode; updateFromJSON(serializedNode: LexicalUpdateJSON): this; sanitizeUrl(url: string): string; exportJSON(): SerializedLinkNode | SerializedAutoLinkNode; getURL(): string; setURL(url: string): this; getTarget(): null | string; setTarget(target: null | string): this; getRel(): null | string; setRel(rel: null | string): this; getTitle(): null | string; setTitle(title: null | string): this; insertNewAfter(_: RangeSelection, restoreSelection?: boolean): null | ElementNode; canInsertTextBefore(): false; canInsertTextAfter(): false; canBeEmpty(): false; isInline(): true; extractWithChild(child: LexicalNode, selection: BaseSelection, destination: 'clone' | 'html'): boolean; isEmailURI(): boolean; isWebSiteURI(): boolean; } /** * Takes a URL and creates a LinkNode. * @param url - The URL the LinkNode should direct to. * @param attributes - Optional HTML a tag attributes \\{ target, rel, title \\} * @returns The LinkNode. */ export declare function $createLinkNode(url?: string, attributes?: LinkAttributes): LinkNode; /** * Determines if node is a LinkNode. * @param node - The node to be checked. * @returns true if node is a LinkNode, false otherwise. */ export declare function $isLinkNode(node: LexicalNode | null | undefined): node is LinkNode; export type SerializedAutoLinkNode = Spread<{ isUnlinked: boolean; }, SerializedLinkNode>; export declare class AutoLinkNode extends LinkNode { /** @internal */ /** Indicates whether the autolink was ever unlinked. **/ __isUnlinked: boolean; constructor(url?: string, attributes?: AutoLinkAttributes, key?: NodeKey); static getType(): string; static clone(node: AutoLinkNode): AutoLinkNode; getIsUnlinked(): boolean; setIsUnlinked(value: boolean): this; createDOM(config: EditorConfig): LinkHTMLElementType; updateDOM(prevNode: this, anchor: LinkHTMLElementType, config: EditorConfig): boolean; static importJSON(serializedNode: SerializedAutoLinkNode): AutoLinkNode; updateFromJSON(serializedNode: LexicalUpdateJSON): this; static importDOM(): null; exportJSON(): SerializedAutoLinkNode; insertNewAfter(selection: RangeSelection, restoreSelection?: boolean): null | ElementNode; } /** * Takes a URL and creates an AutoLinkNode. AutoLinkNodes are generally automatically generated * during typing, which is especially useful when a button to generate a LinkNode is not practical. * @param url - The URL the LinkNode should direct to. * @param attributes - Optional HTML a tag attributes. \\{ target, rel, title \\} * @returns The LinkNode. */ export declare function $createAutoLinkNode(url?: string, attributes?: AutoLinkAttributes): AutoLinkNode; /** * Determines if node is an AutoLinkNode. * @param node - The node to be checked. * @returns true if node is an AutoLinkNode, false otherwise. */ export declare function $isAutoLinkNode(node: LexicalNode | null | undefined): node is AutoLinkNode; export declare const TOGGLE_LINK_COMMAND: LexicalCommand; /** * Generates or updates a LinkNode. It can also delete a LinkNode if the URL is null, * but saves any children and brings them up to the parent node. * @param url - The URL the link directs to. * @param attributes - Optional HTML a tag attributes. \\{ target, rel, title \\} */ export declare function $toggleLink(url: null | string, attributes?: LinkAttributes): void; /** @deprecated renamed to {@link $toggleLink} by @lexical/eslint-plugin rules-of-lexical */ export declare const toggleLink: typeof $toggleLink; /** * Formats a URL string by adding appropriate protocol if missing * * @param url - URL to format * @returns Formatted URL with appropriate protocol */ export declare function formatUrl(url: string): string; export {};