PageSourceSearch

https://www.lyleandscott.com/cdn/shop/t/458/assets/universal-scrollbar.esm.js?v=9589208872310598131788364385

js lyleandscott.com collected 2026-09-24 22:59:57 UTC 10,191 bytes, 35 lines download raw bytes

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.