UNPKG

md-editor-rt

Version:

Markdown editor for react, developed in jsx and typescript, dark theme、beautify content by prettier、render articles directly、paste or clip the picture and upload it...

2 lines (1 loc) 2.02 kB
"use strict";const u=require("react/jsx-runtime"),r=require("react"),E=require("./config.cjs"),D=`${E.prefix}-dropdown-hidden`,$=s=>{const{relative:f="html",onChange:i,disabled:n}=s,[H,d]=r.useState({overlayClass:D,overlayStyle:{}}),o=r.useRef({triggerHover:!1,overlayHover:!1}),a=r.useRef(null),v=r.useRef(null),g=r.useCallback(()=>{var R,S;if(n)return!1;o.current.triggerHover=!0;const e=a.current,t=v.current;if(!e||!t)return;const C=e.getBoundingClientRect(),q=e.offsetTop,N=e.offsetLeft,T=C.height,j=C.width,w=e.getRootNode(),h=((R=w.querySelector(f))==null?void 0:R.scrollLeft)||0,x=((S=w.querySelector(f))==null?void 0:S.clientWidth)||0;let c=N-t.offsetWidth/2+j/2-h;c+t.offsetWidth>h+x&&(c=h+x-t.offsetWidth),c<0&&(c=0),d(k=>({...k,overlayStyle:{top:q+T+"px",left:c+"px"}})),i(!0)},[n,i,f]),m=r.useCallback(()=>{if(n)return!1;o.current.overlayHover=!0},[n]),L=r.useRef(-1),l=r.useCallback(e=>{var t;if(n)return!1;(t=a.current)!=null&&t.contains(e.target)?o.current.triggerHover=!1:o.current.overlayHover=!1,clearTimeout(L.current),L.current=window.setTimeout(()=>{!o.current.overlayHover&&!o.current.triggerHover&&i(!1)},10)},[n,i]),b=s.children,y=s.overlay,p=r.cloneElement(b,{ref:a,key:"cloned-dropdown-trigger"});r.useEffect(()=>{s.visible?d(e=>({...e,overlayClass:""})):d(e=>({...e,overlayClass:D}))},[s.visible]),r.useEffect(()=>{const e=a.current,t=v.current;return e==null||e.addEventListener("mouseenter",g),e==null||e.addEventListener("mouseleave",l),t==null||t.addEventListener("mouseenter",m),t==null||t.addEventListener("mouseleave",l),()=>{e==null||e.removeEventListener("mouseenter",g),e==null||e.removeEventListener("mouseleave",l),t==null||t.removeEventListener("mouseenter",m),t==null||t.removeEventListener("mouseleave",l)}},[l,m,g]);const W=u.jsx("div",{className:`${E.prefix}-dropdown ${H.overlayClass}`,style:H.overlayStyle,ref:v,children:u.jsx("div",{className:`${E.prefix}-dropdown-overlay`,children:y instanceof Array?y[0]:y})});return u.jsxs(u.Fragment,{children:[p,W]})};exports.DropDown=$;