Link
'use client';
import React from 'react';
import { Plate } from '@udecode/plate/react';
import { editorPlugins } from '@/components/editor/plugins/editor-plugins';
import { useCreateEditor } from '@/components/editor/use-create-editor';
import { Editor, EditorContainer } from '@/components/plate-ui/editor';
import { DEMO_VALUES } from './values/demo-values';
export default function Demo({ id }: { id: string }) {
const editor = useCreateEditor({
plugins: [...editorPlugins],
value: DEMO_VALUES[id],
});
return (
<Plate editor={editor}>
<EditorContainer variant="demo">
<Editor />
</EditorContainer>
</Plate>
);
}
Installation
npm install @udecode/plate-link
Usage
import { LinkPlugin } from '@udecode/plate-link/react';
const plugins = [
// ...otherPlugins,
LinkPlugin.configure({
render: { afterEditable: () => <LinkFloatingToolbar /> },
}),
];
Keyboard Shortcuts
Key | Description |
---|---|
Cmd + K | Add a link on the selected text. |
Plugin Transforms
editor.tf.insert.link
Inserts a link node into the editor.
Plugin API
editor.api.floatingLink.hide
Hides the floating link and resets its state.
editor.api.floatingLink.reset
Resets the floating link state without changing the openEditorId.
editor.api.floatingLink.show
Shows the floating link for the specified mode and editor ID.
editor.api.link.getAttributes
Gets the attributes for a link element.
editor.api.link.submitFloatingLink
Inserts a link if the URL is valid, closes the floating link, and focuses the editor.
Returnsboolean
Returns true
if the link was inserted successfully.
Plugins
LinkPlugin
Plugin for link formatting.
- Default:
- Default:
'meta+k, ctrl+k'
- Default:
['http', 'https', 'mailto', 'tel']
- Default:
false
- Default:
{}
- Default:
true
- Default:
isUrl
Determines whether to force the submission of the link form.
Allows custom configurations for rangeBeforeOptions.
{
matchString: ' ',
skipInvalid: true,
afterMatch: true,
}
Hotkeys to trigger floating link.
List of allowed URL schemes.
Determines whether the sanitation of links should be skipped.
Default HTML attributes for link elements.
Keeps selected text on pasting links by default.
Callback function to validate a URL.
Callback function to optionally get the href for a URL. It returns an optional link that is different from the text content. For example, returns https://google.com
for google.com
.
Callback function to optionally transform the submitted URL provided by the user to the URL input before validation.
On keyboard shortcut or toolbar mousedown, this function is called to get the link URL. The default behavior is to use the browser's native prompt
.
API
insertLink
Inserts a link node into the editor.
submitFloatingLink
Inserts a link if the URL is valid, closes the floating link, and focuses the editor.
- Insert link if url is valid.
- Text is url if empty.
- Close floating link.
- Focus editor.
triggerFloatingLink
Triggers the floating link.
triggerFloatingLinkEdit
Triggers the floating link edit.
triggerFloatingLinkInsert
Trigger floating link. Do not trigger when:
- Selection is across blocks
- Selection has more than one leaf node
- Lowest selection is not text
- Selection has a link node
unwrapLink
Unwraps a link node.
upsertLink
Insert or update a link node. The behavior depends on the current selection and options:
- If selection is in a link or not a URL:
- With
insertTextInLink: true
, inserts URL as text in link - Otherwise, if
text
is empty, sets it to URL - Validates URL unless
skipValidation: true
- With
- If selection is expanded or
update: true
in a link:- Removes link node and gets link text
- Then:
- Inserts link node with updated URL and target
- If
text
is provided, replaces link text
upsertLinkText
If the text is different from the link above text, replaces the link children with a new text node. The new text node has the same marks as the first text node in the link.
validateUrl
Validates a URL based on the plugin options.
wrapLink
Wrap a link node with split.
CreateLinkNodeOptions
Options for creating a new link node.
_blank
: new tab_self
: same frame_parent
: parent frame_top
: full window
The URL of the link node that is being created.
The text that is displayed for the link node. If not provided, the URL is used as the display text.
Specifies where to open the URL:
An array of text nodes that represent the link content.
API Components
FloatingLinkNewTabInput
The input component for controlling whether a link opens in a new tab.
FloatingLinkUrlInput
The input component for entering and editing link URLs.
LinkOpenButton
The button component for opening the link URL.
useFloatingLinkEdit
The behavior hook for the floating link edit functionality.
useFloatingLinkEnter
Listens for the Enter key press event and submits the floating link in the editor.
useFloatingLinkEscape
Listens for the Escape key press event and handles the behavior of the floating link in the editor.
useFloatingLinkInsert
The behavior hook for inserting a link.
useFloatingLinkStore
The store for managing floating link state.
The ID of the editor that has the floating link.
Whether the mouse is down.
Whether the floating link has been updated.
The URL of the floating link.
The text of the floating link.
Whether the floating link should open in a new tab.
The mode of the floating link.
Whether the floating link is being edited.
useLink
The behavior hook for the link element.
useLinkToolbarButton
The behavior hook for the link toolbar button.
useVirtualFloatingLink
Custom hook for managing virtual floating of a link.