veza/apps/web/dist_verification/assets/dropdown-CPqsiWN7.js

2 lines
2.7 KiB
JavaScript
Raw Normal View History

import{a as s,j as c}from"./vendor-react-C9dYU-TK.js";import{c as b}from"./index-BMBS6scK.js";import{A as D,m as R}from"./vendor-motion-CbAtAbUE.js";function L({trigger:g,children:h,align:u="left",className:x,open:d,defaultOpen:v=!1,onOpenChange:m}){const[k,y]=s.useState(v),l=d!==void 0,r=l?d:k,f=s.useRef(null),a=s.useRef(null),p=s.useRef(null),e=s.useRef(-1),i=s.useCallback(t=>{l||y(t),m?.(t),t||(e.current=-1)},[m,l]);s.useEffect(()=>{if(!r)return;const t=o=>{f.current&&!f.current.contains(o.target)&&i(!1)};return document.addEventListener("mousedown",t),()=>{document.removeEventListener("mousedown",t)}},[r,i]),s.useEffect(()=>{if(!r)return;const t=o=>{if(!a.current)return;const E=a.current.querySelectorAll('button, [href], input, select, textarea, [role="menuitem"], [tabindex]:not([tabindex="-1"])'),n=Array.from(E);switch(o.key){case"Escape":o.preventDefault(),i(!1),p.current?.focus();break;case"ArrowDown":o.preventDefault(),e.current=e.current<n.length-1?e.current+1:0,n[e.current]?.focus();break;case"ArrowUp":o.preventDefault(),e.current=e.current>0?e.current-1:n.length-1,n[e.current]?.focus();break;case"Enter":case" ":o.preventDefault(),e.current>=0&&n[e.current]&&n[e.current]?.click();break;case"Home":o.preventDefault(),e.current=0,n[0]?.focus();break;case"End":o.preventDefault(),e.current=n.length-1,n[n.length-1]?.focus();break}};return document.addEventListener("keydown",t),()=>{document.removeEventListener("keydown",t)}},[r,i]),s.useEffect(()=>{if(r&&a.current){const t=a.current.querySelectorAll('button, [href], input, select, textarea, [role="menuitem"], [tabindex]:not([tabindex="-1"])');t.length>0&&(e.current=0,setTimeout(()=>{t[0]?.focus()},0))}},[r]);const w={left:"left-0",right:"right-0",center:"left-1/2 -translate-x-1/2"};return c.jsxs("div",{ref:f,className:b("relative",x),children:[c.jsx("button",{type:"button",ref:p,onClick:()=>i(!r),"aria-haspopup":"true","aria-expanded":r,onKeyDown:t=>{t.key==="ArrowDown"&&(t.preventDefault(),i(!0))},className:"appearance-none bg-transparent border-0 p-0 inline-flex cursor-pointer text-inherit font-inherit focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background rounded-lg",children:g}),r&&c.jsx("div",{className:"fixed inset-0 z-40",onClick:()=>i(!1),"aria-hidden":"true"}),c.jsx(D,{children:r&&c.jsx(R.div,{ref:a,className:b("absolute z-50 mt-2 min-w-32 bg-card border border-border rounded-xl shadow-lg","overflow-hidden",w[u],u==="right"?"origin-top-right":u==="center"?"origin-top":"origin-top-left"),role:"menu","aria-orientation":"vertical",initial:{opacity:0,y:-4},animate:{opacity:1,y:0},exit:{opacity:0,y:-4},transition:{duration:.12,ease:"easeOut"},children:h},"dropdown-menu")})]})}export{L as D};