UNPKG

@selfcommunity/react-ui

Version:

React UI Components to integrate a Community created with SelfCommunity Platform.

40 lines (39 loc) 1.41 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { AutoLinkPlugin as LexicalAutoLinkPlugin } from '@lexical/react/LexicalAutoLinkPlugin'; const URL_MATCHER = /((https?:\/\/(www\.)?)|(www\.))[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/; const EMAIL_MATCHER = /(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))/; const normalizeURL = (url) => { if (!url.startsWith('http://') && !url.startsWith('https://') && !url.startsWith('mailto:')) { return `https://${url}`; } return url; }; const MATCHERS = [ (text) => { const match = URL_MATCHER.exec(text); return (match && { index: match.index, length: match[0].length, text: match[0], url: normalizeURL(match[0]), attributes: { target: '_blank' } }); }, (text) => { const match = EMAIL_MATCHER.exec(text); return (match && { index: match.index, length: match[0].length, text: match[0], url: `mailto:${match[0]}`, attributes: { target: '_blank' } }); } ]; export default function AutoLinkPlugin() { return _jsx(LexicalAutoLinkPlugin, { matchers: MATCHERS }); }