{"version":3,"sources":["node_modules/ng-lazyload-image/fesm2020/ng-lazyload-image.mjs","src/app/shared/image/image.component.ts","src/app/shared/image/image.component.html"],"sourcesContent":["import { Subject, of, Observable, ReplaySubject, never, empty } from 'rxjs';\nimport { filter, tap, take, mergeMap, map, catchError, switchMap, startWith, sampleTime, share } from 'rxjs/operators';\nimport { isPlatformServer } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, EventEmitter, PLATFORM_ID, Directive, Inject, Input, Output, NgModule } from '@angular/core';\nfunction getNavigator() {\n return typeof window !== 'undefined' ? window.navigator : undefined;\n}\nfunction isChildOfPicture(element) {\n return Boolean(element.parentElement && element.parentElement.nodeName.toLowerCase() === 'picture');\n}\nfunction isImageElement(element) {\n return element.nodeName.toLowerCase() === 'img';\n}\nfunction setImage(element, imagePath, useSrcset) {\n if (isImageElement(element)) {\n if (useSrcset && 'srcset' in element) {\n element.srcset = imagePath;\n } else {\n element.src = imagePath;\n }\n } else {\n element.style.backgroundImage = `url('${imagePath}')`;\n }\n return element;\n}\nfunction setSources(attrName) {\n return image => {\n const sources = image.parentElement.getElementsByTagName('source');\n for (let i = 0; i < sources.length; i++) {\n const attrValue = sources[i].getAttribute(attrName);\n if (attrValue) {\n // Check if `srcset` is supported by the current browser\n if ('srcset' in sources[i]) {\n sources[i].srcset = attrValue;\n } else {\n sources[i].src = attrValue;\n }\n }\n }\n };\n}\nconst setSourcesToDefault = setSources('defaultImage');\nconst setSourcesToLazy = setSources('lazyLoad');\nconst setSourcesToError = setSources('errorImage');\nfunction setImageAndSources(setSourcesFn) {\n return (element, imagePath, useSrcset) => {\n if (isImageElement(element) && isChildOfPicture(element)) {\n setSourcesFn(element);\n }\n if (imagePath) {\n setImage(element, imagePath, useSrcset);\n }\n };\n}\nconst setImageAndSourcesToDefault = setImageAndSources(setSourcesToDefault);\nconst setImageAndSourcesToLazy = setImageAndSources(setSourcesToLazy);\nconst setImageAndSourcesToError = setImageAndSources(setSourcesToError);\nclass Hooks {\n constructor() {\n this.navigator = getNavigator();\n }\n setPlatformId(platformId) {\n this.platformId = platformId;\n }\n onDestroy(attributes) {}\n onAttributeChange(newAttributes) {}\n}\nconst cssClassNames = {\n loaded: 'ng-lazyloaded',\n loading: 'ng-lazyloading',\n failed: 'ng-failed-lazyloaded'\n};\nfunction removeCssClassName(element, cssClassName) {\n element.className = element.className.replace(cssClassName, '');\n}\nfunction addCssClassName(element, cssClassName) {\n if (!element.className.includes(cssClassName)) {\n element.className += ` ${cssClassName}`;\n }\n}\nfunction hasCssClassName(element, cssClassName) {\n return element.className && element.className.includes(cssClassName);\n}\nclass SharedHooks extends Hooks {\n setup(attributes) {\n setImageAndSourcesToDefault(attributes.element, attributes.defaultImagePath, attributes.useSrcset);\n if (attributes.imagePath) {\n addCssClassName(attributes.element, cssClassNames.loading);\n }\n if (hasCssClassName(attributes.element, cssClassNames.loaded)) {\n removeCssClassName(attributes.element, cssClassNames.loaded);\n }\n }\n finally(attributes) {\n addCssClassName(attributes.element, cssClassNames.loaded);\n removeCssClassName(attributes.element, cssClassNames.loading);\n }\n loadImage(attributes) {\n if (this.skipLazyLoading(attributes)) {\n // Set the image right away for bots for better SEO\n return [attributes.imagePath];\n }\n const {\n element,\n useSrcset,\n imagePath,\n decode\n } = attributes;\n let img;\n if (isImageElement(element) && isChildOfPicture(element)) {\n const parentClone = element.parentNode.cloneNode(true);\n img = parentClone.getElementsByTagName('img')[0];\n setSourcesToLazy(img);\n setImage(img, imagePath, useSrcset);\n } else {\n img = new Image();\n if (isImageElement(element) && element.referrerPolicy) {\n img.referrerPolicy = element.referrerPolicy;\n }\n if (isImageElement(element) && element.sizes) {\n img.sizes = element.sizes;\n }\n if (useSrcset && 'srcset' in img) {\n img.srcset = imagePath;\n } else {\n img.src = imagePath;\n }\n }\n if (decode && img.decode) {\n return img.decode().then(() => imagePath);\n }\n return new Promise((resolve, reject) => {\n img.onload = () => resolve(imagePath);\n img.onerror = () => reject(null);\n });\n }\n setErrorImage(error, attributes) {\n const {\n element,\n useSrcset,\n errorImagePath\n } = attributes;\n setImageAndSourcesToError(element, errorImagePath, useSrcset);\n addCssClassName(element, cssClassNames.failed);\n }\n setLoadedImage(imagePath, attributes) {\n const {\n element,\n useSrcset\n } = attributes;\n setImageAndSourcesToLazy(element, imagePath, useSrcset);\n }\n isDisabled() {\n // Disable if SSR and the user isn't a bot\n return isPlatformServer(this.platformId) && !this.isBot();\n }\n skipLazyLoading(attributes) {\n return this.isBot(attributes);\n }\n isBot(attributes) {\n if (this.navigator?.userAgent) {\n return /googlebot|bingbot|yandex|baiduspider|facebookexternalhit|twitterbot|rogerbot|linkedinbot|embedly|quora\\ link\\ preview|showyoubot|outbrain|pinterest\\/0\\.|pinterestbot|slackbot|vkShare|W3C_Validator|whatsapp|duckduckbot|prerender/i.test(this.navigator.userAgent);\n }\n return false;\n }\n}\nclass IntersectionObserverHooks extends SharedHooks {\n constructor() {\n super(...arguments);\n this.observers = new WeakMap();\n this.intersectionSubject = new Subject();\n this.uniqKey = {};\n }\n getObservable(attributes) {\n if (this.skipLazyLoading(attributes)) {\n return of({\n isIntersecting: true\n });\n }\n if (attributes.customObservable) {\n return attributes.customObservable;\n }\n const scrollContainerKey = attributes.scrollContainer || this.uniqKey;\n const options = {\n root: attributes.scrollContainer || null\n };\n if (attributes.offset) {\n options.rootMargin = `${attributes.offset}px`;\n }\n let observer = this.observers.get(scrollContainerKey);\n if (!observer) {\n observer = new IntersectionObserver(entrys => this.loadingCallback(entrys), options);\n this.observers.set(scrollContainerKey, observer);\n }\n observer.observe(attributes.element);\n return Observable.create(obs => {\n const subscription = this.intersectionSubject.pipe(filter(entry => entry.target === attributes.element)).subscribe(obs);\n return () => {\n subscription.unsubscribe();\n observer.unobserve(attributes.element);\n };\n });\n }\n isVisible(event) {\n return event.isIntersecting;\n }\n loadingCallback(entrys) {\n entrys.forEach(entry => this.intersectionSubject.next(entry));\n }\n}\nfunction lazyLoadImage(hooks, attributes) {\n return evntObservable => {\n return evntObservable.pipe(tap(data => attributes.onStateChange.emit({\n reason: 'observer-emit',\n data\n })), filter(event => hooks.isVisible(event, attributes)), take(1), tap(() => attributes.onStateChange.emit({\n reason: 'start-loading'\n })), mergeMap(() => hooks.loadImage(attributes)), tap(() => attributes.onStateChange.emit({\n reason: 'mount-image'\n })), tap(imagePath => hooks.setLoadedImage(imagePath, attributes)), tap(() => attributes.onStateChange.emit({\n reason: 'loading-succeeded'\n })), map(() => true), catchError(error => {\n attributes.onStateChange.emit({\n reason: 'loading-failed',\n data: error\n });\n hooks.setErrorImage(error, attributes);\n return of(false);\n }), tap(() => {\n attributes.onStateChange.emit({\n reason: 'finally'\n });\n hooks.finally(attributes);\n }));\n };\n}\nconst LAZYLOAD_IMAGE_HOOKS = new InjectionToken('LazyLoadImageHooks');\nlet LazyLoadImageDirective = /*#__PURE__*/(() => {\n class LazyLoadImageDirective {\n constructor(el, ngZone, platformId, hooks) {\n this.onStateChange = new EventEmitter(); // Emits an event on every state change\n this.elementRef = el;\n this.ngZone = ngZone;\n this.propertyChanges$ = new ReplaySubject();\n this.hooks = hooks;\n this.hooks.setPlatformId(platformId);\n this.uid = Math.random().toString(36).substr(2, 9);\n }\n ngOnChanges() {\n if (this.debug === true && !this.debugSubscription) {\n this.debugSubscription = this.onStateChange.subscribe(e => console.log(e));\n }\n this.propertyChanges$.next({\n element: this.elementRef.nativeElement,\n imagePath: this.lazyImage,\n defaultImagePath: this.defaultImage,\n errorImagePath: this.errorImage,\n useSrcset: this.useSrcset,\n offset: this.offset ? this.offset | 0 : 0,\n scrollContainer: this.scrollTarget,\n customObservable: this.customObservable,\n decode: this.decode,\n onStateChange: this.onStateChange,\n id: this.uid\n });\n }\n ngAfterContentInit() {\n if (this.hooks.isDisabled()) {\n return null;\n }\n this.ngZone.runOutsideAngular(() => {\n this.loadSubscription = this.propertyChanges$.pipe(tap(attributes => this.hooks.onAttributeChange(attributes)), tap(attributes => attributes.onStateChange.emit({\n reason: 'setup'\n })), tap(attributes => this.hooks.setup(attributes)), switchMap(attributes => {\n if (!attributes.imagePath) {\n return never();\n }\n return this.hooks.getObservable(attributes).pipe(lazyLoadImage(this.hooks, attributes));\n })).subscribe({\n next: () => null\n });\n });\n }\n ngOnDestroy() {\n this.propertyChanges$.pipe(take(1)).subscribe({\n next: attributes => this.hooks.onDestroy(attributes)\n }).unsubscribe();\n this.loadSubscription?.unsubscribe();\n this.debugSubscription?.unsubscribe();\n }\n }\n LazyLoadImageDirective.ɵfac = function LazyLoadImageDirective_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || LazyLoadImageDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(PLATFORM_ID), i0.ɵɵdirectiveInject(LAZYLOAD_IMAGE_HOOKS));\n };\n LazyLoadImageDirective.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: LazyLoadImageDirective,\n selectors: [[\"\", \"lazyLoad\", \"\"]],\n inputs: {\n lazyImage: [0, \"lazyLoad\", \"lazyImage\"],\n defaultImage: \"defaultImage\",\n errorImage: \"errorImage\",\n scrollTarget: \"scrollTarget\",\n customObservable: \"customObservable\",\n offset: \"offset\",\n useSrcset: \"useSrcset\",\n decode: \"decode\",\n debug: \"debug\"\n },\n outputs: {\n onStateChange: \"onStateChange\"\n },\n features: [i0.ɵɵNgOnChangesFeature]\n });\n return LazyLoadImageDirective;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet LazyLoadImageModule = /*#__PURE__*/(() => {\n class LazyLoadImageModule {}\n LazyLoadImageModule.ɵfac = function LazyLoadImageModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || LazyLoadImageModule)();\n };\n LazyLoadImageModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: LazyLoadImageModule\n });\n LazyLoadImageModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [{\n provide: LAZYLOAD_IMAGE_HOOKS,\n useClass: IntersectionObserverHooks\n }]\n });\n return LazyLoadImageModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass Rect {\n constructor(left, top, right, bottom) {\n this.left = left;\n this.top = top;\n this.right = right;\n this.bottom = bottom;\n }\n static fromElement(element) {\n const {\n left,\n top,\n right,\n bottom\n } = element.getBoundingClientRect();\n if (left === 0 && top === 0 && right === 0 && bottom === 0) {\n return Rect.empty;\n } else {\n return new Rect(left, top, right, bottom);\n }\n }\n static fromWindow(_window) {\n return new Rect(0, 0, _window.innerWidth, _window.innerHeight);\n }\n inflate(inflateBy) {\n this.left -= inflateBy;\n this.top -= inflateBy;\n this.right += inflateBy;\n this.bottom += inflateBy;\n }\n intersectsWith(rect) {\n return rect.left < this.right && this.left < rect.right && rect.top < this.bottom && this.top < rect.bottom;\n }\n getIntersectionWith(rect) {\n const left = Math.max(this.left, rect.left);\n const top = Math.max(this.top, rect.top);\n const right = Math.min(this.right, rect.right);\n const bottom = Math.min(this.bottom, rect.bottom);\n if (right >= left && bottom >= top) {\n return new Rect(left, top, right, bottom);\n } else {\n return Rect.empty;\n }\n }\n}\nRect.empty = new Rect(0, 0, 0, 0);\nclass ScrollHooks extends SharedHooks {\n constructor() {\n super(...arguments);\n this.getWindow = () => window;\n this.scrollListeners = new WeakMap();\n // Only create one scroll listener per target and share the observable.\n // Typical, there will only be one observable per application\n this.getScrollListener = scrollTarget => {\n if (!scrollTarget || typeof scrollTarget.addEventListener !== 'function') {\n console.warn('`addEventListener` on ' + scrollTarget + ' (scrollTarget) is not a function. Skipping this target');\n return empty();\n }\n const scrollListener = this.scrollListeners.get(scrollTarget);\n if (scrollListener) {\n return scrollListener;\n }\n const srollEvent = Observable.create(observer => {\n const eventName = 'scroll';\n const handler = event => observer.next(event);\n const options = {\n passive: true,\n capture: false\n };\n scrollTarget.addEventListener(eventName, handler, options);\n return () => scrollTarget.removeEventListener(eventName, handler, options);\n });\n const listener = this.sampleObservable(srollEvent);\n this.scrollListeners.set(scrollTarget, listener);\n return listener;\n };\n }\n getObservable(attributes) {\n if (this.skipLazyLoading(attributes)) {\n return of('load');\n } else if (attributes.customObservable) {\n return attributes.customObservable.pipe(startWith(''));\n } else if (attributes.scrollContainer) {\n return this.getScrollListener(attributes.scrollContainer);\n }\n return this.getScrollListener(this.getWindow());\n }\n isVisible(event, attributes) {\n const elementBounds = Rect.fromElement(attributes.element);\n if (elementBounds === Rect.empty) {\n return false;\n }\n const windowBounds = Rect.fromWindow(this.getWindow());\n elementBounds.inflate(attributes.offset);\n if (attributes.scrollContainer) {\n const scrollContainerBounds = Rect.fromElement(attributes.scrollContainer);\n const intersection = scrollContainerBounds.getIntersectionWith(windowBounds);\n return elementBounds.intersectsWith(intersection);\n } else {\n return elementBounds.intersectsWith(windowBounds);\n }\n }\n sampleObservable(obs, scheduler) {\n return obs.pipe(sampleTime(100, scheduler), share(), startWith(''));\n }\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { Hooks, IntersectionObserverHooks, LAZYLOAD_IMAGE_HOOKS, LazyLoadImageDirective, LazyLoadImageModule, ScrollHooks, SharedHooks };\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n inject,\n Input,\n OnChanges,\n Renderer2,\n RendererStyleFlags2,\n ViewChild\n} from '@angular/core';\nimport {CoverUpdateEvent} from 'src/app/_models/events/cover-update-event';\nimport {ImageService} from 'src/app/_services/image.service';\nimport {EVENTS, MessageHubService} from 'src/app/_services/message-hub.service';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {LazyLoadImageModule, StateChange} from \"ng-lazyload-image\";\n\n/**\n * This is used for images with placeholder fallback.\n */\n@Component({\n selector: 'app-image',\n standalone: true,\n imports: [LazyLoadImageModule],\n templateUrl: './image.component.html',\n styleUrls: ['./image.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ImageComponent implements OnChanges {\n\n private readonly destroyRef = inject(DestroyRef);\n protected readonly imageService = inject(ImageService);\n private readonly renderer = inject(Renderer2);\n private readonly hubService = inject(MessageHubService);\n private readonly cdRef = inject(ChangeDetectorRef);\n\n /**\n * Source url to load image\n */\n @Input({required: true}) imageUrl!: string;\n /**\n * Width of the image. If not defined, will not be applied\n */\n @Input() width: string = '';\n /**\n * Height of the image. If not defined, will not be applied\n */\n @Input() height: string = '';\n /**\n * If the image component should respond to cover updates\n */\n @Input() processEvents: boolean = true;\n /**\n * Note: Parent component must use ViewEncapsulation.None\n */\n @Input() classes: string = '';\n /**\n * A collection of styles to apply. This is useful if the parent component doesn't want to use no view encapsulation\n */\n @Input() styles: {[key: string]: string} = {};\n @Input() errorImage: string = this.imageService.errorImage;\n /**\n * If the image load fails, instead of showing an error image, hide the image (visibility)\n */\n @Input() hideOnError: boolean = false;\n\n @ViewChild('img', {static: true}) imgElem!: ElementRef;\n\n constructor() {\n this.hubService.messages$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(res => {\n if (!this.processEvents) return;\n if (res.event === EVENTS.CoverUpdate) {\n const updateEvent = res.payload as CoverUpdateEvent;\n if (this.imageUrl === undefined || this.imageUrl === null || this.imageUrl === '') return;\n const entityType = this.imageService.getEntityTypeFromUrl(this.imageUrl);\n if (entityType === updateEvent.entityType) {\n const tokens = this.imageUrl.split('?')[1].split('&');\n\n //...seriesId=123&random=\n let id = tokens[0].replace(entityType + 'Id=', '');\n if (id.includes('&')) {\n id = id.split('&')[0];\n }\n if (id === (updateEvent.id + '')) {\n this.imageUrl = this.imageService.randomize(this.imageUrl);\n this.cdRef.markForCheck();\n }\n }\n }\n });\n }\n\n ngOnChanges(): void {\n if (this.width !== '') {\n this.renderer.setStyle(this.imgElem.nativeElement, 'width', this.width);\n }\n\n if (this.height !== '') {\n this.renderer.setStyle(this.imgElem.nativeElement, 'height', this.height);\n }\n\n const styleKeys = Object.keys(this.styles);\n if (styleKeys.length !== 0) {\n styleKeys.forEach(key => {\n this.renderer.setStyle(this.imgElem.nativeElement, key, this.styles[key], RendererStyleFlags2.Important);\n });\n }\n\n if (this.classes != '') {\n const classTokens = this.classes.split(' ');\n classTokens.forEach(cls => this.renderer.addClass(this.imgElem.nativeElement, cls));\n }\n this.cdRef.markForCheck();\n }\n\n\n myCallbackFunction(event: StateChange) {\n const image = this.imgElem.nativeElement;\n switch (event.reason) {\n case 'setup':\n // The lib has been instantiated but we have not done anything yet.\n break;\n case 'observer-emit':\n // The image observer (intersection/scroll/custom observer) has emit a value so we\n // should check if the image is in the viewport.\n // `event.data` is the event in this case.\n break;\n case 'start-loading':\n // The image is in the viewport so the image will start loading\n break;\n case 'mount-image':\n // The image has been loaded successfully so lets put it into the DOM\n break;\n case 'loading-succeeded':\n // The image has successfully been loaded and placed into the DOM\n this.renderer.addClass(image, 'loaded');\n break;\n case 'loading-failed':\n // The image could not be loaded for some reason.\n // `event.data` is the error in this case\n this.renderer.removeClass(image, 'fade-in');\n if (this.hideOnError) {\n this.renderer.addClass(image, 'd-none');\n }\n this.cdRef.markForCheck();\n break;\n case 'finally':\n // The last event before cleaning up\n break;\n }\n }\n\n}\n","\"\"\n\n"],"mappings":"6bAKA,SAASA,IAAe,CACtB,OAAO,OAAO,OAAW,IAAc,OAAO,UAAY,MAC5D,CACA,SAASC,GAAiBC,EAAS,CACjC,MAAO,GAAQA,EAAQ,eAAiBA,EAAQ,cAAc,SAAS,YAAY,IAAM,UAC3F,CACA,SAASC,EAAeD,EAAS,CAC/B,OAAOA,EAAQ,SAAS,YAAY,IAAM,KAC5C,CACA,SAASE,GAASF,EAASG,EAAWC,EAAW,CAC/C,OAAIH,EAAeD,CAAO,EACpBI,GAAa,WAAYJ,EAC3BA,EAAQ,OAASG,EAEjBH,EAAQ,IAAMG,EAGhBH,EAAQ,MAAM,gBAAkB,QAAQG,CAAS,KAE5CH,CACT,CACA,SAASK,EAAWC,EAAU,CAC5B,OAAOC,GAAS,CACd,IAAMC,EAAUD,EAAM,cAAc,qBAAqB,QAAQ,EACjE,QAAS,EAAI,EAAG,EAAIC,EAAQ,OAAQ,IAAK,CACvC,IAAMC,EAAYD,EAAQ,CAAC,EAAE,aAAaF,CAAQ,EAC9CG,IAEE,WAAYD,EAAQ,CAAC,EACvBA,EAAQ,CAAC,EAAE,OAASC,EAEpBD,EAAQ,CAAC,EAAE,IAAMC,EAGvB,CACF,CACF,CACA,IAAMC,GAAsBL,EAAW,cAAc,EAC/CM,GAAmBN,EAAW,UAAU,EACxCO,GAAoBP,EAAW,YAAY,EACjD,SAASQ,EAAmBC,EAAc,CACxC,MAAO,CAACd,EAASG,EAAWC,IAAc,CACpCH,EAAeD,CAAO,GAAKD,GAAiBC,CAAO,GACrDc,EAAad,CAAO,EAElBG,GACFD,GAASF,EAASG,EAAWC,CAAS,CAE1C,CACF,CACA,IAAMW,GAA8BF,EAAmBH,EAAmB,EACpEM,GAA2BH,EAAmBF,EAAgB,EAC9DM,GAA4BJ,EAAmBD,EAAiB,EAChEM,EAAN,KAAY,CACV,aAAc,CACZ,KAAK,UAAYpB,GAAa,CAChC,CACA,cAAcqB,EAAY,CACxB,KAAK,WAAaA,CACpB,CACA,UAAUC,EAAY,CAAC,CACvB,kBAAkBC,EAAe,CAAC,CACpC,EACMC,EAAgB,CACpB,OAAQ,gBACR,QAAS,iBACT,OAAQ,sBACV,EACA,SAASC,GAAmBvB,EAASwB,EAAc,CACjDxB,EAAQ,UAAYA,EAAQ,UAAU,QAAQwB,EAAc,EAAE,CAChE,CACA,SAASC,EAAgBzB,EAASwB,EAAc,CACzCxB,EAAQ,UAAU,SAASwB,CAAY,IAC1CxB,EAAQ,WAAa,IAAIwB,CAAY,GAEzC,CACA,SAASE,GAAgB1B,EAASwB,EAAc,CAC9C,OAAOxB,EAAQ,WAAaA,EAAQ,UAAU,SAASwB,CAAY,CACrE,CACA,IAAMG,EAAN,cAA0BT,CAAM,CAC9B,MAAME,EAAY,CAChBL,GAA4BK,EAAW,QAASA,EAAW,iBAAkBA,EAAW,SAAS,EAC7FA,EAAW,WACbK,EAAgBL,EAAW,QAASE,EAAc,OAAO,EAEvDI,GAAgBN,EAAW,QAASE,EAAc,MAAM,GAC1DC,GAAmBH,EAAW,QAASE,EAAc,MAAM,CAE/D,CACA,QAAQF,EAAY,CAClBK,EAAgBL,EAAW,QAASE,EAAc,MAAM,EACxDC,GAAmBH,EAAW,QAASE,EAAc,OAAO,CAC9D,CACA,UAAUF,EAAY,CACpB,GAAI,KAAK,gBAAgBA,CAAU,EAEjC,MAAO,CAACA,EAAW,SAAS,EAE9B,GAAM,CACJ,QAAApB,EACA,UAAAI,EACA,UAAAD,EACA,OAAAyB,CACF,EAAIR,EACAS,EAoBJ,OAnBI5B,EAAeD,CAAO,GAAKD,GAAiBC,CAAO,GAErD6B,EADoB7B,EAAQ,WAAW,UAAU,EAAI,EACnC,qBAAqB,KAAK,EAAE,CAAC,EAC/CW,GAAiBkB,CAAG,EACpB3B,GAAS2B,EAAK1B,EAAWC,CAAS,IAElCyB,EAAM,IAAI,MACN5B,EAAeD,CAAO,GAAKA,EAAQ,iBACrC6B,EAAI,eAAiB7B,EAAQ,gBAE3BC,EAAeD,CAAO,GAAKA,EAAQ,QACrC6B,EAAI,MAAQ7B,EAAQ,OAElBI,GAAa,WAAYyB,EAC3BA,EAAI,OAAS1B,EAEb0B,EAAI,IAAM1B,GAGVyB,GAAUC,EAAI,OACTA,EAAI,OAAO,EAAE,KAAK,IAAM1B,CAAS,EAEnC,IAAI,QAAQ,CAAC2B,EAASC,KAAW,CACtCF,EAAI,OAAS,IAAMC,EAAQ3B,CAAS,EACpC0B,EAAI,QAAU,IAAME,GAAO,IAAI,CACjC,CAAC,CACH,CACA,cAAcC,EAAOZ,EAAY,CAC/B,GAAM,CACJ,QAAApB,EACA,UAAAI,EACA,eAAA6B,CACF,EAAIb,EACJH,GAA0BjB,EAASiC,EAAgB7B,CAAS,EAC5DqB,EAAgBzB,EAASsB,EAAc,MAAM,CAC/C,CACA,eAAenB,EAAWiB,EAAY,CACpC,GAAM,CACJ,QAAApB,EACA,UAAAI,CACF,EAAIgB,EACJJ,GAAyBhB,EAASG,EAAWC,CAAS,CACxD,CACA,YAAa,CAEX,OAAO8B,GAAiB,KAAK,UAAU,GAAK,CAAC,KAAK,MAAM,CAC1D,CACA,gBAAgBd,EAAY,CAC1B,OAAO,KAAK,MAAMA,CAAU,CAC9B,CACA,MAAMA,EAAY,CAChB,OAAI,KAAK,WAAW,UACX,uOAAuO,KAAK,KAAK,UAAU,SAAS,EAEtQ,EACT,CACF,EACMe,EAAN,cAAwCR,CAAY,CAClD,aAAc,CACZ,MAAM,GAAG,SAAS,EAClB,KAAK,UAAY,IAAI,QACrB,KAAK,oBAAsB,IAAIS,EAC/B,KAAK,QAAU,CAAC,CAClB,CACA,cAAchB,EAAY,CACxB,GAAI,KAAK,gBAAgBA,CAAU,EACjC,OAAOiB,EAAG,CACR,eAAgB,EAClB,CAAC,EAEH,GAAIjB,EAAW,iBACb,OAAOA,EAAW,iBAEpB,IAAMkB,EAAqBlB,EAAW,iBAAmB,KAAK,QACxDmB,EAAU,CACd,KAAMnB,EAAW,iBAAmB,IACtC,EACIA,EAAW,SACbmB,EAAQ,WAAa,GAAGnB,EAAW,MAAM,MAE3C,IAAIoB,EAAW,KAAK,UAAU,IAAIF,CAAkB,EACpD,OAAKE,IACHA,EAAW,IAAI,qBAAqBC,GAAU,KAAK,gBAAgBA,CAAM,EAAGF,CAAO,EACnF,KAAK,UAAU,IAAID,EAAoBE,CAAQ,GAEjDA,EAAS,QAAQpB,EAAW,OAAO,EAC5BsB,EAAW,OAAOC,GAAO,CAC9B,IAAMC,EAAe,KAAK,oBAAoB,KAAKC,EAAOC,GAASA,EAAM,SAAW1B,EAAW,OAAO,CAAC,EAAE,UAAUuB,CAAG,EACtH,MAAO,IAAM,CACXC,EAAa,YAAY,EACzBJ,EAAS,UAAUpB,EAAW,OAAO,CACvC,CACF,CAAC,CACH,CACA,UAAU2B,EAAO,CACf,OAAOA,EAAM,cACf,CACA,gBAAgBN,EAAQ,CACtBA,EAAO,QAAQK,GAAS,KAAK,oBAAoB,KAAKA,CAAK,CAAC,CAC9D,CACF,EACA,SAASE,GAAcC,EAAO7B,EAAY,CACxC,OAAO8B,GACEA,EAAe,KAAKC,EAAIC,GAAQhC,EAAW,cAAc,KAAK,CACnE,OAAQ,gBACR,KAAAgC,CACF,CAAC,CAAC,EAAGP,EAAOE,GAASE,EAAM,UAAUF,EAAO3B,CAAU,CAAC,EAAGiC,EAAK,CAAC,EAAGF,EAAI,IAAM/B,EAAW,cAAc,KAAK,CACzG,OAAQ,eACV,CAAC,CAAC,EAAGkC,EAAS,IAAML,EAAM,UAAU7B,CAAU,CAAC,EAAG+B,EAAI,IAAM/B,EAAW,cAAc,KAAK,CACxF,OAAQ,aACV,CAAC,CAAC,EAAG+B,EAAIhD,GAAa8C,EAAM,eAAe9C,EAAWiB,CAAU,CAAC,EAAG+B,EAAI,IAAM/B,EAAW,cAAc,KAAK,CAC1G,OAAQ,mBACV,CAAC,CAAC,EAAGmC,EAAI,IAAM,EAAI,EAAGC,EAAWxB,IAC/BZ,EAAW,cAAc,KAAK,CAC5B,OAAQ,iBACR,KAAMY,CACR,CAAC,EACDiB,EAAM,cAAcjB,EAAOZ,CAAU,EAC9BiB,EAAG,EAAK,EAChB,EAAGc,EAAI,IAAM,CACZ/B,EAAW,cAAc,KAAK,CAC5B,OAAQ,SACV,CAAC,EACD6B,EAAM,QAAQ7B,CAAU,CAC1B,CAAC,CAAC,CAEN,CACA,IAAMqC,GAAuB,IAAIC,EAAe,oBAAoB,EAChEC,IAAuC,IAAM,CAC/C,MAAMA,CAAuB,CAC3B,YAAYC,EAAIC,EAAQ1C,EAAY8B,EAAO,CACzC,KAAK,cAAgB,IAAIa,EACzB,KAAK,WAAaF,EAClB,KAAK,OAASC,EACd,KAAK,iBAAmB,IAAIE,EAC5B,KAAK,MAAQd,EACb,KAAK,MAAM,cAAc9B,CAAU,EACnC,KAAK,IAAM,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,EAAG,CAAC,CACnD,CACA,aAAc,CACR,KAAK,QAAU,IAAQ,CAAC,KAAK,oBAC/B,KAAK,kBAAoB,KAAK,cAAc,UAAU6C,GAAK,QAAQ,IAAIA,CAAC,CAAC,GAE3E,KAAK,iBAAiB,KAAK,CACzB,QAAS,KAAK,WAAW,cACzB,UAAW,KAAK,UAChB,iBAAkB,KAAK,aACvB,eAAgB,KAAK,WACrB,UAAW,KAAK,UAChB,OAAQ,KAAK,OAAS,KAAK,OAAS,EAAI,EACxC,gBAAiB,KAAK,aACtB,iBAAkB,KAAK,iBACvB,OAAQ,KAAK,OACb,cAAe,KAAK,cACpB,GAAI,KAAK,GACX,CAAC,CACH,CACA,oBAAqB,CACnB,GAAI,KAAK,MAAM,WAAW,EACxB,OAAO,KAET,KAAK,OAAO,kBAAkB,IAAM,CAClC,KAAK,iBAAmB,KAAK,iBAAiB,KAAKb,EAAI/B,GAAc,KAAK,MAAM,kBAAkBA,CAAU,CAAC,EAAG+B,EAAI/B,GAAcA,EAAW,cAAc,KAAK,CAC9J,OAAQ,OACV,CAAC,CAAC,EAAG+B,EAAI/B,GAAc,KAAK,MAAM,MAAMA,CAAU,CAAC,EAAG6C,EAAU7C,GACzDA,EAAW,UAGT,KAAK,MAAM,cAAcA,CAAU,EAAE,KAAK4B,GAAc,KAAK,MAAO5B,CAAU,CAAC,EAF7E8C,EAAM,CAGhB,CAAC,EAAE,UAAU,CACZ,KAAM,IAAM,IACd,CAAC,CACH,CAAC,CACH,CACA,aAAc,CACZ,KAAK,iBAAiB,KAAKb,EAAK,CAAC,CAAC,EAAE,UAAU,CAC5C,KAAMjC,GAAc,KAAK,MAAM,UAAUA,CAAU,CACrD,CAAC,EAAE,YAAY,EACf,KAAK,kBAAkB,YAAY,EACnC,KAAK,mBAAmB,YAAY,CACtC,CACF,CACA,OAAAuC,EAAuB,UAAO,SAAwCQ,EAAmB,CACvF,OAAO,IAAKA,GAAqBR,GAA2BS,EAAqBC,CAAU,EAAMD,EAAqBE,CAAM,EAAMF,EAAkBG,CAAW,EAAMH,EAAkBX,EAAoB,CAAC,CAC9M,EACAE,EAAuB,UAAyBa,EAAkB,CAChE,KAAMb,EACN,UAAW,CAAC,CAAC,GAAI,WAAY,EAAE,CAAC,EAChC,OAAQ,CACN,UAAW,CAAC,EAAG,WAAY,WAAW,EACtC,aAAc,eACd,WAAY,aACZ,aAAc,eACd,iBAAkB,mBAClB,OAAQ,SACR,UAAW,YACX,OAAQ,SACR,MAAO,OACT,EACA,QAAS,CACP,cAAe,eACjB,EACA,SAAU,CAAIc,CAAoB,CACpC,CAAC,EACMd,CACT,GAAG,EAICe,IAAoC,IAAM,CAC5C,MAAMA,CAAoB,CAAC,CAC3B,OAAAA,EAAoB,UAAO,SAAqCP,EAAmB,CACjF,OAAO,IAAKA,GAAqBO,EACnC,EACAA,EAAoB,UAAyBC,EAAiB,CAC5D,KAAMD,CACR,CAAC,EACDA,EAAoB,UAAyBE,EAAiB,CAC5D,UAAW,CAAC,CACV,QAASnB,GACT,SAAUtB,CACZ,CAAC,CACH,CAAC,EACMuC,CACT,GAAG,EAIGG,EAAN,MAAMC,CAAK,CACT,YAAYC,EAAMC,EAAKC,EAAOC,EAAQ,CACpC,KAAK,KAAOH,EACZ,KAAK,IAAMC,EACX,KAAK,MAAQC,EACb,KAAK,OAASC,CAChB,CACA,OAAO,YAAYlF,EAAS,CAC1B,GAAM,CACJ,KAAA+E,EACA,IAAAC,EACA,MAAAC,EACA,OAAAC,CACF,EAAIlF,EAAQ,sBAAsB,EAClC,OAAI+E,IAAS,GAAKC,IAAQ,GAAKC,IAAU,GAAKC,IAAW,EAChDJ,EAAK,MAEL,IAAIA,EAAKC,EAAMC,EAAKC,EAAOC,CAAM,CAE5C,CACA,OAAO,WAAWC,EAAS,CACzB,OAAO,IAAIL,EAAK,EAAG,EAAGK,EAAQ,WAAYA,EAAQ,WAAW,CAC/D,CACA,QAAQC,EAAW,CACjB,KAAK,MAAQA,EACb,KAAK,KAAOA,EACZ,KAAK,OAASA,EACd,KAAK,QAAUA,CACjB,CACA,eAAeC,EAAM,CACnB,OAAOA,EAAK,KAAO,KAAK,OAAS,KAAK,KAAOA,EAAK,OAASA,EAAK,IAAM,KAAK,QAAU,KAAK,IAAMA,EAAK,MACvG,CACA,oBAAoBA,EAAM,CACxB,IAAMN,EAAO,KAAK,IAAI,KAAK,KAAMM,EAAK,IAAI,EACpCL,EAAM,KAAK,IAAI,KAAK,IAAKK,EAAK,GAAG,EACjCJ,EAAQ,KAAK,IAAI,KAAK,MAAOI,EAAK,KAAK,EACvCH,EAAS,KAAK,IAAI,KAAK,OAAQG,EAAK,MAAM,EAChD,OAAIJ,GAASF,GAAQG,GAAUF,EACtB,IAAIF,EAAKC,EAAMC,EAAKC,EAAOC,CAAM,EAEjCJ,EAAK,KAEhB,CACF,EACAD,EAAK,MAAQ,IAAIA,EAAK,EAAG,EAAG,EAAG,CAAC,iBChWnBS,IAAc,IAAA,CAArB,MAAOA,CAAc,CAwCzBC,aAAA,CAtCiB,KAAAC,WAAaC,EAAOC,CAAU,EAC5B,KAAAC,aAAeF,EAAOG,EAAY,EACpC,KAAAC,SAAWJ,EAAOK,CAAS,EAC3B,KAAAC,WAAaN,EAAOO,EAAiB,EACrC,KAAAC,MAAQR,EAAOS,EAAiB,EASxC,KAAAC,MAAgB,GAIhB,KAAAC,OAAiB,GAIhB,KAAAC,cAAyB,GAI1B,KAAAC,QAAkB,GAIlB,KAAAC,OAAkC,CAAA,EAClC,KAAAC,WAAqB,KAAKb,aAAaa,WAIvC,KAAAC,YAAuB,GAK9B,KAAKV,WAAWW,UAAUC,KAAKC,GAAmB,KAAKpB,UAAU,CAAC,EAAEqB,UAAUC,GAAM,CAClF,GAAK,KAAKT,eACNS,EAAIC,QAAUC,GAAOC,YAAa,CACpC,IAAMC,EAAcJ,EAAIK,QACxB,GAAI,KAAKC,WAAaC,QAAa,KAAKD,WAAa,MAAQ,KAAKA,WAAa,GAAI,OACnF,IAAME,EAAa,KAAK3B,aAAa4B,qBAAqB,KAAKH,QAAQ,EACvE,GAAIE,IAAeJ,EAAYI,WAAY,CAIzC,IAAIE,EAHW,KAAKJ,SAASK,MAAM,GAAG,EAAE,CAAC,EAAEA,MAAM,GAAG,EAGpC,CAAC,EAAEC,QAAQJ,EAAa,MAAO,EAAE,EAC7CE,EAAGG,SAAS,GAAG,IACjBH,EAAKA,EAAGC,MAAM,GAAG,EAAE,CAAC,GAElBD,IAAQN,EAAYM,GAAK,KAC3B,KAAKJ,SAAW,KAAKzB,aAAaiC,UAAU,KAAKR,QAAQ,EACzD,KAAKnB,MAAM4B,aAAY,EAE3B,CACF,CACF,CAAC,CACH,CAEAC,aAAW,CACL,KAAK3B,QAAU,IACjB,KAAKN,SAASkC,SAAS,KAAKC,QAAQC,cAAe,QAAS,KAAK9B,KAAK,EAGpE,KAAKC,SAAW,IAClB,KAAKP,SAASkC,SAAS,KAAKC,QAAQC,cAAe,SAAU,KAAK7B,MAAM,EAG1E,IAAM8B,EAAYC,OAAOC,KAAK,KAAK7B,MAAM,EACrC2B,EAAUG,SAAW,GACvBH,EAAUI,QAAQC,GAAM,CACtB,KAAK1C,SAASkC,SAAS,KAAKC,QAAQC,cAAeM,EAAK,KAAKhC,OAAOgC,CAAG,EAAGC,EAAoBC,SAAS,CACzG,CAAC,EAGC,KAAKnC,SAAW,IACE,KAAKA,QAAQmB,MAAM,GAAG,EAC9Ba,QAAQI,GAAO,KAAK7C,SAAS8C,SAAS,KAAKX,QAAQC,cAAeS,CAAG,CAAC,EAEpF,KAAKzC,MAAM4B,aAAY,CACzB,CAGAe,mBAAmB7B,EAAkB,CACnC,IAAM8B,EAAQ,KAAKb,QAAQC,cAC3B,OAAQlB,EAAM+B,OAAM,CAClB,IAAK,QAEH,MACF,IAAK,gBAIH,MACF,IAAK,gBAEH,MACF,IAAK,cAEH,MACF,IAAK,oBAEH,KAAKjD,SAAS8C,SAASE,EAAO,QAAQ,EACtC,MACF,IAAK,iBAGH,KAAKhD,SAASkD,YAAYF,EAAO,SAAS,EACtC,KAAKpC,aACP,KAAKZ,SAAS8C,SAASE,EAAO,QAAQ,EAExC,KAAK5C,MAAM4B,aAAY,EACvB,MACF,IAAK,UAEH,KACJ,CACF,iDA1HWvC,EAAc,CAAA,+BAAdA,EAAc0D,UAAA,CAAA,CAAA,WAAA,CAAA,EAAAC,UAAA,SAAAC,EAAAC,EAAA,IAAAD,EAAA,qbC9B3BE,EAAA,EAAA,MAAA,EAAA,CAAA,EAMKC,EAAA,gBAAA,SAAAC,EAAA,CAAAC,OAAAC,EAAAC,CAAA,EAAAC,EAAiBP,EAAAP,mBAAAU,CAAA,CAA0B,CAAA,CAAA,EANhDK,EAAA,OAIKC,EAAA,WAAAT,EAAA/B,QAAA,EAAqB,aAAA+B,EAAA3C,UAAA,iBDqBdqD,GAAmBC,EAAA,EAAAvD,OAAA,CAAA;yDAAA,EAAAwD,gBAAA,CAAA,CAAA,CAAA,SAKlBzE,CAAc,GAAA","names":["getNavigator","isChildOfPicture","element","isImageElement","setImage","imagePath","useSrcset","setSources","attrName","image","sources","attrValue","setSourcesToDefault","setSourcesToLazy","setSourcesToError","setImageAndSources","setSourcesFn","setImageAndSourcesToDefault","setImageAndSourcesToLazy","setImageAndSourcesToError","Hooks","platformId","attributes","newAttributes","cssClassNames","removeCssClassName","cssClassName","addCssClassName","hasCssClassName","SharedHooks","decode","img","resolve","reject","error","errorImagePath","isPlatformServer","IntersectionObserverHooks","Subject","of","scrollContainerKey","options","observer","entrys","Observable","obs","subscription","filter","entry","event","lazyLoadImage","hooks","evntObservable","tap","data","take","mergeMap","map","catchError","LAZYLOAD_IMAGE_HOOKS","InjectionToken","LazyLoadImageDirective","el","ngZone","EventEmitter","ReplaySubject","e","switchMap","never","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","NgZone","PLATFORM_ID","ɵɵdefineDirective","ɵɵNgOnChangesFeature","LazyLoadImageModule","ɵɵdefineNgModule","ɵɵdefineInjector","Rect","_Rect","left","top","right","bottom","_window","inflateBy","rect","ImageComponent","constructor","destroyRef","inject","DestroyRef","imageService","ImageService","renderer","Renderer2","hubService","MessageHubService","cdRef","ChangeDetectorRef","width","height","processEvents","classes","styles","errorImage","hideOnError","messages$","pipe","takeUntilDestroyed","subscribe","res","event","EVENTS","CoverUpdate","updateEvent","payload","imageUrl","undefined","entityType","getEntityTypeFromUrl","id","split","replace","includes","randomize","markForCheck","ngOnChanges","setStyle","imgElem","nativeElement","styleKeys","Object","keys","length","forEach","key","RendererStyleFlags2","Important","cls","addClass","myCallbackFunction","image","reason","removeClass","selectors","viewQuery","rf","ctx","ɵɵelementStart","ɵɵlistener","$event","i0","ɵɵrestoreView","_r1","ɵɵresetView","ɵɵelementEnd","ɵɵproperty","LazyLoadImageModule","LazyLoadImageDirective","changeDetection"],"x_google_ignoreList":[0]}