UNPKG

@lexical/react

Version:

This package provides Lexical components and hooks for React applications.

11 lines (9 loc) • 2.88 kB
/** * 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. * */ import{useLexicalComposerContext as e}from"@lexical/react/LexicalComposerContext";import{useLayoutEffect as i,useEffect as a,forwardRef as t,useState as r,useCallback as o,useMemo as n}from"react";import{CAN_USE_DOM as l,mergeRegister as d}from"lexical";import{jsx as s,jsxs as c,Fragment as u}from"react/jsx-runtime";import{$canShowPlaceholderCurry as m}from"@lexical/text";const b=l?i:a;function p({editor:e,ariaActiveDescendant:i,ariaAutoComplete:a,ariaControls:t,ariaDescribedBy:l,ariaErrorMessage:d,ariaExpanded:c,ariaInvalid:u,ariaLabel:m,ariaLabelledBy:p,ariaMultiline:f,ariaOwns:v,ariaRequired:x,autoCapitalize:y,className:E,id:C,role:g,spellCheck:h=!0,style:L,tabIndex:w,"data-testid":D,...q},I){const[R,k]=r(e.isEditable()),z=o(i=>{i&&i.ownerDocument&&i.ownerDocument.defaultView?e.setRootElement(i):e.setRootElement(null)},[e]),A=n(()=>function(...e){return i=>{for(const a of e)"function"==typeof a?a(i):null!=a&&(a.current=i)}}(I,z),[z,I]);b(()=>(k(e.isEditable()),e.registerEditableListener(e=>{k(e)})),[e]);const B={"aria-activedescendant":R?i:void 0,"aria-autocomplete":R?a:"none","aria-controls":R?t:void 0,"aria-describedby":l,...null!=d?{"aria-errormessage":d}:{},"aria-expanded":"combobox"===g?c??!1:void 0,...null!=u?{"aria-invalid":u}:{},"aria-label":m,"aria-labelledby":p,"aria-multiline":f,"aria-owns":R?v:void 0,"aria-readonly":!R||void 0,"aria-required":x,...q},M=[B["aria-label"],B["aria-labelledby"],B.title].some(e=>"string"==typeof e&&""!==e.trim()),N=void 0===g?R||M?"textbox":void 0:g;return null==N&&(B["aria-activedescendant"]=void 0,B["aria-autocomplete"]=void 0,B["aria-expanded"]=void 0,B["aria-multiline"]=void 0,B["aria-placeholder"]=void 0,B["aria-readonly"]=void 0,B["aria-required"]=void 0),/*#__PURE__*/s("div",{autoCapitalize:y,className:E,contentEditable:R,"data-testid":D,id:C,ref:A,role:N,spellCheck:h,style:L,tabIndex:w??(R?void 0:-1),...B})}const f=/* @__PURE__ */t(p);function v(e){return e.read("latest",m(e.isComposing()))}const x=/* @__PURE__ */t(y);function y(i,a){const{placeholder:t,...r}=i,[o]=e(); return c(u,{children:[/*#__PURE__*/s(f,{editor:o,...r,ref:a}),null!=t&&/*#__PURE__*/s(E,{editor:o,content:t})]})}function E({content:e,editor:i}){const a=function(e){const[i,a]=r(()=>v(e));return b(()=>{function i(){const i=v(e);a(i)}return i(),d(e.registerUpdateListener(()=>{i()}),e.registerEditableListener(()=>{i()}))},[e]),i}(i),[t,o]=r(i.isEditable());if(b(()=>(o(i.isEditable()),i.registerEditableListener(e=>{o(e)})),[i]),!a)return null;let n=null;return"function"==typeof e?n=e(t):null!==e&&(n=e),null===n?null:/*#__PURE__*/s("div",{"aria-hidden":!0,children:n})}export{x as ContentEditable,f as ContentEditableElement};