1import{_ as e,c as t,ut as n,v as r}from"./LogUtils-D1uL_RU1.js";import{a as i,c as a,d as o,f as s,i as c,l,n as u,o as d,r as f,s as p,t as m,u as h}from"./index-BDimrMBs.js";var g=500,_=class{#e=!0;#t;#n;#r;#i;#a;constructor(e,t){this.#n=e,this.#t=[],this.#i=t,this.#a=new Map,this.#r={mouseDown:()=>{this.#u()},mouseLeave:()=>{this.#f()},mouseMove:e=>{this.#p(e)},mouseUp:e=>{this.#d(e)},touchStart:e=>{this.#g(e)},touchMove:e=>{this.#p(e)},touchEnd:e=>{this.#m(e)},touchCancel:e=>{this.#m(e)},touchEndClick:e=>{this.#h(e)},visibilityChange:()=>{this.#s()}}}addListeners(){this.#l(!0)}init(){this.#t.length=0;for(let e of this.#n.plugins.filter(e=>!!e.clickPositionValid))this.#t.push(e)}removeListeners(){this.#l(!1)}#o(e){let n=this.#n,r=this.#i,i=n.actualOptions;if(this.#e){let e=r.interactivityData.mouse,n=e.position;if(!n)return;e.clickPosition={...n},e.clickTime=performance.now();let a=i.interactivity?.events.onClick;if(!a?.mode)return;t(a.mode,e=>{r.handleClickMode(e)})}e.type===`touchend`&&setTimeout(()=>{this.#f()},g)}#s(){this.#f()}#c(t){let n=this.#r,r=this.#n,o=this.#i,s=r.actualOptions,m=o.interactivityData.element;if(!m)return;let h=m,g=r.canvas;g.setPointerEvents(h===g.domElement?`initial`:`none`),!(t&&!(s.interactivity?.events.onHover.enable||s.interactivity?.events.onClick.enable))&&(e(m,c,n.mouseMove,t),e(m,l,n.touchStart,t),e(m,a,n.touchMove,t),t?s.interactivity?.events.onClick.enable?(e(m,p,n.touchEndClick,t),e(m,i,n.mouseUp,t),e(m,u,n.mouseDown,t)):e(m,p,n.touchEnd,t):(e(m,p,n.touchEndClick,t),e(m,i,n.mouseUp,t),e(m,u,n.mouseDown,t),e(m,p,n.touchEnd,t)),e(m,f,n.mouseLeave,t),e(m,d,n.touchCancel,t))}#l(t){let i=this.#r,a=this.#n,o=this.#i,c=a.actualOptions.interactivity?.detectsOn,l=a.canvas.domElement;c===s.window?o.interactivityData.element=r():c===s.parent&&l?o.interactivityData.element=l.parentElement??l.parentNode:o.interactivityData.element=l,this.#c(t),e(document,n,i.visibilityChange,t,!1)}#u(){let{interactivityData:e}=this.#i,{mouse:t}=e;t.clicking=!0,t.downPosition=t.position}#d(e){let t=this.#n,n=this.#i,r=t.actualOptions,{mouse:i}=n.interactivityData;i.inside=!0;let a=!1,o=i.position;if(!(!o||!r.interactivity?.events.onClick.enable)){for(let e of this.#t)if(a=e.clickPositionValid?.(o)??!1,a)break;a||this.#o(e),i.clicking=!1}}#f(){let{interactivityData:e}=this.#i,{mouse:t}=e;delete t.position,delete t.clickPosition,delete t.downPosition,e.status=f,t.inside=!1,t.clicking=!1}#p(e){let t=this.#n,n=this.#i,i=t.actualOptions,a=n.interactivityData,o=t.canvas.domElement;if(!a.element)return;a.mouse.inside=!0;let l;if(e.type.startsWith(`pointer`)){this.#e=!0;let t=e;if(a.element===r()){if(o){let e=o.getBoundingClientRect();l={x:t.clientX-e.left,y:t.clientY-e.top}}}else if(i.interactivity?.detectsOn===s.parent){let e=t.target,n=t.currentTarget;if(o){let r=e.getBoundingClientRect(),i=n.getBoundingClientRect(),a=o.getBoundingClientRect();l={x:t.offsetX+2*r.left-(i.left+a.left),y:t.offsetY+2*r.top-(i.top+a.top)}}else l={x:t.offsetX,y:t.offsetY}}else t.target===o&&(l={x:t.offsetX,y:t.offsetY})}else if(this.#e=e.type!==`touchmove`,o){let t=e,n=t.touches[t.touches.length-1],r=o.getBoundingClientRect();if(!n)return;l={x:n.clientX-r.left,y:n.clientY-r.top}}let u=t.retina.pixelRatio;l&&(l.x*=u,l.y*=u),a.mouse.position=l,a.status=c}#m(e){let t=e,n=Array.from(t.changedTouches);for(let e of n)this.#a.delete(e.identifier);this.#f()}#h(e){let t=e,n=Array.from(t.changedTouches);for(let e of n)this.#a.delete(e.identifier);this.#d(e)}#g(e){let t=e,n=Array.from(t.changedTouches);for(let e of n)this.#a.set(e.identifier,performance.now());this.#p(e)}},v=1,y=1,b=0;function x(e){if(!(typeof IntersectionObserver>`u`))return new IntersectionObserver(e)}var S=class{interactivityData;#e;#t;#n;#r;#i;#a;#o;#s;constructor(e,t){this.#t=t,this.#s=e,this.#i=[],this.#r=[],this.#o=[],this.#e=new Map,this.#n=new _(t,this),this.interactivityData={mouse:{clicking:!1,inside:!1}},this.#a=x(e=>{this.#c(e)})}addClickHandler(e){let t=this.#t,n=this.interactivityData;if(t.destroyed)return;let r=n.element;if(!r)return;let i=(n,r,i)=>{if(t.destroyed)return;let a=t.retina.pixelRatio,o={x:r.x*a,y:r.y*a};e(n,t.particles.grid.queryCircle(o,i*a))},o=e=>{if(t.destroyed)return;let n=e;i(e,{x:n.offsetX,y:n.offsetY},v)},s=()=>{t.destroyed||(h=!0,g=!1)},c=()=>{t.destroyed||(g=!0)},u=e=>
1{if(!t.destroyed){if(h&&!g){let n=e,r=n.touches[n.touches.length-y];if(!r)return;let a=t.canvas.domElement,o=a?a.getBoundingClientRect():void 0;i(e,{x:r.clientX-(o?o.left:b),y:r.clientY-(o?o.top:b)},Math.max(r.radiusX,r.radiusY))}h=!1,g=!1}},f=()=>{t.destroyed||(h=!1,g=!1)},h=!1,g=!1;this.#e.set(m,o),this.#e.set(l,s),this.#e.set(a,c),this.#e.set(p,u),this.#e.set(d,f);for(let[e,t]of this.#e)r.addEventListener(e,t)}addListeners(){this.#n.addListeners()}clearClickHandlers(){let e=this.#t,t=this.interactivityData;if(!e.destroyed){for(let[e,n]of this.#e)t.element?.removeEventListener(e,n);this.#e.clear()}}externalInteract(e){for(let t of this.#r){let n=this.interactivityData;t.isEnabled(n)&&t.interact(n,e)}}handleClickMode(e){if(this.#t.destroyed)return;let t=this.interactivityData;for(let n of this.#r)n.handleClickMode?.(e,t)}init(){this.#n.init();for(let e of this.#i){switch(e.type){case h.external:this.#r.push(e);break;case h.particles:this.#o.push(e);break}e.init()}}async initInteractors(){let e=await this.#s.getInteractors?.(this.#t,!0);e&&(this.#i=e,this.#r=[],this.#o=[])}particlesInteract(e,t){let n=this.interactivityData;for(let n of this.#r)n.clear(e,t);for(let r of this.#o)r.isEnabled(e,n)&&r.interact(e,n,t)}removeListeners(){this.#n.removeListeners()}reset(e){let t=this.interactivityData;for(let n of this.#r)n.isEnabled(t)&&n.reset(t,e);for(let n of this.#o)n.isEnabled(e,t)&&n.reset(t,e)}startObserving(){let e=this.interactivityData;e.element instanceof HTMLElement&&this.#a&&this.#a.observe(e.element)}stopObserving(){let e=this.interactivityData;e.element instanceof HTMLElement&&this.#a&&this.#a.unobserve(e.element)}updateMaxDistance(){let e=0;for(let t of this.#i)t.maxDistance>e&&(e=t.maxDistance);let t=this.#t;t.particles.grid.setCellSize(e*t.retina.pixelRatio)}#c(e){let t=this.#t;if(!(t.destroyed||!t.actualOptions.pauseOnOutsideViewport))for(let n of e)n.target===this.interactivityData.element&&(n.isIntersecting?t.play():t.pause())}},C=class{interactionManager;#e;#t;constructor(e,t){this.#e=t,this.#t=e,this.interactionManager=new S(e,t),this.#e.addClickHandler=e=>{this.interactionManager.addClickHandler(e)}}addClickHandler(e){this.interactionManager.addClickHandler(e)}clearClickHandlers(){this.interactionManager.clearClickHandlers()}destroy(){this.clearClickHandlers(),this.#t.interactors?.delete(this.#e)}particleCreated(e){let t=e,n=new o(this.#t,this.#e);n.load(this.#e.actualOptions.interactivity),n.load(t.options.interactivity),t.interactivity=n}particleReset(e){this.interactionManager.reset(e)}postParticleUpdate(e,t){this.interactionManager.particlesInteract(e,t)}postUpdate(e){this.interactionManager.externalInteract(e),this.interactionManager.updateMaxDistance()}async preInit(){await this.interactionManager.initInteractors(),this.interactionManager.init()}async redrawInit(){await this.interactionManager.initInteractors(),this.interactionManager.init()}start(){return this.interactionManager.addListeners(),this.interactionManager.startObserving(),Promise.resolve()}stop(){this.interactionManager.removeListeners(),this.interactionManager.stopObserving()}};export{C as InteractivityPluginInstance};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.