@lexical/react
Version:
This package provides Lexical components and hooks for React applications.
18 lines (16 loc) • 4.06 kB
JavaScript
/**
* 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.
*
*/
;var f=require("@lexical/react/LexicalComposerContext"),w=require("react"),x=require("@lexical/overflow"),z=require("@lexical/text"),B=require("@lexical/utils"),C=require("lexical"),D=require("react/jsx-runtime"),F;
function G(a){let c=new URLSearchParams;c.append("code",a);for(let k=1;k<arguments.length;k++)c.append("v",arguments[k]);throw Error(`Minified Lexical error #${a}; visit https://lexical.dev/docs/error?${c} for the full message or `+"use the non-minified dev environment for full errors and additional helpful warnings.");}F=G&&G.__esModule&&Object.prototype.hasOwnProperty.call(G,"default")?G["default"]:G;
function I(a,c,k=Object.freeze({})){let {strlen:g=n=>n.length,remainingCharacters:u=()=>{}}=k;w.useEffect(()=>{a.hasNodes([x.OverflowNode])||F(57)},[a]);w.useEffect(()=>{let n=a.getEditorState().read(z.$rootTextContent),p=0;return B.mergeRegister(a.registerTextContentListener(d=>{n=d}),a.registerUpdateListener(({dirtyLeaves:d,dirtyElements:q})=>{var m=a.isComposing();d=0<d.size||0<q.size;if(!m&&d){m=g(n);d=m>c||null!==p&&p>c;u(c-m);if(null===p||d){let t=J(n,c,g);a.update(()=>{let E=B.$dfs(),N=E.length,
y=0;for(let A=0;A<N;A+=1){var {node:b}=E[A];if(x.$isOverflowNode(b)){var e=y;if(y+b.getTextContentSize()<=t){var h=b.getParent();e=b.getPreviousSibling();var l=b.getNextSibling();K(b);b=C.$getSelection();!C.$isRangeSelection(b)||b.anchor.getNode().isAttached()&&b.focus.getNode().isAttached()||(C.$isTextNode(e)?e.select():C.$isTextNode(l)?l.select():null!==h&&h.select())}else e<t&&(h=b.getFirstDescendant(),l=null!==h?h.getTextContentSize():0,e+=l,h=C.$isTextNode(h)&&h.isSimpleText(),e=e<=t,(h||e)&&
K(b))}else if(C.$isLeafNode(b)&&(e=y,y+=b.getTextContentSize(),y>t&&!x.$isOverflowNode(b.getParent())&&(h=C.$getSelection(),e<t&&C.$isTextNode(b)&&b.isSimpleText()?([,b]=b.splitText(t-e),b=L(b)):b=L(b),null!==h&&C.$setSelection(h),e=b.getPreviousSibling(),x.$isOverflowNode(e)))){l=b.getFirstChild();var v=e.getChildren();h=v.length;if(null===l)b.append(...v);else for(var r=0;r<h;r++)l.insertBefore(v[r]);r=C.$getSelection();if(C.$isRangeSelection(r)){l=r.anchor;v=l.getNode();r=r.focus;let H=l.getNode();
v.is(e)?l.set(b.getKey(),l.offset,"element"):v.is(b)&&l.set(b.getKey(),h+l.offset,"element");H.is(e)?r.set(b.getKey(),r.offset,"element"):H.is(b)&&r.set(b.getKey(),h+r.offset,"element")}e.remove()}}},{tag:"history-merge"})}p=m}}),a.registerCommand(C.DELETE_CHARACTER_COMMAND,d=>{let q=C.$getSelection();if(!C.$isRangeSelection(q))return!1;var m=q.anchor.getNode().getParent();let t=(m=m?m.getParent():null)?m.getNextSibling():null;q.deleteCharacter(d);m&&m.isEmpty()?m.remove():C.$isElementNode(t)&&t.isEmpty()&&
t.remove();return!0},C.COMMAND_PRIORITY_LOW))},[a,c,u,g])}function J(a,c,k){var g=Intl.Segmenter;let u=0;var n=0;if("function"===typeof g){a=(new g).segment(a);for(var {segment:p}of a){n+=k(p);if(n>c)break;u+=p.length}}else for(p=Array.from(a),a=p.length,g=0;g<a;g++){let d=p[g];n+=k(d);if(n>c)break;u+=d.length}return u}function L(a){let c=x.$createOverflowNode();a.replace(c);c.append(a);return c}
function K(a){let c=a.getChildren(),k=c.length;for(let g=0;g<k;g++)a.insertBefore(c[g]);a.remove();return 0<k?c[k-1]:null}let M=null;function O({remainingCharacters:a}){return D.jsx("span",{className:`characters-limit ${0>a?"characters-limit-exceeded":""}`,children:a})}
exports.CharacterLimitPlugin=function({charset:a="UTF-16",maxLength:c=5,renderer:k=O}){let [g]=f.useLexicalComposerContext(),[u,n]=w.useState(c),p=w.useMemo(()=>({remainingCharacters:n,strlen:d=>{if("UTF-8"===a){if(void 0===window.TextEncoder)var q=null;else null===M&&(M=new window.TextEncoder),q=M;null===q?(q=encodeURIComponent(d).match(/%[89ABab]/g),d=d.length+(q?q.length:0)):d=q.encode(d).length;return d}if("UTF-16"===a)return d.length;throw Error("Unrecognized charset");}}),[a]);I(g,c,p);return k({remainingCharacters:u})}