@lexical/react
Version:
This package provides Lexical components and hooks for React applications.
15 lines (13 loc) • 2.56 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 d=require("@lexical/react/LexicalComposerContext"),g=require("react"),m=require("react/jsx-runtime"),u=require("@lexical/text"),v=require("@lexical/utils");let w="undefined"!==typeof window&&"undefined"!==typeof window.document&&"undefined"!==typeof window.document.createElement?g.useLayoutEffect:g.useEffect;function x(...a){return c=>{a.forEach(b=>{"function"===typeof b?b(c):null!=b&&(b.current=c)})}}
let y=g.forwardRef(function({editor:a,ariaActiveDescendant:c,ariaAutoComplete:b,ariaControls:e,ariaDescribedBy:h,ariaErrorMessage:l,ariaExpanded:z,ariaInvalid:n,ariaLabel:A,ariaLabelledBy:B,ariaMultiline:C,ariaOwns:D,ariaRequired:E,autoCapitalize:F,className:G,id:H,role:p="textbox",spellCheck:I=!0,style:J,tabIndex:K,"data-testid":L,...M},q){let [f,r]=g.useState(a.isEditable()),t=g.useCallback(k=>{k&&k.ownerDocument&&k.ownerDocument.defaultView?a.setRootElement(k):a.setRootElement(null)},[a]),N=g.useMemo(()=>
x(q,t),[t,q]);w(()=>{r(a.isEditable());return a.registerEditableListener(k=>{r(k)})},[a]);return m.jsx("div",{...M,"aria-activedescendant":f?c:void 0,"aria-autocomplete":f?b:"none","aria-controls":f?e:void 0,"aria-describedby":h,...(null!=l?{"aria-errormessage":l}:{}),"aria-expanded":f&&"combobox"===p?!!z:void 0,...(null!=n?{"aria-invalid":n}:{}),"aria-label":A,"aria-labelledby":B,"aria-multiline":C,"aria-owns":f?D:void 0,"aria-readonly":f?void 0:!0,"aria-required":E,autoCapitalize:F,className:G,
contentEditable:f,"data-testid":L,id:H,ref:N,role:f?p:void 0,spellCheck:I,style:J,tabIndex:K})});function O(a){return a.getEditorState().read(u.$canShowPlaceholderCurry(a.isComposing()))}function P(a){let [c,b]=g.useState(()=>O(a));w(()=>{function e(){let h=O(a);b(h)}e();return v.mergeRegister(a.registerUpdateListener(()=>{e()}),a.registerEditableListener(()=>{e()}))},[a]);return c}let R=g.forwardRef(Q);
function Q(a,c){let {placeholder:b,...e}=a;[a]=d.useLexicalComposerContext();return m.jsxs(m.Fragment,{children:[m.jsx(y,{editor:a,...e,ref:c}),null!=b&&m.jsx(S,{editor:a,content:b})]})}function S({content:a,editor:c}){var b=P(c);let [e,h]=g.useState(c.isEditable());g.useLayoutEffect(()=>{h(c.isEditable());return c.registerEditableListener(l=>{h(l)})},[c]);if(!b)return null;b=null;"function"===typeof a?b=a(e):null!==a&&(b=a);return null===b?null:m.jsx("div",{"aria-hidden":!0,children:b})}
exports.ContentEditable=R