import{a as l}from"./chunk.MHWW3RZB.js";import{a as i}from"./chunk.KLRPP4NQ.js";import{d as r}from"./chunk.W4QBFD6E.js";import{e as s}from"./chunk.6EV4YU6C.js";var n=class{constructor(t){this.pointers=new Set;this.dragging=!1;this.scrolling=!1;this.mouseDragging=!1;this.handleScroll=()=>{this.scrolling||(this.scrolling=!0,this.host.requestUpdate()),this.handleScrollEnd()};this.handlePointerDown=t=>{if(t.pointerType==="touch")return;this.pointers.add(t.pointerId),this.mouseDragging&&!this.dragging&&t.button===0&&(t.preventDefault(),this.host.scrollContainer.addEventListener("pointermove",this.handlePointerMove))};this.handlePointerMove=t=>{let e=this.host.scrollContainer,o=!!t.movementX||!!t.movementY;!this.dragging&&o?(e.setPointerCapture(t.pointerId),this.handleDragStart()):e.hasPointerCapture(t.pointerId)&&this.handleDrag(t)};this.handlePointerUp=t=>{this.pointers.delete(t.pointerId),this.host.scrollContainer.releasePointerCapture(t.pointerId),this.pointers.size===0&&this.handleDragEnd()};this.handleTouchEnd=t=>{for(let e of t.changedTouches)this.pointers.delete(e.identifier)};this.handleTouchStart=t=>{for(let e of t.touches)this.pointers.add(e.identifier)};this.host=t,t.addController(this)}async hostConnected(){let t=this.host;await t.updateComplete;let e=t.scrollContainer;e.addEventListener("scroll",this.handleScroll,{passive:!0}),e.addEventListener("pointerdown",this.handlePointerDown),e.addEventListener("pointerup",this.handlePointerUp),e.addEventListener("pointercancel",this.handlePointerUp),e.addEventListener("touchstart",this.handleTouchStart,{passive:!0}),e.addEventListener("touchend",this.handleTouchEnd)}hostDisconnected(){let e=this.host.scrollContainer;e.removeEventListener("scroll",this.handleScroll),e.removeEventListener("pointerdown",this.handlePointerDown),e.removeEventListener("pointerup",this.handlePointerUp),e.removeEventListener("pointercancel",this.handlePointerUp),e.removeEventListener("touchstart",this.handleTouchStart),e.removeEventListener("touchend",this.handleTouchEnd)}handleScrollEnd(){this.pointers.size?this.handleScrollEnd():(this.scrolling=!1,this.host.scrollContainer.dispatchEvent(new CustomEvent("scrollend",{bubbles:!1,cancelable:!1})),this.host.requestUpdate())}handleDragStart(){let t=this.host;this.dragging=!0,t.scrollContainer.style.setProperty("scroll-snap-type","unset"),t.requestUpdate()}handleDrag(t){this.host.scrollContainer.scrollBy({left:-t.movementX,top:-t.movementY})}async handleDragEnd(){let t=this.host,e=t.scrollContainer;e.removeEventListener("pointermove",this.handlePointerMove),this.dragging=!1;let o=e.scrollLeft,a=e.scrollTop;e.style.removeProperty("scroll-snap-type");let h=e.scrollLeft,c=e.scrollTop;e.style.setProperty("scroll-snap-type","unset"),e.scrollTo({left:o,top:a,behavior:"auto"}),e.scrollTo({left:h,top:c,behavior:r()?"auto":"smooth"}),this.scrolling&&await i(e,"scrollend"),e.style.removeProperty("scroll-snap-type"),t.requestUpdate()}};s([l(100)],n.prototype,"handleScrollEnd",1);export{n as a};
