1var b={trackColor:"rgba(255, 255, 255, 0.05)",thumbColor:"linear-gradient(135deg, #667eea 0%, #764ba2 100%)",thumbHoverColor:"linear-gradient(135deg, #7c8ff0 0%, #8a5bb8 100%)",thumbActiveColor:"linear-gradient(135deg, #5568d3 0%, #63408e 100%)",width:12,minThumbSize:30,hideDelay:1e3,autoHide:!0,smoothScroll:!0,target:null,exclude:[],onScroll:null,onInit:null,onDestroy:null,observeDOM:!0,updateOnResize:!0,zIndex:9999},p=class{constructor(t={}){this.scrollbars=new Map;this.resizeObserver=null;this.mutationObserver=null;this.hideTimers=new Map;this.rafId=null;this.isDestroyed=!1;this.options={...b,...t},this.handleScroll=this.handleScroll.bind(this),this.handleResize=this.handleResize.bind(this),this.handleMutation=this.handleMutation.bind(this),this.init()}init(){this.isDestroyed||(this.injectBaseStyles(),this.initializeAllScrollbars(),this.options.observeDOM&&this.setupMutationObserver(),this.options.updateOnResize&&this.setupResizeObserver(),this.attachGlobalListeners(),typeof this.options.onInit=="function"&&this.options.onInit(this))}injectBaseStyles(){if(document.getElementById("universal-scrollbar-styles"))return;let t=document.createElement("style");t.id="universal-scrollbar-styles",t.textContent=` 2 .us-scrollable { 3 scrollbar-width: none; 4 -ms-overflow-style: none; 5 } 6 .us-scrollable::-webkit-scrollbar { display: none; } 7 .us-track { 8 position: absolute; 9 border-radius: 10px; 10 transition: opacity ${this.options.autoHide?"0.3s":"0s"}; 11 opacity: ${this.options.autoHide?"0":"1"}; 12 pointer-events: auto; 13 z-index: ${this.options.zIndex}; 14 } 15 .us-track.us-vertical { top: 0; right: 4px; width: ${this.options.width}px; } 16 .us-track.us-horizontal { left: 0; bottom: 4px; height: ${this.options.width}px; } 17 .us-track:hover, .us-track.us-active, .us-track.us-visible { opacity: 1 !important; } 18 .us-thumb { 19 position: absolute; 20 border-radius: 10px; 21 cursor: grab; 22 transition: background 0.2s; 23 user-select: none; 24 } 25 .us-thumb:active { cursor: grabbing; } 26 .us-smooth-scroll { scroll-behavior: smooth; } 27 .us-wrapper { position: relative; } 28 `,document.head.appendChild(t)}initializeAllScrollbars(){this.findScrollableElements().forEach(e=>{this.scrollbars.has(e)||this.createScrollbar(e)})}findScrollableElements(){let{target:t,exclude:e}=this.options;if(t){if(typeof t=="string")return Array.from(document.querySelectorAll(t));if(t instanceof HTMLElement)return[t];if(Array.isArray(t))return t}let i=document.querySelectorAll("*"),s=[];return i.forEach(r=>{if(!(r instanceof HTMLElement)||e.some(o=>r.matches(o)))return;let l=window.getComputedStyle(r),a=l.overflowY,n=l.overflowX,h=(a==="auto"||a==="scroll")&&r.scrollHeight>r.clientHeight,u=(n==="auto"||n==="scroll")&&r.scrollWidth>r.clientWidth;(h||u)&&s.push(r)}),s}createScrollbar(t){if(!t||this.scrollbars.has(t))return;t.classList.add("us-scrollable"),this.options.smoothScroll&&t.classList.add("us-smooth-scroll");let e={element:t,vertical:null,horizontal:null,listeners:[]};this.hasVerticalScroll(t)&&(e.vertical=this.createTrack(t,"vertical")),this.hasHorizontalScroll(t)&&(e.horizontal=this.createTrack(t,"horizontal"));let i=()=>this.handleScroll(t);t.addEventListener("scroll",i,{passive:!0}),e.listeners.push({type:"scroll",listener:i});let s=()=>this.showScrollbar(t);t.addEventListener("mouseenter",s),e.listeners.push({type:"mouseenter",listener:s});let r=()=>this.hideScrollbarDelayed(t);t.addEventListener("mouseleave",r),e.listeners.push({type:"mouseleave",listener:r}),this.scrollbars.set(t,e),this.updateScrollbar(t)}createTrack(t,e){let i=document.createElement("div");i.className=`us-track us-${e}`,i.style.background=this.options.trackColor;let s=document.createElement("div");return s.className="us-thumb",s.style.background=this.options.thumbColor,i.appendChild(s),this.getOrCreateWrapper(t).appendChild(i),this.attachThumbListeners(s,i,t,e),{track:i,thumb:s}}getOrCreateWrapper(t){let e=t.parentElement;if(e?.classList.contains("us-wrapper"))return e;let i=document.createElement("div");return i.className="us-wrapper",window.getComputedStyle(t).position==="static"&&(i.style.position="relative"),t.parentNode.insertBefore(i,t),i.appendChild(t),i}hasVerticalScroll(t){return t.scrollHeight>t.clientHeight}hasHorizontalScroll(t){return t.scrollWidth>t.clientWidth}updateScrollbar(t){let e=this.scrollbars.get(t);if(!e)return;let i=t.getBoundingClientRect();e.vertical&&this.updateTrack(t,e.vertical,"vertical",i),e.horizontal&&this.updateTrack(t,e.horizontal,"horizontal",i)}updateTrack(t,e,i,s){let{track:r,thumb:l}=e;if(i==="vertical"){r.style.height=`${s.height}px`;let a=Math.max(this.options.minThumbSize,t.clientHeight/t.scrollHeight*s.height);l.style.height=`${a}px`,l.style.width="100%";let n=t.scrollHeight-t.clientHeight,h=n>0?t.scrollTop/n:0,u=s.height-a;l.style.transform=`translateY(${h*u}px)`,r.style.display=t.scrollHeight<=t.clientHeight?"none":"block"}else{r.style.width=`${s.width}px`;let a=Math.max(this.options.minThumbSize,t.clientWidth/t.scrollWidth*s.width);l.style.width=`${a}px`,l.style.height="100%";let n=t.scrollWidth-t.clientWidth,h=n>0?t.scrollLeft/n:0,u=s.width-a;l.style.transform=`translateX(${h*u}
28px)`,r.style.display=t.scrollWidth<=t.clientWidth?"none":"block"}}attachThumbListeners(t,e,i,s){let r=!1,l=0,a=0,n=o=>{r=!0,e.classList.add("us-active"),l=s==="vertical"?o.clientY:o.clientX,a=s==="vertical"?i.scrollTop:i.scrollLeft,t.style.background=this.options.thumbActiveColor,o.preventDefault(),o.stopPropagation&&o.stopPropagation()},h=o=>{if(!r)return;let d=(s==="vertical"?o.clientY:o.clientX)-l;if(s==="vertical"){let v=(i.scrollHeight-i.clientHeight)/(e.clientHeight-t.clientHeight);i.scrollTop=a+d*v}else{let v=(i.scrollWidth-i.clientWidth)/(e.clientWidth-t.clientWidth);i.scrollLeft=a+d*v}o.preventDefault()},u=()=>{r&&(r=!1,e.classList.remove("us-active"),t.style.background=this.options.thumbColor)};t.addEventListener("mousedown",n),document.addEventListener("mousemove",h),document.addEventListener("mouseup",u),t.addEventListener("touchstart",o=>{let c=o.touches[0];n({clientX:c.clientX,clientY:c.clientY,preventDefault:()=>o.preventDefault(),stopPropagation:()=>o.stopPropagation()})}),document.addEventListener("touchmove",o=>{if(!r)return;let c=o.touches[0];h({clientX:c.clientX,clientY:c.clientY,preventDefault:()=>o.preventDefault()})}),document.addEventListener("touchend",u),t.addEventListener("mouseenter",()=>{r||(t.style.background=this.options.thumbHoverColor)}),t.addEventListener("mouseleave",()=>{r||(t.style.background=this.options.thumbColor)}),e.addEventListener("click",o=>{if(o.target===t)return;let c=e.getBoundingClientRect();if(s==="vertical"){let d=o.clientY-c.top;i.scrollTop=d/c.height*(i.scrollHeight-i.clientHeight)}else{let d=o.clientX-c.left;i.scrollLeft=d/c.width*(i.scrollWidth-i.clientWidth)}})}showScrollbar(t){let e=this.scrollbars.get(t);if(!e)return;e.vertical&&e.vertical.track.classList.add("us-visible"),e.horizontal&&e.horizontal.track.classList.add("us-visible");let i=this.hideTimers.get(t);i&&(clearTimeout(i),this.hideTimers.delete(t))}hideScrollbarDelayed(t){if(!this.options.autoHide)return;let e=setTimeout(()=>this.hideScrollbar(t),this.options.hideDelay);this.hideTimers.set(t,e)}hideScrollbar(t){let e=this.scrollbars.get(t);e&&(e.vertical&&!e.vertical.track.classList.contains("us-active")&&e.vertical.track.classList.remove("us-visible"),e.horizontal&&!e.horizontal.track.classList.contains("us-active")&&e.horizontal.track.classList.remove("us-visible"))}handleScroll(t){this.rafId||(this.rafId=requestAnimationFrame(()=>{this.updateScrollbar(t),this.showScrollbar(t),this.hideScrollbarDelayed(t),typeof this.options.onScroll=="function"&&this.options.onScroll(t),this.rafId=null}))}handleResize(){this.scrollbars.forEach((t,e)=>this.updateScrollbar(e))}handleMutation(){this.initializeAllScrollbars()}setupMutationObserver(){this.mutationObserver=new MutationObserver(this.handleMutation),this.mutationObserver.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["style","class"]})}setupResizeObserver(){if(typeof ResizeObserver>"u"){window.addEventListener("resize",this.handleResize);return}this.resizeObserver=new ResizeObserver(t=>{t.forEach(e=>this.updateScrollbar(e.target))}),this.scrollbars.forEach((t,e)=>this.resizeObserver.observe(e))}attachGlobalListeners(){window.addEventListener("resize",this.handleResize)}removeScrollbar(t){let e=this.scrollbars.get(t);if(!e)return;t.classList.remove("us-scrollable","us-smooth-scroll"),e.listeners.forEach(({type:s,listener:r})=>t.removeEventListener(s,r)),e.vertical&&e.vertical.track.remove(),e.horizontal&&e.horizontal.track.remove(),this.scrollbars.delete(t);let i=this.hideTimers.get(t);i&&(clearTimeout(i),this.hideTimers.delete(t))}updateOptions(t){this.options={...this.options,...t};let e=document.getElementById("universal-scrollbar-styles");e&&e.remove(),this.injectBaseStyles(),this.scrollbars.forEach(i=>{i.vertical&&(i.vertical.track.style.background=this.options.trackColor,i.vertical.thumb.style.background=this.options.thumbColor),i.horizontal&&(i.horizontal.track.style.background=this.options.trackColor,i.horizontal.thumb.style.background=this.options.thumbColor)})}refresh(){this.scrollbars.forEach((t,e)=>this.updateScrollbar(e))}
28destroy(){this.scrollbars.forEach((e,i)=>this.removeScrollbar(i)),this.mutationObserver&&(this.mutationObserver.disconnect(),this.mutationObserver=null),this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null),window.removeEventListener("resize",this.handleResize),this.hideTimers.forEach(e=>clearTimeout(e)),this.hideTimers.clear(),this.rafId&&(cancelAnimationFrame(this.rafId),this.rafId=null);let t=document.getElementById("universal-scrollbar-styles");t&&t.remove(),this.isDestroyed=!0,typeof this.options.onDestroy=="function"&&this.options.onDestroy()}};export{p as default}; 29/** 30 * UniversalScrollbar 31 * Framework-agnostic custom scrollbar: visual overlay over native scroll. 32 * Same look and behavior across Safari, Chrome, Firefox, etc. 33 * 34 * @license MIT 35 */
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.