PageSourceSearch

https://3s-website.netlify.app/_astro/SiteFooter.astro_astro_type_…?dpl=6aa95959acc73c00085102e4

js 3s-website.netlify.app collected 2026-10-03 10:23:32 UTC 5,163 bytes, 1 lines download raw bytes

1import{g as i,S as a}from"./ScrollTrigger.a3sj5zmn.js?dpl=6aa95959acc73c00085102e4";import{a as l,k as h}from"./decorationLines.DzUH3o4R.js?dpl=6aa95959acc73c00085102e4";import{B as d,r as c}from"./component.client.DGhttOhc.js?dpl=6aa95959acc73c00085102e4";i.registerPlugin(a);class s extends d{static VL_MIN_WIDTH=900;static FOOTER_REVEAL_OFFSET_VAR="--footer-reveal-offset";static FOOTER_BOTTOM_TRIM_VAR="--footer-bottom-trim";static ANIMATION_DISABLED_ATTR="data-footer-animation-disabled";static SCRUB_SMOOTHING=.5;static SCROLL_START="top bottom";scrollTrigger;refreshInitHandler;decorationLineTweens=[];resizeObserver;resizeHandler;resizeRafId;layoutMediaQuery;layoutMediaQueryHandler;preFooter;siteFooter;overlay;init(){this.setupResizeHandling(),this.refreshLayout()}destroy(){if(this.teardownResizeHandling(),this.destroyAnimation(),!this.$el)return;const e=this.$el.querySelector(":scope > .site-footer"),t=this.$el.querySelector(":scope > .overlay");e&&t&&this.applyStaticLayout(e,t),this.preFooter=void 0,this.siteFooter=void 0,this.overlay=void 0}shouldUseStaticLayout(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches||window.matchMedia("(hover: none) and (pointer: coarse)").matches||!window.matchMedia(`(min-width: ${s.VL_MIN_WIDTH}px)`).matches}getLayoutMode(){return this.shouldUseStaticLayout()?"static":"animated"}getRevealOffset(e){const t=parseFloat(getComputedStyle(e).marginBottom)||0;return e.offsetHeight+t}getBottomTrim(e,t){return Math.max(0,this.getRevealOffset(e)-t.offsetHeight)}syncLayoutMeasurements(e,t){const r=this.getRevealOffset(e),o=this.getBottomTrim(e,t);this.$el?.style.setProperty(s.FOOTER_REVEAL_OFFSET_VAR,`${r}px`),this.$el?.style.setProperty(s.FOOTER_BOTTOM_TRIM_VAR,`${o}px`)}clearLayoutMeasurements(){this.$el?.style.removeProperty(s.FOOTER_REVEAL_OFFSET_VAR),this.$el?.style.removeProperty(s.FOOTER_BOTTOM_TRIM_VAR)}applyScrollProgress(e){if(!this.preFooter||!this.siteFooter||!this.overlay)return;const t=this.getRevealOffset(this.preFooter);i.set(this.siteFooter,{y:t*(1-e),force3D:!0}),i.set(this.overlay,{opacity:e})}applyStaticLayout(e,t){this.$el?.setAttribute(s.ANIMATION_DISABLED_ATTR,"true"),this.clearLayoutMeasurements(),i.set(e,{clearProps:"transform,willChange"}),i.set(t,{opacity:0,clearProps:"willChange"})}applyAnimatedLayout(e,t,r){this.$el?.removeAttribute(s.ANIMATION_DISABLED_ATTR),this.syncLayoutMeasurements(e,t);const o=()=>({trigger:t,start:s.SCROLL_START,end:()=>`+=${t.offsetHeight}`,scrub:s.SCRUB_SMOOTHING,invalidateOnRefresh:!0});this.refreshInitHandler=()=>{!this.preFooter||!this.siteFooter||this.syncLayoutMeasurements(this.preFooter,this.siteFooter)},a.addEventListener("refreshInit",this.refreshInitHandler),i.set(t,{willChange:"transform",force3D:!0}),i.set(r,{willChange:"opacity"}),this.scrollTrigger=a.create({...o(),onUpdate:n=>{this.applyScrollProgress(n.progress)}}),this.initDecorationLineAnimations(t,o()),a.refresh(),this.applyScrollProgress(this.scrollTrigger.progress)}refreshLayout(){if(this.destroyAnimation(),!this.$el)return;const e=this.$el.querySelector(":scope > .site-pre-footer"),t=this.$el.querySelector(":scope > .site-footer"),r=this.$el.querySelector(":scope > .overlay");if(!e||!t||!r)return;if(this.preFooter=e,this.siteFooter=t,this.overlay=r,this.getLayoutMode()==="static"){this.applyStaticLayout(t,r);return}this.applyAnimatedLayout(e,t,r)}handleResize(){this.refreshLayout()}setupResizeHandling(){if(this.teardownResizeHandling(),!this.$el)return;const e=()=>{this.resizeRafId&&cancelAnimationFrame(this.resizeRafId),this.resizeRafId=requestAnimationFrame(()=>{this.resizeRafId=void 0,this.handleResize()})};if(this.resizeHandler=e,window.addEventListener("resize",e,{passive:!0}),this.layoutMediaQuery=window.matchMedia(`(min-width: ${s.VL_MIN_WIDTH}px)`),this.layoutMediaQueryHandler=e,this.layoutMediaQuery.addEventListener("change",e),"ResizeObserver"in window){this.resizeObserver=new ResizeObserver(e);const t=this.$el.querySelector(":scope > .site-pre-footer"),r=this.$el.querySelector(":scope > .site-footer");t&&this.resizeObserver.observe(t),r&&this.resizeObserver.observe(r),this.resizeObserver.observe(document.documentElement)}}teardownResizeHandling(){this.resizeObserver?.disconnect(),this.resizeObserver=void 0,this.resizeHandler&&(window.removeEventListener("resize",this.resizeHandler),this.resizeHandler=void 0),this.layoutMediaQuery&&this.layoutMediaQueryHandler&&(this.layoutMediaQuery.removeEventListener("change",this.layoutMediaQueryHandler),this.layoutMediaQuery=void 0,this.layoutMediaQueryHandler=void 0),this.resizeRafId&&(cancelAnimationFrame(this.resizeRafId),this.resizeRafId=void 0)}initDecorationLineAnimations(e,t){const r=e.querySelectorAll(":scope > .decoration");r.length&&r.forEach(o=>{const{tweens:n}=l({decoration:o,scrollTriggerConfig:t});this.decorationLineTweens.push(...n)})}destroyAnimation(){this.scrollTrigger?.kill(),this.scrollTrigger=void 0,this.refreshInitHandler&&(a.removeEventListener("refreshInit",this.refreshInitHandler),this.refreshInitHandler=void 0),h(this.decorationLineTweens),this.decorationLineTweens=[]}}i.registerPlugin(a);c("[data-site-footer-animation]",s);

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.