@lexical/react
Version:
This package provides Lexical components and hooks for React applications.
18 lines (16 loc) • 3.74 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 p=require("@lexical/react/LexicalComposerContext"),v=require("react"),w=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 h=1;h<arguments.length;h++)c.append("v",arguments[h]);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,h=Object.freeze({})){let {strlen:f=l=>l.length,remainingCharacters:q=()=>{}}=h;v.useEffect(()=>{a.hasNodes([w.OverflowNode])||F(57)},[a]);v.useEffect(()=>{let l=a.getEditorState().read(z.$rootTextContent),m=0;return B.mergeRegister(a.registerTextContentListener(d=>{l=d}),a.registerUpdateListener(({dirtyLeaves:d,dirtyElements:r})=>{var x=a.isComposing();d=0<d.size||0<r.size;if(!x&&d){x=f(l);d=x>c||null!==m&&m>c;q(c-x);if(null===m||d){let t=J(l,c,f);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(w.$isOverflowNode(b)){var e=y;if(y+b.getTextContentSize()<=t){var g=b.getParent();e=b.getPreviousSibling();var k=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(k)?k.select():null!==g&&g.select())}else e<t&&(g=b.getFirstDescendant(),k=null!==g?g.getTextContentSize():0,e+=k,g=C.$isTextNode(g)&&g.isSimpleText(),e=e<=t,(g||e)&&
K(b))}else if(C.$isLeafNode(b)&&(e=y,y+=b.getTextContentSize(),y>t&&!w.$isOverflowNode(b.getParent())&&(g=C.$getSelection(),e<t&&C.$isTextNode(b)&&b.isSimpleText()?([,b]=b.splitText(t-e),b=L(b)):b=L(b),null!==g&&C.$setSelection(g),e=b.getPreviousSibling(),w.$isOverflowNode(e)))){k=b.getFirstChild();var u=e.getChildren();g=u.length;if(null===k)b.append(...u);else for(var n=0;n<g;n++)k.insertBefore(u[n]);n=C.$getSelection();if(C.$isRangeSelection(n)){k=n.anchor;u=k.getNode();n=n.focus;let H=k.getNode();
u.is(e)?k.set(b.getKey(),k.offset,"element"):u.is(b)&&k.set(b.getKey(),g+k.offset,"element");H.is(e)?n.set(b.getKey(),n.offset,"element"):H.is(b)&&n.set(b.getKey(),g+n.offset,"element")}e.remove()}}},{tag:"history-merge"})}m=x}}))},[a,c,q,f])}
function J(a,c,h){var f=Intl.Segmenter;let q=0;var l=0;if("function"===typeof f){a=(new f).segment(a);for(var {segment:m}of a){l+=h(m);if(l>c)break;q+=m.length}}else for(m=Array.from(a),a=m.length,f=0;f<a;f++){let d=m[f];l+=h(d);if(l>c)break;q+=d.length}return q}function L(a){let c=w.$createOverflowNode();a.replace(c);c.append(a);return c}function K(a){let c=a.getChildren(),h=c.length;for(let f=0;f<h;f++)a.insertBefore(c[f]);a.remove();return 0<h?c[h-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:h=O}){let [f]=p.useLexicalComposerContext(),[q,l]=v.useState(c),m=v.useMemo(()=>({remainingCharacters:l,strlen:d=>{if("UTF-8"===a){if(void 0===window.TextEncoder)var r=null;else null===M&&(M=new window.TextEncoder),r=M;null===r?(r=encodeURIComponent(d).match(/%[89ABab]/g),d=d.length+(r?r.length:0)):d=r.encode(d).length;return d}if("UTF-16"===a)return d.length;throw Error("Unrecognized charset");}}),[a]);I(f,c,m);return h({remainingCharacters:q})}