@mich8060/unified-design-system 0.2.37 → 0.2.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("react/jsx-runtime"),u=require("react"),Ne=require("react-dom"),F=require("../Icon/Icon.cjs"),me=require("../Divider/Divider.cjs"),pe=require("../Key/Key.cjs"),Le=require("../SearchInput/SearchInput.cjs"),Me=require("../Toggle/Toggle.cjs");;/* empty css */const t="uds-action-menu",ke=new Set(["search","autosuggest"]),W=n=>String(n||"").trim().toLowerCase(),Re=n=>typeof(n==null?void 0:n.label)=="string"?n.label:"",fe=n=>{var p,f;const d=[...n];for(;d.length>0&&((p=d[0])!=null&&p.divider);)d.shift();for(;d.length>0&&((f=d[d.length-1])!=null&&f.divider);)d.pop();return d},ge=(n,d)=>{const p=W(d);if(!p)return n;const f=[];for(const m of n){if(m!=null&&m.divider){f.push(m);continue}const b=W(Re(m)),_=Array.isArray(m==null?void 0:m.items)?ge(m.items,d):null,h=Array.isArray(_)&&_.length>0;(b.includes(p)||h)&&f.push(h?{...m,items:fe(_)}:m)}return fe(f)},he=(n,d,p=!1)=>{const f=W(d);if(!f||!n)return n;const m=W(n),b=p?m.startsWith(f)?0:-1:m.indexOf(f);if(b<0)return n;const _=b+f.length,h=n.slice(0,b),M=n.slice(b,_),q=n.slice(_);return s.jsxs(s.Fragment,{children:[h,s.jsx("span",{className:`${t}__match ${p?`${t}__match--weight`:""}`,children:M}),q]})};function _e({item:n,onItemClick:d}){const[p,f]=u.useState(!1),[m,b]=u.useState(!1),_=u.useRef(null),h=u.useRef(null),M=()=>{clearTimeout(h.current),f(!0)},q=()=>{h.current=setTimeout(()=>{f(!1)},150)},G=()=>{clearTimeout(h.current)},U=()=>{h.current=setTimeout(()=>{f(!1)},150)};return u.useEffect(()=>()=>{clearTimeout(h.current)},[]),u.useLayoutEffect(()=>{if(!p||!_.current)return;const r=_.current.getBoundingClientRect(),E=r.right>window.innerWidth-8,k=r.left<8;if(E&&!k){b(!0);return}if(k&&!E){b(!1);return}E&&k&&b(r.right-window.innerWidth>8)},[p]),s.jsxs("div",{className:`${t}__item-wrapper`,onMouseEnter:M,onMouseLeave:q,children:[s.jsxs("button",{className:`${t}__item ${t}__item--has-submenu ${n.disabled?`${t}__item--disabled`:""}`,role:"menuitem",disabled:n.disabled,"aria-haspopup":"true","aria-expanded":p,"aria-label":n.label,children:[n.icon&&s.jsx(F.default,{name:n.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),s.jsx("span",{className:`${t}__item-label`,children:n.label}),s.jsx(F.default,{name:"CaretRight",size:12,appearance:"regular",className:`${t}__item-arrow`})]}),p&&n.items&&s.jsx("div",{ref:_,className:`${t}__submenu ${m?`${t}__submenu--left`:""}`,role:"menu","aria-orientation":"vertical",onMouseEnter:G,onMouseLeave:U,children:n.items.map((r,E)=>r.divider?s.jsx("div",{className:`${t}__divider`,children:s.jsx(me.default,{})},`divider-${E}`):r.items&&r.items.length>0?s.jsx(_e,{item:r,onItemClick:d},r.id||E):s.jsxs("button",{className:`${t}__item ${r.disabled?`${t}__item--disabled`:""} ${r.active?`${t}__item--active`:""} ${r.destructive?`${t}__item--destructive`:""}`,role:"menuitem",disabled:r.disabled,onClick:k=>d(r,k),"aria-label":r.label,children:[r.icon&&s.jsx(F.default,{name:r.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),s.jsx("span",{className:`${t}__item-label`,children:r.label}),r.shortcut&&s.jsx(pe.default,{label:r.shortcut,appearance:"light",className:`${t}__item-shortcut`})]},r.id||E))})]})}function Ae({trigger:n,items:d=[],placement:p="bottom-start",variant:f="default",searchPlaceholder:m="Search...",noResultsText:b="No results found",fullWidth:_=!1,disabled:h=!1,onOpenChange:M,className:q="",menuClassName:G="",...U}){const[r,E]=u.useState(!1),[k,ve]=u.useState({}),[I,Y]=u.useState(null),j=u.useRef(null),x=u.useRef(null),D=u.useRef(null),K=u.useRef(null),[Z,ee]=u.useState(""),[$e,be]=u.useState(""),z=f==="search",S=f==="autosuggest",te=ke.has(f),P=z?Z:S?$e:"",ne=u.useMemo(()=>te?ge(d,P):d,[te,d,P]),re=e=>{var i;e.key==="Escape"&&(N(!1),(i=x.current)==null||i.focus())},N=e=>{E(e),e||(K.current=null),M&&M(e)};u.useEffect(()=>{const e=i=>{j.current&&x.current&&!j.current.contains(i.target)&&!x.current.contains(i.target)&&N(!1)};return r&&(document.addEventListener("mousedown",e),document.addEventListener("keydown",re)),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",re)}},[r]);const oe=()=>{if(!r||!j.current||!x.current)return;const e=x.current.closest(".uds-modal__overlay"),i=x.current.closest(".app-shell__main-content"),o=e instanceof HTMLElement?e:i instanceof HTMLElement?i:document.body;Y(o);const g=x.current.getBoundingClientRect(),v=j.current.getBoundingClientRect(),C=o===document.body?{top:0,left:0}:o.getBoundingClientRect(),w=o===document.body?0:o.scrollTop,y=o===document.body?0:o.scrollLeft,L=o===document.body?window.innerWidth:o.clientWidth,R=o===document.body?window.innerHeight:o.clientHeight,a=8,l=8,[A="bottom",Ee="start"]=String(p).split("-"),H=(c,ie)=>{let V=0,Q=0;const ce=g.top-C.top+w,le=g.bottom-C.top+w,ue=g.left-C.left+y,de=g.right-C.left+y;return c==="bottom"&&(V=le+l),c==="top"&&(V=ce-v.height-l),c==="right"&&(Q=de+l),c==="left"&&(Q=ue-v.width-l),(c==="bottom"||c==="top")&&(ie==="end"?Q=de-v.width:Q=ue),(c==="left"||c==="right")&&(ie==="end"?V=le-v.height:V=ce),{top:V,left:Q}},Se=c=>({top:c.top<w+a,bottom:c.top+v.height>w+R-a,left:c.left<y+a,right:c.left+v.width>y+L-a});let $=K.current??A;const O=Ee;let T=H($,O);if(!K.current){const c=Se(T);$==="bottom"&&c.bottom?($="top",T=H($,O)):$==="top"&&c.top?($="bottom",T=H($,O)):$==="right"&&c.right?($="left",T=H($,O)):$==="left"&&c.left&&($="right",T=H($,O)),K.current=$}let J=T.top,X=T.left;J=Math.max(w+a,Math.min(J,w+R-v.height-a)),X=Math.max(y+a,Math.min(X,y+L-v.width-a));const B={position:o===document.body?"fixed":"absolute",top:`${J}px`,left:`${X}px`,width:_?`${g.width}px`:void 0,zIndex:o===e?"calc(var(--uds-elevation-modal) + 1)":void 0};ve(c=>c.top===B.top&&c.left===B.left&&c.width===B.width&&c.position===B.position?c:B)};u.useLayoutEffect(()=>{var e,i;if(r){if(I===null){const o=(e=x.current)==null?void 0:e.closest(".uds-modal__overlay"),g=(i=x.current)==null?void 0:i.closest(".app-shell__main-content");Y(o instanceof HTMLElement?o:g instanceof HTMLElement?g:document.body)}oe()}},[r,p,_,I]),u.useEffect(()=>{if(!r)return;const e=()=>{D.current==null&&(D.current=requestAnimationFrame(()=>{D.current=null,oe()}))};return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),D.current!=null&&(cancelAnimationFrame(D.current),D.current=null)}},[r]),u.useEffect(()=>{if(!r){ee("");return}z&&requestAnimationFrame(()=>{var i;const e=(i=j.current)==null?void 0:i.querySelector('input[type="search"]');e==null||e.focus()})},[r,z]);const we=e=>{var v,C,w,y,L,R,a;if(z&&e.target instanceof HTMLInputElement&&e.target.type==="search"&&((v=j.current)==null?void 0:v.contains(e.target))){if(e.key==="ArrowDown"){e.preventDefault();const l=(C=j.current)==null?void 0:C.querySelector('[role="menuitem"]:not([disabled])');l==null||l.focus()}return}const o=(w=j.current)==null?void 0:w.querySelectorAll('[role="menuitem"]:not([disabled])');if(!o||o.length===0)return;const g=Array.from(o).findIndex(l=>l===document.activeElement);switch(e.key){case"ArrowDown":{e.preventDefault();const l=g<o.length-1?g+1:0;(y=o[l])==null||y.focus();break}case"ArrowUp":{e.preventDefault();const l=g>0?g-1:o.length-1;(L=o[l])==null||L.focus();break}case"Home":e.preventDefault(),(R=o[0])==null||R.focus();break;case"End":e.preventDefault(),(a=o[o.length-1])==null||a.focus();break;case"Enter":case" ":e.preventDefault(),document.activeElement&&document.activeElement.click();break}},se=()=>{h||N(!r)},ae=(e,i)=>{if(e.disabled){i.preventDefault();return}e.onClick&&e.onClick(e,i),N(!1)},ye=()=>z?s.jsx("div",{className:`${t}__search`,children:s.jsx(Le.SearchInput,{size:"compact",value:Z,onChange:e=>ee(e.target.value),className:`${t}__search-input`,placeholder:m,"aria-label":m})}):null,xe=()=>{var e,i,o,g,v;if(!n)return null;if(u.isValidElement(n)){const C=(e=n.props)==null?void 0:e.onClick,w=(i=n.props)==null?void 0:i.onChange,y=(o=n.props)==null?void 0:o.onFocus,L=(g=n.props)==null?void 0:g.onKeyDown,R=u.cloneElement(n,{disabled:h||((v=n.props)==null?void 0:v.disabled),"aria-disabled":h||void 0,onClick:a=>{h||(S||(a.preventDefault(),a.stopPropagation()),C&&C(a),S?N(!0):se())},onFocus:a=>{y&&y(a),!(h||!S)&&N(!0)},onChange:a=>{if(w&&w(a),h||!S)return;const l=a==null?void 0:a.target,A=l&&typeof l=="object"&&"value"in l?String(l.value??""):"";be(A),N(!0)},onKeyDown:a=>{var l;if(L&&L(a),!(h||!S)){if(a.key==="Escape"){N(!1);return}if(a.key==="ArrowDown"){a.preventDefault();const A=(l=j.current)==null?void 0:l.querySelector('[role="menuitem"]:not([disabled])');A==null||A.focus()}}},"aria-haspopup":"true","aria-expanded":r});return s.jsx("div",{ref:x,className:`${t}__trigger`,children:R})}return s.jsx("div",{ref:x,className:`${t}__trigger`,onClick:se,children:n})},je=[t,r&&`${t}--open`,_&&`${t}--full-width`,h&&`${t}--disabled`,q].filter(Boolean).join(" "),Ce=[`${t}__menu`,`${t}__menu--portal`,f==="search"&&`${t}__menu--search`,_&&`${t}__menu--full-width`,G].filter(Boolean).join(" ");return s.jsxs("div",{className:je,...U,children:[xe(),r&&!h&&I?Ne.createPortal(s.jsxs("div",{ref:j,className:Ce,style:k,role:"menu","aria-orientation":"vertical",onKeyDown:we,children:[ye(),ne.length===0?s.jsx("div",{className:`${t}__empty`,children:b}):null,ne.map((e,i)=>e.divider?s.jsx("div",{className:`${t}__divider`,children:s.jsx(me.default,{})},`divider-${i}`):e.items&&e.items.length>0?s.jsx(_e,{item:e,onItemClick:ae},e.id||i):e.type==="toggle"?s.jsxs("div",{className:`${t}__item ${t}__item--toggle ${e.disabled?`${t}__item--disabled`:""}`,role:"menuitemcheckbox","aria-checked":!!e.checked,"aria-label":e.label,children:[e.icon&&s.jsx(F.default,{name:e.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),s.jsx("span",{className:`${t}__item-label`,children:he(e.label,P,S)}),s.jsx(Me.default,{checked:!!e.checked,size:"small",disabled:e.disabled,onChange:o=>{e.onChange&&e.onChange(o)},className:`${t}__item-toggle`})]},e.id||i):s.jsxs("button",{className:`${t}__item ${e.disabled?`${t}__item--disabled`:""} ${e.active?`${t}__item--active`:""} ${e.destructive?`${t}__item--destructive`:""}`,role:"menuitem",disabled:e.disabled,onClick:o=>ae(e,o),"aria-label":e.label,children:[e.icon&&s.jsx(F.default,{name:e.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),s.jsx("span",{className:`${t}__item-label`,children:he(e.label,P,S)}),e.shortcut&&s.jsx(pe.default,{label:e.shortcut,appearance:"light",className:`${t}__item-shortcut`})]},e.id||i))]}),I):null]})}exports.default=Ae;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("react/jsx-runtime"),c=require("react"),Ee=require("react-dom"),Q=require("../Icon/Icon.cjs"),me=require("../Divider/Divider.cjs"),pe=require("../Key/Key.cjs"),Ne=require("../SearchInput/SearchInput.cjs"),ke=require("../Toggle/Toggle.cjs");;/* empty css */const t="uds-action-menu",Le=new Set(["search","autosuggest"]),K=n=>String(n||"").trim().toLowerCase(),Re=n=>typeof(n==null?void 0:n.label)=="string"?n.label:"",fe=n=>{var p,u;const l=[...n];for(;l.length>0&&((p=l[0])!=null&&p.divider);)l.shift();for(;l.length>0&&((u=l[l.length-1])!=null&&u.divider);)l.pop();return l},ge=(n,l)=>{const p=K(l);if(!p)return n;const u=[];for(const h of n){if(h!=null&&h.divider){u.push(h);continue}const $=K(Re(h)),g=Array.isArray(h==null?void 0:h.items)?ge(h.items,l):null,d=Array.isArray(g)&&g.length>0;($.includes(p)||d)&&u.push(d?{...h,items:fe(g)}:h)}return fe(u)},he=(n,l,p=!1)=>{const u=K(l);if(!u||!n)return n;const h=K(n),$=p?h.startsWith(u)?0:-1:h.indexOf(u);if($<0)return n;const g=$+u.length,d=n.slice(0,$),M=n.slice($,g),q=n.slice(g);return o.jsxs(o.Fragment,{children:[d,o.jsx("span",{className:`${t}__match ${p?`${t}__match--weight`:""}`,children:M}),q]})};function _e({item:n,onItemClick:l}){const[p,u]=c.useState(!1),[h,$]=c.useState(!1),g=c.useRef(null),d=c.useRef(null),M=()=>{clearTimeout(d.current),u(!0)},q=()=>{d.current=setTimeout(()=>{u(!1)},150)},P=()=>{clearTimeout(d.current)},W=()=>{d.current=setTimeout(()=>{u(!1)},150)};return c.useEffect(()=>()=>{clearTimeout(d.current)},[]),c.useLayoutEffect(()=>{if(!p||!g.current)return;const r=g.current.getBoundingClientRect(),S=r.right>window.innerWidth-8,A=r.left<8;if(S&&!A){$(!0);return}if(A&&!S){$(!1);return}S&&A&&$(r.right-window.innerWidth>8)},[p]),o.jsxs("div",{className:`${t}__item-wrapper`,onMouseEnter:M,onMouseLeave:q,children:[o.jsxs("button",{className:`${t}__item ${t}__item--has-submenu ${n.disabled?`${t}__item--disabled`:""}`,role:"menuitem",disabled:n.disabled,"aria-haspopup":"true","aria-expanded":p,"aria-label":n.label,children:[n.icon&&o.jsx(Q.default,{name:n.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),o.jsx("span",{className:`${t}__item-label`,children:n.label}),o.jsx(Q.default,{name:"CaretRight",size:12,appearance:"regular",className:`${t}__item-arrow`})]}),p&&n.items&&o.jsx("div",{ref:g,className:`${t}__submenu ${h?`${t}__submenu--left`:""}`,role:"menu","aria-orientation":"vertical",onMouseEnter:P,onMouseLeave:W,children:n.items.map((r,S)=>r.divider?o.jsx("div",{className:`${t}__divider`,children:o.jsx(me.default,{})},`divider-${S}`):r.items&&r.items.length>0?o.jsx(_e,{item:r,onItemClick:l},r.id||S):o.jsxs("button",{className:`${t}__item ${r.disabled?`${t}__item--disabled`:""} ${r.active?`${t}__item--active`:""} ${r.destructive?`${t}__item--destructive`:""}`,role:"menuitem",disabled:r.disabled,onClick:A=>l(r,A),"aria-label":r.label,children:[r.icon&&o.jsx(Q.default,{name:r.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),o.jsx("span",{className:`${t}__item-label`,children:r.label}),r.shortcut&&o.jsx(pe.default,{label:r.shortcut,appearance:"light",className:`${t}__item-shortcut`})]},r.id||S))})]})}function Me({trigger:n,items:l=[],placement:p="bottom-start",variant:u="default",searchPlaceholder:h="Search...",noResultsText:$="No results found",fullWidth:g=!1,disabled:d=!1,onOpenChange:M,className:q="",menuClassName:P="",...W}){const[r,S]=c.useState(!1),[A,ve]=c.useState({}),[G,X]=c.useState(typeof document<"u"?document.body:null),j=c.useRef(null),C=c.useRef(null),T=c.useRef(null),F=c.useRef(null),[Y,Z]=c.useState(""),[$e,be]=c.useState(""),z=u==="search",N=u==="autosuggest",ee=Le.has(u),I=z?Y:N?$e:"",te=c.useMemo(()=>ee?ge(l,I):l,[ee,l,I]),ne=()=>{if(!C.current||typeof document>"u")return document.body;const e=C.current.closest(".uds-modal__overlay"),s=C.current.closest(".app-shell__main-content");return e instanceof HTMLElement?e:s instanceof HTMLElement?s:document.body},re=e=>{var s;e.key==="Escape"&&(k(!1),(s=C.current)==null||s.focus())},k=e=>{e&&X(ne()),S(e),e||(F.current=null),M&&M(e)};c.useEffect(()=>{const e=s=>{j.current&&C.current&&!j.current.contains(s.target)&&!C.current.contains(s.target)&&k(!1)};return r&&(document.addEventListener("mousedown",e),document.addEventListener("keydown",re)),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",re)}},[r]);const oe=()=>{if(!r||!j.current||!C.current)return;const e=ne();X(e);const s=C.current.getBoundingClientRect(),a=j.current.getBoundingClientRect(),b=e===document.body?{top:0,left:0}:e.getBoundingClientRect(),w=e===document.body?0:e.scrollTop,y=e===document.body?0:e.scrollLeft,L=e===document.body?window.innerWidth:e.clientWidth,R=e===document.body?window.innerHeight:e.clientHeight,_=8,E=8,[f="bottom",m="start"]=String(p).split("-"),x=(i,ie)=>{let O=0,V=0;const ce=s.top-b.top+w,le=s.bottom-b.top+w,ue=s.left-b.left+y,de=s.right-b.left+y;return i==="bottom"&&(O=le+E),i==="top"&&(O=ce-a.height-E),i==="right"&&(V=de+E),i==="left"&&(V=ue-a.width-E),(i==="bottom"||i==="top")&&(ie==="end"?V=de-a.width:V=ue),(i==="left"||i==="right")&&(ie==="end"?O=le-a.height:O=ce),{top:O,left:V}},Se=i=>({top:i.top<w+_,bottom:i.top+a.height>w+R-_,left:i.left<y+_,right:i.left+a.width>y+L-_});let v=F.current??f;const B=m;let D=x(v,B);if(!F.current){const i=Se(D);v==="bottom"&&i.bottom?(v="top",D=x(v,B)):v==="top"&&i.top?(v="bottom",D=x(v,B)):v==="right"&&i.right?(v="left",D=x(v,B)):v==="left"&&i.left&&(v="right",D=x(v,B)),F.current=v}let U=D.top,J=D.left;U=Math.max(w+_,Math.min(U,w+R-a.height-_)),J=Math.max(y+_,Math.min(J,y+L-a.width-_));const H={position:e===document.body?"fixed":"absolute",top:`${U}px`,left:`${J}px`,width:g?`${s.width}px`:void 0,zIndex:e===modalOverlayContainer?"calc(var(--uds-elevation-modal) + 1)":void 0};ve(i=>i.top===H.top&&i.left===H.left&&i.width===H.width&&i.position===H.position?i:H)};c.useLayoutEffect(()=>{r&&oe()},[r,p,g,G]),c.useEffect(()=>{if(!r)return;const e=()=>{T.current==null&&(T.current=requestAnimationFrame(()=>{T.current=null,oe()}))};return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),T.current!=null&&(cancelAnimationFrame(T.current),T.current=null)}},[r]),c.useEffect(()=>{if(!r){Z("");return}z&&requestAnimationFrame(()=>{var s;const e=(s=j.current)==null?void 0:s.querySelector('input[type="search"]');e==null||e.focus()})},[r,z]);const we=e=>{var w,y,L,R,_,E,f;if(z&&e.target instanceof HTMLInputElement&&e.target.type==="search"&&((w=j.current)==null?void 0:w.contains(e.target))){if(e.key==="ArrowDown"){e.preventDefault();const m=(y=j.current)==null?void 0:y.querySelector('[role="menuitem"]:not([disabled])');m==null||m.focus()}return}const a=(L=j.current)==null?void 0:L.querySelectorAll('[role="menuitem"]:not([disabled])');if(!a||a.length===0)return;const b=Array.from(a).findIndex(m=>m===document.activeElement);switch(e.key){case"ArrowDown":{e.preventDefault();const m=b<a.length-1?b+1:0;(R=a[m])==null||R.focus();break}case"ArrowUp":{e.preventDefault();const m=b>0?b-1:a.length-1;(_=a[m])==null||_.focus();break}case"Home":e.preventDefault(),(E=a[0])==null||E.focus();break;case"End":e.preventDefault(),(f=a[a.length-1])==null||f.focus();break;case"Enter":case" ":e.preventDefault(),document.activeElement&&document.activeElement.click();break}},se=()=>{d||k(!r)},ae=(e,s)=>{if(e.disabled){s.preventDefault();return}e.onClick&&e.onClick(e,s),k(!1)},ye=()=>z?o.jsx("div",{className:`${t}__search`,children:o.jsx(Ne.SearchInput,{size:"compact",value:Y,onChange:e=>Z(e.target.value),className:`${t}__search-input`,placeholder:h,"aria-label":h})}):null,xe=()=>{var e,s,a,b,w;if(!n)return null;if(c.isValidElement(n)){const y=(e=n.props)==null?void 0:e.onClick,L=(s=n.props)==null?void 0:s.onChange,R=(a=n.props)==null?void 0:a.onFocus,_=(b=n.props)==null?void 0:b.onKeyDown,E=c.cloneElement(n,{disabled:d||((w=n.props)==null?void 0:w.disabled),"aria-disabled":d||void 0,onClick:f=>{d||(N||(f.preventDefault(),f.stopPropagation()),y&&y(f),N?k(!0):se())},onFocus:f=>{R&&R(f),!(d||!N)&&k(!0)},onChange:f=>{if(L&&L(f),d||!N)return;const m=f==null?void 0:f.target,x=m&&typeof m=="object"&&"value"in m?String(m.value??""):"";be(x),k(!0)},onKeyDown:f=>{var m;if(_&&_(f),!(d||!N)){if(f.key==="Escape"){k(!1);return}if(f.key==="ArrowDown"){f.preventDefault();const x=(m=j.current)==null?void 0:m.querySelector('[role="menuitem"]:not([disabled])');x==null||x.focus()}}},"aria-haspopup":"true","aria-expanded":r});return o.jsx("div",{ref:C,className:`${t}__trigger`,children:E})}return o.jsx("div",{ref:C,className:`${t}__trigger`,onClick:se,children:n})},je=[t,r&&`${t}--open`,g&&`${t}--full-width`,d&&`${t}--disabled`,q].filter(Boolean).join(" "),Ce=[`${t}__menu`,`${t}__menu--portal`,u==="search"&&`${t}__menu--search`,g&&`${t}__menu--full-width`,P].filter(Boolean).join(" ");return o.jsxs("div",{className:je,...W,children:[xe(),r&&!d&&G?Ee.createPortal(o.jsxs("div",{ref:j,className:Ce,style:A,role:"menu","aria-orientation":"vertical",onKeyDown:we,children:[ye(),te.length===0?o.jsx("div",{className:`${t}__empty`,children:$}):null,te.map((e,s)=>e.divider?o.jsx("div",{className:`${t}__divider`,children:o.jsx(me.default,{})},`divider-${s}`):e.items&&e.items.length>0?o.jsx(_e,{item:e,onItemClick:ae},e.id||s):e.type==="toggle"?o.jsxs("div",{className:`${t}__item ${t}__item--toggle ${e.disabled?`${t}__item--disabled`:""}`,role:"menuitemcheckbox","aria-checked":!!e.checked,"aria-label":e.label,children:[e.icon&&o.jsx(Q.default,{name:e.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),o.jsx("span",{className:`${t}__item-label`,children:he(e.label,I,N)}),o.jsx(ke.default,{checked:!!e.checked,size:"small",disabled:e.disabled,onChange:a=>{e.onChange&&e.onChange(a)},className:`${t}__item-toggle`})]},e.id||s):o.jsxs("button",{className:`${t}__item ${e.disabled?`${t}__item--disabled`:""} ${e.active?`${t}__item--active`:""} ${e.destructive?`${t}__item--destructive`:""}`,role:"menuitem",disabled:e.disabled,onClick:a=>ae(e,a),"aria-label":e.label,children:[e.icon&&o.jsx(Q.default,{name:e.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),o.jsx("span",{className:`${t}__item-label`,children:he(e.label,I,N)}),e.shortcut&&o.jsx(pe.default,{label:e.shortcut,appearance:"light",className:`${t}__item-shortcut`})]},e.id||s))]}),G):null]})}exports.default=Me;
@@ -1 +1 @@
1
- import{jsxs as S,jsx as c,Fragment as De}from"react/jsx-runtime";import pe,{useState as z,useRef as B,useMemo as xe,useEffect as U,useLayoutEffect as $e}from"react";import{createPortal as ze}from"react-dom";import j from"../Icon/Icon.js";import ve from"../Divider/Divider.js";import we from"../Key/Key.js";import{SearchInput as He}from"../SearchInput/SearchInput.js";import Be from"../Toggle/Toggle.js";/* empty css */const t="uds-action-menu",Oe=new Set(["search","autosuggest"]),J=n=>String(n||"").trim().toLowerCase(),Ve=n=>typeof(n==null?void 0:n.label)=="string"?n.label:"",ge=n=>{var h,d;const u=[...n];for(;u.length>0&&((h=u[0])!=null&&h.divider);)u.shift();for(;u.length>0&&((d=u[u.length-1])!=null&&d.divider);)u.pop();return u},be=(n,u)=>{const h=J(u);if(!h)return n;const d=[];for(const m of n){if(m!=null&&m.divider){d.push(m);continue}const v=J(Ve(m)),g=Array.isArray(m==null?void 0:m.items)?be(m.items,u):null,f=Array.isArray(g)&&g.length>0;(v.includes(h)||f)&&d.push(f?{...m,items:ge(g)}:m)}return ge(d)},_e=(n,u,h=!1)=>{const d=J(u);if(!d||!n)return n;const m=J(n),v=h?m.startsWith(d)?0:-1:m.indexOf(d);if(v<0)return n;const g=v+d.length,f=n.slice(0,v),A=n.slice(v,g),O=n.slice(g);return S(De,{children:[f,c("span",{className:`${t}__match ${h?`${t}__match--weight`:""}`,children:A}),O]})};function ye({item:n,onItemClick:u}){const[h,d]=z(!1),[m,v]=z(!1),g=B(null),f=B(null),A=()=>{clearTimeout(f.current),d(!0)},O=()=>{f.current=setTimeout(()=>{d(!1)},150)},X=()=>{clearTimeout(f.current)},Y=()=>{f.current=setTimeout(()=>{d(!1)},150)};return U(()=>()=>{clearTimeout(f.current)},[]),$e(()=>{if(!h||!g.current)return;const r=g.current.getBoundingClientRect(),N=r.right>window.innerWidth-8,R=r.left<8;if(N&&!R){v(!0);return}if(R&&!N){v(!1);return}N&&R&&v(r.right-window.innerWidth>8)},[h]),S("div",{className:`${t}__item-wrapper`,onMouseEnter:A,onMouseLeave:O,children:[S("button",{className:`${t}__item ${t}__item--has-submenu ${n.disabled?`${t}__item--disabled`:""}`,role:"menuitem",disabled:n.disabled,"aria-haspopup":"true","aria-expanded":h,"aria-label":n.label,children:[n.icon&&c(j,{name:n.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),c("span",{className:`${t}__item-label`,children:n.label}),c(j,{name:"CaretRight",size:12,appearance:"regular",className:`${t}__item-arrow`})]}),h&&n.items&&c("div",{ref:g,className:`${t}__submenu ${m?`${t}__submenu--left`:""}`,role:"menu","aria-orientation":"vertical",onMouseEnter:X,onMouseLeave:Y,children:n.items.map((r,N)=>r.divider?c("div",{className:`${t}__divider`,children:c(ve,{})},`divider-${N}`):r.items&&r.items.length>0?c(ye,{item:r,onItemClick:u},r.id||N):S("button",{className:`${t}__item ${r.disabled?`${t}__item--disabled`:""} ${r.active?`${t}__item--active`:""} ${r.destructive?`${t}__item--destructive`:""}`,role:"menuitem",disabled:r.disabled,onClick:R=>u(r,R),"aria-label":r.label,children:[r.icon&&c(j,{name:r.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),c("span",{className:`${t}__item-label`,children:r.label}),r.shortcut&&c(we,{label:r.shortcut,appearance:"light",className:`${t}__item-shortcut`})]},r.id||N))})]})}function Ue({trigger:n,items:u=[],placement:h="bottom-start",variant:d="default",searchPlaceholder:m="Search...",noResultsText:v="No results found",fullWidth:g=!1,disabled:f=!1,onOpenChange:A,className:O="",menuClassName:X="",...Y}){const[r,N]=z(!1),[R,Ce]=z({}),[P,te]=z(null),C=B(null),y=B(null),H=B(null),W=B(null),[ne,re]=z(""),[Ee,Ne]=z(""),V=d==="search",L=d==="autosuggest",oe=Oe.has(d),G=V?ne:L?Ee:"",ie=xe(()=>oe?be(u,G):u,[oe,u,G]),ae=e=>{var a;e.key==="Escape"&&(k(!1),(a=y.current)==null||a.focus())},k=e=>{N(e),e||(W.current=null),A&&A(e)};U(()=>{const e=a=>{C.current&&y.current&&!C.current.contains(a.target)&&!y.current.contains(a.target)&&k(!1)};return r&&(document.addEventListener("mousedown",e),document.addEventListener("keydown",ae)),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",ae)}},[r]);const ce=()=>{if(!r||!C.current||!y.current)return;const e=y.current.closest(".uds-modal__overlay"),a=y.current.closest(".app-shell__main-content"),o=e instanceof HTMLElement?e:a instanceof HTMLElement?a:document.body;te(o);const p=y.current.getBoundingClientRect(),_=C.current.getBoundingClientRect(),E=o===document.body?{top:0,left:0}:o.getBoundingClientRect(),w=o===document.body?0:o.scrollTop,b=o===document.body?0:o.scrollLeft,M=o===document.body?window.innerWidth:o.clientWidth,T=o===document.body?window.innerHeight:o.clientHeight,i=8,l=8,[D="bottom",Re="start"]=String(h).split("-"),Q=(s,ue)=>{let I=0,K=0;const de=p.top-E.top+w,fe=p.bottom-E.top+w,me=p.left-E.left+b,he=p.right-E.left+b;return s==="bottom"&&(I=fe+l),s==="top"&&(I=de-_.height-l),s==="right"&&(K=he+l),s==="left"&&(K=me-_.width-l),(s==="bottom"||s==="top")&&(ue==="end"?K=he-_.width:K=me),(s==="left"||s==="right")&&(ue==="end"?I=fe-_.height:I=de),{top:I,left:K}},Te=s=>({top:s.top<w+i,bottom:s.top+_.height>w+T-i,left:s.left<b+i,right:s.left+_.width>b+M-i});let $=W.current??D;const q=Re;let x=Q($,q);if(!W.current){const s=Te(x);$==="bottom"&&s.bottom?($="top",x=Q($,q)):$==="top"&&s.top?($="bottom",x=Q($,q)):$==="right"&&s.right?($="left",x=Q($,q)):$==="left"&&s.left&&($="right",x=Q($,q)),W.current=$}let Z=x.top,ee=x.left;Z=Math.max(w+i,Math.min(Z,w+T-_.height-i)),ee=Math.max(b+i,Math.min(ee,b+M-_.width-i));const F={position:o===document.body?"fixed":"absolute",top:`${Z}px`,left:`${ee}px`,width:g?`${p.width}px`:void 0,zIndex:o===e?"calc(var(--uds-elevation-modal) + 1)":void 0};Ce(s=>s.top===F.top&&s.left===F.left&&s.width===F.width&&s.position===F.position?s:F)};$e(()=>{var e,a;if(r){if(P===null){const o=(e=y.current)==null?void 0:e.closest(".uds-modal__overlay"),p=(a=y.current)==null?void 0:a.closest(".app-shell__main-content");te(o instanceof HTMLElement?o:p instanceof HTMLElement?p:document.body)}ce()}},[r,h,g,P]),U(()=>{if(!r)return;const e=()=>{H.current==null&&(H.current=requestAnimationFrame(()=>{H.current=null,ce()}))};return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),H.current!=null&&(cancelAnimationFrame(H.current),H.current=null)}},[r]),U(()=>{if(!r){re("");return}V&&requestAnimationFrame(()=>{var a;const e=(a=C.current)==null?void 0:a.querySelector('input[type="search"]');e==null||e.focus()})},[r,V]);const Le=e=>{var _,E,w,b,M,T,i;if(V&&e.target instanceof HTMLInputElement&&e.target.type==="search"&&((_=C.current)==null?void 0:_.contains(e.target))){if(e.key==="ArrowDown"){e.preventDefault();const l=(E=C.current)==null?void 0:E.querySelector('[role="menuitem"]:not([disabled])');l==null||l.focus()}return}const o=(w=C.current)==null?void 0:w.querySelectorAll('[role="menuitem"]:not([disabled])');if(!o||o.length===0)return;const p=Array.from(o).findIndex(l=>l===document.activeElement);switch(e.key){case"ArrowDown":{e.preventDefault();const l=p<o.length-1?p+1:0;(b=o[l])==null||b.focus();break}case"ArrowUp":{e.preventDefault();const l=p>0?p-1:o.length-1;(M=o[l])==null||M.focus();break}case"Home":e.preventDefault(),(T=o[0])==null||T.focus();break;case"End":e.preventDefault(),(i=o[o.length-1])==null||i.focus();break;case"Enter":case" ":e.preventDefault(),document.activeElement&&document.activeElement.click();break}},se=()=>{f||k(!r)},le=(e,a)=>{if(e.disabled){a.preventDefault();return}e.onClick&&e.onClick(e,a),k(!1)},ke=()=>V?c("div",{className:`${t}__search`,children:c(He,{size:"compact",value:ne,onChange:e=>re(e.target.value),className:`${t}__search-input`,placeholder:m,"aria-label":m})}):null,Me=()=>{var e,a,o,p,_;if(!n)return null;if(pe.isValidElement(n)){const E=(e=n.props)==null?void 0:e.onClick,w=(a=n.props)==null?void 0:a.onChange,b=(o=n.props)==null?void 0:o.onFocus,M=(p=n.props)==null?void 0:p.onKeyDown,T=pe.cloneElement(n,{disabled:f||((_=n.props)==null?void 0:_.disabled),"aria-disabled":f||void 0,onClick:i=>{f||(L||(i.preventDefault(),i.stopPropagation()),E&&E(i),L?k(!0):se())},onFocus:i=>{b&&b(i),!(f||!L)&&k(!0)},onChange:i=>{if(w&&w(i),f||!L)return;const l=i==null?void 0:i.target,D=l&&typeof l=="object"&&"value"in l?String(l.value??""):"";Ne(D),k(!0)},onKeyDown:i=>{var l;if(M&&M(i),!(f||!L)){if(i.key==="Escape"){k(!1);return}if(i.key==="ArrowDown"){i.preventDefault();const D=(l=C.current)==null?void 0:l.querySelector('[role="menuitem"]:not([disabled])');D==null||D.focus()}}},"aria-haspopup":"true","aria-expanded":r});return c("div",{ref:y,className:`${t}__trigger`,children:T})}return c("div",{ref:y,className:`${t}__trigger`,onClick:se,children:n})},Se=[t,r&&`${t}--open`,g&&`${t}--full-width`,f&&`${t}--disabled`,O].filter(Boolean).join(" "),Ae=[`${t}__menu`,`${t}__menu--portal`,d==="search"&&`${t}__menu--search`,g&&`${t}__menu--full-width`,X].filter(Boolean).join(" ");return S("div",{className:Se,...Y,children:[Me(),r&&!f&&P?ze(S("div",{ref:C,className:Ae,style:R,role:"menu","aria-orientation":"vertical",onKeyDown:Le,children:[ke(),ie.length===0?c("div",{className:`${t}__empty`,children:v}):null,ie.map((e,a)=>e.divider?c("div",{className:`${t}__divider`,children:c(ve,{})},`divider-${a}`):e.items&&e.items.length>0?c(ye,{item:e,onItemClick:le},e.id||a):e.type==="toggle"?S("div",{className:`${t}__item ${t}__item--toggle ${e.disabled?`${t}__item--disabled`:""}`,role:"menuitemcheckbox","aria-checked":!!e.checked,"aria-label":e.label,children:[e.icon&&c(j,{name:e.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),c("span",{className:`${t}__item-label`,children:_e(e.label,G,L)}),c(Be,{checked:!!e.checked,size:"small",disabled:e.disabled,onChange:o=>{e.onChange&&e.onChange(o)},className:`${t}__item-toggle`})]},e.id||a):S("button",{className:`${t}__item ${e.disabled?`${t}__item--disabled`:""} ${e.active?`${t}__item--active`:""} ${e.destructive?`${t}__item--destructive`:""}`,role:"menuitem",disabled:e.disabled,onClick:o=>le(e,o),"aria-label":e.label,children:[e.icon&&c(j,{name:e.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),c("span",{className:`${t}__item-label`,children:_e(e.label,G,L)}),e.shortcut&&c(we,{label:e.shortcut,appearance:"light",className:`${t}__item-shortcut`})]},e.id||a))]}),P):null]})}export{Ue as default};
1
+ import{jsxs as R,jsx as a,Fragment as De}from"react/jsx-runtime";import pe,{useState as z,useRef as H,useMemo as Te,useEffect as W,useLayoutEffect as $e}from"react";import{createPortal as xe}from"react-dom";import K from"../Icon/Icon.js";import ve from"../Divider/Divider.js";import be from"../Key/Key.js";import{SearchInput as ze}from"../SearchInput/SearchInput.js";import Be from"../Toggle/Toggle.js";/* empty css */const t="uds-action-menu",He=new Set(["search","autosuggest"]),G=n=>String(n||"").trim().toLowerCase(),Oe=n=>typeof(n==null?void 0:n.label)=="string"?n.label:"",ge=n=>{var h,l;const s=[...n];for(;s.length>0&&((h=s[0])!=null&&h.divider);)s.shift();for(;s.length>0&&((l=s[s.length-1])!=null&&l.divider);)s.pop();return s},we=(n,s)=>{const h=G(s);if(!h)return n;const l=[];for(const f of n){if(f!=null&&f.divider){l.push(f);continue}const $=G(Oe(f)),p=Array.isArray(f==null?void 0:f.items)?we(f.items,s):null,u=Array.isArray(p)&&p.length>0;($.includes(h)||u)&&l.push(u?{...f,items:ge(p)}:f)}return ge(l)},_e=(n,s,h=!1)=>{const l=G(s);if(!l||!n)return n;const f=G(n),$=h?f.startsWith(l)?0:-1:f.indexOf(l);if($<0)return n;const p=$+l.length,u=n.slice(0,$),D=n.slice($,p),O=n.slice(p);return R(De,{children:[u,a("span",{className:`${t}__match ${h?`${t}__match--weight`:""}`,children:D}),O]})};function ye({item:n,onItemClick:s}){const[h,l]=z(!1),[f,$]=z(!1),p=H(null),u=H(null),D=()=>{clearTimeout(u.current),l(!0)},O=()=>{u.current=setTimeout(()=>{l(!1)},150)},U=()=>{clearTimeout(u.current)},J=()=>{u.current=setTimeout(()=>{l(!1)},150)};return W(()=>()=>{clearTimeout(u.current)},[]),$e(()=>{if(!h||!p.current)return;const r=p.current.getBoundingClientRect(),E=r.right>window.innerWidth-8,T=r.left<8;if(E&&!T){$(!0);return}if(T&&!E){$(!1);return}E&&T&&$(r.right-window.innerWidth>8)},[h]),R("div",{className:`${t}__item-wrapper`,onMouseEnter:D,onMouseLeave:O,children:[R("button",{className:`${t}__item ${t}__item--has-submenu ${n.disabled?`${t}__item--disabled`:""}`,role:"menuitem",disabled:n.disabled,"aria-haspopup":"true","aria-expanded":h,"aria-label":n.label,children:[n.icon&&a(K,{name:n.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),a("span",{className:`${t}__item-label`,children:n.label}),a(K,{name:"CaretRight",size:12,appearance:"regular",className:`${t}__item-arrow`})]}),h&&n.items&&a("div",{ref:p,className:`${t}__submenu ${f?`${t}__submenu--left`:""}`,role:"menu","aria-orientation":"vertical",onMouseEnter:U,onMouseLeave:J,children:n.items.map((r,E)=>r.divider?a("div",{className:`${t}__divider`,children:a(ve,{})},`divider-${E}`):r.items&&r.items.length>0?a(ye,{item:r,onItemClick:s},r.id||E):R("button",{className:`${t}__item ${r.disabled?`${t}__item--disabled`:""} ${r.active?`${t}__item--active`:""} ${r.destructive?`${t}__item--destructive`:""}`,role:"menuitem",disabled:r.disabled,onClick:T=>s(r,T),"aria-label":r.label,children:[r.icon&&a(K,{name:r.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),a("span",{className:`${t}__item-label`,children:r.label}),r.shortcut&&a(be,{label:r.shortcut,appearance:"light",className:`${t}__item-shortcut`})]},r.id||E))})]})}function Ge({trigger:n,items:s=[],placement:h="bottom-start",variant:l="default",searchPlaceholder:f="Search...",noResultsText:$="No results found",fullWidth:p=!1,disabled:u=!1,onOpenChange:D,className:O="",menuClassName:U="",...J}){const[r,E]=z(!1),[T,Ce]=z({}),[X,ee]=z(typeof document<"u"?document.body:null),C=H(null),N=H(null),B=H(null),j=H(null),[te,ne]=z(""),[Ne,Ee]=z(""),V=l==="search",L=l==="autosuggest",re=He.has(l),P=V?te:L?Ne:"",oe=Te(()=>re?we(s,P):s,[re,s,P]),ie=()=>{if(!N.current||typeof document>"u")return document.body;const e=N.current.closest(".uds-modal__overlay"),o=N.current.closest(".app-shell__main-content");return e instanceof HTMLElement?e:o instanceof HTMLElement?o:document.body},ae=e=>{var o;e.key==="Escape"&&(S(!1),(o=N.current)==null||o.focus())},S=e=>{e&&ee(ie()),E(e),e||(j.current=null),D&&D(e)};W(()=>{const e=o=>{C.current&&N.current&&!C.current.contains(o.target)&&!N.current.contains(o.target)&&S(!1)};return r&&(document.addEventListener("mousedown",e),document.addEventListener("keydown",ae)),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",ae)}},[r]);const ce=()=>{if(!r||!C.current||!N.current)return;const e=ie();ee(e);const o=N.current.getBoundingClientRect(),i=C.current.getBoundingClientRect(),v=e===document.body?{top:0,left:0}:e.getBoundingClientRect(),b=e===document.body?0:e.scrollTop,w=e===document.body?0:e.scrollLeft,M=e===document.body?window.innerWidth:e.clientWidth,A=e===document.body?window.innerHeight:e.clientHeight,g=8,k=8,[d="bottom",m="start"]=String(h).split("-"),y=(c,ue)=>{let F=0,I=0;const de=o.top-v.top+b,fe=o.bottom-v.top+b,me=o.left-v.left+w,he=o.right-v.left+w;return c==="bottom"&&(F=fe+k),c==="top"&&(F=de-i.height-k),c==="right"&&(I=he+k),c==="left"&&(I=me-i.width-k),(c==="bottom"||c==="top")&&(ue==="end"?I=he-i.width:I=me),(c==="left"||c==="right")&&(ue==="end"?F=fe-i.height:F=de),{top:F,left:I}},Re=c=>({top:c.top<b+g,bottom:c.top+i.height>b+A-g,left:c.left<w+g,right:c.left+i.width>w+M-g});let _=j.current??d;const Q=m;let x=y(_,Q);if(!j.current){const c=Re(x);_==="bottom"&&c.bottom?(_="top",x=y(_,Q)):_==="top"&&c.top?(_="bottom",x=y(_,Q)):_==="right"&&c.right?(_="left",x=y(_,Q)):_==="left"&&c.left&&(_="right",x=y(_,Q)),j.current=_}let Y=x.top,Z=x.left;Y=Math.max(b+g,Math.min(Y,b+A-i.height-g)),Z=Math.max(w+g,Math.min(Z,w+M-i.width-g));const q={position:e===document.body?"fixed":"absolute",top:`${Y}px`,left:`${Z}px`,width:p?`${o.width}px`:void 0,zIndex:e===modalOverlayContainer?"calc(var(--uds-elevation-modal) + 1)":void 0};Ce(c=>c.top===q.top&&c.left===q.left&&c.width===q.width&&c.position===q.position?c:q)};$e(()=>{r&&ce()},[r,h,p,X]),W(()=>{if(!r)return;const e=()=>{B.current==null&&(B.current=requestAnimationFrame(()=>{B.current=null,ce()}))};return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),B.current!=null&&(cancelAnimationFrame(B.current),B.current=null)}},[r]),W(()=>{if(!r){ne("");return}V&&requestAnimationFrame(()=>{var o;const e=(o=C.current)==null?void 0:o.querySelector('input[type="search"]');e==null||e.focus()})},[r,V]);const ke=e=>{var b,w,M,A,g,k,d;if(V&&e.target instanceof HTMLInputElement&&e.target.type==="search"&&((b=C.current)==null?void 0:b.contains(e.target))){if(e.key==="ArrowDown"){e.preventDefault();const m=(w=C.current)==null?void 0:w.querySelector('[role="menuitem"]:not([disabled])');m==null||m.focus()}return}const i=(M=C.current)==null?void 0:M.querySelectorAll('[role="menuitem"]:not([disabled])');if(!i||i.length===0)return;const v=Array.from(i).findIndex(m=>m===document.activeElement);switch(e.key){case"ArrowDown":{e.preventDefault();const m=v<i.length-1?v+1:0;(A=i[m])==null||A.focus();break}case"ArrowUp":{e.preventDefault();const m=v>0?v-1:i.length-1;(g=i[m])==null||g.focus();break}case"Home":e.preventDefault(),(k=i[0])==null||k.focus();break;case"End":e.preventDefault(),(d=i[i.length-1])==null||d.focus();break;case"Enter":case" ":e.preventDefault(),document.activeElement&&document.activeElement.click();break}},se=()=>{u||S(!r)},le=(e,o)=>{if(e.disabled){o.preventDefault();return}e.onClick&&e.onClick(e,o),S(!1)},Le=()=>V?a("div",{className:`${t}__search`,children:a(ze,{size:"compact",value:te,onChange:e=>ne(e.target.value),className:`${t}__search-input`,placeholder:f,"aria-label":f})}):null,Se=()=>{var e,o,i,v,b;if(!n)return null;if(pe.isValidElement(n)){const w=(e=n.props)==null?void 0:e.onClick,M=(o=n.props)==null?void 0:o.onChange,A=(i=n.props)==null?void 0:i.onFocus,g=(v=n.props)==null?void 0:v.onKeyDown,k=pe.cloneElement(n,{disabled:u||((b=n.props)==null?void 0:b.disabled),"aria-disabled":u||void 0,onClick:d=>{u||(L||(d.preventDefault(),d.stopPropagation()),w&&w(d),L?S(!0):se())},onFocus:d=>{A&&A(d),!(u||!L)&&S(!0)},onChange:d=>{if(M&&M(d),u||!L)return;const m=d==null?void 0:d.target,y=m&&typeof m=="object"&&"value"in m?String(m.value??""):"";Ee(y),S(!0)},onKeyDown:d=>{var m;if(g&&g(d),!(u||!L)){if(d.key==="Escape"){S(!1);return}if(d.key==="ArrowDown"){d.preventDefault();const y=(m=C.current)==null?void 0:m.querySelector('[role="menuitem"]:not([disabled])');y==null||y.focus()}}},"aria-haspopup":"true","aria-expanded":r});return a("div",{ref:N,className:`${t}__trigger`,children:k})}return a("div",{ref:N,className:`${t}__trigger`,onClick:se,children:n})},Me=[t,r&&`${t}--open`,p&&`${t}--full-width`,u&&`${t}--disabled`,O].filter(Boolean).join(" "),Ae=[`${t}__menu`,`${t}__menu--portal`,l==="search"&&`${t}__menu--search`,p&&`${t}__menu--full-width`,U].filter(Boolean).join(" ");return R("div",{className:Me,...J,children:[Se(),r&&!u&&X?xe(R("div",{ref:C,className:Ae,style:T,role:"menu","aria-orientation":"vertical",onKeyDown:ke,children:[Le(),oe.length===0?a("div",{className:`${t}__empty`,children:$}):null,oe.map((e,o)=>e.divider?a("div",{className:`${t}__divider`,children:a(ve,{})},`divider-${o}`):e.items&&e.items.length>0?a(ye,{item:e,onItemClick:le},e.id||o):e.type==="toggle"?R("div",{className:`${t}__item ${t}__item--toggle ${e.disabled?`${t}__item--disabled`:""}`,role:"menuitemcheckbox","aria-checked":!!e.checked,"aria-label":e.label,children:[e.icon&&a(K,{name:e.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),a("span",{className:`${t}__item-label`,children:_e(e.label,P,L)}),a(Be,{checked:!!e.checked,size:"small",disabled:e.disabled,onChange:i=>{e.onChange&&e.onChange(i)},className:`${t}__item-toggle`})]},e.id||o):R("button",{className:`${t}__item ${e.disabled?`${t}__item--disabled`:""} ${e.active?`${t}__item--active`:""} ${e.destructive?`${t}__item--destructive`:""}`,role:"menuitem",disabled:e.disabled,onClick:i=>le(e,i),"aria-label":e.label,children:[e.icon&&a(K,{name:e.icon,size:16,appearance:"regular",className:`${t}__item-icon`}),a("span",{className:`${t}__item-label`,children:_e(e.label,P,L)}),e.shortcut&&a(be,{label:e.shortcut,appearance:"light",className:`${t}__item-shortcut`})]},e.id||o))]}),X):null]})}export{Ge as default};