Features
- Support for hyperlink insertion, edition and removal.
Kit Usage
Installation
The fastest way to add link functionality is with the LinkKit
, which includes pre-configured LinkPlugin
with floating toolbar and Plate UI components.
LinkElement
: Renders link elements.LinkFloatingToolbar
: Provides floating toolbar for link editing.
Add Kit
Add the kit to your plugins:
import { createPlateEditor } from 'platejs/react';
import { LinkKit } from '@/components/editor/plugins/link-kit';
const editor = createPlateEditor({
plugins: [
// ...otherPlugins,
...LinkKit,
],
});
Manual Usage
Installation
pnpm add @platejs/link
Add Plugin
Include LinkPlugin
in your Plate plugins array when creating the editor.
import { LinkPlugin } from '@platejs/link/react';
import { createPlateEditor } from 'platejs/react';
const editor = createPlateEditor({
plugins: [
// ...otherPlugins,
LinkPlugin,
],
});
Configure Plugin
Configure the plugin with floating toolbar and custom components.
import { LinkPlugin } from '@platejs/link/react';
import { createPlateEditor } from 'platejs/react';
import { LinkElement } from '@/components/ui/link-node';
import { LinkFloatingToolbar } from '@/components/ui/link-toolbar';
const editor = createPlateEditor({
plugins: [
// ...otherPlugins,
LinkPlugin.configure({
render: {
node: LinkElement,
afterEditable: () => <LinkFloatingToolbar />,
},
}),
],
});
render.afterEditable
: RendersLinkFloatingToolbar
after the editable area for link editing.render.node
: AssignsLinkElement
to render link elements.
Add Toolbar Button
You can add LinkToolbarButton
to your Toolbar to insert and edit links.
Keyboard Shortcuts
Key | Description |
---|---|
Cmd + K | Add a link on the selected text. |
Plate Plus
Plugins
LinkPlugin
Plugin for link formatting.
forceSubmit optional boolean
Determines whether to force the submission of the link form.
rangeBeforeOptions optional RangeBeforeOptions
Allows custom configurations for rangeBeforeOptions.
- Default:
{ matchString: ' ', skipInvalid: true, afterMatch: true, }
triggerFloatingLinkHotkeys optional string | string[]
Hotkeys to trigger floating link.
- Default:
'meta+k, ctrl+k'
- Default:
allowedSchemes optional string[]
List of allowed URL schemes.
- Default:
['http', 'https', 'mailto', 'tel']
- Default:
dangerouslySkipSanitization optional boolean
Determines whether the sanitation of links should be skipped.
- Default:
false
- Default:
defaultLinkAttributes optional AnchorHTMLAttributes<HTMLAnchorElement>
Default HTML attributes for link elements.
- Default:
{}
- Default:
keepSelectedTextOnPaste optional boolean
Keeps selected text on pasting links by default.
- Default:
true
- Default:
isUrl optional (text: string) => boolean
Callback function to validate a URL.
- Default:
isUrl
- Default:
getUrlHref optional (url: string) => string | undefined
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
forgoogle.com
.transformInput optional (url: string | null) => string | undefined
Callback function to optionally transform the submitted URL provided by the user to the URL input before validation.
getLinkUrl optional (prevUrl: string | null) => Promise<string | null>
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
.
Transforms
tf.insert.link
Inserts a link node into the editor.
API
api.floatingLink.hide
Hides the floating link and resets its state.
api.floatingLink.reset
Resets the floating link state without changing the openEditorId.
api.floatingLink.show
Shows the floating link for the specified mode and editor ID.
api.link.getAttributes
Gets the attributes for a link element.
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.
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
url string
The URL of the link.
text optional string
The text content of the link.
target optional string
The target attribute of the link.
insertTextInLink optional boolean
If
true
, insert the URL as text in the link.insertNodesOptions optional InsertNodesOptions
The options for inserting nodes.
skipValidation optional boolean
If
true
, skips URL validation.- Default:
false
- Default:
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.
url string
The URL of the link node that is being created.
text optional string
The text that is displayed for the link node. If not provided, the URL is used as the display text.
target optional string
Specifies where to open the URL:
_blank
: new tab_self
: same frame_parent
: parent frame_top
: full window
children optional TText[]
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.
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.
On This Page
FeaturesKit UsageInstallationAdd KitManual UsageInstallationAdd PluginConfigure PluginAdd Toolbar ButtonKeyboard ShortcutsPlate PlusPluginsLinkPlugin
Transformstf.insert.link
APIapi.floatingLink.hide
api.floatingLink.reset
api.floatingLink.show
api.link.getAttributes
api.link.submitFloatingLink
insertLink
submitFloatingLink
triggerFloatingLink
triggerFloatingLinkEdit
triggerFloatingLinkInsert
unwrapLink
upsertLink
upsertLinkText
validateUrl
wrapLink
CreateLinkNodeOptions
API ComponentsFloatingLinkNewTabInput
FloatingLinkUrlInput
LinkOpenButton
useFloatingLinkEdit
useFloatingLinkEnter
useFloatingLinkEscape
useFloatingLinkInsert
useLink
useLinkToolbarButton
useVirtualFloatingLink