@esri/calcite-components
Version:
Web Components for Esri's Calcite Design System.
3 lines (2 loc) • 5.93 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
import{b as R}from"./WKR7R7AZ.js";import{a as V}from"./YGX7CUXN.js";import{b as q}from"./YJF4NBEX.js";import{g as F,i as I,w as U,x as X}from"./KDWR7M23.js";var ve=o=>{let{manager:a}=o;return q((i,c)=>{let u=null,f=null,E=l=>!!(l&&i.referenceElementType),C=l=>{E(l)&&(a.registerElement(i,l),f=l)},g=l=>{E(l)&&(a.unregisterElement(i,l),f===l&&(f=null))},p=l=>{let{referenceElement:h,el:w}=l;return(typeof h=="string"?I(w,{id:h}):h)||null},m=(l=!0)=>{if(!i.referenceElementType)return;i.referenceEl=p(i);let{el:h,referenceElement:w,referenceEl:H}=i;l&&w&&!H&&console.warn(`${h.tagName}: reference-element id "${w}" was not found.`,{el:h})};c.onConnected(()=>{u=requestAnimationFrame(()=>{i.el.isConnected&&(m(i.manager.loadedCalled),C(i.referenceEl))})}),c.onLoaded(()=>{i.referenceElement&&!i.referenceEl&&m()}),c.onUpdate(l=>{i.hasUpdated&&(l.has("referenceElement")&&m(),l.has("referenceEl")?(g(l.get("referenceEl")),C(i.referenceEl)):l.has("open")&&a.updateElement(i,i.referenceEl))}),c.onDisconnected(()=>{u!=null&&(cancelAnimationFrame(u),u=null),g(f)})})};function z(o,a){if(o===a)return!0;if(o.length!==a.length)return!1;let i=new Set(o),c=new Set(a);if(i.size!==c.size)return!1;for(let u of i)if(!c.has(u))return!1;return!0}var ae=5,T=300,ce=T/3,de=T*1.5;function ue({startX:o,startY:a,endX:i,endY:c}){return Math.hypot(i-o,c-a)>ae}var we=o=>{let a=new Map,i=new WeakMap,c=null,u=null,f=null,E=null,C=null,g=null,p=0,m=(e,n)=>{let t=e.find(s=>a.has(s));if(!t)return;let r=a.get(t);return n?r?.filter(s=>s.referenceElementType===n):r},l=(e,n)=>{let t=e.composedPath(),r=m(t,n);r?.forEach(s=>{s&&!s.triggerDisabled&&(s.open=!s.open)}),Array.from(a.values()).flat().filter(s=>!r?.includes(s)&&s.autoClose&&s.open&&!t.includes(s.el)).forEach(s=>s.open=!1)},h=e=>{X(e)||e.defaultPrevented||g&&ue({endY:e.clientY,endX:e.clientX,startY:g.y,startX:g.x})||(g=null,l(e,"click"))},w=()=>{E!=null&&window.clearTimeout(E),E=null},H=()=>{f!=null&&window.clearTimeout(f),f=null},v=()=>{w(),H()},D=(e,n)=>c?.some(t=>t?.open&&n.includes(t.el))||e?.some(t=>t?.open&&n.includes(t.el)),k=(e,n)=>{e?.forEach(t=>t.open=n),c=n?e:null},y=()=>{k(c,!1)},$=e=>{if(e.key==="Escape"&&!e.defaultPrevented){let n=c?.filter(t=>t?.open);if(n?.length){v(),y();let t=e.composedPath();n.some(r=>r.referenceEl instanceof Element&&t.includes(r.referenceEl)||t.includes(r.el))&&e.preventDefault()}}},j=e=>{if(e.defaultPrevented)return;u=null;let n=e.composedPath(),t=m(n,"hover");if(D(t,n)){v();return}if(y(),!t?.length)return;v();let r=t.filter(d=>d.closeOnClick),s=t.filter(d=>!d.closeOnClick);r?.length&&(u=r,k(r,!1)),k(s,!0)},x=e=>{if(e.defaultPrevented||!U(e))return;let{clientX:n,clientY:t}=e;g={x:n,y:t}},G=e=>{e.defaultPrevented||(e.key==="Escape"?W():V(e.key)&&l(e,"click"))},Q=e=>{m(e.composedPath())?.forEach(t=>t.onReferenceElementKeyDown?.(e))},W=()=>{Array.from(a.values()).flat().forEach(e=>e.open=!1)},O=e=>{z(e??[],c??[])||y()},J=e=>{E=window.setTimeout(()=>{E===null||!z(e??[],C??[])||(H(),O(e),k(e,!0))},c?.some(n=>n.open)?ce:T)},S=()=>{f=window.setTimeout(()=>{f!==null&&y()},de)},b=e=>{if(e.defaultPrevented){y();return}let n=e.composedPath(),t=m(n,"hover");if(D(t,n)){v();return}t?.some(r=>u?.includes(r))||(t?.some(r=>C?.includes(r))||w(),C=t,t?.length?J(t):c?.some(r=>r?.open)&&S(),u=null)},A=()=>{y()},M=e=>{e.defaultPrevented||(v(),S())},_=e=>{o.click&&h(e),o.hover&&j(e)},B=e=>{Q(e),o.click&&G(e),o.hover&&$(e)},Z=()=>{(o.click||o.hover)&&(window.addEventListener("click",_),window.addEventListener("keydown",B)),o.click&&window.addEventListener("pointerdown",x),o.hover&&(window.addEventListener("pointermove",b),window.addEventListener("focusin",P),window.addEventListener("blur",A),document.addEventListener("pointerleave",M))},ee=()=>{(o.click||o.hover)&&(window.removeEventListener("click",_),window.removeEventListener("keydown",B)),o.click&&window.removeEventListener("pointerdown",x),o.hover&&(window.removeEventListener("pointermove",b),window.removeEventListener("focusin",P),window.removeEventListener("blur",A),document.removeEventListener("pointerleave",M))},ne=(e,n)=>{v(),k(e,n)},Y=e=>e instanceof Element?F(e):null,P=e=>{if(e.defaultPrevented)return;let n=e.composedPath(),t=m(n,"hover");if(D(t,n)){v();return}t?.some(r=>u?.includes(r))||(u=null,O(t),t?.length&&ne(t,!0))},K=(e,n)=>{if(!(!n||!e.referenceElementType)&&o.click&&"ariaExpanded"in n){let r=(a.get(n)??[])?.some(s=>s.open)??!1;n.ariaExpanded=R(e.open||r)}},te=e=>{e.addEventListener("focusin",P)},re=e=>{e.removeEventListener("focusin",P)},se=e=>{let n=i.get(e),t=(typeof n=="number"?n:0)+1;t===1&&te(e),i.set(e,t)},oe=e=>{let n=i.get(e),t=typeof n=="number"?n:0,r=Math.max(0,t-1);if(t>0&&r===0){re(e),i.delete(e);return}r>0&&i.set(e,r)},ie=(e,n)=>{if(!n||!e.referenceElementType)return;let t=a.get(n)??[];if(t.includes(e))return;if(o.click&&"ariaControlsElements"in n){let s=n.ariaControlsElements??[];if(!s.includes(e.el)){let d=[...s,e.el];n.ariaControlsElements=d}}if(o.hover&&"ariaDescribedByElements"in n){let s=n.ariaDescribedByElements??[];if(!s.includes(e.el)){let d=[...s,e.el];n.ariaDescribedByElements=d}}p++,a.set(n,[...t,e]);let r=o.hover?Y(n):null;r&&se(r),p===1&&Z(),K(e,n)},N=e=>{p--,e&&oe(e)};return{registerElement:ie,unregisterElement:(e,n)=>{if(!n||!e.referenceElementType)return;let t=o.hover?Y(n):null,r=a.get(n)??[],s=r.filter(d=>d!==e);if(s.length>0?(a.set(n,s),s.length!==r.length&&N(t)):a.delete(n)&&N(t),p===0&&(ee(),v()),o.click&&"ariaControlsElements"in n){let d=n.ariaControlsElements?.filter(L=>L!==e.el);n.ariaControlsElements=d?.length>0?d:null}if(o.click&&"ariaExpanded"in n)if((s?.length??0)>0){let L=s?.some(le=>le.open)??!1;n.ariaExpanded=R(L)}else n.ariaExpanded=null;if(o.hover&&"ariaDescribedByElements"in n){let d=n.ariaDescribedByElements?.filter(L=>L!==e.el);n.ariaDescribedByElements=d?.length>0?d:null}},updateElement:K}};export{ve as a,we as b};