1"use strict";(self.webpackChunkota=self.webpackChunkota||[]).push([[155],{14767(Z,S,h){h.d(S,{k:()=>tt});var e=h(62552),f=h(88425),k=h.n(f),C=h(80534),p=h(15768);let T=(()=>{var o;class i{constructor(){this.window=(0,e.WQX)(p.t)}get maskUrl(){return`url("${this.window.URL_STATIC_CDN}/icons/phosphor-icons/spinner-regular.svg")`}static#t=o=()=>(this.\u0275fac=function(n){return new(n||i)},this.\u0275cmp=e.VBU({type:i,selectors:[["fullscreen-spinner"]],hostVars:2,hostBindings:function(n,s){2&n&&e.xc7("--spinner-mask",s.maskUrl)},decls:0,vars:0,template:function(n,s){},styles:["[_nghost-%COMP%]{display:inline-block;width:2.5rem;height:2.5rem;background:conic-gradient(from -24deg at 50% 50%,var(--surface-neutral-inverted, #FFF) 0deg,var(--neutral-800, #3A3A3A) 360deg);-webkit-mask-image:var(--spinner-mask);mask-image:var(--spinner-mask);-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;animation:_ngcontent-%COMP%_spin 1s linear infinite}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}"]}))}return o(),i})();var u=h(28783);function m(o,i,l){return Math.max(i,Math.min(l,o))}function E(o,i){const l=i.x-o.x,t=i.y-o.y;return Math.sqrt(l*l+t*t)}function N(o,i){return{x:(o.x+i.x)/2,y:(o.y+i.y)/2}}function b(o,i,l,t=.2){return o<i?i-(i-o)*t:o>l?l+(o-l)*t:o}function R(o,i,l,t,n){if(t===n||0===t)return l;const s=n/t;return{x:l.x-(o.x-i.x)*(s-1),y:l.y-(o.y-i.y)*(s-1)}}function P(o,i){return{x:m(o.x,i.minX,i.maxX),y:m(o.y,i.minY,i.maxY)}}function g(o){return{x:o.clientX,y:o.clientY}}const y=.15;let x=(()=>{var o;class i{constructor(){this.minZoom=u.cA/100,this.maxZoom=u.ec/100,this.fullResUrl=null,this.zoomChange=new e.bkB,this.isZoomedChange=new e.bkB,this.zoomStart=new e.bkB,this.zoomEnd=new e.bkB,this.elementRef=(0,e.WQX)(e.aKT),this.ngZone=(0,e.WQX)(e.SKi),this.scale=1,this.translateX=0,this.translateY=0,this.isZoomed=!1,this.hasSwappedToFullRes=!1,this.gestureState={isActive:!1,isPinching:!1,isPanning:!1,startScale:1,startTranslateX:0,startTranslateY:0,startPinchDistance:0,pinchMidpoint:{x:0,y:0},lastPanPoint:{x:0,y:0}},this.animationFrameId=null,this.lastTapTime=0,this.lastEmittedZoomPercentage=100,this.boundHandlers={touchStart:this.onTouchStart.bind(this),touchMove:this.onTouchMove.bind(this),touchEnd:this.onTouchEnd.bind(this),wheel:this.onWheel.bind(this),mouseDown:this.onMouseDown.bind(this),mouseMove:this.onMouseMove.bind(this),mouseUp:this.onMouseUp.bind(this)}}ngAfterViewInit(){this.ngZone.runOutsideAngular(()=>{this.addEventListeners()})}ngOnDestroy(){this.gestureState.isActive=!1,this.gestureState.isPanning=!1,this.gestureState.isPinching=!1,this.removeEventListeners(),null!==this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null)}setZoom(t,n=!0){const s=m(t,this.minZoom,this.maxZoom);this.animateToScale(s,n)}resetZoom(t=!0){this.animateToState(1,0,0,t)}zoomIn(t=u.bL){const n=Math.min(this.maxZoom,this.scale+t);this.setZoom(n,!0)}zoomOut(t=u.bL){const n=Math.max(this.minZoom,this.scale-t);this.setZoom(n,!0)}getZoomPercentage(){return Math.round(100*this.scale)}addEventListeners(){const t=this.elementRef.nativeElement;t.addEventListener("touchstart",this.boundHandlers.touchStart,{passive:!1}),t.addEventListener("touchmove",this.boundHandlers.touchMove,{passive:!1}),t.addEventListener("touchend",this.boundHandlers.touchEnd,{passive:!0}),t.addEventListener("touchcancel",this.boundHandlers.touchEnd,{passive:!0}),t.addEventListener("wheel",this.boundHandlers.wheel,{passive:!1}),t.addEventListener("mousedown",this.boundHandlers.mouseDown),window.addEventListener("mousemove",this.boundHandlers.mouseMove),window.addEventListener("mouseup",this.boundHandlers.mouseUp)}removeEventListeners(){const t=this.elementRef.nativeElement;t.removeEventListener("touchstart",this.boundHandlers.touchStart),t.removeEventListener("touchmove",this.boundHandlers.touchMove),t.removeEventListener("touchend",this.boundHandlers.touchEnd),t.removeEventListener("touchcancel",this.boundHandlers.touchEnd),t.removeEventListener("wheel",this.boundHandlers.wheel),t.removeEventListener("mousedown",this.boundHandlers.mouseDown),window.removeEventListener("mousemove",this.boundHandlers.mouseMove),window.removeEventListener("mouseup",this.boundHandlers.mouseUp)}onTouchStart(t){const n=t.touches;if(1===n.length){const s=Date.now();if(s-this.lastTapTime<300)return t.preventDefault(),this.handleDoubleTap(g(n[0])),void(this.lastTapTime=0);this.lastTapTime=s,this.isZoomed&&(t.preventDefault(),this.startPanGesture(g(n[0])))}if(2===n.length){t.preventDefault(),this.lastTapTime=0;const s=g(n[0]),r=g(n[1]);this.startPinchGesture(s,r)}}onTouchMove(t){const n=t.touches;if(this.gestureState.isPinching&&2===n.length){t.preventDefault();const s=g(n[0]),r=g(n[1]);
1this.handlePinchMove(s,r)}else this.gestureState.isPanning&&1===n.length&&this.isZoomed&&(t.preventDefault(),this.handlePanMove(g(n[0])))}onTouchEnd(t){const n=t.touches.length;this.gestureState.isPinching&&(this.endPinchGesture(),1===n&&this.isZoomed&&this.startPanGesture(g(t.touches[0]))),this.gestureState.isPanning&&0===n&&this.endPanGesture()}onWheel(t){if(!t.ctrlKey&&!t.metaKey)return;t.preventDefault();const n=this.elementRef.nativeElement.parentElement?.getBoundingClientRect();if(!n)return;const s={x:t.clientX,y:t.clientY},r={x:n.left+n.width/2,y:n.top+n.height/2},a=function z(o,i,l=.002){return i+(o>0?-1:1)*l*i*50}(t.deltaY,this.scale),c=m(a,this.minZoom,this.maxZoom),d=R(s,r,{x:this.translateX,y:this.translateY},this.scale,c);this.applyZoomWithBounds(c,d.x,d.y)}onMouseDown(t){if(0!==t.button)return;const n=Date.now();if(n-this.lastTapTime<300)return t.preventDefault(),this.handleDoubleTap({x:t.clientX,y:t.clientY}),void(this.lastTapTime=0);this.lastTapTime=n,this.isZoomed&&(t.preventDefault(),this.startPanGesture({x:t.clientX,y:t.clientY}))}onMouseMove(t){!this.gestureState.isPanning||!this.isZoomed||(t.preventDefault(),this.handlePanMove({x:t.clientX,y:t.clientY}))}onMouseUp(){this.gestureState.isPanning&&this.endPanGesture()}startPinchGesture(t,n){this.gestureState={...this.gestureState,isActive:!0,isPinching:!0,isPanning:!1,startScale:this.scale,startTranslateX:this.translateX,startTranslateY:this.translateY,startPinchDistance:E(t,n),pinchMidpoint:N(t,n)},this.ngZone.run(()=>{this.zoomStart.emit()})}handlePinchMove(t,n){const s=E(t,n);let r=function D(o,i,l){return 0===o?l:i/o*l}(this.gestureState.startPinchDistance,s,this.gestureState.startScale);r=b(r,this.minZoom,this.maxZoom,y);const a=this.elementRef.nativeElement.parentElement?.getBoundingClientRect();if(!a)return;const c_x=a.left+a.width/2,c_y=a.top+a.height/2,I=this.maxZoom/this.minZoom,_=m(r/this.gestureState.startScale,1/I,I);this.applyZoomWithBounds(r,this.gestureState.startTranslateX-(this.gestureState.pinchMidpoint.x-c_x)*(_-1),this.gestureState.startTranslateY-(this.gestureState.pinchMidpoint.y-c_y)*(_-1),!1)}endPinchGesture(){this.gestureState.isPinching=!1,this.gestureState.isActive=!1;const t=m(this.scale,this.minZoom,this.maxZoom);this.animateToScale(t,!0),this.ngZone.run(()=>{this.zoomEnd.emit()})}startPanGesture(t){this.gestureState={...this.gestureState,isActive:!0,isPanning:!0,startTranslateX:this.translateX,startTranslateY:this.translateY,lastPanPoint:t}}handlePanMove(t){const n=t.x-this.gestureState.lastPanPoint.x,s=t.y-this.gestureState.lastPanPoint.y;this.gestureState.lastPanPoint=t,this.lastTapTime=0,this.applyZoomWithBounds(this.scale,this.translateX+n,this.translateY+s,!0)}endPanGesture(){this.gestureState.isPanning=!1,this.gestureState.isActive=!1;const t=this.getTranslationBounds(),n=P({x:this.translateX,y:this.translateY},t);this.animateToState(this.scale,n.x,n.y,!0)}handleDoubleTap(t){if(this.isZoomed)this.animateToState(1,0,0,!0);else{const n=this.elementRef.nativeElement.getBoundingClientRect(),c=P(R(t,{x:n.left+n.width/2,y:n.top+n.height/2},{x:0,y:0},1,this.maxZoom),this.calculateBoundsForScale(this.maxZoom));this.animateToState(this.maxZoom,c.x,c.y,!0)}}applyZoomWithBounds(t,n,s,r=!1){const a=this.calculateBoundsForScale(t);let c,d;r?(c=b(n,a.minX,a.maxX,y),d=b(s,a.minY,a.maxY,y)):(c=m(n,a.minX,a.maxX),d=m(s,a.minY,a.maxY)),this.applyTransform(t,c,d)}applyTransform(t,n,s){this.scale=t,this.translateX=n,this.translateY=s,this.elementRef.nativeElement.style.transform=function X(o){return`translate(${o.translateX}px, ${o.translateY}px) scale(${o.scale})`}({scale:this.scale,translateX:this.translateX,translateY:this.translateY});const a=this.isZoomed;this.isZoomed=this.scale>1.01,!a&&this.isZoomed&&this.swapToFullRes(),a!==this.isZoomed&&this.ngZone.run(()=>{this.isZoomedChange.emit(this.isZoomed)});const c=this.getZoomPercentage();c!==this.lastEmittedZoomPercentage&&(this.lastEmittedZoomPercentage=c,this.ngZone.run(()=>{this.zoomChange.emit(c)}))}swapToFullRes(){if(this.hasSwappedToFullRes||!this.fullResUrl)return;const t=this.fullResUrl,n=new Image;n.onload=()=>{const s=this.elementRef.nativeElement.parentElement;if(!s)return;s.querySelectorAll("source").forEach(a=>{a.removeAttribute("srcset")});const r=this.elementRef.nativeElement;"IMG"===r.tagName&&(r.src=t),this.hasSwappedToFullRes=!0},n.src=t}animateToScale(t,n){const s=this.calculateBoundsForScale(t),r=P({x:this.translateX,y:this.translateY},s);this.animateToState(t,r.x,r.y,n)}animateToState(t,n,s,r){if(!r)return void this.applyTransform(t,n,s);const a=this.scale,c=this.translateX,d=this.translateY,I=performance.now(),_=M=>{const v=Math.min((M-I)/200,1),w=1-Math.pow(1-v,3);this.applyTransform(a+(t-a)*w,c+(n-c)*w,d+(s-d)*w),this.animationFrameId=v<1?requestAnimationFrame(_):null};null!==this.animationFrameId&&cancelAnimationFrame(this.animationFrameId),this.animationFrameId=requestAnimationFrame(_)}getTranslationBounds(){return this.calculateBoundsForScale(this.scale)}calculateBoundsForScale(t){const n=this.elementRef.nativeElement,s=n.parentElement?.getBoundingClientRect();if(!s)return{minX:0,maxX:0,minY:0,maxY:0};
1const a=n.naturalWidth||s.width,c=n.naturalHeight||s.height,_=Math.min(a>0?s.width/a:1,c>0?s.height/c:1,1);return function A(o,i,l,t,n){const r=n*o,a=Math.max(0,(t*o-i)/2),c=Math.max(0,(r-l)/2);return{minX:-a,maxX:a,minY:-c,maxY:c}}(t,s.width,s.height,a*_,c*_)}static#t=o=()=>(this.\u0275fac=function(n){return new(n||i)},this.\u0275dir=e.FsC({type:i,selectors:[["","zoomable",""]],inputs:{minZoom:"minZoom",maxZoom:"maxZoom",fullResUrl:"fullResUrl"},outputs:{zoomChange:"zoomChange",isZoomedChange:"isZoomedChange",zoomStart:"zoomStart",zoomEnd:"zoomEnd"}}))}return o(),i})();const $=["trackElement"],Y=(o,i)=>i.id;function U(o,i){1&o&&(e.EFF(0,"\n\t\t\t\t"),e.j41(1,"div",7),e.EFF(2,"\n\t\t\t\t\t"),e.nrm(3,"fullscreen-spinner"),e.EFF(4,"\n\t\t\t\t"),e.k0s(),e.EFF(5,"\n\t\t\t"))}function V(o,i){1&o&&(e.EFF(0,"\n\t\t\t\t"),e.j41(1,"div",8),e.EFF(2,"\n\t\t\t\t\t"),e.j41(3,"span"),e.pXf(4,1),e.k0s(),e.EFF(5,"\n\t\t\t\t"),e.k0s(),e.EFF(6,"\n\t\t\t"))}function W(o,i){if(1&o){const l=e.RV6();e.EFF(0,"\n\t\t"),e.j41(1,"div",3),e.EFF(2,"\n\t\t\t"),e.DNE(3,U,6,0)(4,V,7,0),e.j41(5,"picture"),e.EFF(6,"\n\t\t\t\t"),e.nrm(7,"source",4),e.EFF(8,"\n\t\t\t\t"),e.nrm(9,"source",5),e.EFF(10,"\n\t\t\t\t"),e.j41(11,"img",6),e.bIt("zoomChange",function(n){e.eBV(l);const s=e.XpG();return e.Njj(s.onZoomChange(n))})("isZoomedChange",function(n){e.eBV(l);const s=e.XpG();return e.Njj(s.onIsZoomedChange(n))})("load",function(){const n=e.eBV(l).$implicit,s=e.XpG();return e.Njj(s.onImageLoad(n.id))})("error",function(){const n=e.eBV(l).$implicit,s=e.XpG();return e.Njj(s.onImageError(n.id))}),e.k0s(),e.EFF(12,"\n\t\t\t"),e.k0s(),e.EFF(13,"\n\t\t"),e.k0s(),e.EFF(14,"\n\t")}if(2&o){let l;const t=i.$implicit,n=i.$index,s=e.XpG();e.R7$(3),e.vxM(s.isImageLoading(t.id)?3:-1),e.R7$(),e.vxM(s.isImageError(t.id)?4:-1),e.R7$(),e.AVh("hidden",s.isImageError(t.id)),e.R7$(2),e.Y8G("srcset",t.webpSrcset),e.R7$(2),e.Y8G("srcset",t.jpegSrcset),e.R7$(2),e.Y8G("src",t.url,e.B4B)("alt",null!==(l=t.description)&&void 0!==l?l:s.placeholderImageAltText(n))("fullResUrl",t.url),e.BMQ("loading",n===s.currentIndex?"eager":"lazy")}}let tt=(()=>{var o;class i{constructor(){this.images=[],this.currentIndex=0,this.indexChange=new e.bkB,this.zoomChange=new e.bkB,this.isZoomedChange=new e.bkB,this.isZoomed=!1,this.isDesktop=!1,this.loadedImageIds=new Set,this.errorImageIds=new Set,this.window=(0,e.WQX)(p.t),this.ngZone=(0,e.WQX)(e.SKi),this.desktopMediaQuery=(0,e.WQX)(C.h),this.isScrollingProgrammatically=!1,this.scrollEndTimeout=null,this.trackOffset=0,this.isDragging=!1,this.dragStartX=0,this.dragDeltaX=0,this.activePointerId=null,this.animateNextChange=!1,this.boundMediaQueryHandler=null,this.debouncedResizeHandler=null,this.isDestroyed=!1}get zoomedClass(){return this.isZoomed}onPointerDown(t){!this.isDesktop||this.isZoomed||0===t.button&&(this.isDragging=!0,this.dragStartX=t.clientX,this.dragDeltaX=0,this.activePointerId=t.pointerId,t.target.setPointerCapture(t.pointerId),this.setTrackTransition(!1))}onPointerMove(t){!this.isDragging||t.pointerId!==this.activePointerId||(this.dragDeltaX=t.clientX-this.dragStartX,this.applyTrackTransform())}onPointerUp(t){!this.isDragging||t.pointerId!==this.activePointerId||this.endDrag()}onPointerCancel(t){!this.isDragging||t.pointerId!==this.activePointerId||this.endDrag()}ngOnInit(){this.setupMediaQuery()}ngAfterViewInit(){this.setupResizeListener(),this.isDesktop?this.updateTrackPosition(!1):this.scrollToIndex(this.currentIndex,"instant")}ngOnChanges(t){if(t.images&&!t.images.firstChange){const n=new Set(this.images.map(s=>s.id));this.loadedImageIds=new Set([...this.loadedImageIds].filter(s=>n.has(s))),this.errorImageIds=new Set([...this.errorImageIds].filter(s=>n.has(s)))}if(t.currentIndex&&!t.currentIndex.firstChange)if(this.isDesktop){const n=this.animateNextChange;this.animateNextChange=!1,this.dragDeltaX=0,this.updateTrackPosition(n)}else this.scrollToIndex(this.currentIndex,"smooth")}ngOnDestroy(){this.isDestroyed=!0,this.cleanupMediaQuery(),this.cleanupResizeListener(),this.scrollEndTimeout&&clearTimeout(this.scrollEndTimeout)}onScroll(){this.isDesktop||(this.scrollEndTimeout&&clearTimeout(this.scrollEndTimeout),this.scrollEndTimeout=setTimeout(()=>{this.onScrollEnd()},50))}onZoomChange(t){this.zoomChange.emit(t)}onIsZoomedChange(t){this.isZoomed=t,this.isZoomedChange.emit(t),!this.isDesktop&&this.trackElement?.nativeElement&&(this.trackElement.nativeElement.style.overflowX=t?"hidden":"auto")}zoomIn(){this.getCurrentZoomable()?.zoomIn()}zoomOut(){this.getCurrentZoomable()?.zoomOut()}resetZoom(){this.getCurrentZoomable()?.resetZoom()}placeholderImageAltText(t){return $localize`:Alt text for placeholder image in fullscreen image viewer:Kohdekuva ${t+1}:currentImage: / ${this.images.length}:totalImages:`}onImageLoad(t){this.errorImageIds.delete(t),this.loadedImageIds.add(t)}onImageError(t){this.loadedImageIds.delete(t),this.errorImageIds.add(t)}isImageLoading(t){return!this.loadedImageIds.has(t)&&!this.errorImageIds.has(t)}isImageError(t){return this.errorImageIds.has(t)}setupMediaQuery(){this.isDesktop=this.desktopMediaQuery.matches,this.boundMediaQueryHandler=t=>{this.ngZone.run(()=>{this.isDesktop=t.matches,this.isDesktop?this.updateTrackPosition(!1):this.scrollToIndex(this.currentIndex,"instant")})},this.desktopMediaQuery.addEventListener("change",this.boundMediaQueryHandler)}cleanupMediaQuery(){this.desktopMediaQuery&&this.boundMediaQueryHandler&&this.desktopMediaQuery.removeEventListener("change",this.boundMediaQueryHandler)}setupResizeListener(){this.debouncedResizeHandler=k()(()=>{this.isDestroyed||this.ngZone.run(()=>this.handleResize())},100),this.window.addEventListener("resize",this.debouncedResizeHandler)}cleanupResizeListener(){this.debouncedResizeHandler&&(this.window.removeEventListener("resize",this.debouncedResizeHandler),this.debouncedResizeHandler.cancel(),this.debouncedResizeHandler=null)}handleResize(){this.desktopMediaQuery&&(this.isDesktop=this.desktopMediaQuery.matches);const t=this.trackElement?.nativeElement;!t||0===t.clientWidth||(this.isDesktop?this.updateTrackPosition(!1):this.scrollToIndex(this.currentIndex,"instant"))}onScrollEnd(){if(this.isScrollingProgrammatically)return;const t=this.trackElement?.nativeElement;if(!t)return;const n=t.clientWidth;if(0===n)return;const r=Math.round(t.scrollLeft/n),a=this.clamp(r,0,this.images.length-1);a!==this.currentIndex&&this.indexChange.emit(a)}scrollToIndex(t,n){const s=this.trackElement?.nativeElement;if(!s)return;this.clearDesktopStyles();
1const a=t*s.clientWidth;this.isScrollingProgrammatically=!0,s.scrollTo({left:a,behavior:n}),setTimeout(()=>{this.isScrollingProgrammatically=!1},"instant"===n?0:100)}clearDesktopStyles(){const t=this.trackElement?.nativeElement;t&&(t.style.transform="",t.style.transition="",this.trackOffset=0,this.dragDeltaX=0)}endDrag(){if(this.isDragging=!1,this.activePointerId=null,Math.abs(this.dragDeltaX)>50){const n=this.clamp(this.currentIndex+(this.dragDeltaX>0?-1:1),0,this.images.length-1);if(n!==this.currentIndex)return this.dragDeltaX=0,this.animateNextChange=!0,void this.indexChange.emit(n)}this.dragDeltaX=0,this.updateTrackPosition(!0)}updateTrackPosition(t){const n=this.trackElement?.nativeElement;n&&(this.trackOffset=-this.currentIndex*n.clientWidth,this.setTrackTransition(t),this.applyTrackTransform())}applyTrackTransform(){const t=this.trackElement?.nativeElement;t&&(t.style.transform=`translateX(${this.trackOffset+this.dragDeltaX}px)`)}setTrackTransition(t){const n=this.trackElement?.nativeElement;n&&(n.style.transition=t?"transform 300ms ease-out":"none")}clamp(t,n,s){return Math.max(n,Math.min(s,t))}getCurrentZoomable(){return this.zoomableImages?.get(this.currentIndex)}static#t=o=()=>(this.\u0275fac=function(n){return new(n||i)},this.\u0275cmp=e.VBU({type:i,selectors:[["image-track"]],viewQuery:function(n,s){if(1&n&&(e.GBs($,5),e.GBs(x,5)),2&n){let r;e.mGM(r=e.lsd())&&(s.trackElement=r.first),e.mGM(r=e.lsd())&&(s.zoomableImages=r)}},hostVars:2,hostBindings:function(n,s){1&n&&e.bIt("pointerdown",function(a){return s.onPointerDown(a)})("pointermove",function(a){return s.onPointerMove(a)})("pointerup",function(a){return s.onPointerUp(a)})("pointercancel",function(a){return s.onPointerCancel(a)}),2&n&&e.AVh("zoomed",s.zoomedClass)},inputs:{images:"images",currentIndex:"currentIndex"},outputs:{indexChange:"indexChange",zoomChange:"zoomChange",isZoomedChange:"isZoomedChange"},features:[e.OA$],decls:6,vars:4,consts:()=>{let t,n;return t=$localize`:Loading spinner aria label|Fullscreen image viewer spinner:Ladataan...`,n=$localize`:Image load error|Fullscreen image viewer error message:Kuvan lataaminen epäonnistui`,[["trackElement",""],n,[1,"image-track",3,"scroll"],[1,"image-track__container"],["type","image/webp","sizes","100vw",3,"srcset"],["type","image/jpeg","sizes","100vw",3,"srcset"],["zoomable","",1,"image-track__image",3,"zoomChange","isZoomedChange","load","error","src","alt","fullResUrl"],["role","status","aria-label",t,1,"image-track__spinner"],["aria-live","polite",1,"image-track__error"]]},template:function(n,s){if(1&n){const r=e.RV6();e.j41(0,"div",2,0),e.bIt("scroll",function(){return e.eBV(r),e.Njj(s.onScroll())}),e.EFF(2,"\n\t"),e.Z7z(3,W,15,10,null,null,Y),e.k0s(),e.EFF(5,"\n")}2&n&&(e.AVh("image-track--zoomed",s.isZoomed)("image-track--desktop",s.isDesktop),e.R7$(3),e.Dyx(s.images))},dependencies:[x,T],styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%;overflow:hidden}@media screen and (min-width: 48rem){[_nghost-%COMP%]{height:calc(100vh - 11rem)}}@media screen and (min-width: 48rem){.zoomed[_nghost-%COMP%]{overflow:visible}}.image-track[_ngcontent-%COMP%]{display:flex;width:100%;height:100%;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;scroll-behavior:smooth}.image-track[_ngcontent-%COMP%]::-webkit-scrollbar{display:none}@media screen and (min-width: 48rem){.image-track[_ngcontent-%COMP%]{overflow:visible;scroll-snap-type:none;will-change:transform}}.image-track__container[_ngcontent-%COMP%]{flex:0 0 100%;width:100%;height:100%;display:flex;align-items:center;justify-content:center;position:relative;scroll-snap-align:start;scroll-snap-stop:always}.image-track__container[_ngcontent-%COMP%] picture[_ngcontent-%COMP%]{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.image-track__container[_ngcontent-%COMP%] picture.hidden[_ngcontent-%COMP%]{display:none}@media screen and (min-width: 48rem){.image-track__container[_ngcontent-%COMP%]{scroll-snap-align:unset;scroll-snap-stop:unset}}.image-track__image[_ngcontent-%COMP%]{width:100%;height:100%;object-fit:scale-down;-webkit-user-select:none;user-select:none;pointer-events:auto;-webkit-user-drag:none}@media screen and (min-width: 48rem){.image-track__image[_ngcontent-%COMP%]{cursor:grab}.image-track__image[_ngcontent-%COMP%]:active{cursor:grabbing}}.image-track__spinner[_ngcontent-%COMP%]{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--icons-neutral-on-color)}.image-track__error[_ngcontent-%COMP%]{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--text-on-color-body)}.image-track--zoomed[_ngcontent-%COMP%] .image-track__image[_ngcontent-%COMP%]{cursor:move}"]}))}return o(),i})()},91065(Z,S,h){h.d(S,{v:()=>k});var e=h(62552),f=h(28783);let k=(()=>{var C;class p{constructor(){this.zoomLevel=f.ej,this.minZoom=f.cA,this.maxZoom=f.ec,this.zoomInClick=new e.bkB,this.zoomOutClick=new e.bkB}get isZoomInDisabled(){return this.zoomLevel>=this.maxZoom}get isZoomOutDisabled(){return this.zoomLevel<=this.minZoom}onZoomIn(){this.isZoomInDisabled||this.zoomInClick.emit()}onZoomOut(){this.isZoomOutDisabled||this.zoomOutClick.emit()}static#t=C=()=>(this.\u0275fac=function(u){return new(u||p)}
1,this.\u0275cmp=e.VBU({type:p,selectors:[["zoom-controls"]],inputs:{zoomLevel:"zoomLevel",minZoom:"minZoom",maxZoom:"maxZoom"},outputs:{zoomInClick:"zoomInClick",zoomOutClick:"zoomOutClick"},decls:22,vars:7,consts:()=>{let T,u,m;return T=$localize`:Zoom controls|Aria-label for zoom controls component:Zoomaussäätimet`,u=$localize`:Zoom out|Aria-label for zoom out button:Loitonna`,m=$localize`:Zoom in|Aria-label for zoom in button:Lähennä`,[["role","group","aria-label",T,1,"zoom-controls"],["type","button","aria-label",u,1,"zoom-controls__button",3,"click","disabled"],["xmlns","http://www.w3.org/2000/svg","width","24","height","24","fill","none","viewBox","0 0 256 256",1,"zoom-controls__icon"],["d","M152,112a8,8,0,0,1-8,8H80a8,8,0,0,1,0-16h64A8,8,0,0,1,152,112Zm77.66,117.66a8,8,0,0,1-11.32,0l-50.06-50.07a88.11,88.11,0,1,1,11.31-11.31l50.07,50.06A8,8,0,0,1,229.66,229.66ZM112,184a72,72,0,1,0-72-72A72.08,72.08,0,0,0,112,184Z"],["aria-live","polite",1,"zoom-controls__level"],["type","button","aria-label",m,1,"zoom-controls__button",3,"click","disabled"],["xmlns","http://www.w3.org/2000/svg","width","24","height","24","viewBox","0 0 24 24","fill","none",1,"zoom-controls__icon"],["d","M14.25 10.5C14.25 10.6989 14.171 10.8897 14.0303 11.0303C13.8896 11.171 13.6989 11.25 13.5 11.25H11.25V13.5C11.25 13.6989 11.171 13.8897 11.0303 14.0303C10.8896 14.171 10.6989 14.25 10.5 14.25C10.3011 14.25 10.1103 14.171 9.96964 14.0303C9.82899 13.8897 9.74997 13.6989 9.74997 13.5V11.25H7.49997C7.30106 11.25 7.11029 11.171 6.96964 11.0303C6.82899 10.8897 6.74997 10.6989 6.74997 10.5C6.74997 10.3011 6.82899 10.1103 6.96964 9.96967C7.11029 9.82902 7.30106 9.75 7.49997 9.75H9.74997V7.5C9.74997 7.30109 9.82899 7.11032 9.96964 6.96967C10.1103 6.82902 10.3011 6.75 10.5 6.75C10.6989 6.75 10.8896 6.82902 11.0303 6.96967C11.171 7.11032 11.25 7.30109 11.25 7.5V9.75H13.5C13.6989 9.75 13.8896 9.82902 14.0303 9.96967C14.171 10.1103 14.25 10.3011 14.25 10.5ZM21.5306 21.5306C21.4609 21.6004 21.3782 21.6557 21.2872 21.6934C21.1961 21.7312 21.0985 21.7506 21 21.7506C20.9014 21.7506 20.8038 21.7312 20.7128 21.6934C20.6217 21.6557 20.539 21.6004 20.4693 21.5306L15.7762 16.8366C14.1428 18.1971 12.0478 18.8755 9.92691 18.7307C7.80604 18.5859 5.82265 17.629 4.38932 16.0591C2.95599 14.4892 2.18308 12.4272 2.23138 10.3019C2.27968 8.17666 3.14547 6.15184 4.64864 4.64867C6.15181 3.1455 8.17663 2.27971 10.3019 2.23141C12.4271 2.18311 14.4892 2.95602 16.0591 4.38935C17.629 5.82268 18.5859 7.80607 18.7307 9.92694C18.8755 12.0478 18.1971 14.1429 16.8365 15.7763L21.5306 20.4694C21.6003 20.539 21.6556 20.6217 21.6934 20.7128C21.7311 20.8038 21.7506 20.9014 21.7506 21C21.7506 21.0986 21.7311 21.1962 21.6934 21.2872C21.6556 21.3783 21.6003 21.461 21.5306 21.5306ZM10.5 17.25C11.835 17.25 13.14 16.8541 14.2501 16.1124C15.3601 15.3707 16.2253 14.3165 16.7362 13.0831C17.2471 11.8497 17.3807 10.4925 17.1203 9.18314C16.8598 7.87377 16.2169 6.67103 15.2729 5.72703C14.3289 4.78303 13.1262 4.14015 11.8168 3.8797C10.5075 3.61925 9.15026 3.75292 7.91686 4.26381C6.68346 4.77471 5.62925 5.63987 4.88755 6.7499C4.14585 7.85993 3.74997 9.16498 3.74997 10.5C3.75196 12.2896 4.46375 14.0053 5.72919 15.2708C6.99463 16.5362 8.71037 17.248 10.5 17.25Z"]]},template:function(u,m){1&u&&(e.j41(0,"div",0),e.EFF(1,"\n\t"),e.j41(2,"button",1),e.bIt("click",function(){return m.onZoomOut()}),e.EFF(3,"\n\t\t"),e.qSk(),e.j41(4,"svg",2),e.EFF(5,"\n\t\t\t"),e.nrm(6,"path",3),e.EFF(7,"\n\t\t"),e.k0s(),e.EFF(8,"\n\t"),e.k0s(),e.EFF(9,"\n\n\t"),e.joV(),e.j41(10,"span",4),e.EFF(11),e.k0s(),e.EFF(12,"\n\n\t"),e.j41(13,"button",5),e.bIt("click",function(){return m.onZoomIn()}),e.EFF(14,"\n\t\t"),e.qSk(),e.j41(15,"svg",6),e.EFF(16,"\n\t\t\t"),e.nrm(17,"path",7),e.EFF(18,"\n\t\t"),e.k0s(),e.EFF(19,"\n\t"),e.k0s(),e.EFF(20,"\n"),e.k0s(),e.EFF(21,"\n")),2&u&&(e.R7$(2),e.AVh("zoom-controls__button--disabled",m.isZoomOutDisabled),e.Y8G("disabled",m.isZoomOutDisabled),e.R7$(9),e.SpI("\n\t\t",m.zoomLevel,"%\n\t"),e.R7$(2),e.AVh("zoom-controls__button--disabled",m.isZoomInDisabled),e.Y8G("disabled",m.isZoomInDisabled))}
1,styles:[".zoom-controls[_ngcontent-%COMP%]{display:none}@media screen and (min-width: 48rem){.zoom-controls[_ngcontent-%COMP%]{display:flex;align-items:center;gap:var(--scale-100);background:var(--surface-glass-default);-webkit-backdrop-filter:blur(var(--scale-50));backdrop-filter:blur(var(--scale-50));border-radius:62.5rem}}.zoom-controls__button[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;padding:.625rem;background-color:transparent;border:none;border-radius:62.5rem;cursor:pointer;color:var(--text-default-body);transition:background-color .15s ease,opacity .15s ease}.zoom-controls__button[_ngcontent-%COMP%]:hover:not(:disabled){background-color:#ffffff26}.zoom-controls__button[_ngcontent-%COMP%]:focus-visible{outline:var(--scale-50) solid #FFFFFF;outline-offset:var(--scale-50)}.zoom-controls__button[_ngcontent-%COMP%]:disabled, .zoom-controls__button--disabled[_ngcontent-%COMP%]{opacity:.4;cursor:not-allowed}.zoom-controls__button[_ngcontent-%COMP%] .icon[_ngcontent-%COMP%]{font-size:var(--scale-400)}.zoom-controls__level[_ngcontent-%COMP%]{color:var(--text-default-body);font-size:var(--font-copy-caption-text-size);line-height:var(--font-copy-caption-line-height);font-weight:var(--font-weight-semibold)}.zoom-controls__icon[_ngcontent-%COMP%] > path[_ngcontent-%COMP%]{fill:#ccc}"]}))}return C(),p})()},28783(Z,S,h){h.d(S,{bL:()=>C,cA:()=>f,ec:()=>k,ej:()=>e});const e=100,f=100,k=300,C=.5}}]);
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.