@start-base/start-ui
Version:
<p align="center"> <a href="https://startbase.dev" target="_blank"> <img src="https://startbase.dev/apple-touch-icon.png" width="60px" style="padding-top: 60px" /> </a> </p>
1 lines • 4.06 kB
JavaScript
import e,{forwardRef as t,useState as l,useRef as r,useCallback as o,useEffect as n,cloneElement as a}from"react";import{arrow as u,offset as i}from"@floating-ui/core";import{autoUpdate as c}from"@floating-ui/dom";import{useFloating as d,shift as m,flip as s,FloatingPortal as p}from"@floating-ui/react";import f from"clsx";var v="SUI-FloatingArrow-module-arrow-8vgzo",g="SUI-FloatingArrow-module-top-pK86K",b="SUI-FloatingArrow-module-bottom-SSlO1",h="SUI-FloatingArrow-module-left-UiHRj",w="SUI-FloatingArrow-module-right-As3oX",k=t((({placement:t="bottom",x:l,y:r},o)=>{let n={};switch(t){case"top":n={bottom:(null!=r?r:0)-5,left:null!=l?l:0};break;case"top-end":n={bottom:(null!=r?r:0)-5,left:(null!=l?l:0)+10};break;case"top-start":n={bottom:(null!=r?r:0)-5,left:(null!=l?l:0)-10};break;case"bottom":n={top:(null!=r?r:0)-5,left:null!=l?l:0};break;case"bottom-start":n={top:(null!=r?r:0)-5,left:(null!=l?l:0)-10};break;case"bottom-end":n={top:(null!=r?r:0)-5,left:(null!=l?l:0)+10};break;case"left":n={top:null!=r?r:0,right:(null!=l?l:0)-5};break;case"left-start":n={top:(null!=r?r:0)-5,right:(null!=l?l:0)-5};break;case"left-end":n={top:(null!=r?r:0)+5,right:(null!=l?l:0)-5};break;case"right":n={top:null!=r?r:0,left:(null!=l?l:0)-5};break;case"right-start":n={top:(null!=r?r:0)-5,left:(null!=l?l:0)-5};break;case"right-end":n={top:(null!=r?r:0)+5,left:(null!=l?l:0)-5}}return e.createElement("div",{ref:o,className:f(v,{[g]:["top","top-end","top-start"].includes(t),[b]:["bottom","bottom-end","bottom-start"].includes(t),[h]:["left","left-end","left-start"].includes(t),[w]:["right","right-end","right-start"].includes(t)}),style:n})}));k.displayName="FloatingArrow";var y=k,E="SUI-Tooltip-module-tooltip-TqUld",T="SUI-Tooltip-module-visible-FppbQ",S="SUI-Tooltip-module-hidden-wgWX0",U="SUI-Tooltip-module-animate-4dzjJ",x=t((({text:t,open:v=!1,placement:g="top",trigger:b="hover",className:h,spacing:w=0,hideArrow:k=!0,openDelay:x=!1,closeDelay:F=!0,clickToClose:I=!1,children:A},L)=>{var N,R;const[D,j]=l(v),[z,K]=l(!1),W=r(null),X=r(null),q=r(null);let C=[];k||(C=[u({element:null==q?void 0:q.current})]);const{x:H,y:J,strategy:M,refs:O,middlewareData:Q}=d({placement:g,whileElementsMounted:c,middleware:[i(4+w),m({padding:4}),s({padding:4}),...C]}),B=o((()=>{W.current&&clearTimeout(W.current),X.current&&clearTimeout(X.current);let e=0;"boolean"==typeof x?e=300:"number"==typeof x&&(e=x),K(!1),X.current=window.setTimeout((()=>{j(!0)}),e)}),[x]),G=o((()=>{W.current&&clearTimeout(W.current),X.current&&clearTimeout(X.current),K(!0),W.current=window.setTimeout((()=>{j(!1),K(!1)}),F?200:0)}),[F]),P=o((()=>{"hover"===b&&I&&G(),"click"===b&&(D?G():B())}),[b,I,G,D,B]),V=o((()=>{"hover"===b&&B()}),[B,b]),Y=o((()=>{"hover"===b&&G()}),[G,b]),Z=o((()=>{G()}),[G]);n((()=>{var e;const t=null==(e=null==O?void 0:O.domReference)?void 0:e.current;if(t)return t.addEventListener("click",P),t.addEventListener("mouseenter",V),t.addEventListener("mouseleave",Y),function(){t.removeEventListener("click",P),t.removeEventListener("mouseenter",V),t.removeEventListener("mouseleave",Y)}}),[O,P,V,Y]),function({ref:e,handler:t,withoutRef:l}){n((()=>{function r(r){(null==e?void 0:e.current)&&!(null==e?void 0:e.current.contains(r.target))&&((null==l?void 0:l.current)&&((null==l?void 0:l.current)===r.currentTarget||(null==l?void 0:l.current.contains(r.target)))||t())}return document.addEventListener("mousedown",r),()=>{document.removeEventListener("mousedown",r)}}),[t,e,l])}({ref:null==O?void 0:O.domReference,handler:Z});const $=e.createElement("div",{ref:O.setFloating,style:{position:M,top:null!=J?J:0,left:null!=H?H:0,width:"max-content",maxWidth:"calc(100svw - 8px)"},className:f(E,{[T]:D,[S]:!D,[U]:z},h&&{[h]:!0})},!k&&e.createElement(y,{placement:g,ref:q,x:null==(N=null==Q?void 0:Q.arrow)?void 0:N.x,y:null==(R=null==Q?void 0:Q.arrow)?void 0:R.y}),t);return e.createElement(e.Fragment,null,a(A,{ref:e=>{O.setReference(e),"function"==typeof L?L(e):L&&(L.current=e)}}),e.createElement(p,null,$))}));x.displayName="Tooltip";var F=x;export{F as default};