@infinityfx/fluid
Version:
React UI library, using zero-runtime CSS-in-JS.
4 lines (3 loc) • 1.5 kB
JavaScript
"use client";
import{combineRefs as e}from"../../../core/utils.js";import{useRef as n,useEffect as t,cloneElement as r}from"react";import{usePopover as o}from"./root.js";function i({children:i,longpress:c,disabled:a,...s}){const{id:u,trigger:d,opened:l,toggle:g}=o(),h=n(void 0),p=n({clientX:0,clientY:0}),b=n(!1),m=n(!1),f=a||i.props.disabled;return t((()=>{const e=d.current,n=new AbortController,t=n.signal;if(e)return e.addEventListener("mousedown",o,{signal:t}),e.addEventListener("mouseup",i,{signal:t}),e.addEventListener("touchstart",o,{signal:t}),e.addEventListener("touchend",i,{signal:t}),e.addEventListener("keydown",o,{signal:t}),e.addEventListener("keyup",i,{signal:t}),()=>n.abort();function r(e){f||(clearTimeout(h.current),e?h.current=setTimeout(r,e):g(!l))}function o(e){const n="changedTouches"in e,t="key"in e&&("Enter"===e.key||" "===e.key),o="button"in e&&0===e.button&&!m.current;n&&(m.current=!0,p.current=e.changedTouches[0]),c&&(o||n||t)&&(b.current=!0,r(400))}function i(e){const n="changedTouches"in e&&Math.abs(p.current.clientX-e.changedTouches[0].clientX)+Math.abs(p.current.clientY-e.changedTouches[0].clientY)<8,t="key"in e&&("Enter"===e.key||" "===e.key),o="button"in e&&0===e.button&&!m.current;!c&&(o||n||t)&&r(),clearTimeout(h.current),"button"in e&&(m.current=!1),b.current=!1}}),[g,f,l]),r(i,{...s,ref:e(d,i.props.ref),"aria-expanded":l,"aria-controls":u,"aria-disabled":f})}i.displayName="Popover.Trigger";export{i as default};
//# sourceMappingURL=trigger.js.map