Allows pasting links in the Portable Text Editor
npm install @portabletext/plugin-paste-link@portabletext/plugin-paste-link> Allows pasting links in the Portable Text Editor
``sh`
npm install @portabletext/plugin-paste-link
Import the PasteLinkPlugin React component and place it inside the EditorProvider:
`tsx
import {
defineSchema,
EditorProvider,
PortableTextEditable,
} from '@portabletext/editor'
import {PasteLinkPlugin} from '@portabletext/plugin-paste-link'
const schemaDefinition = defineSchema({
annotations: [{name: 'link', fields: [{name: 'href', type: 'string'}]}],
})
function App() {
return (
)
}
`
By default, the plugin looks for a link annotation with an href field of type string.
Use the guard prop to control when the paste link behavior runs. Return false to skip the behavior and fall through to default paste handling:
`tsx
import {getActiveStyle} from '@portabletext/editor/selectors'
;
// Skip paste-link on h1 blocks (e.g., document titles)
return getActiveStyle(snapshot) !== 'h1'
}}
/>
`
You can customize the link annotation with the link prop:
`tsx
const schemaType = context.schema.annotations.find(
(annotation) => annotation.name === 'customLink',
)
if (!schemaType) return undefined
return {_type: schemaType.name, url: value.href}
}}
/>
`
When text is selected and a URL is pasted, the plugin adds a link annotation to the selection.
When text with an existing link annotation is selected and a URL is pasted, the plugin replaces the existing link with a new one containing the pasted URL.
When the selection is collapsed and a URL is pasted, the plugin inserts the URL text with a link annotation. Existing decorators (bold, italic, etc.) are preserved.
React component that registers paste behaviors for handling URLs.
#### Props
- guard (optional): A PasteLinkGuard function that controls when the paste link behavior runs.{snapshot, event, dom}
- Parameters: - standard behavior guard parameterstrue
- Returns: to allow the behavior, false to skip and fall through to default paste handling.
- Use this to disable paste-link behavior in certain contexts (e.g., title blocks, code blocks).
- link (optional): A LinkMatcher function that converts a pasted URL into a link annotation.context
- Parameters:
- : Contains schema and keyGenerator from the editor contextvalue
- : Contains href (the pasted URL string)_type
- Returns: An object with (annotation type name), optional _key, and any additional properties. Return undefined to skip the behavior.link
- Default: Looks for a annotation with an href field of type string.
`typescript
type PasteLinkGuard = BehaviorGuard<
Extract
true
>
type LinkMatcher = (params: {
context: LinkMatcherContext
value: LinkMatcherValue
}) => LinkMatcherResult | undefined
type LinkMatcherContext = Pick
type LinkMatcherValue = {href: string}
type LinkMatcherResult = {
_type: string
_key?: string
[other: string]: unknown
}
`
- http:https:
- mailto:
- tel:`
-
URLs with other protocols are pasted as plain text.
MIT