{"version":3,"sources":["node_modules/ng-lazyload-image/fesm2020/ng-lazyload-image.mjs","src/@omnial/_models/navigation/site-map.model.ts","src/@omnial/_animations/fade-in-left.animation.ts","src/@omnial/_animations/fade-in-right.animation.ts","src/@omnial/_animations/scale-in.animation.ts","src/@omnial/navigation/breadcrumbs/breadcrumb.component.ts","src/app/navigation/breadcrumbs/breadcrumb.component.html","src/@omnial/navigation/breadcrumbs/breadcrumb.module.ts","src/@omnial/product-controls/controls-list/controls-list.component.ts","src/app/product-controls/controls-list/controls-list.component.html","src/@omnial/product-controls/controls-list/controls-list.module.ts","src/@omnial/shared/rating/rating.component.ts","src/app/shared/rating/rating.component.html","src/@omnial/shared/rating/rating.module.ts","src/@omnial/_models/catalog/banner.model.ts","src/@omnial/_services/catalog/seven.spikes.service.ts","node_modules/@videogular/ngx-videogular/fesm2022/videogular-ngx-videogular-core.mjs","node_modules/@videogular/ngx-videogular/fesm2022/videogular-ngx-videogular-controls.mjs","node_modules/@videogular/ngx-videogular/fesm2022/videogular-ngx-videogular-overlay-play.mjs","node_modules/@videogular/ngx-videogular/fesm2022/videogular-ngx-videogular-buffering.mjs","src/@omnial/shared/banners/banners.module.ts","src/@omnial/_models/customer/review.model.ts","src/@omnial/_services/customer/review.service.ts","src/@omnial/shared/product-review-submit-dialog/product-review-submit-dialog.component.ts","src/app/shared/product-review-submit-dialog/product-review-submit-dialog.component.html","src/@omnial/shared/product-review/product-review.component.ts","src/app/shared/product-review/product-review.component.html","src/@omnial/shared/product-review/product-review.module.ts","node_modules/@angular/google-maps/fesm2022/google-maps.mjs","src/@omnial/shared/afterpay-dialog/afterpay-dialog.component.ts","src/app/shared/afterpay-dialog/afterpay-dialog.component.html","src/@omnial/_models/catalog/products.paged.model.ts","src/@omnial/_services/catalog/product-category.service.ts","src/@omnial/_services/catalog/product-manufacturer.service.ts","src/@omnial/_services/catalog/catalog.service.ts","src/@omnial/_services/catalog/theme.service.ts","src/@omnial/product-controls/controls-detail/controls-detail.component.ts","src/app/product-controls/controls-detail/controls-detail.component.html","src/@omnial/product-controls/controls-mini/controls-mini.component.ts","src/app/product-controls/controls-mini/controls-mini.component.html","src/@omnial/_models/catalog/manufacturer.model.ts","src/@omnial/_models/dealer-locator/marker.model.ts","src/@omnial/_services/dealers/dealer.service.ts","src/@omnial/_services/catalog/manufacturer.service.ts","src/@omnial/shared/dealer-locator/dealer-locator-map/dealer-locator-map.component.ts","src/app/shared/dealer-locator/dealer-locator-map/dealer-locator-map.component.html","src/@omnial/shared/dealer-locator/dealer-locator.component.ts","src/app/shared/dealer-locator/dealer-locator.component.html","src/@omnial/pages/product/product-zoom/product-zoom.component.ts","src/app/pages/product/product-zoom/product-zoom.component.html","node_modules/@angular/youtube-player/fesm2022/youtube-player.mjs","src/@omnial/pages/product/product-swiper/product-swiper.component.ts","src/app/pages/product/product-swiper/product-swiper.component.html","src/@omnial/pages/product/product-detail/product-detail.component.ts","src/app/pages/product/product-detail/product-detail.component.html","src/@omnial/shared/product-dialog/product-dialog.component.ts","src/app/shared/product-dialog/product-dialog.component.html","src/@omnial/shared/products-carousel/products-carousel.component.ts","src/app/shared/products-carousel/products-carousel.component.html","src/@omnial/shared/dealer-locator/dealer-locator.module.ts","src/@omnial/shared/banners-static/banners-static.component.ts","src/app/shared/banners-static/banners-static.component.html","src/@omnial/shared/banners-static/banners-static.module.ts","src/@omnial/shared/product-review-submit/product-review-submit.module.ts","src/@omnial/shared/product-review-submit-dialog/product-review-submit-dialog.module.ts","src/@omnial/product-controls/controls-detail/controls-detail.module.ts","src/@omnial/product-controls/controls-mini/controls-mini.module.ts","src/@omnial/pages/product/product-zoom/product-zoom.module.ts","src/@omnial/pages/product/product-swiper/product-swiper.module.ts","src/@omnial/pages/product/product-detail/product-detail.module.ts","src/@omnial/product-controls/controls-quickview/controls-quickview.module.ts","src/@omnial/shared/product-dialog/product-dialog.module.ts","src/@omnial/shared/products-carousel/products-carousel.module.ts"],"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 standalone: false,\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","export class SiteMap {\r\n public items: SiteMapItem[];\r\n}\r\nexport class SiteMapItem {\r\n public categoryId: number;\r\n public parentCategoryId: number;\r\n public id: string;\r\n public slug: string;\r\n public title: string;\r\n public routerLink: string;\r\n public link: string;\r\n public href: string;\r\n public target: string;\r\n public hasSubMenu: boolean;\r\n public parentId: string;\r\n public templateId: number;\r\n public level: number;\r\n public footerOne :boolean;\r\n public footerTwo :boolean;\r\n public footerThree :boolean;\r\n}\r\n","import { animate, style, transition, trigger } from '@angular/animations';\r\n\r\nexport const fadeInLeftAnimation = trigger('fadeInLeft', [\r\n transition(':enter', [\r\n style({\r\n transform: 'translateX(2vw)',\r\n opacity: 0\r\n }),\r\n animate('0.4s cubic-bezier(0, 0.35, 1, 0.25)', style({\r\n transform: 'translateX(0)',\r\n opacity: 1\r\n }))\r\n ])\r\n]);\r\n","import { animate, style, transition, trigger } from '@angular/animations';\r\n\r\nexport const fadeInRightAnimation = trigger('fadeInRight', [\r\n transition(':enter', [\r\n style({\r\n transform: 'translateX(-4vw)',\r\n opacity: 0\r\n }),\r\n animate('0.8s cubic-bezier(0.35, 0, 0.25, 1)', style({\r\n transform: 'translateX(0)',\r\n opacity: 1\r\n }))\r\n ])\r\n]);\r\n","import { animate, style, transition, trigger } from '@angular/animations';\r\n\r\nexport const scaleInAnimation = trigger('scaleIn', [\r\n transition(':enter', [\r\n style({\r\n transform: 'scale(0)'\r\n }),\r\n animate('400ms cubic-bezier(0.35, 0, 0.25, 1)', style({\r\n transform: 'scale(1)'\r\n }))\r\n ])\r\n]);\r\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Location } from '@angular/common';\r\nimport { Router, NavigationEnd } from '@angular/router';\r\nimport { SiteMapItem } from 'src/@omnial/_models/navigation/site-map.model';\r\nimport { BreadCrumbService } from 'src/@omnial/_services/navigation/breadcrumb.service';\r\nimport { SiteMapService } from 'src/@omnial/_services/navigation/sitemap.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { fadeInLeftAnimation } from 'src/@omnial/_animations/fade-in-left.animation';\r\nimport { fadeInRightAnimation } from 'src/@omnial/_animations/fade-in-right.animation';\r\nimport { fadeInUpAnimation } from 'src/@omnial/_animations/fade-in-up.animation';\r\nimport { scaleInAnimation } from 'src/@omnial/_animations/scale-in.animation';\r\nimport { AppSettings } from 'src/app/app.settings';\r\n\r\n\r\n@Component({\n selector: 'app-breadcrumb',\n templateUrl: './../../../app/navigation/breadcrumbs/breadcrumb.component.html',\n styleUrls: ['./../../../app/navigation/breadcrumbs/breadcrumb.component.scss'],\n providers: [SiteMapService],\n animations: [fadeInUpAnimation, fadeInLeftAnimation, fadeInRightAnimation, scaleInAnimation],\n standalone: false\n})\r\nexport class BreadCrumbComponent implements OnInit, OnDestroy {\r\n @Input() breadcrumbItems: SiteMapItem[];\r\n public localEndNode: string = null;\r\n public breadcrumbs: SiteMapItem[] = [];\r\n public subscriptions: Subscription[] = [];\r\n\r\n constructor(\r\n public router: Router,\r\n public location: Location,\r\n public sitemapService: SiteMapService,\r\n public breadCrumbService: BreadCrumbService,\r\n public settings: AppSettings) {\r\n this.subscriptions.push(this.breadCrumbService.currentEndNode.subscribe(endNode => this.localEndNode = endNode));\r\n this.subscriptions.push(this.router.events.subscribe(\r\n event => {\r\n if (event instanceof NavigationEnd) {\r\n this.getCrumbs(event.url);\r\n }\r\n }));\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscriptions && this.subscriptions.length > 0) {\r\n this.subscriptions.forEach((sub) => { sub.unsubscribe(); });\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.getCrumbs(this.router.url);\r\n }\r\n\r\n getCrumbs(url: string): void {\r\n if (url?.indexOf(\"sign-in\") != -1) {\r\n this.accountCrumbs(url);\r\n } else if (url?.indexOf(\"account\") != -1) {\r\n this.accountCrumbs(url);\r\n } else if (url?.indexOf(\"passwordrecovery\") != -1) {\r\n this.accountCrumbs(url);\r\n } else {\r\n this.breadcrumbs = [];\r\n this.doCrumbs();\r\n }\r\n }\r\n\r\n doCrumbs(): void {\r\n if (this.breadcrumbItems) {\r\n let navItem = this.breadcrumbItems.find(i => i.link === this.location.path() || i.routerLink === this.location.path());\r\n if (!navItem && this.location.path()) { // Could be a product so check the parent\r\n const parentArray = this.location.path().split('/');\r\n parentArray.pop();\r\n const parentPath = parentArray.join('/');\r\n navItem = this.breadcrumbItems.find(i => (i.link && i.link.endsWith(parentPath) || (i.routerLink && i.routerLink.endsWith(parentPath))));\r\n if (navItem) {\r\n this.breadcrumbs.unshift(navItem);\r\n }\r\n }\r\n if (navItem) {\r\n this.findParent(navItem);\r\n }\r\n }\r\n }\r\n\r\n findParent(navItem: SiteMapItem): void {\r\n const parent = this.breadcrumbItems.find(i => i.id === navItem.parentId);\r\n if (parent) {\r\n this.breadcrumbs.unshift(parent);\r\n this.findParent(parent);\r\n }\r\n }\r\n\r\n accountCrumbs(url: string) {\r\n this.breadcrumbs = [];\r\n this.localEndNode = null;\r\n const accountCrumbs = new SiteMapItem();\r\n accountCrumbs.link = '/account';\r\n accountCrumbs.href = '/account';\r\n accountCrumbs.slug = 'account';\r\n accountCrumbs.title = this.settings.accountTitle;\r\n this.breadcrumbs.push(accountCrumbs);\r\n this.settings.accountLinks.forEach((section => {\r\n if (section?.children) {\r\n section.children.forEach((link => {\r\n if (url === link.routerLink) {\r\n this.localEndNode = link.name;\r\n }\r\n }));\r\n }\r\n }));\r\n }\r\n\r\n public closeSubMenus(): void {\r\n if (window.innerWidth < 960) {\r\n this.sitemapService.closeAllSubMenus();\r\n }\r\n }\r\n}\r\n","
\r\n
\r\n \r\n
\r\n \r\n home\r\n \r\n
\r\n \r\n
\r\n {{localEndNode}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { BreadCrumbComponent } from './breadcrumb.component';\nimport { MaterialBaseModule } from 'src/@omnial/material.base.module';\n\n\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n MaterialBaseModule\n ],\n declarations: [BreadCrumbComponent],\n exports: [BreadCrumbComponent]\n})\nexport class BreadcrumbModule { }\n","import { Component, Input, EventEmitter, Output, OnDestroy } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { ToastrService } from 'ngx-toastr';\nimport { Product, ProductSpecification } from 'src/@omnial/_models/catalog/product.model';\nimport { CartService } from 'src/@omnial/_services/order/cart.service';\n\n@Component({\n selector: 'app-controls-list',\n templateUrl: './../../../app/product-controls/controls-list/controls-list.component.html',\n standalone: false\n})\nexport class ControlsListComponent {\n @Input() productSimple: Product;\n @Input() listName: string;\n @Input() listId: string;\n @Output() onOpenProductDialog: EventEmitter = new EventEmitter();\n\n public cartForm = new FormGroup({ quantity: new FormControl(1, Validators.compose([Validators.required]))});\n\n constructor(\n public router: Router,\n public cartService: CartService,\n public toastr: ToastrService) { }\n\n public addToWishList(product: Product): void {\n product.listName = this.listName ?? \"Product List\";\n product.listId = this.listId;\n this.cartService.addToWishlist(product);\n }\n\n public addToCart(product: Product): void {\n let qty = 1;\n if (this.cartForm?.controls?.quantity?.value) {\n qty = this.cartForm?.controls?.quantity?.value;\n }\n product.listName = this.listName ?? \"Product List\";\n product.listId = this.listId;\n this.cartService.addToCart(product, qty);\n }\n\n public outOfStock(product: Product): void {\n const message = `Sorry ${product.name} is temporarily out of stock. Go to the product page or tap this message to find out more.`;\n const toastrCart = this.toastr.success(message, 'Out of Stock');\n toastrCart.onTap.subscribe(() => this.router.navigate(['/products/' + product.seName]));\n }\n\n public openProductDialog(event: Product): void {\n this.onOpenProductDialog.emit(event);\n }\n\n public specification(name: string): ProductSpecification {\n if (this.productSimple?.specifications) {\n return this.productSimple.specifications.find(s => s.specificationAttributeName === name);\n }\n return null;\n }\n}\n","
\n
\n \n \n \n \n \n \n \n \n {{productSimple?.manufacturer?.name}}\n
\n
\n \n
\n
\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { ControlsListComponent } from './controls-list.component';\nimport { MaterialBaseModule } from 'src/@omnial/material.base.module';\nimport { MaterialExtendModule } from 'src/@omnial/material.extend.module';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n ReactiveFormsModule,\n MaterialBaseModule,\n MaterialExtendModule\n ],\n declarations: [ControlsListComponent],\n exports: [ControlsListComponent]\n})\nexport class ControlsListModule { }\n","import { Component, Input, AfterViewInit, OnInit } from '@angular/core';\r\nimport { Product, ProductDetail } from 'src/@omnial/_models/catalog/product.model';\r\nimport { Review } from 'src/@omnial/_models/customer/review.model';\r\n\r\n@Component({\n selector: 'app-rating',\n templateUrl: './../../../app/shared/rating/rating.component.html',\n styleUrls: ['./../../../app/shared/rating/rating.component.scss'],\n standalone: false\n})\r\nexport class RatingComponent implements OnInit {\r\n @Input() direction: string;\r\n @Input() large: boolean;\r\n @Input() product: any; // Could be Detail or Simple\r\n @Input() review: Review;\r\n @Input() showNumber: boolean;\r\n @Input() showViewLink: boolean;\r\n public ratingsCount: number;\r\n public ratingsValue: number;\r\n avg: number;\r\n stars: Array;\r\n initialised: boolean = false;\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n this.init();\r\n }\r\n\r\n public init(product?: ProductDetail): void {\r\n if (product) {\r\n this.product = product;\r\n this.ratingsCount = product.ratingsCount;\r\n this.ratingsValue = product.ratingsValue;\r\n } else if (this.review){\r\n this.ratingsCount = 1;\r\n this.ratingsValue = this.review.rating;\r\n } else {\r\n this.ratingsCount = this.product?.ratingsCount;\r\n this.ratingsValue = this.product?.ratingsValue;\r\n }\r\n if (this.ratingsCount && this.ratingsValue) {\r\n this.calculateAvgValue();\r\n } else {\r\n this.ratingsCount = 0;\r\n this.stars = ['star', 'star', 'star', 'star', 'star'];\r\n }\r\n }\r\n\r\n rate(value): void {\r\n value = (value + 1) * 20;\r\n this.ratingsCount++;\r\n this.ratingsValue = this.ratingsValue + value;\r\n this.calculateAvgValue();\r\n }\r\n\r\n calculateAvgValue(): void {\r\n this.avg = (this.ratingsValue / this.ratingsCount) * 20;\r\n switch (true) {\r\n case this.avg > 0 && this.avg < 20: {\r\n this.stars = ['star_half', 'star_border', 'star_border', 'star_border', 'star_border'];\r\n break;\r\n }\r\n case this.avg === 20: {\r\n this.stars = ['star', 'star_border', 'star_border', 'star_border', 'star_border'];\r\n break;\r\n }\r\n case this.avg > 20 && this.avg < 40: {\r\n this.stars = ['star', 'star_half', 'star_border', 'star_border', 'star_border'];\r\n break;\r\n }\r\n case this.avg === 40: {\r\n this.stars = ['star', 'star', 'star_border', 'star_border', 'star_border'];\r\n break;\r\n }\r\n case this.avg > 40 && this.avg < 60: {\r\n this.stars = ['star', 'star', 'star_half', 'star_border', 'star_border'];\r\n break;\r\n }\r\n case this.avg === 60: {\r\n this.stars = ['star', 'star', 'star', 'star_border', 'star_border'];\r\n break;\r\n }\r\n case this.avg > 60 && this.avg < 80: {\r\n this.stars = ['star', 'star', 'star', 'star_half', 'star_border'];\r\n break;\r\n }\r\n case this.avg === 80: {\r\n this.stars = ['star', 'star', 'star', 'star', 'star_border'];\r\n break;\r\n }\r\n case this.avg > 80 && this.avg < 100: {\r\n this.stars = ['star', 'star', 'star', 'star', 'star_half'];\r\n break;\r\n }\r\n case this.avg >= 100: {\r\n this.stars = ['star', 'star', 'star', 'star', 'star'];\r\n break;\r\n }\r\n default: {\r\n this.stars = ['star', 'star', 'star', 'star', 'star'];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n}\r\n","
\r\n
\r\n {{star}}\r\n
\r\n
\r\n {{star}}\r\n
\r\n
\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RatingComponent } from './rating.component';\nimport { MaterialBaseModule } from 'src/@omnial/material.base.module';\n\n@NgModule({\n imports: [\n CommonModule,\n MaterialBaseModule\n ],\n declarations: [RatingComponent],\n exports: [RatingComponent]\n})\nexport class RatingModule { }\n","export class Banner {\r\n id: number;\r\n desktopImageUrl: string;\r\n mobileImageUrl: string;\r\n desktopVideoUrl: string;\r\n mobileVideoUrl: string;\r\n altText: string;\r\n linkUrl: string;\r\n videoUrl: string;\r\n videoUrlMobile: string;\r\n type: 'picture' | 'content' | 'video' | 'desktop_video' | 'mobile_video'; // see SliderTypeEnum\r\n queryParams: any;\r\n position: number;\r\n content: string;\r\n class: string;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { Blog } from 'src/@omnial/_models/catalog/blog.model';\r\nimport { InfoBox } from 'src/@omnial/_models/catalog/info-box.model';\r\nimport { ProductCollection } from 'src/@omnial/_models/catalog/product.collection.model';\r\nimport { Slide, Slider } from 'src/@omnial/_models/catalog/slider.model';\r\nimport { ThemeSettings } from 'src/@omnial/_models/catalog/theme-settings.model';\r\nimport { Menu } from 'src/@omnial/_models/navigation/menu.model';\r\nimport { environment } from 'src/environments/environment';\r\nimport { RepositoryStaticService } from '../repository-static.service';\r\nimport { RepositoryService } from '../repository.service';\r\nimport { Banner } from 'src/@omnial/_models/catalog/banner.model';\r\n\r\n\r\n@Injectable()\r\nexport class SevenSpikesService {\r\n private subscriptions: Subscription[] = [];\r\n private useCache = environment.useCache;\r\n constructor(\r\n public staticService: RepositoryStaticService,\r\n public repoService: RepositoryService,\r\n private route: ActivatedRoute) {\r\n this.route.fragment.subscribe((fragment: string) => {\r\n if (fragment && fragment === 'CacheBust') {\r\n this.useCache = false;\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscriptions && this.subscriptions.length > 0) {\r\n this.subscriptions.forEach((sub) => { sub.unsubscribe(); });\r\n }\r\n }\r\n\r\n public getMenus(widgetZone: string, bypassCache?: boolean): Observable {\r\n return new Observable((observer) => {\r\n if (this.useCache && !bypassCache) {\r\n this.subscriptions.push(this.getMenusFromCache(widgetZone).subscribe({\r\n next: (cacheResult) => {\r\n observer.next(cacheResult as Menu[]);\r\n observer.complete();\r\n }\r\n }));\r\n } else {\r\n this.subscriptions.push(this.getMenusFromNop(widgetZone).subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as Menu[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n });\r\n }\r\n\r\n public banner(slide: Slide): Banner {\r\n const banner = new Banner();\r\n switch (slide.slideType) {\r\n case \"Picture\":\r\n banner.type = 'picture';\r\n break;\r\n case \"Video\":\r\n banner.type = 'video';\r\n break;\r\n case \"DesktopVideo\":\r\n banner.type = 'desktop_video';\r\n break;\r\n case \"MobileVideo\":\r\n banner.type = 'mobile_video';\r\n break;\r\n case \"Content\":\r\n banner.type = 'content';\r\n break;\r\n }\r\n banner.altText = slide.alt;\r\n banner.linkUrl = slide.url;\r\n banner.content = slide.content;\r\n banner.videoUrl = slide.desktopVideoUrl;\r\n banner.videoUrlMobile = slide.mobileVideoUrl;\r\n banner.desktopImageUrl = slide.desktopImageUrl;\r\n banner.mobileImageUrl = slide.mobileImageUrl;\r\n if (banner.linkUrl) {\r\n banner.linkUrl = banner.linkUrl.replace(environment.baseUrl, '');\r\n if (slide.url.indexOf('?q=') !== -1) { // Link to the Search Page with a QueryString ... tried to write this generically but failed\r\n banner.linkUrl = slide.url.split('?q=')[0];\r\n slide.url.split('?q=')[0];\r\n banner.queryParams = { q: slide.url.split('?q=')[1] };\r\n }\r\n }\r\n return banner;\r\n }\r\n\r\n public getSlides(widgetZone: string, url: string, bypassCache?: boolean): Observable {\r\n return new Observable((observer) => {\r\n if (this.useCache && !bypassCache) {\r\n this.subscriptions.push(this.getSlidesFromCache(widgetZone, url).subscribe({\r\n next: (cacheResult) => {\r\n observer.next(cacheResult as Slider[]);\r\n observer.complete();\r\n }\r\n }));\r\n } else {\r\n this.subscriptions.push(this.getSlidesFromNop(widgetZone, url).subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as Slider[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n });\r\n }\r\n\r\n public getSlidesBySliderId(sliderId: number, bypassCache?: boolean): Observable {\r\n const sliders: Slider[] = [];\r\n return new Observable((observer) => {\r\n if (this.useCache && !bypassCache) {\r\n this.subscriptions.push(this.getSlidesBySliderIdFromCache(sliderId).subscribe({\r\n next: (cacheResult) => {\r\n sliders.push(cacheResult);\r\n observer.next(sliders);\r\n observer.complete();\r\n }\r\n }));\r\n } else {\r\n this.subscriptions.push(this.getSlidesBySliderIdFromNop(sliderId).subscribe({\r\n next: (nopResult) => {\r\n sliders.push(nopResult);\r\n observer.next(sliders);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n });\r\n }\r\n\r\n public getProductCollections(widgetZone: string, bypassCache?: boolean): Observable {\r\n return new Observable((observer) => {\r\n if (this.useCache && !bypassCache) {\r\n this.subscriptions.push(this.getCollectionsFromCache(widgetZone).subscribe({\r\n next: (cacheResult) => {\r\n observer.next(cacheResult as ProductCollection[]);\r\n observer.complete();\r\n }\r\n }));\r\n } else {\r\n this.subscriptions.push(this.getCollectionsFromNop(widgetZone).subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as ProductCollection[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n });\r\n }\r\n\r\n public getProductCollectionById(collectionId: number, bypassCache?: boolean): Observable {\r\n const collections: ProductCollection[] = [];\r\n return new Observable((observer) => {\r\n if (this.useCache && !bypassCache) {\r\n this.subscriptions.push(this.getCollectionFromCache(collectionId).subscribe({\r\n next: (cacheResult) => {\r\n collections.push(cacheResult as ProductCollection);\r\n observer.next(collections);\r\n observer.complete();\r\n }\r\n }));\r\n } else {\r\n this.subscriptions.push(this.getCollectionFromNop(collectionId).subscribe({\r\n next: (nopResult) => {\r\n collections.push(nopResult as ProductCollection);\r\n observer.next(collections);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n });\r\n }\r\n\r\n public getBlog(bypassCache?: boolean): Observable {\r\n return new Observable((observer) => {\r\n if (this.useCache && !bypassCache) {\r\n this.subscriptions.push(this.getBlogFromCache().subscribe({\r\n next: (cacheResult) => {\r\n observer.next(cacheResult as Blog);\r\n observer.complete();\r\n }\r\n }));\r\n } else {\r\n this.subscriptions.push(this.getBlogFromNop().subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as Blog);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n });\r\n }\r\n\r\n public getInfoBoxes(bypassCache?: boolean): Observable {\r\n return new Observable((observer) => {\r\n if (this.useCache && !bypassCache) {\r\n this.subscriptions.push(this.getInfoBoxesFromCache().subscribe({\r\n next: (cacheResult) => {\r\n observer.next(cacheResult as InfoBox[]);\r\n observer.complete();\r\n }\r\n }));\r\n } else {\r\n this.subscriptions.push(this.getInfoBoxesFromNop().subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as InfoBox[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n });\r\n }\r\n\r\n public getThemeSettings(bypassCache?: boolean): Observable {\r\n return new Observable((observer) => {\r\n if (this.useCache && !bypassCache) {\r\n this.subscriptions.push(this.getThemeSettingsFromCache().subscribe({\r\n next: (cacheResult) => {\r\n observer.next(cacheResult as ThemeSettings);\r\n observer.complete();\r\n }\r\n }));\r\n } else {\r\n this.subscriptions.push(this.getThemeSettingsFromNop().subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as ThemeSettings);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n });\r\n }\r\n\r\n private getMenusFromCache(widgetZone: string): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.staticService.getMenus(widgetZone).subscribe({\r\n next: (cacheResult) => {\r\n if (cacheResult) {\r\n observer.next(cacheResult as Menu[]);\r\n observer.complete();\r\n } else {\r\n this.subscriptions.push(this.getMenusFromNop(widgetZone).subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as Menu[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n },\r\n error: (e) => {\r\n this.subscriptions.push(this.getMenusFromNop(widgetZone).subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as Menu[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getMenusFromNop(widgetZone: string): Observable {\r\n return new Observable((observer) => {\r\n let endpoint = `SevenSpikes/Menus/${widgetZone}`;\r\n this.subscriptions.push(this.repoService.getData(endpoint).subscribe({\r\n next: (res) => {\r\n observer.next(res as Menu[]);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getSlidesFromCache(widgetZone: string, url: string): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.staticService.getSliders(widgetZone, url).subscribe({\r\n next: (cacheResult) => {\r\n if (cacheResult) {\r\n observer.next(cacheResult as Slider[]);\r\n observer.complete();\r\n } else {\r\n this.subscriptions.push(this.getSlidesFromNop(widgetZone, url).subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as Slider[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n },\r\n error: (e) => {\r\n this.subscriptions.push(this.getSlidesFromNop(widgetZone, url).subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as Slider[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getSlidesBySliderIdFromCache(sliderId: number): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.staticService.get(`Generic/Key/slider-${sliderId}`).subscribe({\r\n next: (cacheResult) => {\r\n if (cacheResult) {\r\n observer.next(cacheResult as Slider);\r\n observer.complete();\r\n } else {\r\n this.subscriptions.push(this.getSlidesBySliderIdFromNop(sliderId).subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as Slider);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n },\r\n error: (e) => {\r\n this.subscriptions.push(this.getSlidesBySliderIdFromNop(sliderId).subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as Slider);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getSlidesFromNop(widgetZone: string, url: string): Observable {\r\n return new Observable((observer) => {\r\n let endpoint = `SevenSpikes/Sliders/${widgetZone}`;\r\n if (url) {\r\n endpoint = `SevenSpikes/Sliders/${widgetZone}/${url}`\r\n }\r\n this.subscriptions.push(this.repoService.getData(endpoint).subscribe({\r\n next: (res) => {\r\n observer.next(res as Slider[]);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getSlidesBySliderIdFromNop(sliderId: number): Observable {\r\n return new Observable((observer) => {\r\n let endpoint = `SevenSpikes/Slider/${sliderId}`;\r\n this.subscriptions.push(this.repoService.getData(endpoint).subscribe({\r\n next: (res) => {\r\n observer.next(res as Slider);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getCollectionsFromCache(widgetZone: string): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.staticService.getProductCollections(widgetZone).subscribe({\r\n next: (cacheResult) => {\r\n if (cacheResult) {\r\n observer.next(cacheResult as ProductCollection[]);\r\n observer.complete();\r\n } else {\r\n this.subscriptions.push(this.getCollectionsFromNop(widgetZone).subscribe(\r\n nopResult => {\r\n observer.next(nopResult as ProductCollection[]);\r\n observer.complete();\r\n }));\r\n }\r\n },\r\n error: (e) => {\r\n this.subscriptions.push(this.getCollectionsFromNop(widgetZone).subscribe(\r\n nopResult => {\r\n observer.next(nopResult as ProductCollection[]);\r\n observer.complete();\r\n }));\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getCollectionsFromNop(widgetZone: string): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.repoService.getData(`SevenSpikes/ProductCollections/${widgetZone}`).subscribe({\r\n next: (res) => {\r\n observer.next(res as ProductCollection[]);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getCollectionFromCache(collectionId: number): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.staticService.get(`Generic/Key/collection-${collectionId}`).subscribe({\r\n next: (cacheResult) => {\r\n if (cacheResult) {\r\n observer.next(cacheResult as ProductCollection);\r\n observer.complete();\r\n } else {\r\n this.subscriptions.push(this.getCollectionFromNop(collectionId).subscribe(\r\n nopResult => {\r\n observer.next(nopResult as ProductCollection);\r\n observer.complete();\r\n }));\r\n }\r\n },\r\n error: (e) => {\r\n this.subscriptions.push(this.getCollectionFromNop(collectionId).subscribe(\r\n nopResult => {\r\n observer.next(nopResult as ProductCollection);\r\n observer.complete();\r\n }));\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getCollectionFromNop(collectionId: number): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.repoService.getData(`SevenSpikes/ProductCollection/${collectionId}`).subscribe({\r\n next: (res) => {\r\n observer.next(res as ProductCollection);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getInfoBoxesFromCache(): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.staticService.getInfoBoxes().subscribe({\r\n next: (cacheResult) => {\r\n if (cacheResult) {\r\n observer.next(cacheResult as InfoBox[]);\r\n observer.complete();\r\n } else {\r\n this.subscriptions.push(this.getInfoBoxesFromNop().subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as InfoBox[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n },\r\n error: (e) => {\r\n this.subscriptions.push(this.getInfoBoxesFromNop().subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as InfoBox[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getInfoBoxesFromNop(): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.repoService.getData(`SevenSpikes/InfoBoxes`).subscribe({\r\n next: (res) => {\r\n observer.next(res as InfoBox[]);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getThemeSettingsFromCache(): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.staticService.getThemeSettings().subscribe({\r\n next: (cacheResult) => {\r\n if (cacheResult) {\r\n observer.next(cacheResult as ThemeSettings);\r\n observer.complete();\r\n } else {\r\n this.subscriptions.push(this.getThemeSettingsFromNop().subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as ThemeSettings);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n },\r\n error: (e) => {\r\n this.subscriptions.push(this.getThemeSettingsFromNop().subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as ThemeSettings);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getThemeSettingsFromNop(): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.repoService.getData(`SevenSpikes/Theme`).subscribe({\r\n next: (res) => {\r\n observer.next(res as ThemeSettings);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getBlogFromCache(): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.staticService.getBlog().subscribe({\r\n next: (cacheResult) => {\r\n if (cacheResult) {\r\n observer.next(cacheResult as Blog);\r\n observer.complete();\r\n } else {\r\n this.subscriptions.push(this.getBlogFromNop().subscribe(\r\n nopResult => {\r\n observer.next(nopResult as Blog);\r\n observer.complete();\r\n }));\r\n }\r\n },\r\n error: (e) => {\r\n this.subscriptions.push(this.getBlogFromNop().subscribe(\r\n nopResult => {\r\n observer.next(nopResult as Blog);\r\n observer.complete();\r\n }));\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getBlogFromNop(): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.repoService.getData('SevenSpikes/Blog').subscribe({\r\n next: (res) => {\r\n observer.next(res as Blog);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n });\r\n }\r\n}\r\n","import * as i0 from '@angular/core';\nimport { Injectable, EventEmitter, Directive, Output, Input, Component, ViewEncapsulation, HostBinding, ContentChildren, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Subject, fromEvent, Observable, combineLatest, timer } from 'rxjs';\nimport { map } from 'rxjs/operators';\nconst _c0 = [\"*\"];\nlet VgStates = /*#__PURE__*/(() => {\n class VgStates {\n static {\n this.VG_ENDED = 'ended';\n }\n static {\n this.VG_PAUSED = 'paused';\n }\n static {\n this.VG_PLAYING = 'playing';\n }\n static {\n this.VG_LOADING = 'waiting';\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgStates_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgStates)();\n };\n }\n /** @nocollapse */\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: VgStates,\n factory: VgStates.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return VgStates;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgApiService = /*#__PURE__*/(() => {\n class VgApiService {\n constructor() {\n this.medias = {}; // TODO: refactor to Set\n this.playerReadyEvent = new EventEmitter(true);\n this.isPlayerReady = false;\n }\n onPlayerReady(fsAPI) {\n this.fsAPI = fsAPI;\n this.isPlayerReady = true;\n this.playerReadyEvent.emit(this);\n }\n getDefaultMedia() {\n for (const item in this.medias) {\n if (this.medias[item]) {\n return this.medias[item];\n }\n }\n }\n getMasterMedia() {\n let master;\n for (const id in this.medias) {\n if (this.medias[id].vgMaster === 'true' || this.medias[id].vgMaster === true) {\n master = this.medias[id];\n break;\n }\n }\n return master || this.getDefaultMedia();\n }\n isMasterDefined() {\n let result = false;\n for (const id in this.medias) {\n if (this.medias[id].vgMaster === 'true' || this.medias[id].vgMaster === true) {\n result = true;\n break;\n }\n }\n return result;\n }\n getMediaById(id = null) {\n let media = this.medias[id];\n if (!id || id === '*') {\n media = this;\n }\n return media;\n }\n play() {\n for (const id in this.medias) {\n if (this.medias[id]) {\n this.medias[id].play();\n }\n }\n }\n pause() {\n for (const id in this.medias) {\n if (this.medias[id]) {\n this.medias[id].pause();\n }\n }\n }\n get duration() {\n return this.$$getAllProperties('duration');\n }\n set currentTime(seconds) {\n this.$$setAllProperties('currentTime', seconds);\n }\n get currentTime() {\n return this.$$getAllProperties('currentTime');\n }\n set state(state) {\n this.$$setAllProperties('state', state);\n }\n get state() {\n return this.$$getAllProperties('state');\n }\n set volume(volume) {\n this.$$setAllProperties('volume', volume);\n }\n get volume() {\n return this.$$getAllProperties('volume');\n }\n set playbackRate(rate) {\n this.$$setAllProperties('playbackRate', rate);\n }\n get playbackRate() {\n return this.$$getAllProperties('playbackRate');\n }\n get canPlay() {\n return this.$$getAllProperties('canPlay');\n }\n get canPlayThrough() {\n return this.$$getAllProperties('canPlayThrough');\n }\n get isMetadataLoaded() {\n return this.$$getAllProperties('isMetadataLoaded');\n }\n get isWaiting() {\n return this.$$getAllProperties('isWaiting');\n }\n get isCompleted() {\n return this.$$getAllProperties('isCompleted');\n }\n get isLive() {\n return this.$$getAllProperties('isLive');\n }\n get isMaster() {\n return this.$$getAllProperties('isMaster');\n }\n get time() {\n return this.$$getAllProperties('time');\n }\n get buffer() {\n return this.$$getAllProperties('buffer');\n }\n get buffered() {\n return this.$$getAllProperties('buffered');\n }\n get subscriptions() {\n return this.$$getAllProperties('subscriptions');\n }\n get textTracks() {\n return this.$$getAllProperties('textTracks');\n }\n seekTime(value, byPercent = false) {\n for (const id in this.medias) {\n if (this.medias[id]) {\n this.$$seek(this.medias[id], value, byPercent);\n }\n }\n }\n $$seek(media, value, byPercent = false) {\n let second;\n let duration = media.duration;\n if (byPercent) {\n if (this.isMasterDefined()) {\n duration = this.getMasterMedia().duration;\n }\n second = value * duration / 100;\n } else {\n second = value;\n }\n media.currentTime = second;\n }\n addTextTrack(type, label, language) {\n for (const id in this.medias) {\n if (this.medias[id]) {\n this.$$addTextTrack(this.medias[id], type, label, language);\n }\n }\n }\n $$addTextTrack(media, type, label, language) {\n media.addTextTrack(type, label, language);\n }\n $$getAllProperties(property) {\n const medias = {};\n let result;\n for (const id in this.medias) {\n if (this.medias[id]) {\n medias[id] = this.medias[id];\n }\n }\n const nMedias = Object.keys(medias).length;\n switch (nMedias) {\n case 0:\n // Return default values until vgMedia is initialized\n switch (property) {\n case 'state':\n result = VgStates.VG_PAUSED;\n break;\n case 'playbackRate':\n case 'volume':\n result = 1;\n break;\n case 'time':\n result = {\n current: 0,\n total: 0,\n left: 0\n };\n break;\n }\n break;\n case 1:\n // If there's only one media element then return the plain value\n const firstMediaId = Object.keys(medias)[0];\n result = medias[firstMediaId][property];\n break;\n default:\n // TODO: return 'master' value\n const master = this.getMasterMedia();\n result = medias[master.id][property];\n }\n return result;\n }\n $$setAllProperties(property, value) {\n for (const id in this.medias) {\n if (this.medias[id]) {\n this.medias[id][property] = value;\n }\n }\n }\n registerElement(elem) {\n this.videogularElement = elem;\n }\n registerMedia(media) {\n this.medias[media.id] = media;\n }\n unregisterMedia(media) {\n delete this.medias[media.id];\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgApiService_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgApiService)();\n };\n }\n /** @nocollapse */\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: VgApiService,\n factory: VgApiService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return VgApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgControlsHiddenService = /*#__PURE__*/(() => {\n class VgControlsHiddenService {\n constructor() {\n this.isHiddenSubject = new Subject();\n this.isHidden = this.isHiddenSubject.asObservable();\n }\n state(hidden) {\n this.isHiddenSubject.next(hidden);\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgControlsHiddenService_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgControlsHiddenService)();\n };\n }\n /** @nocollapse */\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: VgControlsHiddenService,\n factory: VgControlsHiddenService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return VgControlsHiddenService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgUtilsService = /*#__PURE__*/(() => {\n class VgUtilsService {\n /**\n * Inspired by Paul Irish\n * https://gist.github.com/paulirish/211209\n */\n static getZIndex() {\n let zIndex = 1;\n let elementZIndex;\n const tags = document.getElementsByTagName('*');\n for (let i = 0, l = tags.length; i < l; i++) {\n elementZIndex = parseInt(window.getComputedStyle(tags[i])['z-index'], 10);\n if (elementZIndex > zIndex) {\n zIndex = elementZIndex + 1;\n }\n }\n return zIndex;\n }\n // Very simple mobile detection, not 100% reliable\n static isMobileDevice() {\n // return (\n // typeof window.screen.orientation !== 'undefined' ||\n // navigator.userAgent.indexOf('IEMobile') !== -1\n // );\n // window.orientation is deprecated and we should use window.screen.orientation\n return typeof window.orientation !== 'undefined' || navigator.userAgent.indexOf('IEMobile') !== -1;\n }\n static isiOSDevice() {\n return (navigator.userAgent.match(/ip(hone|ad|od)/i) || VgUtilsService.isIpadOS()) && !navigator.userAgent.match(/(iemobile)[\\/\\s]?([\\w\\.]*)/i);\n }\n static isIpadOS() {\n return navigator.maxTouchPoints && navigator.maxTouchPoints > 2 && /MacIntel/.test(navigator.platform);\n }\n static isCordova() {\n return document.URL.indexOf('http://') === -1 && document.URL.indexOf('https://') === -1;\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgUtilsService_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgUtilsService)();\n };\n }\n /** @nocollapse */\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: VgUtilsService,\n factory: VgUtilsService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return VgUtilsService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgFullscreenApiService = /*#__PURE__*/(() => {\n class VgFullscreenApiService {\n constructor() {\n this.nativeFullscreen = true;\n this.isFullscreen = false;\n this.onChangeFullscreen = new EventEmitter();\n }\n init(elem, medias) {\n this.videogularElement = elem;\n this.medias = medias;\n const APIs = {\n w3: {\n enabled: 'fullscreenEnabled',\n element: 'fullscreenElement',\n request: 'requestFullscreen',\n exit: 'exitFullscreen',\n onchange: 'fullscreenchange',\n onerror: 'fullscreenerror'\n },\n newWebkit: {\n enabled: 'webkitFullscreenEnabled',\n element: 'webkitFullscreenElement',\n request: 'webkitRequestFullscreen',\n exit: 'webkitExitFullscreen',\n onchange: 'webkitfullscreenchange',\n onerror: 'webkitfullscreenerror'\n },\n oldWebkit: {\n enabled: 'webkitIsFullScreen',\n element: 'webkitCurrentFullScreenElement',\n request: 'webkitRequestFullScreen',\n exit: 'webkitCancelFullScreen',\n onchange: 'webkitfullscreenchange',\n onerror: 'webkitfullscreenerror'\n },\n moz: {\n enabled: 'mozFullScreen',\n element: 'mozFullScreenElement',\n request: 'mozRequestFullScreen',\n exit: 'mozCancelFullScreen',\n onchange: 'mozfullscreenchange',\n onerror: 'mozfullscreenerror'\n },\n ios: {\n enabled: 'webkitFullscreenEnabled',\n element: 'webkitFullscreenElement',\n request: 'webkitEnterFullscreen',\n exit: 'webkitExitFullscreen',\n onchange: 'webkitendfullscreen',\n // Hack for iOS: webkitfullscreenchange it's not firing\n onerror: 'webkitfullscreenerror'\n },\n ms: {\n enabled: 'msFullscreenEnabled',\n element: 'msFullscreenElement',\n request: 'msRequestFullscreen',\n exit: 'msExitFullscreen',\n onchange: 'MSFullscreenChange',\n onerror: 'MSFullscreenError'\n }\n };\n for (const browser in APIs) {\n if (APIs[browser].enabled in document) {\n this.polyfill = APIs[browser];\n break;\n }\n }\n if (VgUtilsService.isiOSDevice()) {\n this.polyfill = APIs.ios;\n }\n this.isAvailable = this.polyfill != null;\n if (this.polyfill == null) {\n return;\n }\n let fsElemDispatcher;\n switch (this.polyfill.onchange) {\n // Mozilla dispatches the fullscreen change event from document, not the element\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=724816#c3\n case 'mozfullscreenchange':\n fsElemDispatcher = document;\n break;\n // iOS dispatches the fullscreen change event from video element\n case 'webkitendfullscreen':\n fsElemDispatcher = this.medias.toArray()[0].elem;\n break;\n // HTML5 implementation dispatches the fullscreen change event from the element\n default:\n fsElemDispatcher = elem;\n }\n this.fsChangeSubscription = fromEvent(fsElemDispatcher, this.polyfill.onchange).subscribe(() => {\n this.onFullscreenChange();\n });\n }\n onFullscreenChange() {\n this.isFullscreen = !!document[this.polyfill.element];\n this.onChangeFullscreen.emit(this.isFullscreen);\n }\n toggleFullscreen(element = null) {\n if (this.isFullscreen) {\n return this.exit();\n }\n return this.request(element);\n }\n request(elem) {\n if (!elem) {\n elem = this.videogularElement;\n }\n this.isFullscreen = true;\n this.onChangeFullscreen.emit(true);\n // Perform native full screen support\n if (this.isAvailable && this.nativeFullscreen) {\n // Fullscreen for mobile devices\n if (VgUtilsService.isMobileDevice()) {\n // We should make fullscreen the video object if it doesn't have native fullscreen support\n // Fallback! We can't set vg-player on fullscreen, only video/audio objects\n if (!this.polyfill.enabled && elem === this.videogularElement || VgUtilsService.isiOSDevice()) {\n elem = this.medias.toArray()[0].elem;\n }\n return this.enterElementInFullScreen(elem);\n }\n return this.enterElementInFullScreen(this.videogularElement);\n }\n return Promise.resolve();\n }\n enterElementInFullScreen(elem) {\n return elem[this.polyfill.request]();\n }\n exit() {\n this.isFullscreen = false;\n this.onChangeFullscreen.emit(false);\n // Exit from native fullscreen\n if (this.isAvailable && this.nativeFullscreen) {\n return document[this.polyfill.exit]();\n }\n return Promise.resolve();\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgFullscreenApiService_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgFullscreenApiService)();\n };\n }\n /** @nocollapse */\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: VgFullscreenApiService,\n factory: VgFullscreenApiService.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return VgFullscreenApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgEvents = /*#__PURE__*/(() => {\n class VgEvents {\n static {\n this.VG_ABORT = 'abort';\n }\n static {\n this.VG_CAN_PLAY = 'canplay';\n }\n static {\n this.VG_CAN_PLAY_THROUGH = 'canplaythrough';\n }\n static {\n this.VG_DURATION_CHANGE = 'durationchange';\n }\n static {\n this.VG_EMPTIED = 'emptied';\n }\n static {\n this.VG_ENCRYPTED = 'encrypted';\n }\n static {\n this.VG_ENDED = 'ended';\n }\n static {\n this.VG_ERROR = 'error';\n }\n static {\n this.VG_LOADED_DATA = 'loadeddata';\n }\n static {\n this.VG_LOADED_METADATA = 'loadedmetadata';\n }\n static {\n this.VG_LOAD_START = 'loadstart';\n }\n static {\n this.VG_PAUSE = 'pause';\n }\n static {\n this.VG_PLAY = 'play';\n }\n static {\n this.VG_PLAYING = 'playing';\n }\n static {\n this.VG_PROGRESS = 'progress';\n }\n static {\n this.VG_RATE_CHANGE = 'ratechange';\n }\n static {\n this.VG_SEEK = 'seek';\n }\n static {\n this.VG_SEEKED = 'seeked';\n }\n static {\n this.VG_SEEKING = 'seeking';\n }\n static {\n this.VG_STALLED = 'stalled';\n }\n static {\n this.VG_SUSPEND = 'suspend';\n }\n static {\n this.VG_TIME_UPDATE = 'timeupdate';\n }\n static {\n this.VG_VOLUME_CHANGE = 'volumechange';\n }\n static {\n this.VG_WAITING = 'waiting';\n }\n static {\n this.VG_LOAD = 'load';\n }\n static {\n this.VG_ENTER = 'enter';\n }\n static {\n this.VG_EXIT = 'exit';\n }\n static {\n this.VG_START_ADS = 'startads';\n }\n static {\n this.VG_END_ADS = 'endads';\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgEvents_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgEvents)();\n };\n }\n /** @nocollapse */\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: VgEvents,\n factory: VgEvents.ɵfac,\n providedIn: 'root'\n });\n }\n }\n return VgEvents;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgCuePointsDirective = /*#__PURE__*/(() => {\n class VgCuePointsDirective {\n constructor(ref) {\n this.ref = ref;\n this.onEnterCuePoint = new EventEmitter();\n this.onUpdateCuePoint = new EventEmitter();\n this.onExitCuePoint = new EventEmitter();\n this.onCompleteCuePoint = new EventEmitter();\n this.subscriptions = [];\n this.cuesSubscriptions = [];\n this.totalCues = 0;\n }\n ngOnInit() {\n this.onLoad$ = fromEvent(this.ref.nativeElement, VgEvents.VG_LOAD);\n this.subscriptions.push(this.onLoad$.subscribe(this.onLoad.bind(this)));\n }\n onLoad(event) {\n const cues = event.target.track.cues;\n this.ref.nativeElement.cues = cues;\n this.updateCuePoints(cues);\n }\n updateCuePoints(cues) {\n this.cuesSubscriptions.forEach(s => s.unsubscribe());\n for (let i = 0, l = cues.length; i < l; i++) {\n this.onEnter$ = fromEvent(cues[i], VgEvents.VG_ENTER);\n this.cuesSubscriptions.push(this.onEnter$.subscribe(this.onEnter.bind(this)));\n this.onExit$ = fromEvent(cues[i], VgEvents.VG_EXIT);\n this.cuesSubscriptions.push(this.onExit$.subscribe(this.onExit.bind(this)));\n }\n }\n onEnter(event) {\n this.onEnterCuePoint.emit(event.target);\n }\n onExit(event) {\n this.onExitCuePoint.emit(event.target);\n }\n ngDoCheck() {\n if (this.ref.nativeElement.track && this.ref.nativeElement.track.cues) {\n const changes = this.totalCues !== this.ref.nativeElement.track.cues.length;\n if (changes) {\n this.totalCues = this.ref.nativeElement.track.cues.length;\n this.ref.nativeElement.cues = this.ref.nativeElement.track.cues;\n this.updateCuePoints(this.ref.nativeElement.track.cues);\n }\n }\n }\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgCuePointsDirective_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgCuePointsDirective)(i0.ɵɵdirectiveInject(i0.ElementRef));\n };\n }\n /** @nocollapse */\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: VgCuePointsDirective,\n selectors: [[\"\", \"vgCuePoints\", \"\"]],\n outputs: {\n onEnterCuePoint: \"onEnterCuePoint\",\n onUpdateCuePoint: \"onUpdateCuePoint\",\n onExitCuePoint: \"onExitCuePoint\",\n onCompleteCuePoint: \"onCompleteCuePoint\"\n },\n standalone: false\n });\n }\n }\n return VgCuePointsDirective;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgMediaDirective = /*#__PURE__*/(() => {\n class VgMediaDirective {\n constructor(api, ref) {\n this.api = api;\n this.ref = ref;\n this.state = VgStates.VG_PAUSED;\n this.time = {\n current: 0,\n total: 0,\n left: 0\n };\n this.buffer = {\n end: 0\n };\n this.canPlay = false;\n this.canPlayThrough = false;\n this.isMetadataLoaded = false;\n this.isWaiting = false;\n this.isCompleted = false;\n this.isLive = false;\n this.isBufferDetected = false;\n this.checkInterval = 200;\n this.currentPlayPos = 0;\n this.lastPlayPos = 0;\n this.playAtferSync = false;\n this.bufferDetected = new Subject();\n }\n ngOnInit() {\n if (this.vgMedia.nodeName) {\n // It's a native element\n this.elem = this.vgMedia;\n } else {\n // It's an Angular Class\n this.elem = this.vgMedia.elem;\n }\n // Just in case we're creating this vgMedia dynamically register again into API\n this.api.registerMedia(this);\n this.subscriptions = {\n // Native events\n abort: fromEvent(this.elem, VgEvents.VG_ABORT),\n canPlay: fromEvent(this.elem, VgEvents.VG_CAN_PLAY),\n canPlayThrough: fromEvent(this.elem, VgEvents.VG_CAN_PLAY_THROUGH),\n durationChange: fromEvent(this.elem, VgEvents.VG_DURATION_CHANGE),\n emptied: fromEvent(this.elem, VgEvents.VG_EMPTIED),\n encrypted: fromEvent(this.elem, VgEvents.VG_ENCRYPTED),\n ended: fromEvent(this.elem, VgEvents.VG_ENDED),\n error: fromEvent(this.elem, VgEvents.VG_ERROR),\n loadedData: fromEvent(this.elem, VgEvents.VG_LOADED_DATA),\n loadedMetadata: fromEvent(this.elem, VgEvents.VG_LOADED_METADATA),\n loadStart: fromEvent(this.elem, VgEvents.VG_LOAD_START),\n pause: fromEvent(this.elem, VgEvents.VG_PAUSE),\n play: fromEvent(this.elem, VgEvents.VG_PLAY),\n playing: fromEvent(this.elem, VgEvents.VG_PLAYING),\n progress: fromEvent(this.elem, VgEvents.VG_PROGRESS),\n rateChange: fromEvent(this.elem, VgEvents.VG_RATE_CHANGE),\n seeked: fromEvent(this.elem, VgEvents.VG_SEEKED),\n seeking: fromEvent(this.elem, VgEvents.VG_SEEKING),\n stalled: fromEvent(this.elem, VgEvents.VG_STALLED),\n suspend: fromEvent(this.elem, VgEvents.VG_SUSPEND),\n timeUpdate: fromEvent(this.elem, VgEvents.VG_TIME_UPDATE),\n volumeChange: fromEvent(this.elem, VgEvents.VG_VOLUME_CHANGE),\n waiting: fromEvent(this.elem, VgEvents.VG_WAITING),\n // Advertisement only events\n startAds: fromEvent(window, VgEvents.VG_START_ADS),\n endAds: fromEvent(window, VgEvents.VG_END_ADS),\n // See changes on child elements to reload the video file\n mutation: new Observable(observer => {\n const domObs = new MutationObserver(mutations => {\n observer.next(mutations);\n });\n domObs.observe(this.elem, {\n childList: true,\n attributes: true\n });\n return () => {\n domObs.disconnect();\n };\n }),\n // Custom buffering detection\n bufferDetected: this.bufferDetected\n };\n this.mutationObs = this.subscriptions.mutation.subscribe(this.onMutation.bind(this));\n this.canPlayObs = this.subscriptions.canPlay.subscribe(this.onCanPlay.bind(this));\n this.canPlayThroughObs = this.subscriptions.canPlayThrough.subscribe(this.onCanPlayThrough.bind(this));\n this.loadedMetadataObs = this.subscriptions.loadedMetadata.subscribe(this.onLoadMetadata.bind(this));\n this.waitingObs = this.subscriptions.waiting.subscribe(this.onWait.bind(this));\n this.progressObs = this.subscriptions.progress.subscribe(this.onProgress.bind(this));\n this.endedObs = this.subscriptions.ended.subscribe(this.onComplete.bind(this));\n this.playingObs = this.subscriptions.playing.subscribe(this.onStartPlaying.bind(this));\n this.playObs = this.subscriptions.play.subscribe(this.onPlay.bind(this));\n this.pauseObs = this.subscriptions.pause.subscribe(this.onPause.bind(this));\n this.timeUpdateObs = this.subscriptions.timeUpdate.subscribe(this.onTimeUpdate.bind(this));\n this.volumeChangeObs = this.subscriptions.volumeChange.subscribe(this.onVolumeChange.bind(this));\n this.errorObs = this.subscriptions.error.subscribe(this.onError.bind(this));\n if (this.vgMaster) {\n this.api.playerReadyEvent.subscribe(() => {\n this.prepareSync();\n });\n }\n }\n prepareSync() {\n const canPlayAll = [];\n for (const media in this.api.medias) {\n if (this.api.medias[media]) {\n canPlayAll.push(this.api.medias[media].subscriptions.canPlay);\n }\n }\n this.canPlayAllSubscription = combineLatest(canPlayAll).pipe(map((...params) => {\n const checkReadyState = event => {\n if (!event?.target) {\n return false;\n }\n return event.target.readyState === 4;\n };\n const allReady = params.some(checkReadyState);\n if (allReady && !this.syncSubscription) {\n this.startSync();\n this.syncSubscription.unsubscribe();\n }\n })).subscribe();\n }\n startSync() {\n this.syncSubscription = timer(0, 1000).subscribe(() => {\n for (const media in this.api.medias) {\n if (this.api.medias[media] !== this) {\n const diff = this.api.medias[media].currentTime - this.currentTime;\n if (diff < -0.3 || diff > 0.3) {\n this.playAtferSync = this.state === VgStates.VG_PLAYING;\n this.pause();\n this.api.medias[media].pause();\n this.api.medias[media].currentTime = this.currentTime;\n } else {\n if (this.playAtferSync) {\n this.play();\n this.api.medias[media].play();\n this.playAtferSync = false;\n }\n }\n }\n }\n });\n }\n onMutation(mutations) {\n // Detect changes only for source elements or src attribute\n for (let i = 0, l = mutations.length; i < l; i++) {\n const mut = mutations[i];\n if (mut.type === 'attributes' && mut.attributeName === 'src') {\n // Only load src file if it's not a blob (for DASH / HLS sources)\n if (mut.target.src && mut.target.src.length > 0 && mut.target.src.indexOf('blob:') < 0) {\n this.loadMedia();\n break;\n }\n } else if (mut.type === 'childList' && mut.removedNodes.length && mut.removedNodes[0].nodeName.toLowerCase() === 'source') {\n this.loadMedia();\n break;\n }\n }\n }\n loadMedia() {\n this.vgMedia.pause();\n this.vgMedia.currentTime = 0;\n // Start buffering until we can play the media file\n this.stopBufferCheck();\n this.isBufferDetected = true;\n this.bufferDetected.next(this.isBufferDetected);\n // TODO: This is ugly, we should find something cleaner. For some reason a TimerObservable doesn't works.\n setTimeout(() => this.vgMedia.load(), 10);\n }\n play() {\n // short-circuit if already playing\n if (this.playPromise || this.state !== VgStates.VG_PAUSED && this.state !== VgStates.VG_ENDED) {\n return;\n }\n this.playPromise = this.vgMedia.play();\n // browser has async play promise\n if (this.playPromise && this.playPromise.then && this.playPromise.catch) {\n this.playPromise.then(() => {\n this.playPromise = null;\n }).catch(() => {\n this.playPromise = null;\n // deliberately empty for the sake of eating console noise\n });\n }\n return this.playPromise;\n }\n pause() {\n // browser has async play promise\n if (this.playPromise) {\n this.playPromise.then(() => {\n this.vgMedia.pause();\n });\n } else {\n this.vgMedia.pause();\n }\n }\n get id() {\n // We should return undefined if vgMedia still doesn't exist\n let result;\n if (this.vgMedia) {\n result = this.vgMedia.id;\n }\n return result;\n }\n get duration() {\n return this.vgMedia.duration === Infinity ? this.specifiedDuration : this.vgMedia.duration;\n }\n set currentTime(seconds) {\n this.vgMedia.currentTime = seconds;\n // this.elem.dispatchEvent(new CustomEvent(VgEvents.VG_SEEK));\n }\n get currentTime() {\n return this.vgMedia.currentTime;\n }\n set volume(volume) {\n this.vgMedia.volume = volume;\n }\n get volume() {\n return this.vgMedia.volume;\n }\n set playbackRate(rate) {\n this.vgMedia.playbackRate = rate;\n }\n get playbackRate() {\n return this.vgMedia.playbackRate;\n }\n get buffered() {\n return this.vgMedia.buffered;\n }\n get textTracks() {\n return this.vgMedia.textTracks;\n }\n // @ts-ignore\n onCanPlay(event) {\n this.isBufferDetected = false;\n this.bufferDetected.next(this.isBufferDetected);\n this.canPlay = true;\n this.ref.detectChanges();\n }\n // @ts-ignore\n onCanPlayThrough(event) {\n this.isBufferDetected = false;\n this.bufferDetected.next(this.isBufferDetected);\n this.canPlayThrough = true;\n this.ref.detectChanges();\n }\n // @ts-ignore\n onLoadMetadata(event) {\n this.isMetadataLoaded = true;\n this.time = {\n current: 0,\n left: 0,\n total: this.duration * 1000\n };\n this.state = VgStates.VG_PAUSED;\n // Live streaming check\n const t = Math.round(this.time.total);\n this.isLive = t === Infinity;\n this.ref.detectChanges();\n }\n // @ts-ignore\n onWait(event) {\n this.isWaiting = true;\n this.ref.detectChanges();\n }\n // @ts-ignore\n onComplete(event) {\n this.isCompleted = true;\n this.state = VgStates.VG_ENDED;\n this.ref.detectChanges();\n }\n // @ts-ignore\n onStartPlaying(event) {\n this.state = VgStates.VG_PLAYING;\n this.ref.detectChanges();\n }\n // @ts-ignore\n onPlay(event) {\n this.state = VgStates.VG_PLAYING;\n if (this.vgMaster) {\n if (!this.syncSubscription || this.syncSubscription.closed) {\n this.startSync();\n }\n }\n this.startBufferCheck();\n this.ref.detectChanges();\n }\n // @ts-ignore\n onPause(event) {\n this.state = VgStates.VG_PAUSED;\n if (this.vgMaster) {\n if (!this.playAtferSync) {\n this.syncSubscription.unsubscribe();\n }\n }\n this.stopBufferCheck();\n this.ref.detectChanges();\n }\n // @ts-ignore\n onTimeUpdate(event) {\n const end = this.buffered.length - 1;\n this.time = {\n current: this.currentTime * 1000,\n total: this.time.total,\n left: (this.duration - this.currentTime) * 1000\n };\n if (end >= 0) {\n this.buffer = {\n end: this.buffered.end(end) * 1000\n };\n }\n this.ref.detectChanges();\n }\n // @ts-ignore\n onProgress(event) {\n const end = this.buffered.length - 1;\n if (end >= 0) {\n this.buffer = {\n end: this.buffered.end(end) * 1000\n };\n }\n this.ref.detectChanges();\n }\n // @ts-ignore\n onVolumeChange(event) {\n // TODO: Save to localstorage the current volume\n this.ref.detectChanges();\n }\n // @ts-ignore\n onError(event) {\n // TODO: Handle error messages\n this.ref.detectChanges();\n }\n // http://stackoverflow.com/a/23828241/779529\n bufferCheck() {\n const offset = 1 / this.checkInterval;\n this.currentPlayPos = this.currentTime;\n if (!this.isBufferDetected && this.currentPlayPos < this.lastPlayPos + offset) {\n this.isBufferDetected = true;\n }\n if (this.isBufferDetected && this.currentPlayPos > this.lastPlayPos + offset) {\n this.isBufferDetected = false;\n }\n // Prevent calls to bufferCheck after ngOnDestroy have been called\n if (!this.bufferDetected.closed) {\n this.bufferDetected.next(this.isBufferDetected);\n }\n this.lastPlayPos = this.currentPlayPos;\n }\n startBufferCheck() {\n this.checkBufferSubscription = timer(0, this.checkInterval).subscribe(() => {\n this.bufferCheck();\n });\n }\n stopBufferCheck() {\n if (this.checkBufferSubscription) {\n this.checkBufferSubscription.unsubscribe();\n }\n this.isBufferDetected = false;\n this.bufferDetected.next(this.isBufferDetected);\n }\n seekTime(value, byPercent = false) {\n let second;\n const duration = this.duration;\n if (byPercent) {\n second = value * duration / 100;\n } else {\n second = value;\n }\n this.currentTime = second;\n }\n addTextTrack(type, label, language, mode) {\n const newTrack = this.vgMedia.addTextTrack(type, label, language);\n if (mode) {\n newTrack.mode = mode;\n }\n return newTrack;\n }\n ngOnDestroy() {\n this.vgMedia.src = '';\n this.mutationObs?.unsubscribe();\n this.canPlayObs?.unsubscribe();\n this.canPlayThroughObs?.unsubscribe();\n this.loadedMetadataObs?.unsubscribe();\n this.waitingObs?.unsubscribe();\n this.progressObs?.unsubscribe();\n this.endedObs?.unsubscribe();\n this.playingObs?.unsubscribe();\n this.playObs?.unsubscribe();\n this.pauseObs?.unsubscribe();\n this.timeUpdateObs?.unsubscribe();\n this.volumeChangeObs?.unsubscribe();\n this.errorObs?.unsubscribe();\n this.checkBufferSubscription?.unsubscribe();\n this.syncSubscription?.unsubscribe();\n this.bufferDetected?.complete();\n this.bufferDetected?.unsubscribe();\n this.api.unregisterMedia(this);\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgMediaDirective_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgMediaDirective)(i0.ɵɵdirectiveInject(VgApiService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n };\n }\n /** @nocollapse */\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: VgMediaDirective,\n selectors: [[\"\", \"vgMedia\", \"\"]],\n inputs: {\n vgMedia: \"vgMedia\",\n vgMaster: \"vgMaster\"\n },\n standalone: false\n });\n }\n }\n return VgMediaDirective;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgPlayerComponent = /*#__PURE__*/(() => {\n class VgPlayerComponent {\n constructor(ref, api, fsAPI, controlsHidden) {\n this.api = api;\n this.fsAPI = fsAPI;\n this.controlsHidden = controlsHidden;\n this.isFullscreen = false;\n this.isNativeFullscreen = false;\n this.areControlsHidden = false;\n this.onPlayerReady = new EventEmitter();\n this.onMediaReady = new EventEmitter();\n this.subscriptions = [];\n this.elem = ref.nativeElement;\n this.api.registerElement(this.elem);\n }\n ngAfterContentInit() {\n this.medias.toArray().forEach(media => {\n this.api.registerMedia(media);\n });\n this.fsAPI.init(this.elem, this.medias);\n this.subscriptions.push(this.fsAPI.onChangeFullscreen.subscribe(this.onChangeFullscreen.bind(this)));\n this.subscriptions.push(this.controlsHidden.isHidden.subscribe(this.onHideControls.bind(this)));\n this.api.onPlayerReady(this.fsAPI);\n this.onPlayerReady.emit(this.api);\n }\n onChangeFullscreen(fsState) {\n if (!this.fsAPI.nativeFullscreen) {\n this.isFullscreen = fsState;\n this.zIndex = fsState ? VgUtilsService.getZIndex().toString() : 'auto';\n } else {\n this.isNativeFullscreen = fsState;\n }\n }\n onHideControls(hidden) {\n this.areControlsHidden = hidden;\n }\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgPlayerComponent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgPlayerComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(VgApiService), i0.ɵɵdirectiveInject(VgFullscreenApiService), i0.ɵɵdirectiveInject(VgControlsHiddenService));\n };\n }\n /** @nocollapse */\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: VgPlayerComponent,\n selectors: [[\"vg-player\"]],\n contentQueries: function VgPlayerComponent_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, VgMediaDirective, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.medias = _t);\n }\n },\n hostVars: 8,\n hostBindings: function VgPlayerComponent_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵstyleProp(\"z-index\", ctx.zIndex);\n i0.ɵɵclassProp(\"fullscreen\", ctx.isFullscreen)(\"native-fullscreen\", ctx.isNativeFullscreen)(\"controls-hidden\", ctx.areControlsHidden);\n }\n },\n outputs: {\n onPlayerReady: \"onPlayerReady\",\n onMediaReady: \"onMediaReady\"\n },\n standalone: false,\n features: [i0.ɵɵProvidersFeature([VgApiService, VgFullscreenApiService, VgControlsHiddenService])],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function VgPlayerComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n styles: [\"vg-player{font-family:videogular;position:relative;display:flex;width:100%;height:100%;overflow:hidden;background-color:#000}vg-player.fullscreen{position:fixed;left:0;top:0}vg-player.native-fullscreen.controls-hidden{cursor:none}\\n\"],\n encapsulation: 2\n });\n }\n }\n return VgPlayerComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst services = [VgApiService, VgControlsHiddenService, VgFullscreenApiService, VgUtilsService, VgEvents, VgStates];\nconst directives = [VgCuePointsDirective, VgMediaDirective];\nlet VgCoreModule = /*#__PURE__*/(() => {\n class VgCoreModule {\n /** @nocollapse */static {\n this.ɵfac = function VgCoreModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgCoreModule)();\n };\n }\n /** @nocollapse */\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: VgCoreModule\n });\n }\n /** @nocollapse */\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n providers: [...services],\n imports: [CommonModule]\n });\n }\n }\n return VgCoreModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass VgMediaElement {\n get audioTracks() {\n return null;\n }\n // @ts-ignore\n addTextTrack(kind, label, language) {\n return null;\n }\n // @ts-ignore\n canPlayType(type) {\n return null;\n }\n load() {}\n msClearEffects() {}\n msGetAsCastingSource() {\n return null;\n }\n // @ts-ignore\n msInsertAudioEffect(_activatableClassId, _effectRequired, _config) {}\n // @ts-ignore\n msSetMediaProtectionManager(mediaProtectionManager) {}\n pause() {}\n play() {\n return null;\n }\n // @ts-ignore\n setMediaKeys(mediaKeys) {\n return null;\n }\n // @ts-ignore\n addEventListener(_type, _listener, _useCapture) {}\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { VgApiService, VgControlsHiddenService, VgCoreModule, VgCuePointsDirective, VgEvents, VgFullscreenApiService, VgMediaDirective, VgMediaElement, VgPlayerComponent, VgStates, VgUtilsService };\n","import * as i0 from '@angular/core';\nimport { Component, ViewEncapsulation, HostBinding, Input, ViewChild, HostListener, Pipe, EventEmitter, Output, NgModule } from '@angular/core';\nimport * as i2 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport { fromEvent } from 'rxjs';\nimport * as i1 from '@videogular/ngx-videogular/core';\nimport { VgStates, VgApiService, VgCoreModule } from '@videogular/ngx-videogular/core';\nconst _c0 = [\"*\"];\nconst _c1 = [\"volumeBar\"];\nconst _c2 = a0 => ({\n dragging: a0\n});\nfunction VgTrackSelectorComponent_option_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"option\", 4);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const track_r1 = ctx.$implicit;\n i0.ɵɵproperty(\"value\", track_r1.id)(\"selected\", track_r1.selected === true);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", track_r1.label, \" \");\n }\n}\nfunction VgTimeDisplayComponent_span_0_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\");\n i0.ɵɵtext(1, \"LIVE\");\n i0.ɵɵelementEnd();\n }\n}\nfunction VgTimeDisplayComponent_span_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\");\n i0.ɵɵtext(1);\n i0.ɵɵpipe(2, \"vgUtc\");\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r0 = i0.ɵɵnextContext();\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(2, 1, ctx_r0.getTime(), ctx_r0.vgFormat));\n }\n}\nfunction VgQualitySelectorComponent_option_4_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"option\", 4);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const bitrate_r1 = ctx.$implicit;\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"value\", bitrate_r1.qualityIndex)(\"selected\", bitrate_r1.qualityIndex === (ctx_r1.bitrateSelected == null ? null : ctx_r1.bitrateSelected.qualityIndex));\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", bitrate_r1.label, \" \");\n }\n}\nfunction VgScrubBarCuePointsComponent_span_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"span\", 2);\n }\n if (rf & 2) {\n const cp_r1 = ctx.$implicit;\n i0.ɵɵstyleProp(\"width\", cp_r1.$$style == null ? null : cp_r1.$$style.width)(\"left\", cp_r1.$$style == null ? null : cp_r1.$$style.left);\n }\n}\nfunction VgScrubBarCurrentTimeComponent_span_1_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"span\", 2);\n }\n}\nlet VgControlsComponent = /*#__PURE__*/(() => {\n class VgControlsComponent {\n // @ts-ignore\n constructor(API, ref, hidden) {\n this.API = API;\n this.hidden = hidden;\n this.isAdsPlaying = 'initial';\n this.hideControls = false;\n this.vgAutohide = false;\n this.vgAutohideTime = 3;\n this.subscriptions = [];\n this.elem = ref.nativeElement;\n }\n ngOnInit() {\n this.mouseMove$ = fromEvent(this.API.videogularElement, 'mousemove');\n this.subscriptions.push(this.mouseMove$.subscribe(this.show.bind(this)));\n this.touchStart$ = fromEvent(this.API.videogularElement, 'touchstart');\n this.subscriptions.push(this.touchStart$.subscribe(this.show.bind(this)));\n this.mouseClick$ = fromEvent(this.API.videogularElement, 'click');\n this.subscriptions.push(this.mouseClick$.subscribe(this.show.bind(this)));\n if (this.API.isPlayerReady) {\n this.onPlayerReady();\n } else {\n this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n }\n }\n onPlayerReady() {\n this.target = this.API.getMediaById(this.vgFor);\n this.subscriptions.push(this.target.subscriptions.play.subscribe(this.onPlay.bind(this)));\n this.subscriptions.push(this.target.subscriptions.pause.subscribe(this.onPause.bind(this)));\n this.subscriptions.push(this.target.subscriptions.startAds.subscribe(this.onStartAds.bind(this)));\n this.subscriptions.push(this.target.subscriptions.endAds.subscribe(this.onEndAds.bind(this)));\n }\n ngAfterViewInit() {\n if (this.vgAutohide) {\n this.hide();\n } else {\n this.show();\n }\n }\n onPlay() {\n if (this.vgAutohide) {\n this.hide();\n }\n }\n onPause() {\n clearTimeout(this.timer);\n this.hideControls = false;\n this.hidden.state(false);\n }\n onStartAds() {\n this.isAdsPlaying = 'none';\n }\n onEndAds() {\n this.isAdsPlaying = 'initial';\n }\n hide() {\n if (this.vgAutohide) {\n clearTimeout(this.timer);\n this.hideAsync();\n }\n }\n show() {\n clearTimeout(this.timer);\n this.hideControls = false;\n this.hidden.state(false);\n if (this.vgAutohide) {\n this.hideAsync();\n }\n }\n hideAsync() {\n if (this.API.state === VgStates.VG_PLAYING) {\n this.timer = setTimeout(() => {\n this.hideControls = true;\n this.hidden.state(true);\n }, this.vgAutohideTime * 1000);\n }\n }\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgControlsComponent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgControlsComponent)(i0.ɵɵdirectiveInject(i1.VgApiService), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.VgControlsHiddenService));\n };\n }\n /** @nocollapse */\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: VgControlsComponent,\n selectors: [[\"vg-controls\"]],\n hostVars: 4,\n hostBindings: function VgControlsComponent_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵstyleProp(\"pointer-events\", ctx.isAdsPlaying);\n i0.ɵɵclassProp(\"hide\", ctx.hideControls);\n }\n },\n inputs: {\n vgFor: \"vgFor\",\n vgAutohide: \"vgAutohide\",\n vgAutohideTime: \"vgAutohideTime\"\n },\n standalone: false,\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function VgControlsComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n styles: [\"vg-controls{position:absolute;display:flex;width:100%;height:50px;z-index:300;bottom:0;background-color:#00000080;-webkit-transition:bottom 1s;-khtml-transition:bottom 1s;-moz-transition:bottom 1s;-ms-transition:bottom 1s;transition:bottom 1s}vg-controls.hide{bottom:-50px}\\n\"],\n encapsulation: 2\n });\n }\n }\n return VgControlsComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgVolumeComponent = /*#__PURE__*/(() => {\n class VgVolumeComponent {\n constructor(ref, API) {\n this.API = API;\n this.subscriptions = [];\n this.elem = ref.nativeElement;\n this.isDragging = false;\n }\n ngOnInit() {\n if (this.API.isPlayerReady) {\n this.onPlayerReady();\n } else {\n this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n }\n }\n onPlayerReady() {\n this.target = this.API.getMediaById(this.vgFor);\n this.ariaValue = this.getVolume() * 100;\n }\n onClick(event) {\n this.setVolume(this.calculateVolume(event.clientX));\n }\n onMouseDown(event) {\n this.mouseDownPosX = event.clientX;\n this.isDragging = true;\n }\n onDrag(event) {\n if (this.isDragging) {\n this.setVolume(this.calculateVolume(event.clientX));\n }\n }\n onStopDrag(event) {\n if (this.isDragging) {\n this.isDragging = false;\n if (this.mouseDownPosX === event.clientX) {\n this.setVolume(this.calculateVolume(event.clientX));\n }\n }\n }\n arrowAdjustVolume(event) {\n if (event.keyCode === 38 || event.keyCode === 39) {\n event.preventDefault();\n this.setVolume(Math.max(0, Math.min(100, this.getVolume() * 100 + 10)));\n } else if (event.keyCode === 37 || event.keyCode === 40) {\n event.preventDefault();\n this.setVolume(Math.max(0, Math.min(100, this.getVolume() * 100 - 10)));\n }\n }\n calculateVolume(mousePosX) {\n const recObj = this.volumeBarRef.nativeElement.getBoundingClientRect();\n const volumeBarOffsetLeft = recObj.left;\n const volumeBarWidth = recObj.width;\n return (mousePosX - volumeBarOffsetLeft) / volumeBarWidth * 100;\n }\n setVolume(vol) {\n this.target.volume = Math.max(0, Math.min(1, vol / 100));\n this.ariaValue = this.target.volume * 100;\n }\n getVolume() {\n return this.target ? this.target.volume : 0;\n }\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgVolumeComponent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgVolumeComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.VgApiService));\n };\n }\n /** @nocollapse */\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: VgVolumeComponent,\n selectors: [[\"vg-volume\"]],\n viewQuery: function VgVolumeComponent_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c1, 7);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.volumeBarRef = _t.first);\n }\n },\n hostBindings: function VgVolumeComponent_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"mousemove\", function VgVolumeComponent_mousemove_HostBindingHandler($event) {\n return ctx.onDrag($event);\n }, false, i0.ɵɵresolveDocument)(\"mouseup\", function VgVolumeComponent_mouseup_HostBindingHandler($event) {\n return ctx.onStopDrag($event);\n }, false, i0.ɵɵresolveDocument)(\"keydown\", function VgVolumeComponent_keydown_HostBindingHandler($event) {\n return ctx.arrowAdjustVolume($event);\n });\n }\n },\n inputs: {\n vgFor: \"vgFor\"\n },\n standalone: false,\n decls: 5,\n vars: 9,\n consts: [[\"volumeBar\", \"\"], [\"tabindex\", \"0\", \"role\", \"slider\", \"aria-label\", \"volume level\", \"aria-level\", \"polite\", \"aria-valuemin\", \"0\", \"aria-valuemax\", \"100\", \"aria-orientation\", \"horizontal\", 1, \"volumeBar\", 3, \"click\", \"mousedown\"], [1, \"volumeBackground\", 3, \"ngClass\"], [1, \"volumeValue\"], [1, \"volumeKnob\"]],\n template: function VgVolumeComponent_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"div\", 1, 0);\n i0.ɵɵlistener(\"click\", function VgVolumeComponent_Template_div_click_0_listener($event) {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx.onClick($event));\n })(\"mousedown\", function VgVolumeComponent_Template_div_mousedown_0_listener($event) {\n i0.ɵɵrestoreView(_r1);\n return i0.ɵɵresetView(ctx.onMouseDown($event));\n });\n i0.ɵɵelementStart(2, \"div\", 2);\n i0.ɵɵelement(3, \"div\", 3)(4, \"div\", 4);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-valuenow\", ctx.ariaValue)(\"aria-valuetext\", ctx.ariaValue + \"%\");\n i0.ɵɵadvance(2);\n i0.ɵɵproperty(\"ngClass\", i0.ɵɵpureFunction1(7, _c2, ctx.isDragging));\n i0.ɵɵadvance();\n i0.ɵɵstyleProp(\"width\", ctx.getVolume() * (100 - 15) + \"%\");\n i0.ɵɵadvance();\n i0.ɵɵstyleProp(\"left\", ctx.getVolume() * (100 - 15) + \"%\");\n }\n },\n dependencies: [i2.NgClass],\n styles: [\"vg-volume{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;justify-content:center;height:50px;width:100px;cursor:pointer;color:#fff;line-height:50px}vg-volume .volumeBar{position:relative;display:flex;flex-grow:1;align-items:center}vg-volume .volumeBackground{display:flex;flex-grow:1;height:5px;pointer-events:none;background-color:#333}vg-volume .volumeValue{display:flex;height:5px;pointer-events:none;background-color:#fff;transition:all .2s ease-out}vg-volume .volumeKnob{position:absolute;width:15px;height:15px;left:0;top:50%;transform:translateY(-50%);border-radius:15px;pointer-events:none;background-color:#fff;transition:all .2s ease-out}vg-volume .volumeBackground.dragging .volumeValue,vg-volume .volumeBackground.dragging .volumeKnob{transition:none}\\n\"],\n encapsulation: 2\n });\n }\n }\n return VgVolumeComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgTrackSelectorComponent = /*#__PURE__*/(() => {\n class VgTrackSelectorComponent {\n constructor(ref, API) {\n this.API = API;\n this.subscriptions = [];\n this.elem = ref.nativeElement;\n }\n ngOnInit() {\n if (this.API.isPlayerReady) {\n this.onPlayerReady();\n } else {\n this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n }\n }\n onPlayerReady() {\n this.target = this.API.getMediaById(this.vgFor);\n const subs = Array.from(this.API.getMasterMedia().elem.children).filter(item => item.tagName === 'TRACK').filter(item => item.kind === 'subtitles').map(item => ({\n label: item.label,\n selected: item.default === true,\n id: item.srclang\n }));\n this.tracks = [...subs, {\n id: null,\n label: 'Off',\n selected: subs.every(item => item.selected === false)\n }];\n const track = this.tracks.filter(item => item.selected === true)[0];\n this.trackSelected = track.id;\n this.ariaValue = track.label;\n }\n selectTrack(trackId) {\n this.trackSelected = trackId === 'null' ? null : trackId;\n this.ariaValue = 'No track selected';\n Array.from(this.API.getMasterMedia().elem.textTracks).forEach(item => {\n if (item.language === trackId) {\n this.ariaValue = item.label;\n item.mode = 'showing';\n } else {\n item.mode = 'hidden';\n }\n });\n }\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgTrackSelectorComponent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgTrackSelectorComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.VgApiService));\n };\n }\n /** @nocollapse */\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: VgTrackSelectorComponent,\n selectors: [[\"vg-track-selector\"]],\n inputs: {\n vgFor: \"vgFor\"\n },\n standalone: false,\n decls: 5,\n vars: 5,\n consts: [[1, \"container\"], [1, \"track-selected\"], [\"tabindex\", \"0\", \"aria-label\", \"track selector\", 1, \"trackSelector\", 3, \"change\"], [3, \"value\", \"selected\", 4, \"ngFor\", \"ngForOf\"], [3, \"value\", \"selected\"]],\n template: function VgTrackSelectorComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"div\", 1);\n i0.ɵɵtext(2);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(3, \"select\", 2);\n i0.ɵɵlistener(\"change\", function VgTrackSelectorComponent_Template_select_change_3_listener($event) {\n return ctx.selectTrack($event.target.value);\n });\n i0.ɵɵtemplate(4, VgTrackSelectorComponent_option_4_Template, 2, 3, \"option\", 3);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵadvance();\n i0.ɵɵclassProp(\"vg-icon-closed_caption\", !ctx.trackSelected);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", ctx.trackSelected || \"\", \" \");\n i0.ɵɵadvance();\n i0.ɵɵattribute(\"aria-valuetext\", ctx.ariaValue);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngForOf\", ctx.tracks);\n }\n },\n dependencies: [i2.NgForOf],\n styles: [\"vg-track-selector{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;justify-content:center;width:50px;height:50px;cursor:pointer;color:#fff;line-height:50px}vg-track-selector .container{position:relative;display:flex;flex-grow:1;align-items:center;padding:0;margin:5px}vg-track-selector select.trackSelector{width:50px;padding:5px 8px;border:none;background:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;color:transparent;font-size:16px}vg-track-selector select.trackSelector::-ms-expand{display:none}vg-track-selector select.trackSelector option{color:#000}vg-track-selector .track-selected{position:absolute;width:100%;height:50px;top:-6px;text-align:center;text-transform:uppercase;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;padding-top:2px;pointer-events:none}vg-track-selector .vg-icon-closed_caption:before{width:100%}\\n\"],\n encapsulation: 2\n });\n }\n }\n return VgTrackSelectorComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// Workaround until we can use UTC with Angular Date Pipe\nlet VgUtcPipe = /*#__PURE__*/(() => {\n class VgUtcPipe {\n transform(value, format) {\n let date = new Date(value);\n let result = format;\n let ss = date.getUTCSeconds();\n let mm = date.getUTCMinutes();\n let hh = date.getUTCHours();\n if (ss < 10) {\n ss = '0' + ss;\n }\n if (mm < 10) {\n mm = '0' + mm;\n }\n if (hh < 10) {\n hh = '0' + hh;\n }\n result = result.replace(/ss/g, ss);\n result = result.replace(/mm/g, mm);\n result = result.replace(/hh/g, hh);\n return result;\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgUtcPipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgUtcPipe)();\n };\n }\n /** @nocollapse */\n static {\n this.ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n name: \"vgUtc\",\n type: VgUtcPipe,\n pure: true,\n standalone: false\n });\n }\n }\n return VgUtcPipe;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgTimeDisplayComponent = /*#__PURE__*/(() => {\n class VgTimeDisplayComponent {\n constructor(ref, API) {\n this.API = API;\n this.vgProperty = 'current';\n this.vgFormat = 'mm:ss';\n this.subscriptions = [];\n this.elem = ref.nativeElement;\n }\n ngOnInit() {\n if (this.API.isPlayerReady) {\n this.onPlayerReady();\n } else {\n this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n }\n }\n onPlayerReady() {\n this.target = this.API.getMediaById(this.vgFor);\n }\n getTime() {\n let t = 0;\n if (this.target) {\n t = Math.round(this.target.time[this.vgProperty]);\n t = isNaN(t) || this.target.isLive ? 0 : t;\n }\n return t;\n }\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgTimeDisplayComponent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgTimeDisplayComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.VgApiService));\n };\n }\n /** @nocollapse */\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: VgTimeDisplayComponent,\n selectors: [[\"vg-time-display\"]],\n inputs: {\n vgFor: \"vgFor\",\n vgProperty: \"vgProperty\",\n vgFormat: \"vgFormat\"\n },\n standalone: false,\n ngContentSelectors: _c0,\n decls: 3,\n vars: 2,\n consts: [[4, \"ngIf\"]],\n template: function VgTimeDisplayComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵtemplate(0, VgTimeDisplayComponent_span_0_Template, 2, 0, \"span\", 0)(1, VgTimeDisplayComponent_span_1_Template, 3, 4, \"span\", 0);\n i0.ɵɵprojection(2);\n }\n if (rf & 2) {\n i0.ɵɵproperty(\"ngIf\", ctx.target == null ? null : ctx.target.isLive);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", !(ctx.target == null ? null : ctx.target.isLive));\n }\n },\n dependencies: [i2.NgIf, VgUtcPipe],\n styles: [\"vg-time-display{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;justify-content:center;height:50px;width:60px;cursor:pointer;color:#fff;line-height:50px;pointer-events:none;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}\\n\"],\n encapsulation: 2\n });\n }\n }\n return VgTimeDisplayComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgScrubBarComponent = /*#__PURE__*/(() => {\n class VgScrubBarComponent {\n constructor(ref, API, vgControlsHiddenState) {\n this.API = API;\n this.hideScrubBar = false;\n this.vgSlider = true;\n this.isSeeking = false;\n this.wasPlaying = false;\n this.subscriptions = [];\n this.elem = ref.nativeElement;\n this.subscriptions.push(vgControlsHiddenState.isHidden.subscribe(hide => this.onHideScrubBar(hide)));\n }\n ngOnInit() {\n if (this.API.isPlayerReady) {\n this.onPlayerReady();\n } else {\n this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n }\n }\n onPlayerReady() {\n this.target = this.API.getMediaById(this.vgFor);\n }\n seekStart() {\n if (this.target.canPlay) {\n this.isSeeking = true;\n if (this.target.state === VgStates.VG_PLAYING) {\n this.wasPlaying = true;\n }\n this.target.pause();\n }\n }\n seekMove(offset) {\n if (this.isSeeking) {\n const percentage = Math.max(Math.min(offset * 100 / this.elem.scrollWidth, 99.9), 0);\n this.target.time.current = percentage * this.target.time.total / 100;\n this.target.seekTime(percentage, true);\n }\n }\n seekEnd(offset) {\n this.isSeeking = false;\n if (this.target.canPlay) {\n if (offset !== false) {\n const percentage = Math.max(Math.min(offset * 100 / this.elem.scrollWidth, 99.9), 0);\n this.target.seekTime(percentage, true);\n }\n if (this.wasPlaying) {\n this.wasPlaying = false;\n this.target.play();\n }\n }\n }\n touchEnd() {\n this.isSeeking = false;\n if (this.wasPlaying) {\n this.wasPlaying = false;\n this.target.play();\n }\n }\n getTouchOffset(event) {\n let offsetLeft = 0;\n let element = event.target;\n while (element) {\n offsetLeft += element.offsetLeft;\n element = element.offsetParent;\n }\n return event.touches[0].pageX - offsetLeft;\n }\n onMouseDownScrubBar($event) {\n if (this.target) {\n if (!this.target.isLive) {\n if (!this.vgSlider) {\n this.seekEnd($event.offsetX);\n } else {\n this.seekStart();\n }\n }\n }\n }\n onMouseMoveScrubBar($event) {\n if (this.target) {\n if (!this.target.isLive && this.vgSlider && this.isSeeking) {\n this.seekMove($event.offsetX);\n }\n }\n }\n onMouseUpScrubBar($event) {\n if (this.target) {\n if (!this.target.isLive && this.vgSlider && this.isSeeking) {\n this.seekEnd($event.offsetX);\n }\n }\n }\n onTouchStartScrubBar(_$event) {\n if (this.target) {\n if (!this.target.isLive) {\n if (!this.vgSlider) {\n this.seekEnd(false);\n } else {\n this.seekStart();\n }\n }\n }\n }\n onTouchMoveScrubBar($event) {\n if (this.target) {\n if (!this.target.isLive && this.vgSlider && this.isSeeking) {\n this.seekMove(this.getTouchOffset($event));\n }\n }\n }\n // @ts-ignore\n onTouchCancelScrubBar(_$event) {\n if (this.target) {\n if (!this.target.isLive && this.vgSlider && this.isSeeking) {\n this.touchEnd();\n }\n }\n }\n // @ts-ignore\n onTouchEndScrubBar(_$event) {\n if (this.target) {\n if (!this.target.isLive && this.vgSlider && this.isSeeking) {\n this.touchEnd();\n }\n }\n }\n arrowAdjustVolume(event) {\n if (this.target) {\n if (event.keyCode === 38 || event.keyCode === 39) {\n event.preventDefault();\n this.target.seekTime((this.target.time.current + 5000) / 1000, false);\n } else if (event.keyCode === 37 || event.keyCode === 40) {\n event.preventDefault();\n this.target.seekTime((this.target.time.current - 5000) / 1000, false);\n }\n }\n }\n getPercentage() {\n return this.target ? Math.round(this.target.time.current * 100 / this.target.time.total) + '%' : '0%';\n }\n onHideScrubBar(hide) {\n this.hideScrubBar = hide;\n }\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgScrubBarComponent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgScrubBarComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.VgApiService), i0.ɵɵdirectiveInject(i1.VgControlsHiddenService));\n };\n }\n /** @nocollapse */\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: VgScrubBarComponent,\n selectors: [[\"vg-scrub-bar\"]],\n hostVars: 2,\n hostBindings: function VgScrubBarComponent_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"mousedown\", function VgScrubBarComponent_mousedown_HostBindingHandler($event) {\n return ctx.onMouseDownScrubBar($event);\n })(\"mousemove\", function VgScrubBarComponent_mousemove_HostBindingHandler($event) {\n return ctx.onMouseMoveScrubBar($event);\n }, false, i0.ɵɵresolveDocument)(\"mouseup\", function VgScrubBarComponent_mouseup_HostBindingHandler($event) {\n return ctx.onMouseUpScrubBar($event);\n }, false, i0.ɵɵresolveDocument)(\"touchstart\", function VgScrubBarComponent_touchstart_HostBindingHandler($event) {\n return ctx.onTouchStartScrubBar($event);\n })(\"touchmove\", function VgScrubBarComponent_touchmove_HostBindingHandler($event) {\n return ctx.onTouchMoveScrubBar($event);\n }, false, i0.ɵɵresolveDocument)(\"touchcancel\", function VgScrubBarComponent_touchcancel_HostBindingHandler($event) {\n return ctx.onTouchCancelScrubBar($event);\n }, false, i0.ɵɵresolveDocument)(\"touchend\", function VgScrubBarComponent_touchend_HostBindingHandler($event) {\n return ctx.onTouchEndScrubBar($event);\n }, false, i0.ɵɵresolveDocument)(\"keydown\", function VgScrubBarComponent_keydown_HostBindingHandler($event) {\n return ctx.arrowAdjustVolume($event);\n });\n }\n if (rf & 2) {\n i0.ɵɵclassProp(\"hide\", ctx.hideScrubBar);\n }\n },\n inputs: {\n vgFor: \"vgFor\",\n vgSlider: \"vgSlider\"\n },\n standalone: false,\n ngContentSelectors: _c0,\n decls: 2,\n vars: 2,\n consts: [[\"tabindex\", \"0\", \"role\", \"slider\", \"aria-label\", \"scrub bar\", \"aria-level\", \"polite\", \"aria-valuemin\", \"0\", \"aria-valuemax\", \"100\", 1, \"scrubBar\"]],\n template: function VgScrubBarComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelementStart(0, \"div\", 0);\n i0.ɵɵprojection(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-valuenow\", ctx.getPercentage())(\"aria-valuetext\", ctx.getPercentage());\n }\n },\n styles: [\"vg-scrub-bar{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:absolute;width:100%;height:5px;bottom:50px;margin:0;cursor:pointer;align-items:center;background:#000000bf;z-index:250;-webkit-transition:bottom 1s,opacity .5s;-khtml-transition:bottom 1s,opacity .5s;-moz-transition:bottom 1s,opacity .5s;-ms-transition:bottom 1s,opacity .5s;transition:bottom 1s,opacity .5s}vg-scrub-bar .scrubBar{position:relative;display:flex;flex-grow:1;align-items:center;height:100%}vg-controls vg-scrub-bar{position:relative;bottom:0;background:transparent;height:50px;flex-grow:1;flex-basis:0;margin:0 10px;-webkit-transition:initial;-khtml-transition:initial;-moz-transition:initial;-ms-transition:initial;transition:initial}vg-scrub-bar.hide{bottom:0;opacity:0}vg-controls vg-scrub-bar.hide{bottom:initial;opacity:initial}\\n\"],\n encapsulation: 2\n });\n }\n }\n return VgScrubBarComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgQualitySelectorComponent = /*#__PURE__*/(() => {\n class VgQualitySelectorComponent {\n constructor(ref, API) {\n this.API = API;\n this.onBitrateChange = new EventEmitter();\n this.subscriptions = [];\n this.elem = ref.nativeElement;\n }\n ngOnInit() {}\n ngOnChanges(changes) {\n if (changes.bitrates.currentValue && changes.bitrates.currentValue.length) {\n this.bitrates.forEach(item => item.label = item.label || Math.round(item.bitrate / 1000).toString());\n }\n }\n selectBitrate(index) {\n this.bitrateSelected = this.bitrates[index];\n this.onBitrateChange.emit(this.bitrates[index]);\n }\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgQualitySelectorComponent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgQualitySelectorComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.VgApiService));\n };\n }\n /** @nocollapse */\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: VgQualitySelectorComponent,\n selectors: [[\"vg-quality-selector\"]],\n inputs: {\n bitrates: \"bitrates\"\n },\n outputs: {\n onBitrateChange: \"onBitrateChange\"\n },\n standalone: false,\n features: [i0.ɵɵNgOnChangesFeature],\n decls: 5,\n vars: 5,\n consts: [[1, \"container\"], [1, \"quality-selected\"], [\"tabindex\", \"0\", \"aria-label\", \"quality selector\", 1, \"quality-selector\", 3, \"change\"], [3, \"value\", \"selected\", 4, \"ngFor\", \"ngForOf\"], [3, \"value\", \"selected\"]],\n template: function VgQualitySelectorComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"div\", 1);\n i0.ɵɵtext(2);\n i0.ɵɵelementEnd();\n i0.ɵɵelementStart(3, \"select\", 2);\n i0.ɵɵlistener(\"change\", function VgQualitySelectorComponent_Template_select_change_3_listener($event) {\n return ctx.selectBitrate($event.target.value);\n });\n i0.ɵɵtemplate(4, VgQualitySelectorComponent_option_4_Template, 2, 3, \"option\", 3);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵadvance();\n i0.ɵɵclassProp(\"vg-icon-hd\", !ctx.bitrateSelected);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", ctx.bitrateSelected == null ? null : ctx.bitrateSelected.label, \" \");\n i0.ɵɵadvance();\n i0.ɵɵattribute(\"aria-valuetext\", ctx.ariaValue);\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngForOf\", ctx.bitrates);\n }\n },\n dependencies: [i2.NgForOf],\n styles: [\"vg-quality-selector{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;justify-content:center;width:50px;height:50px;cursor:pointer;color:#fff;line-height:50px}vg-quality-selector .container{position:relative;display:flex;flex-grow:1;align-items:center;padding:0;margin:5px}vg-quality-selector select.quality-selector{width:50px;padding:5px 8px;border:none;background:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;color:transparent;font-size:16px}vg-quality-selector select.quality-selector::-ms-expand{display:none}vg-quality-selector select.quality-selector option{color:#000}vg-quality-selector .quality-selected{position:absolute;width:100%;height:50px;top:-6px;text-align:center;text-transform:uppercase;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;padding-top:2px;pointer-events:none}vg-quality-selector .vg-icon-closed_caption:before{width:100%}\\n\"],\n encapsulation: 2\n });\n }\n }\n return VgQualitySelectorComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgPlaybackButtonComponent = /*#__PURE__*/(() => {\n class VgPlaybackButtonComponent {\n constructor(ref, API, cdr) {\n this.API = API;\n this.cdr = cdr;\n this.subscriptions = [];\n this.ariaValue = 1;\n this.elem = ref.nativeElement;\n this.playbackValues = ['0.5', '1.0', '1.5', '2.0'];\n this.playbackIndex = 1;\n }\n ngOnInit() {\n if (this.API.isPlayerReady) {\n this.onPlayerReady();\n } else {\n this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n }\n }\n onPlayerReady() {\n this.target = this.API.getMediaById(this.vgFor);\n }\n onClick() {\n this.updatePlaybackSpeed();\n }\n onKeyDown(event) {\n // On press Enter (13) or Space (32)\n if (event.keyCode === 13 || event.keyCode === 32) {\n event.preventDefault();\n this.updatePlaybackSpeed();\n }\n }\n updatePlaybackSpeed() {\n this.playbackValues.forEach((playbackValue, index) => {\n if (playbackValue.length === 1) {\n this.playbackValues[index] = playbackValue + '.0';\n }\n });\n this.playbackIndex = ++this.playbackIndex % this.playbackValues.length;\n if (this.target instanceof VgApiService) {\n this.target.playbackRate = this.playbackValues[this.playbackIndex];\n } else {\n this.target.playbackRate[this.vgFor] = this.playbackValues[this.playbackIndex];\n }\n this.detectChanges();\n }\n getPlaybackRate() {\n this.ariaValue = this.target ? this.target.playbackRate : 1.0;\n return this.ariaValue;\n }\n detectChanges() {\n try {\n this.cdr.detectChanges();\n } catch (e) {\n console.warn(e);\n }\n }\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgPlaybackButtonComponent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgPlaybackButtonComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.VgApiService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef));\n };\n }\n /** @nocollapse */\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: VgPlaybackButtonComponent,\n selectors: [[\"vg-playback-button\"]],\n hostBindings: function VgPlaybackButtonComponent_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function VgPlaybackButtonComponent_click_HostBindingHandler() {\n return ctx.onClick();\n })(\"keydown\", function VgPlaybackButtonComponent_keydown_HostBindingHandler($event) {\n return ctx.onKeyDown($event);\n });\n }\n },\n inputs: {\n vgFor: \"vgFor\",\n playbackValues: \"playbackValues\"\n },\n standalone: false,\n decls: 2,\n vars: 2,\n consts: [[\"tabindex\", \"0\", \"role\", \"button\", \"aria-label\", \"playback speed\", 1, \"button\"]],\n template: function VgPlaybackButtonComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"span\", 0);\n i0.ɵɵtext(1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-valuetext\", ctx.ariaValue);\n i0.ɵɵadvance();\n i0.ɵɵtextInterpolate1(\" \", ctx.getPlaybackRate(), \"x \");\n }\n },\n styles: [\"vg-playback-button{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;justify-content:center;height:50px;width:50px;cursor:pointer;color:#fff;line-height:50px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}vg-playback-button .button{display:flex;align-items:center;justify-content:center;width:50px}\\n\"],\n encapsulation: 2\n });\n }\n }\n return VgPlaybackButtonComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgPlayPauseComponent = /*#__PURE__*/(() => {\n class VgPlayPauseComponent {\n constructor(ref, API) {\n this.API = API;\n this.subscriptions = [];\n this.ariaValue = VgStates.VG_PAUSED;\n this.elem = ref.nativeElement;\n }\n ngOnInit() {\n if (this.API.isPlayerReady) {\n this.onPlayerReady();\n } else {\n this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n }\n }\n onPlayerReady() {\n this.target = this.API.getMediaById(this.vgFor);\n }\n onClick() {\n this.playPause();\n }\n onKeyDown(event) {\n // On press Enter (13) or Space (32)\n if (event.keyCode === 13 || event.keyCode === 32) {\n event.preventDefault();\n this.playPause();\n }\n }\n playPause() {\n const state = this.getState();\n switch (state) {\n case VgStates.VG_PLAYING:\n this.target.pause();\n break;\n case VgStates.VG_PAUSED:\n case VgStates.VG_ENDED:\n this.target.play();\n break;\n }\n }\n getState() {\n this.ariaValue = this.target ? this.target.state : VgStates.VG_PAUSED;\n return this.ariaValue;\n }\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgPlayPauseComponent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgPlayPauseComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.VgApiService));\n };\n }\n /** @nocollapse */\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: VgPlayPauseComponent,\n selectors: [[\"vg-play-pause\"]],\n hostBindings: function VgPlayPauseComponent_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function VgPlayPauseComponent_click_HostBindingHandler() {\n return ctx.onClick();\n })(\"keydown\", function VgPlayPauseComponent_keydown_HostBindingHandler($event) {\n return ctx.onKeyDown($event);\n });\n }\n },\n inputs: {\n vgFor: \"vgFor\"\n },\n standalone: false,\n decls: 1,\n vars: 6,\n consts: [[\"tabindex\", \"0\", \"role\", \"button\", 1, \"icon\"]],\n template: function VgPlayPauseComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 0);\n }\n if (rf & 2) {\n i0.ɵɵclassProp(\"vg-icon-pause\", ctx.getState() === \"playing\")(\"vg-icon-play_arrow\", ctx.getState() === \"paused\" || ctx.getState() === \"ended\");\n i0.ɵɵattribute(\"aria-label\", ctx.getState() === \"paused\" ? \"play\" : \"pause\")(\"aria-valuetext\", ctx.ariaValue);\n }\n },\n styles: [\"vg-play-pause{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;justify-content:center;height:50px;width:50px;cursor:pointer;color:#fff;line-height:50px}vg-play-pause .icon{pointer-events:none}\\n\"],\n encapsulation: 2\n });\n }\n }\n return VgPlayPauseComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgMuteComponent = /*#__PURE__*/(() => {\n class VgMuteComponent {\n constructor(ref, API) {\n this.API = API;\n this.subscriptions = [];\n this.ariaValue = 'unmuted';\n this.elem = ref.nativeElement;\n }\n ngOnInit() {\n if (this.API.isPlayerReady) {\n this.onPlayerReady();\n } else {\n this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n }\n }\n onPlayerReady() {\n this.target = this.API.getMediaById(this.vgFor);\n this.currentVolume = this.target.volume;\n }\n onClick() {\n this.changeMuteState();\n }\n onKeyDown(event) {\n // On press Enter (13) or Space (32)\n if (event.keyCode === 13 || event.keyCode === 32) {\n event.preventDefault();\n this.changeMuteState();\n }\n }\n changeMuteState() {\n const volume = this.getVolume();\n if (volume === 0) {\n if (this.target.volume === 0 && this.currentVolume === 0) {\n this.currentVolume = 1;\n }\n this.target.volume = this.currentVolume;\n } else {\n this.currentVolume = volume;\n this.target.volume = 0;\n }\n }\n getVolume() {\n const volume = this.target ? this.target.volume : 0;\n this.ariaValue = volume ? 'unmuted' : 'muted';\n return volume;\n }\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgMuteComponent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgMuteComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.VgApiService));\n };\n }\n /** @nocollapse */\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: VgMuteComponent,\n selectors: [[\"vg-mute\"]],\n hostBindings: function VgMuteComponent_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function VgMuteComponent_click_HostBindingHandler() {\n return ctx.onClick();\n })(\"keydown\", function VgMuteComponent_keydown_HostBindingHandler($event) {\n return ctx.onKeyDown($event);\n });\n }\n },\n inputs: {\n vgFor: \"vgFor\"\n },\n standalone: false,\n decls: 1,\n vars: 9,\n consts: [[\"tabindex\", \"0\", \"role\", \"button\", \"aria-label\", \"mute\", 1, \"icon\"]],\n template: function VgMuteComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 0);\n }\n if (rf & 2) {\n i0.ɵɵclassProp(\"vg-icon-volume_up\", ctx.getVolume() >= 0.75)(\"vg-icon-volume_down\", ctx.getVolume() >= 0.25 && ctx.getVolume() < 0.75)(\"vg-icon-volume_mute\", ctx.getVolume() > 0 && ctx.getVolume() < 0.25)(\"vg-icon-volume_off\", ctx.getVolume() === 0);\n i0.ɵɵattribute(\"aria-valuetext\", ctx.ariaValue);\n }\n },\n styles: [\"vg-mute{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;justify-content:center;height:50px;width:50px;cursor:pointer;color:#fff;line-height:50px}vg-mute .icon{pointer-events:none}\\n\"],\n encapsulation: 2\n });\n }\n }\n return VgMuteComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgFullscreenComponent = /*#__PURE__*/(() => {\n class VgFullscreenComponent {\n constructor(ref, API, fsAPI) {\n this.API = API;\n this.fsAPI = fsAPI;\n this.isFullscreen = false;\n this.subscriptions = [];\n this.ariaValue = 'normal mode';\n this.elem = ref.nativeElement;\n this.subscriptions.push(this.fsAPI.onChangeFullscreen.subscribe(this.onChangeFullscreen.bind(this)));\n }\n ngOnInit() {\n if (this.API.isPlayerReady) {\n this.onPlayerReady();\n } else {\n this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n }\n }\n onPlayerReady() {\n this.target = this.API.getMediaById(this.vgFor);\n }\n onChangeFullscreen(fsState) {\n this.ariaValue = fsState ? 'fullscreen mode' : 'normal mode';\n this.isFullscreen = fsState;\n }\n onClick() {\n this.changeFullscreenState();\n }\n onKeyDown(event) {\n // On press Enter (13) or Space (32)\n if (event.keyCode === 13 || event.keyCode === 32) {\n event.preventDefault();\n this.changeFullscreenState();\n }\n }\n changeFullscreenState() {\n let element = this.target;\n if (this.target instanceof VgApiService) {\n element = null;\n }\n this.fsAPI.toggleFullscreen(element);\n }\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgFullscreenComponent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgFullscreenComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.VgApiService), i0.ɵɵdirectiveInject(i1.VgFullscreenApiService));\n };\n }\n /** @nocollapse */\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: VgFullscreenComponent,\n selectors: [[\"vg-fullscreen\"]],\n hostBindings: function VgFullscreenComponent_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function VgFullscreenComponent_click_HostBindingHandler() {\n return ctx.onClick();\n })(\"keydown\", function VgFullscreenComponent_keydown_HostBindingHandler($event) {\n return ctx.onKeyDown($event);\n });\n }\n },\n standalone: false,\n decls: 1,\n vars: 5,\n consts: [[\"tabindex\", \"0\", \"role\", \"button\", \"aria-label\", \"fullscreen\", 1, \"icon\"]],\n template: function VgFullscreenComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 0);\n }\n if (rf & 2) {\n i0.ɵɵclassProp(\"vg-icon-fullscreen\", !ctx.isFullscreen)(\"vg-icon-fullscreen_exit\", ctx.isFullscreen);\n i0.ɵɵattribute(\"aria-valuetext\", ctx.ariaValue);\n }\n },\n styles: [\"vg-fullscreen{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;justify-content:center;height:50px;width:50px;cursor:pointer;color:#fff;line-height:50px}vg-fullscreen .icon{pointer-events:none}\\n\"],\n encapsulation: 2\n });\n }\n }\n return VgFullscreenComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgScrubBarBufferingTimeComponent = /*#__PURE__*/(() => {\n class VgScrubBarBufferingTimeComponent {\n constructor(ref, API) {\n this.API = API;\n this.subscriptions = [];\n this.elem = ref.nativeElement;\n }\n ngOnInit() {\n if (this.API.isPlayerReady) {\n this.onPlayerReady();\n } else {\n this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n }\n }\n onPlayerReady() {\n this.target = this.API.getMediaById(this.vgFor);\n }\n getBufferTime() {\n let bufferTime = '0%';\n if (this.target?.buffered?.length) {\n if (this.target.time.total === 0) {\n bufferTime = '0%';\n } else {\n bufferTime = this.target.buffer.end / this.target.time.total * 100 + '%';\n }\n }\n return bufferTime;\n }\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgScrubBarBufferingTimeComponent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgScrubBarBufferingTimeComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.VgApiService));\n };\n }\n /** @nocollapse */\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: VgScrubBarBufferingTimeComponent,\n selectors: [[\"vg-scrub-bar-buffering-time\"]],\n inputs: {\n vgFor: \"vgFor\"\n },\n standalone: false,\n decls: 1,\n vars: 2,\n consts: [[1, \"background\"]],\n template: function VgScrubBarBufferingTimeComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 0);\n }\n if (rf & 2) {\n i0.ɵɵstyleProp(\"width\", ctx.getBufferTime());\n }\n },\n styles: [\"vg-scrub-bar-buffering-time{display:flex;width:100%;height:5px;pointer-events:none;position:absolute}vg-scrub-bar-buffering-time .background{background-color:#ffffff4d}vg-controls vg-scrub-bar-buffering-time{position:absolute;top:calc(50% - 3px)}vg-controls vg-scrub-bar-buffering-time .background{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}\\n\"],\n encapsulation: 2\n });\n }\n }\n return VgScrubBarBufferingTimeComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// tslint:disable-next-line: no-conflicting-lifecycle\nlet VgScrubBarCuePointsComponent = /*#__PURE__*/(() => {\n class VgScrubBarCuePointsComponent {\n constructor(ref, API) {\n this.API = API;\n this.onLoadedMetadataCalled = false;\n this.cuePoints = [];\n this.subscriptions = [];\n this.totalCues = 0;\n this.elem = ref.nativeElement;\n }\n ngOnInit() {\n if (this.API.isPlayerReady) {\n this.onPlayerReady();\n } else {\n this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n }\n }\n onPlayerReady() {\n this.target = this.API.getMediaById(this.vgFor);\n const onTimeUpdate = this.target.subscriptions.loadedMetadata;\n this.subscriptions.push(onTimeUpdate.subscribe(this.onLoadedMetadata.bind(this)));\n if (this.onLoadedMetadataCalled) {\n this.onLoadedMetadata();\n }\n }\n onLoadedMetadata() {\n if (this.vgCuePoints) {\n // We need to transform the TextTrackCueList to Array or it doesn't work on IE11/Edge.\n // See: https://github.com/videogular/videogular2/issues/369\n this.cuePoints = [];\n for (let i = 0, l = this.vgCuePoints.length; i < l; i++) {\n const end = this.vgCuePoints[i].endTime >= 0 ? this.vgCuePoints[i].endTime : this.vgCuePoints[i].startTime + 1;\n const cuePointDuration = (end - this.vgCuePoints[i].startTime) * 1000;\n let position = '0';\n let percentWidth = '0';\n if (typeof cuePointDuration === 'number' && this.target.time.total) {\n percentWidth = cuePointDuration * 100 / this.target.time.total + '%';\n position = this.vgCuePoints[i].startTime * 100 / Math.round(this.target.time.total / 1000) + '%';\n }\n this.vgCuePoints[i].$$style = {\n width: percentWidth,\n left: position\n };\n this.cuePoints.push(this.vgCuePoints[i]);\n }\n }\n }\n updateCuePoints() {\n if (!this.target) {\n this.onLoadedMetadataCalled = true;\n return;\n }\n this.onLoadedMetadata();\n }\n ngOnChanges(changes) {\n if (changes.vgCuePoints.currentValue) {\n this.updateCuePoints();\n }\n }\n ngDoCheck() {\n if (this.vgCuePoints) {\n const changes = this.totalCues !== this.vgCuePoints.length;\n if (changes) {\n this.totalCues = this.vgCuePoints.length;\n this.updateCuePoints();\n }\n }\n }\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgScrubBarCuePointsComponent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgScrubBarCuePointsComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.VgApiService));\n };\n }\n /** @nocollapse */\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: VgScrubBarCuePointsComponent,\n selectors: [[\"vg-scrub-bar-cue-points\"]],\n inputs: {\n vgCuePoints: \"vgCuePoints\",\n vgFor: \"vgFor\"\n },\n standalone: false,\n features: [i0.ɵɵNgOnChangesFeature],\n decls: 2,\n vars: 1,\n consts: [[1, \"cue-point-container\"], [\"class\", \"cue-point\", 3, \"width\", \"left\", 4, \"ngFor\", \"ngForOf\"], [1, \"cue-point\"]],\n template: function VgScrubBarCuePointsComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0);\n i0.ɵɵtemplate(1, VgScrubBarCuePointsComponent_span_1_Template, 1, 4, \"span\", 1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngForOf\", ctx.cuePoints);\n }\n },\n dependencies: [i2.NgForOf],\n styles: [\"vg-scrub-bar-cue-points{display:flex;width:100%;height:5px;pointer-events:none;position:absolute}vg-scrub-bar-cue-points .cue-point-container .cue-point{position:absolute;height:5px;background-color:#ffcc00b3}vg-controls vg-scrub-bar-cue-points{position:absolute;top:calc(50% - 3px)}\\n\"],\n encapsulation: 2\n });\n }\n }\n return VgScrubBarCuePointsComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgScrubBarCurrentTimeComponent = /*#__PURE__*/(() => {\n class VgScrubBarCurrentTimeComponent {\n constructor(ref, API) {\n this.API = API;\n this.vgSlider = false;\n this.subscriptions = [];\n this.elem = ref.nativeElement;\n }\n ngOnInit() {\n if (this.API.isPlayerReady) {\n this.onPlayerReady();\n } else {\n this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n }\n }\n onPlayerReady() {\n this.target = this.API.getMediaById(this.vgFor);\n }\n getPercentage() {\n return this.target ? Math.round(this.target.time.current * 100 / this.target.time.total) + '%' : '0%';\n }\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgScrubBarCurrentTimeComponent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgScrubBarCurrentTimeComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.VgApiService));\n };\n }\n /** @nocollapse */\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: VgScrubBarCurrentTimeComponent,\n selectors: [[\"vg-scrub-bar-current-time\"]],\n inputs: {\n vgFor: \"vgFor\",\n vgSlider: \"vgSlider\"\n },\n standalone: false,\n decls: 2,\n vars: 3,\n consts: [[1, \"background\"], [\"class\", \"slider\", 4, \"ngIf\"], [1, \"slider\"]],\n template: function VgScrubBarCurrentTimeComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelement(0, \"div\", 0);\n i0.ɵɵtemplate(1, VgScrubBarCurrentTimeComponent_span_1_Template, 1, 0, \"span\", 1);\n }\n if (rf & 2) {\n i0.ɵɵstyleProp(\"width\", ctx.getPercentage());\n i0.ɵɵadvance();\n i0.ɵɵproperty(\"ngIf\", ctx.vgSlider);\n }\n },\n dependencies: [i2.NgIf],\n styles: [\"vg-scrub-bar-current-time{display:flex;width:100%;height:5px;pointer-events:none;position:absolute}vg-scrub-bar-current-time .background{background-color:#fff}vg-controls vg-scrub-bar-current-time{position:absolute;top:calc(50% - 3px);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}vg-controls vg-scrub-bar-current-time .background{border:1px solid white;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}vg-scrub-bar-current-time .slider{background:#fff;height:15px;width:15px;border-radius:50%;box-shadow:0 0 10px #000;margin-top:-5px;margin-left:-10px}\\n\"],\n encapsulation: 2\n });\n }\n }\n return VgScrubBarCurrentTimeComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst components = [VgControlsComponent, VgVolumeComponent, VgTrackSelectorComponent, VgTimeDisplayComponent, VgScrubBarComponent, VgQualitySelectorComponent, VgPlaybackButtonComponent, VgPlayPauseComponent, VgMuteComponent, VgFullscreenComponent, VgUtcPipe, VgScrubBarBufferingTimeComponent, VgScrubBarCuePointsComponent, VgScrubBarCurrentTimeComponent];\nlet VgControlsModule = /*#__PURE__*/(() => {\n class VgControlsModule {\n /** @nocollapse */static {\n this.ɵfac = function VgControlsModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgControlsModule)();\n };\n }\n /** @nocollapse */\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: VgControlsModule\n });\n }\n /** @nocollapse */\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [CommonModule, VgCoreModule]\n });\n }\n }\n return VgControlsModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { VgControlsComponent, VgControlsModule, VgFullscreenComponent, VgMuteComponent, VgPlayPauseComponent, VgPlaybackButtonComponent, VgQualitySelectorComponent, VgScrubBarBufferingTimeComponent, VgScrubBarComponent, VgScrubBarCuePointsComponent, VgScrubBarCurrentTimeComponent, VgTimeDisplayComponent, VgTrackSelectorComponent, VgUtcPipe, VgVolumeComponent };\n","import * as i0 from '@angular/core';\nimport { Component, ViewEncapsulation, Input, HostBinding, HostListener, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport * as i1 from '@videogular/ngx-videogular/core';\nimport { VgStates, VgCoreModule } from '@videogular/ngx-videogular/core';\nlet VgOverlayPlayComponent = /*#__PURE__*/(() => {\n class VgOverlayPlayComponent {\n constructor(ref, API, fsAPI, controlsHidden) {\n this.API = API;\n this.fsAPI = fsAPI;\n this.controlsHidden = controlsHidden;\n this.vgSkipIfControlsHidden = false;\n this.vgSkipIfControlsHiddenDelay = 0.5;\n this.isNativeFullscreen = false;\n this.areControlsHidden = false;\n this.areControlsHiddenChangeTime = 0;\n this.subscriptions = [];\n this.isBuffering = false;\n this.elem = ref.nativeElement;\n }\n ngOnInit() {\n if (this.API.isPlayerReady) {\n this.onPlayerReady();\n } else {\n this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n }\n }\n onPlayerReady() {\n this.target = this.API.getMediaById(this.vgFor);\n this.subscriptions.push(this.fsAPI.onChangeFullscreen.subscribe(this.onChangeFullscreen.bind(this)));\n this.subscriptions.push(this.controlsHidden.isHidden.subscribe(this.onHideControls.bind(this)));\n this.subscriptions.push(this.target.subscriptions.bufferDetected.subscribe(isBuffering => this.onUpdateBuffer(isBuffering)));\n }\n onUpdateBuffer(isBuffering) {\n this.isBuffering = isBuffering;\n }\n onChangeFullscreen(fsState) {\n if (this.fsAPI.nativeFullscreen) {\n this.isNativeFullscreen = fsState;\n }\n }\n onHideControls(hidden) {\n if (this.vgSkipIfControlsHidden && this.areControlsHidden != hidden) {\n this.areControlsHiddenChangeTime = Date.now();\n }\n this.areControlsHidden = hidden;\n }\n onClick() {\n if (this.vgSkipIfControlsHidden && (this.areControlsHidden || Date.now() - this.areControlsHiddenChangeTime < this.vgSkipIfControlsHiddenDelay * 1000)) {\n return;\n }\n const state = this.getState();\n switch (state) {\n case VgStates.VG_PLAYING:\n this.target.pause();\n break;\n case VgStates.VG_PAUSED:\n case VgStates.VG_ENDED:\n this.target.play();\n break;\n }\n }\n getState() {\n let state = VgStates.VG_PAUSED;\n if (this.target) {\n if (this.target.state instanceof Array) {\n for (let i = 0, l = this.target.state.length; i < l; i++) {\n if (this.target.state[i] === VgStates.VG_PLAYING) {\n state = VgStates.VG_PLAYING;\n break;\n }\n }\n } else {\n state = this.target.state;\n }\n }\n return state;\n }\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgOverlayPlayComponent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgOverlayPlayComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.VgApiService), i0.ɵɵdirectiveInject(i1.VgFullscreenApiService), i0.ɵɵdirectiveInject(i1.VgControlsHiddenService));\n };\n }\n /** @nocollapse */\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: VgOverlayPlayComponent,\n selectors: [[\"vg-overlay-play\"]],\n hostVars: 2,\n hostBindings: function VgOverlayPlayComponent_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"click\", function VgOverlayPlayComponent_click_HostBindingHandler() {\n return ctx.onClick();\n });\n }\n if (rf & 2) {\n i0.ɵɵclassProp(\"is-buffering\", ctx.isBuffering);\n }\n },\n inputs: {\n vgFor: \"vgFor\",\n vgSkipIfControlsHidden: \"vgSkipIfControlsHidden\",\n vgSkipIfControlsHiddenDelay: \"vgSkipIfControlsHiddenDelay\"\n },\n standalone: false,\n decls: 2,\n vars: 6,\n consts: [[1, \"vg-overlay-play\"], [1, \"overlay-play-container\"]],\n template: function VgOverlayPlayComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0);\n i0.ɵɵelement(1, \"div\", 1);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵclassProp(\"native-fullscreen\", ctx.isNativeFullscreen)(\"controls-hidden\", ctx.areControlsHidden);\n i0.ɵɵadvance();\n i0.ɵɵclassProp(\"vg-icon-play_arrow\", ctx.getState() !== \"playing\");\n }\n },\n styles: [\"vg-overlay-play{z-index:200}vg-overlay-play.is-buffering{display:none}vg-overlay-play .vg-overlay-play{transition:all .5s;cursor:pointer;position:absolute;display:block;color:#fff;width:100%;height:100%;font-size:80px;filter:alpha(opacity=60);opacity:.6}vg-overlay-play .vg-overlay-play.native-fullscreen.controls-hidden{cursor:none}vg-overlay-play .vg-overlay-play .overlay-play-container.vg-icon-play_arrow{pointer-events:none;width:100%;height:100%;position:absolute;display:flex;align-items:center;justify-content:center;font-size:80px}vg-overlay-play .vg-overlay-play:hover{filter:alpha(opacity=100);opacity:1}vg-overlay-play .vg-overlay-play:hover .overlay-play-container.vg-icon-play_arrow:before{transform:scale(1.2)}\\n\"],\n encapsulation: 2\n });\n }\n }\n return VgOverlayPlayComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgOverlayPlayModule = /*#__PURE__*/(() => {\n class VgOverlayPlayModule {\n /** @nocollapse */static {\n this.ɵfac = function VgOverlayPlayModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgOverlayPlayModule)();\n };\n }\n /** @nocollapse */\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: VgOverlayPlayModule\n });\n }\n /** @nocollapse */\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [CommonModule, VgCoreModule]\n });\n }\n }\n return VgOverlayPlayModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { VgOverlayPlayComponent, VgOverlayPlayModule };\n","import * as i0 from '@angular/core';\nimport { Component, ViewEncapsulation, Input, HostBinding, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport * as i1 from '@videogular/ngx-videogular/core';\nimport { VgCoreModule } from '@videogular/ngx-videogular/core';\nlet VgBufferingComponent = /*#__PURE__*/(() => {\n class VgBufferingComponent {\n constructor(ref, API) {\n this.API = API;\n this.checkInterval = 50;\n this.currentPlayPos = 0;\n this.lastPlayPos = 0;\n this.subscriptions = [];\n this.isBuffering = false;\n this.elem = ref.nativeElement;\n }\n ngOnInit() {\n if (this.API.isPlayerReady) {\n this.onPlayerReady();\n } else {\n this.subscriptions.push(this.API.playerReadyEvent.subscribe(() => this.onPlayerReady()));\n }\n }\n onPlayerReady() {\n this.target = this.API.getMediaById(this.vgFor);\n this.subscriptions.push(this.target.subscriptions.bufferDetected.subscribe(isBuffering => this.onUpdateBuffer(isBuffering)));\n }\n onUpdateBuffer(isBuffering) {\n this.isBuffering = isBuffering;\n }\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n /** @nocollapse */\n static {\n this.ɵfac = function VgBufferingComponent_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgBufferingComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.VgApiService));\n };\n }\n /** @nocollapse */\n static {\n this.ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: VgBufferingComponent,\n selectors: [[\"vg-buffering\"]],\n hostVars: 2,\n hostBindings: function VgBufferingComponent_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵclassProp(\"is-buffering\", ctx.isBuffering);\n }\n },\n inputs: {\n vgFor: \"vgFor\"\n },\n standalone: false,\n decls: 3,\n vars: 0,\n consts: [[1, \"vg-buffering\"], [1, \"bufferingContainer\"], [1, \"loadingSpinner\"]],\n template: function VgBufferingComponent_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"div\", 0)(1, \"div\", 1);\n i0.ɵɵelement(2, \"div\", 2);\n i0.ɵɵelementEnd()();\n }\n },\n styles: [\"vg-buffering{display:none;z-index:201}vg-buffering.is-buffering{display:block}.vg-buffering{position:absolute;display:block;width:100%;height:100%}.vg-buffering .bufferingContainer{width:100%;position:absolute;cursor:pointer;top:50%;margin-top:-50px;zoom:1;filter:alpha(opacity=60);opacity:.6}.vg-buffering .loadingSpinner{background-color:#0000;border:5px solid rgba(255,255,255,1);opacity:.9;border-top:5px solid rgba(0,0,0,0);border-left:5px solid rgba(0,0,0,0);border-radius:50px;box-shadow:0 0 35px #fff;width:50px;height:50px;margin:0 auto;-moz-animation:spin .5s infinite linear;-webkit-animation:spin .5s infinite linear}.vg-buffering .loadingSpinner .stop{-webkit-animation-play-state:paused;-moz-animation-play-state:paused}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}to{-moz-transform:rotate(360deg)}}@-moz-keyframes spinoff{0%{-moz-transform:rotate(0deg)}to{-moz-transform:rotate(-360deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@-webkit-keyframes spinoff{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(-360deg)}}\\n\"],\n encapsulation: 2\n });\n }\n }\n return VgBufferingComponent;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet VgBufferingModule = /*#__PURE__*/(() => {\n class VgBufferingModule {\n /** @nocollapse */static {\n this.ɵfac = function VgBufferingModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || VgBufferingModule)();\n };\n }\n /** @nocollapse */\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: VgBufferingModule\n });\n }\n /** @nocollapse */\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n imports: [CommonModule, VgCoreModule]\n });\n }\n }\n return VgBufferingModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { VgBufferingComponent, VgBufferingModule };\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BannersComponent } from './banners.component';\nimport { LazyLoadImageModule } from 'ng-lazyload-image';\nimport { RouterModule } from '@angular/router';\nimport { MaterialBaseModule } from 'src/@omnial/material.base.module';\nimport { PipesModule } from 'src/@omnial/_pipes/pipes.module';\nimport { VgCoreModule } from '@videogular/ngx-videogular/core';\nimport { VgControlsModule } from '@videogular/ngx-videogular/controls';\nimport { VgOverlayPlayModule } from '@videogular/ngx-videogular/overlay-play';\nimport { VgBufferingModule } from '@videogular/ngx-videogular/buffering';\n\n@NgModule({\n imports: [\n CommonModule,\n LazyLoadImageModule,\n MaterialBaseModule,\n RouterModule,\n PipesModule,\n VgCoreModule,\n VgControlsModule,\n VgOverlayPlayModule,\n VgBufferingModule\n ],\n declarations: [BannersComponent],\n exports: [BannersComponent],\n schemas: [ CUSTOM_ELEMENTS_SCHEMA ]\n})\nexport class BannersModule { }\n","import { Product } from \"../catalog/product.model\";\r\nimport { Country, State } from \"../order/country.model\";\r\n\r\nexport class Review {\r\n productId: number;\r\n title: string;\r\n reviewText: string;\r\n replyText: string;\r\n rating: number;\r\n helpfulYesTotal: number;\r\n helpfulNoTotal: number;\r\n created: string;\r\n reviewerName: string;\r\n state: State;\r\n country: Country;\r\n product: Product;\r\n}\r\n\r\nexport class ReviewRequest {\r\n productId: number;\r\n email: string;\r\n name: string;\r\n title: string;\r\n reviewText: string;\r\n rating: number;\r\n token: string;\r\n customerGuid: string;\r\n}\r\n\r\nexport class ReviewResult {\r\n success: boolean;\r\n errors: string[];\r\n customerGuid: string;\r\n}\r\n","import { RepositoryService } from 'src/@omnial/_services/repository.service';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { NgxSpinnerService } from 'ngx-spinner';\r\nimport { Injectable, OnDestroy } from '@angular/core';\r\nimport { ContactResult } from 'src/@omnial/_models/customer/contact.model';\r\nimport { ReviewRequest, ReviewResult } from 'src/@omnial/_models/customer/review.model';\r\n\r\n\r\n@Injectable()\r\nexport class ReviewService implements OnDestroy {\r\n private subscriptions: Subscription[] = [];\r\n\r\n constructor(private repoService: RepositoryService, public spinner: NgxSpinnerService) { }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscriptions && this.subscriptions.length > 0) {\r\n this.subscriptions.forEach((sub) => { sub.unsubscribe(); });\r\n }\r\n }\r\n\r\n public submit(reviewRequest: ReviewRequest): Observable {\r\n this.spinner.show();\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.repoService.create('Review', reviewRequest).subscribe({\r\n next: (res) => {\r\n this.spinner.hide();\r\n const result = res as ReviewResult;\r\n observer.next(result);\r\n observer.complete();\r\n },\r\n error: () => {\r\n this.spinner.hide();\r\n const result = new ReviewResult();\r\n result.errors = [];\r\n result.errors.push('General Server error');\r\n observer.next(result);\r\n observer.complete();\r\n }\r\n }));\r\n });\r\n }\r\n}\r\n","import { Component, Inject, OnDestroy } from '@angular/core';\r\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MatRadioChange } from '@angular/material/radio';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { ReCaptchaV3Service } from 'ng-recaptcha-2';\r\nimport { Subscription } from 'rxjs';\r\nimport { ProductDetail } from 'src/@omnial/_models/catalog/product.model';\r\nimport { Customer } from 'src/@omnial/_models/customer/customer.model';\r\nimport { ReviewRequest, ReviewResult } from 'src/@omnial/_models/customer/review.model';\r\nimport { CustomerService } from 'src/@omnial/_services/customer/customer.service';\r\nimport { ReviewService } from 'src/@omnial/_services/customer/review.service';\r\nimport { EmailRegEx } from 'src/@omnial/_utils/app-validators';\r\nimport { ProductZoomComponent } from 'src/@omnial/pages/product/product-zoom/product-zoom.component';\r\n\r\n@Component({\n selector: 'app-product-review-submit-dialog',\n templateUrl: './../../../app/shared/product-review-submit-dialog/product-review-submit-dialog.component.html',\n styleUrls: ['./../../../app/shared/product-review-submit-dialog/product-review-submit-dialog.component.scss'],\n standalone: false\n})\r\n\r\nexport class ProductReviewSubmitDialogComponent implements OnDestroy {\r\n public noStars = 0;\r\n public reviewed: boolean = false;\r\n public customer: Customer;\r\n public subscriptions: Subscription[] = [];\r\n\r\n public reviewForm = new FormGroup({\r\n rating: new FormControl(null as number, Validators.compose([Validators.required])),\r\n title: new FormControl('', Validators.compose([Validators.required])),\r\n reviewText: new FormControl('', Validators.compose([Validators.required])),\r\n name: new FormControl('', Validators.compose([Validators.required])),\r\n email: new FormControl('', Validators.compose([Validators.required, Validators.email, EmailRegEx]))\r\n });\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public product: ProductDetail,\r\n public customerService: CustomerService,\r\n public recaptchaV3Service: ReCaptchaV3Service,\r\n public reviewService: ReviewService,\r\n public snackBar: MatSnackBar) {\r\n this.subscriptions.push(this.customerService.customer.subscribe((res) => {\r\n if (res) {\r\n this.customer = res as Customer;\r\n this.reviewForm.controls.name.patchValue(this.customer.firstName);\r\n this.reviewForm.controls.email.patchValue(this.customer.email);\r\n }\r\n }));\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscriptions && this.subscriptions.length > 0) {\r\n this.subscriptions.forEach((sub) => { sub.unsubscribe(); });\r\n }\r\n }\r\n\r\n public changeRating(rating: number) {\r\n this.noStars = rating;\r\n this.reviewForm.controls.rating.patchValue(rating);\r\n }\r\n\r\n public changeStars(event: MatRadioChange) {\r\n this.noStars = event.value as number;\r\n }\r\n\r\n public onReviewSubmit(): void {\r\n if (this.reviewForm.valid) {\r\n this.subscriptions.push(this.recaptchaV3Service.execute('ProductReview').subscribe(\r\n token => {\r\n const review = new ReviewRequest();\r\n review.token = token;\r\n review.rating = this.reviewForm.controls.rating.value;\r\n review.title = this.reviewForm.controls.title.value;\r\n review.reviewText = this.reviewForm.controls.reviewText.value;\r\n review.name = this.reviewForm.controls.name.value;\r\n review.email = this.reviewForm.controls.email.value;\r\n review.productId = this.product.id;\r\n if (this.customer) {\r\n review.customerGuid = this.customer.customerGuid;\r\n }\r\n this.subscriptions.push(this.reviewService.submit(review).subscribe(\r\n resetRes => {\r\n const result = resetRes as ReviewResult;\r\n if (result.success) {\r\n if (result.customerGuid && !this.customerService.customer) { // New Guest Customer\r\n const customer = new Customer();\r\n customer.customerGuid = result.customerGuid;\r\n this.customerService.saveCustomerCookie(customer);\r\n }\r\n this.reviewForm.controls.title.patchValue('');\r\n this.reviewForm.controls.reviewText.patchValue('');\r\n this.reviewForm.controls.rating.patchValue(null);\r\n this.reviewed = true;\r\n const infoMessage = 'Your review has been submitted.';\r\n this.snackBar.open(infoMessage, 'X', { panelClass: 'success', verticalPosition: 'top', duration: 6000 });\r\n this.dialogRef.close();\r\n } else {\r\n let errMessage = 'Review submission failed';\r\n if (result.errors?.length > 0) {\r\n for (const error of result.errors) {\r\n errMessage += ` ... ${error}`;\r\n }\r\n }\r\n this.snackBar.open(errMessage, 'X', { panelClass: 'error', verticalPosition: 'top', duration: 3000 });\r\n }\r\n }));\r\n }));\r\n\r\n } else {\r\n const message = 'You seem to have missed something';\r\n this.snackBar.open(message, 'X', { panelClass: 'error', verticalPosition: 'top', duration: 3000 });\r\n }\r\n }\r\n\r\n public close(): void {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","
\r\n \r\n
\r\n
\r\n \r\n

Leave your Review : {{product.name}}

\r\n
\r\n

Your email address will not be published. Required fields are marked *

\r\n
\r\n

\r\n Select Your Rating:\r\n
\r\n \r\n 0 ? 'primary':'accent'\" class=\"mat-icon-lg\" (click)=\"changeRating(1)\">star\r\n 1 ? 'primary':'accent'\" class=\"mat-icon-lg\" (click)=\"changeRating(2)\">star\r\n 2 ? 'primary':'accent'\" class=\"mat-icon-lg\" (click)=\"changeRating(3)\">star\r\n 3 ? 'primary':'accent'\" class=\"mat-icon-lg\" (click)=\"changeRating(4)\">star\r\n 4 ? 'primary':'accent'\" class=\"mat-icon-lg\" (click)=\"changeRating(5)\">star\r\n \r\n
\r\n

\r\n
\r\n
\r\n \r\n \r\n
\r\n sentiment_very_dissatisfied\r\n Very Dissatisfied\r\n
\r\n
\r\n \r\n
\r\n sentiment_dissatisfied\r\n Dissatisfied\r\n
\r\n
\r\n \r\n
\r\n sentiment_neutral\r\n Neutral\r\n
\r\n
\r\n \r\n
\r\n sentiment_satisfied\r\n Satisfied\r\n
\r\n
\r\n \r\n
\r\n sentiment_very_satisfied\r\n Very Satisfied\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Please select a rating\r\n
\r\n
\r\n
\r\n \r\n Your review title\r\n \r\n Review title is required\r\n \r\n
\r\n
\r\n \r\n Your review\r\n \r\n Review Text is required\r\n \r\n
\r\n
\r\n \r\n Your name\r\n \r\n Name is required\r\n \r\n
\r\n
\r\n \r\n Your email\r\n \r\n Invalid email address\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n","import { Component, Input } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { ProductDetail } from 'src/@omnial/_models/catalog/product.model';\r\nimport { ProductReviewSubmitDialogComponent } from '../product-review-submit-dialog/product-review-submit-dialog.component';\r\nimport { AppSettings } from 'src/app/app.settings';\r\nimport { MatDialog } from '@angular/material/dialog';\r\n\r\n@Component({\n selector: 'app-product-review',\n templateUrl: './../../../app/shared/product-review/product-review.component.html',\n styleUrls: ['./../../../app/shared/product-review/product-review.component.scss'],\n standalone: false\n})\r\n\r\nexport class ProductReviewComponent {\r\n @Input() public product: ProductDetail;\r\n @Input() public dialogButton = true;\r\n public subscriptions: Subscription[] = [];\r\n\r\n constructor(public settings: AppSettings, public dialog: MatDialog) { }\r\n\r\n public init(product: ProductDetail) {\r\n this.product = product;\r\n }\r\n\r\n public openSubmitDialog(): void {\r\n this.dialog.open(ProductReviewSubmitDialogComponent, {\r\n data: this.product,\r\n autoFocus: false,\r\n maxHeight: '90vh',\r\n maxWidth: '1000px'\r\n });\r\n }\r\n}\r\n","
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
{{review.title}}
\r\n
\r\n \r\n
\r\n
\r\n

{{review.created | date : 'medium'}}

\r\n

{{review.reviewText}}

\r\n
\r\n
\r\n {{review.reviewerName}} \r\n Anonymous \r\n from {{review.state.abbreviation}}\r\n \r\n verified_userVerified buyer\r\n \r\n
\r\n
\r\n

We Said: {{review.replyText}}

\r\n
\r\n
\r\n
\r\n
\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ProductReviewComponent } from './product-review.component';\nimport { RouterModule } from '@angular/router';\nimport { MaterialBaseModule } from 'src/@omnial/material.base.module';\nimport { RatingModule } from '../rating/rating.module';\nimport { MaterialExtendModule } from 'src/@omnial/material.extend.module';\n\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n MaterialBaseModule,\n MaterialExtendModule,\n RatingModule\n ],\n declarations: [ProductReviewComponent],\n exports: [ProductReviewComponent]\n})\nexport class ProductReviewModule { }\n","import * as i0 from '@angular/core';\nimport { inject, ElementRef, NgZone, EventEmitter, PLATFORM_ID, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Output, Directive, InjectionToken, ContentChildren, NgModule, Injectable } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { BehaviorSubject, Observable, Subject, combineLatest, Subscription } from 'rxjs';\nimport { switchMap, take, map, takeUntil } from 'rxjs/operators';\n\n/** Manages event on a Google Maps object, ensuring that events are added only when necessary. */\nconst _c0 = [\"*\"];\nclass MapEventManager {\n _ngZone;\n /** Pending listeners that were added before the target was set. */\n _pending = [];\n _listeners = [];\n _targetStream = /*#__PURE__*/new BehaviorSubject(undefined);\n /** Clears all currently-registered event listeners. */\n _clearListeners() {\n for (const listener of this._listeners) {\n listener.remove();\n }\n this._listeners = [];\n }\n constructor(_ngZone) {\n this._ngZone = _ngZone;\n }\n /** Gets an observable that adds an event listener to the map when a consumer subscribes to it. */\n getLazyEmitter(name) {\n return this._targetStream.pipe(switchMap(target => {\n const observable = new Observable(observer => {\n // If the target hasn't been initialized yet, cache the observer so it can be added later.\n if (!target) {\n this._pending.push({\n observable,\n observer\n });\n return undefined;\n }\n const listener = target.addListener(name, event => {\n this._ngZone.run(() => observer.next(event));\n });\n // If there's an error when initializing the Maps API (e.g. a wrong API key), it will\n // return a dummy object that returns `undefined` from `addListener` (see #26514).\n if (!listener) {\n observer.complete();\n return undefined;\n }\n this._listeners.push(listener);\n return () => listener.remove();\n });\n return observable;\n }));\n }\n /** Sets the current target that the manager should bind events to. */\n setTarget(target) {\n const currentTarget = this._targetStream.value;\n if (target === currentTarget) {\n return;\n }\n // Clear the listeners from the pre-existing target.\n if (currentTarget) {\n this._clearListeners();\n this._pending = [];\n }\n this._targetStream.next(target);\n // Add the listeners that were bound before the map was initialized.\n this._pending.forEach(subscriber => subscriber.observable.subscribe(subscriber.observer));\n this._pending = [];\n }\n /** Destroys the manager and clears the event listeners. */\n destroy() {\n this._clearListeners();\n this._pending = [];\n this._targetStream.complete();\n }\n}\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/** default options set to the Googleplex */\nconst DEFAULT_OPTIONS = {\n center: {\n lat: 37.421995,\n lng: -122.084092\n },\n zoom: 17,\n // Note: the type conversion here isn't necessary for our CI, but it resolves a g3 failure.\n mapTypeId: 'roadmap'\n};\n/** Arbitrary default height for the map element */\nconst DEFAULT_HEIGHT = '500px';\n/** Arbitrary default width for the map element */\nconst DEFAULT_WIDTH = '500px';\n/**\n * Angular component that renders a Google Map via the Google Maps JavaScript\n * API.\n * @see https://developers.google.com/maps/documentation/javascript/reference/\n */\nlet GoogleMap = /*#__PURE__*/(() => {\n class GoogleMap {\n _elementRef = inject(ElementRef);\n _ngZone = inject(NgZone);\n _eventManager = new MapEventManager(inject(NgZone));\n _mapEl;\n _existingAuthFailureCallback;\n /**\n * The underlying google.maps.Map object\n *\n * See developers.google.com/maps/documentation/javascript/reference/map#Map\n */\n googleMap;\n /** Whether we're currently rendering inside a browser. */\n _isBrowser;\n /** Height of the map. Set this to `null` if you'd like to control the height through CSS. */\n height = DEFAULT_HEIGHT;\n /** Width of the map. Set this to `null` if you'd like to control the width through CSS. */\n width = DEFAULT_WIDTH;\n /**\n * The Map ID of the map. This parameter cannot be set or changed after a map is instantiated.\n * See: https://developers.google.com/maps/documentation/javascript/reference/map#MapOptions.mapId\n */\n mapId;\n /**\n * Type of map that should be rendered. E.g. hybrid map, terrain map etc.\n * See: https://developers.google.com/maps/documentation/javascript/reference/map#MapTypeId\n */\n mapTypeId;\n set center(center) {\n this._center = center;\n }\n _center;\n set zoom(zoom) {\n this._zoom = zoom;\n }\n _zoom;\n set options(options) {\n this._options = options || DEFAULT_OPTIONS;\n }\n _options = DEFAULT_OPTIONS;\n /** Event emitted when the map is initialized. */\n mapInitialized = new EventEmitter();\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/events#auth-errors\n */\n authFailure = new EventEmitter();\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.bounds_changed\n */\n boundsChanged = this._eventManager.getLazyEmitter('bounds_changed');\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.center_changed\n */\n centerChanged = this._eventManager.getLazyEmitter('center_changed');\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.click\n */\n mapClick = this._eventManager.getLazyEmitter('click');\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.dblclick\n */\n mapDblclick = this._eventManager.getLazyEmitter('dblclick');\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.drag\n */\n mapDrag = this._eventManager.getLazyEmitter('drag');\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.dragend\n */\n mapDragend = this._eventManager.getLazyEmitter('dragend');\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.dragstart\n */\n mapDragstart = this._eventManager.getLazyEmitter('dragstart');\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.heading_changed\n */\n headingChanged = this._eventManager.getLazyEmitter('heading_changed');\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.idle\n */\n idle = this._eventManager.getLazyEmitter('idle');\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.maptypeid_changed\n */\n maptypeidChanged = this._eventManager.getLazyEmitter('maptypeid_changed');\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.mousemove\n */\n mapMousemove = this._eventManager.getLazyEmitter('mousemove');\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.mouseout\n */\n mapMouseout = this._eventManager.getLazyEmitter('mouseout');\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.mouseover\n */\n mapMouseover = this._eventManager.getLazyEmitter('mouseover');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/map#Map.projection_changed\n */\n projectionChanged = this._eventManager.getLazyEmitter('projection_changed');\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.rightclick\n */\n mapRightclick = this._eventManager.getLazyEmitter('rightclick');\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.tilesloaded\n */\n tilesloaded = this._eventManager.getLazyEmitter('tilesloaded');\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.tilt_changed\n */\n tiltChanged = this._eventManager.getLazyEmitter('tilt_changed');\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.zoom_changed\n */\n zoomChanged = this._eventManager.getLazyEmitter('zoom_changed');\n constructor() {\n const platformId = inject(PLATFORM_ID);\n this._isBrowser = isPlatformBrowser(platformId);\n if (this._isBrowser) {\n const googleMapsWindow = window;\n if (!googleMapsWindow.google && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Namespace google not found, cannot construct embedded google ' + 'map. Please install the Google Maps JavaScript API: ' + 'https://developers.google.com/maps/documentation/javascript/' + 'tutorial#Loading_the_Maps_API');\n }\n this._existingAuthFailureCallback = googleMapsWindow.gm_authFailure;\n googleMapsWindow.gm_authFailure = () => {\n if (this._existingAuthFailureCallback) {\n this._existingAuthFailureCallback();\n }\n this.authFailure.emit();\n };\n }\n }\n ngOnChanges(changes) {\n if (changes['height'] || changes['width']) {\n this._setSize();\n }\n const googleMap = this.googleMap;\n if (googleMap) {\n if (changes['options']) {\n googleMap.setOptions(this._combineOptions());\n }\n if (changes['center'] && this._center) {\n googleMap.setCenter(this._center);\n }\n // Note that the zoom can be zero.\n if (changes['zoom'] && this._zoom != null) {\n googleMap.setZoom(this._zoom);\n }\n if (changes['mapTypeId'] && this.mapTypeId) {\n googleMap.setMapTypeId(this.mapTypeId);\n }\n }\n }\n ngOnInit() {\n // It should be a noop during server-side rendering.\n if (this._isBrowser) {\n this._mapEl = this._elementRef.nativeElement.querySelector('.map-container');\n this._setSize();\n // Create the object outside the zone so its events don't trigger change detection.\n // We'll bring it back in inside the `MapEventManager` only for the events that the\n // user has subscribed to.\n if (google.maps.Map) {\n this._initialize(google.maps.Map);\n } else {\n this._ngZone.runOutsideAngular(() => {\n google.maps.importLibrary('maps').then(lib => this._initialize(lib.Map));\n });\n }\n }\n }\n _initialize(mapConstructor) {\n this._ngZone.runOutsideAngular(() => {\n this.googleMap = new mapConstructor(this._mapEl, this._combineOptions());\n this._eventManager.setTarget(this.googleMap);\n this.mapInitialized.emit(this.googleMap);\n });\n }\n ngOnDestroy() {\n this.mapInitialized.complete();\n this._eventManager.destroy();\n if (this._isBrowser) {\n const googleMapsWindow = window;\n googleMapsWindow.gm_authFailure = this._existingAuthFailureCallback;\n }\n }\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.fitBounds\n */\n fitBounds(bounds, padding) {\n this._assertInitialized();\n this.googleMap.fitBounds(bounds, padding);\n }\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.panBy\n */\n panBy(x, y) {\n this._assertInitialized();\n this.googleMap.panBy(x, y);\n }\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.panTo\n */\n panTo(latLng) {\n this._assertInitialized();\n this.googleMap.panTo(latLng);\n }\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.panToBounds\n */\n panToBounds(latLngBounds, padding) {\n this._assertInitialized();\n this.googleMap.panToBounds(latLngBounds, padding);\n }\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.getBounds\n */\n getBounds() {\n this._assertInitialized();\n return this.googleMap.getBounds() || null;\n }\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.getCenter\n */\n getCenter() {\n this._assertInitialized();\n return this.googleMap.getCenter();\n }\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.getClickableIcons\n */\n getClickableIcons() {\n this._assertInitialized();\n return this.googleMap.getClickableIcons();\n }\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.getHeading\n */\n getHeading() {\n this._assertInitialized();\n return this.googleMap.getHeading();\n }\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.getMapTypeId\n */\n getMapTypeId() {\n this._assertInitialized();\n return this.googleMap.getMapTypeId();\n }\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.getProjection\n */\n getProjection() {\n this._assertInitialized();\n return this.googleMap.getProjection() || null;\n }\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.getStreetView\n */\n getStreetView() {\n this._assertInitialized();\n return this.googleMap.getStreetView();\n }\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.getTilt\n */\n getTilt() {\n this._assertInitialized();\n return this.googleMap.getTilt();\n }\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.getZoom\n */\n getZoom() {\n this._assertInitialized();\n return this.googleMap.getZoom();\n }\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.controls\n */\n get controls() {\n this._assertInitialized();\n return this.googleMap.controls;\n }\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.data\n */\n get data() {\n this._assertInitialized();\n return this.googleMap.data;\n }\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.mapTypes\n */\n get mapTypes() {\n this._assertInitialized();\n return this.googleMap.mapTypes;\n }\n /**\n * See\n * https://developers.google.com/maps/documentation/javascript/reference/map#Map.overlayMapTypes\n */\n get overlayMapTypes() {\n this._assertInitialized();\n return this.googleMap.overlayMapTypes;\n }\n /** Returns a promise that resolves when the map has been initialized. */\n _resolveMap() {\n return this.googleMap ? Promise.resolve(this.googleMap) : this.mapInitialized.pipe(take(1)).toPromise();\n }\n _setSize() {\n if (this._mapEl) {\n const styles = this._mapEl.style;\n styles.height = this.height === null ? '' : coerceCssPixelValue(this.height) || DEFAULT_HEIGHT;\n styles.width = this.width === null ? '' : coerceCssPixelValue(this.width) || DEFAULT_WIDTH;\n }\n }\n /** Combines the center and zoom and the other map options into a single object */\n _combineOptions() {\n const options = this._options || {};\n return {\n ...options,\n // It's important that we set **some** kind of `center` and `zoom`, otherwise\n // Google Maps will render a blank rectangle which looks broken.\n center: this._center || options.center || DEFAULT_OPTIONS.center,\n zoom: this._zoom ?? options.zoom ?? DEFAULT_OPTIONS.zoom,\n // Passing in an undefined `mapTypeId` seems to break tile loading\n // so make sure that we have some kind of default (see #22082).\n mapTypeId: this.mapTypeId || options.mapTypeId || DEFAULT_OPTIONS.mapTypeId,\n mapId: this.mapId || options.mapId\n };\n }\n /** Asserts that the map has been initialized. */\n _assertInitialized() {\n if (!this.googleMap && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Cannot access Google Map information before the API has been initialized. ' + 'Please wait for the API to load before trying to interact with it.');\n }\n }\n static ɵfac = function GoogleMap_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || GoogleMap)();\n };\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: GoogleMap,\n selectors: [[\"google-map\"]],\n inputs: {\n height: \"height\",\n width: \"width\",\n mapId: \"mapId\",\n mapTypeId: \"mapTypeId\",\n center: \"center\",\n zoom: \"zoom\",\n options: \"options\"\n },\n outputs: {\n mapInitialized: \"mapInitialized\",\n authFailure: \"authFailure\",\n boundsChanged: \"boundsChanged\",\n centerChanged: \"centerChanged\",\n mapClick: \"mapClick\",\n mapDblclick: \"mapDblclick\",\n mapDrag: \"mapDrag\",\n mapDragend: \"mapDragend\",\n mapDragstart: \"mapDragstart\",\n headingChanged: \"headingChanged\",\n idle: \"idle\",\n maptypeidChanged: \"maptypeidChanged\",\n mapMousemove: \"mapMousemove\",\n mapMouseout: \"mapMouseout\",\n mapMouseover: \"mapMouseover\",\n projectionChanged: \"projectionChanged\",\n mapRightclick: \"mapRightclick\",\n tilesloaded: \"tilesloaded\",\n tiltChanged: \"tiltChanged\",\n zoomChanged: \"zoomChanged\"\n },\n exportAs: [\"googleMap\"],\n features: [i0.ɵɵNgOnChangesFeature],\n ngContentSelectors: _c0,\n decls: 2,\n vars: 0,\n consts: [[1, \"map-container\"]],\n template: function GoogleMap_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵelement(0, \"div\", 0);\n i0.ɵɵprojection(1);\n }\n },\n encapsulation: 2,\n changeDetection: 0\n });\n }\n return GoogleMap;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst cssUnitsPattern = /([A-Za-z%]+)$/;\n/** Coerces a value to a CSS pixel value. */\nfunction coerceCssPixelValue(value) {\n if (value == null) {\n return '';\n }\n return cssUnitsPattern.test(value) ? value : `${value}px`;\n}\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\nlet MapBaseLayer = /*#__PURE__*/(() => {\n class MapBaseLayer {\n _map = inject(GoogleMap);\n _ngZone = inject(NgZone);\n constructor() {}\n ngOnInit() {\n if (this._map._isBrowser) {\n this._ngZone.runOutsideAngular(() => {\n this._initializeObject();\n });\n this._assertInitialized();\n this._setMap();\n }\n }\n ngOnDestroy() {\n this._unsetMap();\n }\n _assertInitialized() {\n if (!this._map.googleMap) {\n throw Error('Cannot access Google Map information before the API has been initialized. ' + 'Please wait for the API to load before trying to interact with it.');\n }\n }\n _initializeObject() {}\n _setMap() {}\n _unsetMap() {}\n static ɵfac = function MapBaseLayer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MapBaseLayer)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MapBaseLayer,\n selectors: [[\"map-base-layer\"]],\n exportAs: [\"mapBaseLayer\"]\n });\n }\n return MapBaseLayer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/**\n * Angular component that renders a Google Maps Bicycling Layer via the Google Maps JavaScript API.\n *\n * See developers.google.com/maps/documentation/javascript/reference/map#BicyclingLayer\n */\nlet MapBicyclingLayer = /*#__PURE__*/(() => {\n class MapBicyclingLayer {\n _map = inject(GoogleMap);\n _zone = inject(NgZone);\n /**\n * The underlying google.maps.BicyclingLayer object.\n *\n * See developers.google.com/maps/documentation/javascript/reference/map#BicyclingLayer\n */\n bicyclingLayer;\n /** Event emitted when the bicycling layer is initialized. */\n bicyclingLayerInitialized = new EventEmitter();\n ngOnInit() {\n if (this._map._isBrowser) {\n if (google.maps.BicyclingLayer && this._map.googleMap) {\n this._initialize(this._map.googleMap, google.maps.BicyclingLayer);\n } else {\n this._zone.runOutsideAngular(() => {\n Promise.all([this._map._resolveMap(), google.maps.importLibrary('maps')]).then(([map, lib]) => {\n this._initialize(map, lib.BicyclingLayer);\n });\n });\n }\n }\n }\n _initialize(map, layerConstructor) {\n this._zone.runOutsideAngular(() => {\n this.bicyclingLayer = new layerConstructor();\n this.bicyclingLayerInitialized.emit(this.bicyclingLayer);\n this._assertLayerInitialized();\n this.bicyclingLayer.setMap(map);\n });\n }\n ngOnDestroy() {\n this.bicyclingLayer?.setMap(null);\n }\n _assertLayerInitialized() {\n if (!this.bicyclingLayer) {\n throw Error('Cannot interact with a Google Map Bicycling Layer before it has been initialized. ' + 'Please wait for the Transit Layer to load before trying to interact with it.');\n }\n }\n static ɵfac = function MapBicyclingLayer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MapBicyclingLayer)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MapBicyclingLayer,\n selectors: [[\"map-bicycling-layer\"]],\n outputs: {\n bicyclingLayerInitialized: \"bicyclingLayerInitialized\"\n },\n exportAs: [\"mapBicyclingLayer\"]\n });\n }\n return MapBicyclingLayer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/**\n * Angular component that renders a Google Maps Circle via the Google Maps JavaScript API.\n * @see developers.google.com/maps/documentation/javascript/reference/polygon#Circle\n */\nlet MapCircle = /*#__PURE__*/(() => {\n class MapCircle {\n _map = inject(GoogleMap);\n _ngZone = inject(NgZone);\n _eventManager = new MapEventManager(inject(NgZone));\n _options = new BehaviorSubject({});\n _center = new BehaviorSubject(undefined);\n _radius = new BehaviorSubject(undefined);\n _destroyed = new Subject();\n /**\n * Underlying google.maps.Circle object.\n *\n * @see developers.google.com/maps/documentation/javascript/reference/polygon#Circle\n */\n circle; // initialized in ngOnInit\n set options(options) {\n this._options.next(options || {});\n }\n set center(center) {\n this._center.next(center);\n }\n set radius(radius) {\n this._radius.next(radius);\n }\n /**\n * @see\n * developers.google.com/maps/documentation/javascript/reference/polygon#Circle.center_changed\n */\n centerChanged = this._eventManager.getLazyEmitter('center_changed');\n /**\n * @see\n * developers.google.com/maps/documentation/javascript/reference/polygon#Circle.click\n */\n circleClick = this._eventManager.getLazyEmitter('click');\n /**\n * @see\n * developers.google.com/maps/documentation/javascript/reference/polygon#Circle.dblclick\n */\n circleDblclick = this._eventManager.getLazyEmitter('dblclick');\n /**\n * @see\n * developers.google.com/maps/documentation/javascript/reference/polygon#Circle.drag\n */\n circleDrag = this._eventManager.getLazyEmitter('drag');\n /**\n * @see\n * developers.google.com/maps/documentation/javascript/reference/polygon#Circle.dragend\n */\n circleDragend = this._eventManager.getLazyEmitter('dragend');\n /**\n * @see\n * developers.google.com/maps/documentation/javascript/reference/polygon#Circle.dragstart\n */\n circleDragstart = this._eventManager.getLazyEmitter('dragstart');\n /**\n * @see\n * developers.google.com/maps/documentation/javascript/reference/polygon#Circle.mousedown\n */\n circleMousedown = this._eventManager.getLazyEmitter('mousedown');\n /**\n * @see\n * developers.google.com/maps/documentation/javascript/reference/polygon#Circle.mousemove\n */\n circleMousemove = this._eventManager.getLazyEmitter('mousemove');\n /**\n * @see\n * developers.google.com/maps/documentation/javascript/reference/polygon#Circle.mouseout\n */\n circleMouseout = this._eventManager.getLazyEmitter('mouseout');\n /**\n * @see\n * developers.google.com/maps/documentation/javascript/reference/polygon#Circle.mouseover\n */\n circleMouseover = this._eventManager.getLazyEmitter('mouseover');\n /**\n * @see\n * developers.google.com/maps/documentation/javascript/reference/polygon#Circle.mouseup\n */\n circleMouseup = this._eventManager.getLazyEmitter('mouseup');\n /**\n * @see\n * developers.google.com/maps/documentation/javascript/reference/polygon#Circle.radius_changed\n */\n radiusChanged = this._eventManager.getLazyEmitter('radius_changed');\n /**\n * @see\n * developers.google.com/maps/documentation/javascript/reference/polygon#Circle.rightclick\n */\n circleRightclick = this._eventManager.getLazyEmitter('rightclick');\n /** Event emitted when the circle is initialized. */\n circleInitialized = new EventEmitter();\n constructor() {}\n ngOnInit() {\n if (!this._map._isBrowser) {\n return;\n }\n this._combineOptions().pipe(take(1)).subscribe(options => {\n if (google.maps.Circle && this._map.googleMap) {\n this._initialize(this._map.googleMap, google.maps.Circle, options);\n } else {\n this._ngZone.runOutsideAngular(() => {\n Promise.all([this._map._resolveMap(), google.maps.importLibrary('maps')]).then(([map, lib]) => {\n this._initialize(map, lib.Circle, options);\n });\n });\n }\n });\n }\n _initialize(map, circleConstructor, options) {\n // Create the object outside the zone so its events don't trigger change detection.\n // We'll bring it back in inside the `MapEventManager` only for the events that the\n // user has subscribed to.\n this._ngZone.runOutsideAngular(() => {\n this.circle = new circleConstructor(options);\n this._assertInitialized();\n this.circle.setMap(map);\n this._eventManager.setTarget(this.circle);\n this.circleInitialized.emit(this.circle);\n this._watchForOptionsChanges();\n this._watchForCenterChanges();\n this._watchForRadiusChanges();\n });\n }\n ngOnDestroy() {\n this._eventManager.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n this.circle?.setMap(null);\n }\n /**\n * @see\n * developers.google.com/maps/documentation/javascript/reference/polygon#Circle.getBounds\n */\n getBounds() {\n this._assertInitialized();\n return this.circle.getBounds();\n }\n /**\n * @see\n * developers.google.com/maps/documentation/javascript/reference/polygon#Circle.getCenter\n */\n getCenter() {\n this._assertInitialized();\n return this.circle.getCenter();\n }\n /**\n * @see\n * developers.google.com/maps/documentation/javascript/reference/polygon#Circle.getDraggable\n */\n getDraggable() {\n this._assertInitialized();\n return this.circle.getDraggable();\n }\n /**\n * @see\n * developers.google.com/maps/documentation/javascript/reference/polygon#Circle.getEditable\n */\n getEditable() {\n this._assertInitialized();\n return this.circle.getEditable();\n }\n /**\n * @see\n * developers.google.com/maps/documentation/javascript/reference/polygon#Circle.getRadius\n */\n getRadius() {\n this._assertInitialized();\n return this.circle.getRadius();\n }\n /**\n * @see\n * developers.google.com/maps/documentation/javascript/reference/polygon#Circle.getVisible\n */\n getVisible() {\n this._assertInitialized();\n return this.circle.getVisible();\n }\n _combineOptions() {\n return combineLatest([this._options, this._center, this._radius]).pipe(map(([options, center, radius]) => {\n const combinedOptions = {\n ...options,\n center: center || options.center,\n radius: radius !== undefined ? radius : options.radius\n };\n return combinedOptions;\n }));\n }\n _watchForOptionsChanges() {\n this._options.pipe(takeUntil(this._destroyed)).subscribe(options => {\n this._assertInitialized();\n this.circle.setOptions(options);\n });\n }\n _watchForCenterChanges() {\n this._center.pipe(takeUntil(this._destroyed)).subscribe(center => {\n if (center) {\n this._assertInitialized();\n this.circle.setCenter(center);\n }\n });\n }\n _watchForRadiusChanges() {\n this._radius.pipe(takeUntil(this._destroyed)).subscribe(radius => {\n if (radius !== undefined) {\n this._assertInitialized();\n this.circle.setRadius(radius);\n }\n });\n }\n _assertInitialized() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this.circle) {\n throw Error('Cannot interact with a Google Map Circle before it has been ' + 'initialized. Please wait for the Circle to load before trying to interact with it.');\n }\n }\n }\n static ɵfac = function MapCircle_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MapCircle)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MapCircle,\n selectors: [[\"map-circle\"]],\n inputs: {\n options: \"options\",\n center: \"center\",\n radius: \"radius\"\n },\n outputs: {\n centerChanged: \"centerChanged\",\n circleClick: \"circleClick\",\n circleDblclick: \"circleDblclick\",\n circleDrag: \"circleDrag\",\n circleDragend: \"circleDragend\",\n circleDragstart: \"circleDragstart\",\n circleMousedown: \"circleMousedown\",\n circleMousemove: \"circleMousemove\",\n circleMouseout: \"circleMouseout\",\n circleMouseover: \"circleMouseover\",\n circleMouseup: \"circleMouseup\",\n radiusChanged: \"radiusChanged\",\n circleRightclick: \"circleRightclick\",\n circleInitialized: \"circleInitialized\"\n },\n exportAs: [\"mapCircle\"]\n });\n }\n return MapCircle;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/**\n * Angular component that renders a Google Maps Directions Renderer via the Google Maps\n * JavaScript API.\n *\n * See developers.google.com/maps/documentation/javascript/reference/directions#DirectionsRenderer\n */\nlet MapDirectionsRenderer = /*#__PURE__*/(() => {\n class MapDirectionsRenderer {\n _googleMap = inject(GoogleMap);\n _ngZone = inject(NgZone);\n _eventManager = new MapEventManager(inject(NgZone));\n /**\n * See developers.google.com/maps/documentation/javascript/reference/directions\n * #DirectionsRendererOptions.directions\n */\n set directions(directions) {\n this._directions = directions;\n }\n _directions;\n /**\n * See developers.google.com/maps/documentation/javascript/reference/directions\n * #DirectionsRendererOptions\n */\n set options(options) {\n this._options = options;\n }\n _options;\n /**\n * See developers.google.com/maps/documentation/javascript/reference/directions\n * #DirectionsRenderer.directions_changed\n */\n directionsChanged = this._eventManager.getLazyEmitter('directions_changed');\n /** Event emitted when the directions renderer is initialized. */\n directionsRendererInitialized = new EventEmitter();\n /** The underlying google.maps.DirectionsRenderer object. */\n directionsRenderer;\n constructor() {}\n ngOnInit() {\n if (this._googleMap._isBrowser) {\n if (google.maps.DirectionsRenderer && this._googleMap.googleMap) {\n this._initialize(this._googleMap.googleMap, google.maps.DirectionsRenderer);\n } else {\n this._ngZone.runOutsideAngular(() => {\n Promise.all([this._googleMap._resolveMap(), google.maps.importLibrary('routes')]).then(([map, lib]) => {\n this._initialize(map, lib.DirectionsRenderer);\n });\n });\n }\n }\n }\n _initialize(map, rendererConstructor) {\n // Create the object outside the zone so its events don't trigger change detection.\n // We'll bring it back in inside the `MapEventManager` only for the events that the\n // user has subscribed to.\n this._ngZone.runOutsideAngular(() => {\n this.directionsRenderer = new rendererConstructor(this._combineOptions());\n this._assertInitialized();\n this.directionsRenderer.setMap(map);\n this._eventManager.setTarget(this.directionsRenderer);\n this.directionsRendererInitialized.emit(this.directionsRenderer);\n });\n }\n ngOnChanges(changes) {\n if (this.directionsRenderer) {\n if (changes['options']) {\n this.directionsRenderer.setOptions(this._combineOptions());\n }\n if (changes['directions'] && this._directions !== undefined) {\n this.directionsRenderer.setDirections(this._directions);\n }\n }\n }\n ngOnDestroy() {\n this._eventManager.destroy();\n this.directionsRenderer?.setMap(null);\n }\n /**\n * See developers.google.com/maps/documentation/javascript/reference/directions\n * #DirectionsRenderer.getDirections\n */\n getDirections() {\n this._assertInitialized();\n return this.directionsRenderer.getDirections();\n }\n /**\n * See developers.google.com/maps/documentation/javascript/reference/directions\n * #DirectionsRenderer.getPanel\n */\n getPanel() {\n this._assertInitialized();\n return this.directionsRenderer.getPanel();\n }\n /**\n * See developers.google.com/maps/documentation/javascript/reference/directions\n * #DirectionsRenderer.getRouteIndex\n */\n getRouteIndex() {\n this._assertInitialized();\n return this.directionsRenderer.getRouteIndex();\n }\n _combineOptions() {\n const options = this._options || {};\n return {\n ...options,\n directions: this._directions || options.directions,\n map: this._googleMap.googleMap\n };\n }\n _assertInitialized() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this.directionsRenderer) {\n throw Error('Cannot interact with a Google Map Directions Renderer before it has been ' + 'initialized. Please wait for the Directions Renderer to load before trying ' + 'to interact with it.');\n }\n }\n }\n static ɵfac = function MapDirectionsRenderer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MapDirectionsRenderer)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MapDirectionsRenderer,\n selectors: [[\"map-directions-renderer\"]],\n inputs: {\n directions: \"directions\",\n options: \"options\"\n },\n outputs: {\n directionsChanged: \"directionsChanged\",\n directionsRendererInitialized: \"directionsRendererInitialized\"\n },\n exportAs: [\"mapDirectionsRenderer\"],\n features: [i0.ɵɵNgOnChangesFeature]\n });\n }\n return MapDirectionsRenderer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/**\n * Angular component that renders a Google Maps Ground Overlay via the Google Maps JavaScript API.\n *\n * See developers.google.com/maps/documentation/javascript/reference/image-overlay#GroundOverlay\n */\nlet MapGroundOverlay = /*#__PURE__*/(() => {\n class MapGroundOverlay {\n _map = inject(GoogleMap);\n _ngZone = inject(NgZone);\n _eventManager = new MapEventManager(inject(NgZone));\n _opacity = new BehaviorSubject(1);\n _url = new BehaviorSubject('');\n _bounds = new BehaviorSubject(undefined);\n _destroyed = new Subject();\n _hasWatchers;\n /**\n * The underlying google.maps.GroundOverlay object.\n *\n * See developers.google.com/maps/documentation/javascript/reference/image-overlay#GroundOverlay\n */\n groundOverlay;\n /** URL of the image that will be shown in the overlay. */\n set url(url) {\n this._url.next(url);\n }\n /** Bounds for the overlay. */\n get bounds() {\n return this._bounds.value;\n }\n set bounds(bounds) {\n this._bounds.next(bounds);\n }\n /** Whether the overlay is clickable */\n clickable = false;\n /** Opacity of the overlay. */\n set opacity(opacity) {\n this._opacity.next(opacity);\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/image-overlay#GroundOverlay.click\n */\n mapClick = this._eventManager.getLazyEmitter('click');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/image-overlay\n * #GroundOverlay.dblclick\n */\n mapDblclick = this._eventManager.getLazyEmitter('dblclick');\n /** Event emitted when the ground overlay is initialized. */\n groundOverlayInitialized = new EventEmitter();\n constructor() {}\n ngOnInit() {\n if (this._map._isBrowser) {\n // The ground overlay setup is slightly different from the other Google Maps objects in that\n // we have to recreate the `GroundOverlay` object whenever the bounds change, because\n // Google Maps doesn't provide an API to update the bounds of an existing overlay.\n this._bounds.pipe(takeUntil(this._destroyed)).subscribe(bounds => {\n if (this.groundOverlay) {\n this.groundOverlay.setMap(null);\n this.groundOverlay = undefined;\n }\n if (!bounds) {\n return;\n }\n if (google.maps.GroundOverlay && this._map.googleMap) {\n this._initialize(this._map.googleMap, google.maps.GroundOverlay, bounds);\n } else {\n this._ngZone.runOutsideAngular(() => {\n Promise.all([this._map._resolveMap(), google.maps.importLibrary('maps')]).then(([map, lib]) => {\n this._initialize(map, lib.GroundOverlay, bounds);\n });\n });\n }\n });\n }\n }\n _initialize(map, overlayConstructor, bounds) {\n // Create the object outside the zone so its events don't trigger change detection.\n // We'll bring it back in inside the `MapEventManager` only for the events that the\n // user has subscribed to.\n this._ngZone.runOutsideAngular(() => {\n this.groundOverlay = new overlayConstructor(this._url.getValue(), bounds, {\n clickable: this.clickable,\n opacity: this._opacity.value\n });\n this._assertInitialized();\n this.groundOverlay.setMap(map);\n this._eventManager.setTarget(this.groundOverlay);\n this.groundOverlayInitialized.emit(this.groundOverlay);\n // We only need to set up the watchers once.\n if (!this._hasWatchers) {\n this._hasWatchers = true;\n this._watchForOpacityChanges();\n this._watchForUrlChanges();\n }\n });\n }\n ngOnDestroy() {\n this._eventManager.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n this.groundOverlay?.setMap(null);\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/image-overlay\n * #GroundOverlay.getBounds\n */\n getBounds() {\n this._assertInitialized();\n return this.groundOverlay.getBounds();\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/image-overlay\n * #GroundOverlay.getOpacity\n */\n getOpacity() {\n this._assertInitialized();\n return this.groundOverlay.getOpacity();\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/image-overlay\n * #GroundOverlay.getUrl\n */\n getUrl() {\n this._assertInitialized();\n return this.groundOverlay.getUrl();\n }\n _watchForOpacityChanges() {\n this._opacity.pipe(takeUntil(this._destroyed)).subscribe(opacity => {\n if (opacity != null) {\n this.groundOverlay?.setOpacity(opacity);\n }\n });\n }\n _watchForUrlChanges() {\n this._url.pipe(takeUntil(this._destroyed)).subscribe(url => {\n const overlay = this.groundOverlay;\n if (overlay) {\n overlay.set('url', url);\n // Google Maps only redraws the overlay if we re-set the map.\n overlay.setMap(null);\n overlay.setMap(this._map.googleMap);\n }\n });\n }\n _assertInitialized() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this.groundOverlay) {\n throw Error('Cannot interact with a Google Map GroundOverlay before it has been initialized. ' + 'Please wait for the GroundOverlay to load before trying to interact with it.');\n }\n }\n }\n static ɵfac = function MapGroundOverlay_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MapGroundOverlay)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MapGroundOverlay,\n selectors: [[\"map-ground-overlay\"]],\n inputs: {\n url: \"url\",\n bounds: \"bounds\",\n clickable: \"clickable\",\n opacity: \"opacity\"\n },\n outputs: {\n mapClick: \"mapClick\",\n mapDblclick: \"mapDblclick\",\n groundOverlayInitialized: \"groundOverlayInitialized\"\n },\n exportAs: [\"mapGroundOverlay\"]\n });\n }\n return MapGroundOverlay;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/**\n * Angular component that renders a Google Maps info window via the Google Maps JavaScript API.\n *\n * See developers.google.com/maps/documentation/javascript/reference/info-window\n */\nlet MapInfoWindow = /*#__PURE__*/(() => {\n class MapInfoWindow {\n _googleMap = inject(GoogleMap);\n _elementRef = inject(ElementRef);\n _ngZone = inject(NgZone);\n _eventManager = new MapEventManager(inject(NgZone));\n _options = new BehaviorSubject({});\n _position = new BehaviorSubject(undefined);\n _destroy = new Subject();\n /**\n * Underlying google.maps.InfoWindow\n *\n * See developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow\n */\n infoWindow;\n set options(options) {\n this._options.next(options || {});\n }\n set position(position) {\n this._position.next(position);\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.closeclick\n */\n closeclick = this._eventManager.getLazyEmitter('closeclick');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/info-window\n * #InfoWindow.content_changed\n */\n contentChanged = this._eventManager.getLazyEmitter('content_changed');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.domready\n */\n domready = this._eventManager.getLazyEmitter('domready');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/info-window\n * #InfoWindow.position_changed\n */\n positionChanged = this._eventManager.getLazyEmitter('position_changed');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/info-window\n * #InfoWindow.zindex_changed\n */\n zindexChanged = this._eventManager.getLazyEmitter('zindex_changed');\n /** Event emitted when the info window is initialized. */\n infoWindowInitialized = new EventEmitter();\n constructor() {}\n ngOnInit() {\n if (this._googleMap._isBrowser) {\n this._combineOptions().pipe(take(1)).subscribe(options => {\n if (google.maps.InfoWindow) {\n this._initialize(google.maps.InfoWindow, options);\n } else {\n this._ngZone.runOutsideAngular(() => {\n google.maps.importLibrary('maps').then(lib => {\n this._initialize(lib.InfoWindow, options);\n });\n });\n }\n });\n }\n }\n _initialize(infoWindowConstructor, options) {\n // Create the object outside the zone so its events don't trigger change detection.\n // We'll bring it back in inside the `MapEventManager` only for the events that the\n // user has subscribed to.\n this._ngZone.runOutsideAngular(() => {\n this.infoWindow = new infoWindowConstructor(options);\n this._eventManager.setTarget(this.infoWindow);\n this.infoWindowInitialized.emit(this.infoWindow);\n this._watchForOptionsChanges();\n this._watchForPositionChanges();\n });\n }\n ngOnDestroy() {\n this._eventManager.destroy();\n this._destroy.next();\n this._destroy.complete();\n // If no info window has been created on the server, we do not try closing it.\n // On the server, an info window cannot be created and this would cause errors.\n if (this.infoWindow) {\n this.close();\n }\n }\n /**\n * See developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.close\n */\n close() {\n this._assertInitialized();\n this.infoWindow.close();\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.getContent\n */\n getContent() {\n this._assertInitialized();\n return this.infoWindow.getContent() || null;\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/info-window\n * #InfoWindow.getPosition\n */\n getPosition() {\n this._assertInitialized();\n return this.infoWindow.getPosition() || null;\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.getZIndex\n */\n getZIndex() {\n this._assertInitialized();\n return this.infoWindow.getZIndex();\n }\n /**\n * Opens the MapInfoWindow using the provided AdvancedMarkerElement.\n * @deprecated Use the `open` method instead.\n * @breaking-change 20.0.0\n */\n openAdvancedMarkerElement(advancedMarkerElement, content) {\n this.open({\n getAnchor: () => advancedMarkerElement\n }, undefined, content);\n }\n /**\n * Opens the MapInfoWindow using the provided anchor. If the anchor is not set,\n * then the position property of the options input is used instead.\n */\n open(anchor, shouldFocus, content) {\n this._assertInitialized();\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && anchor && !anchor.getAnchor) {\n throw new Error('Specified anchor does not implement the `getAnchor` method. ' + 'It cannot be used to open an info window.');\n }\n const anchorObject = anchor ? anchor.getAnchor() : undefined;\n // Prevent the info window from initializing when trying to reopen on the same anchor.\n // Note that when the window is opened for the first time, the anchor will always be\n // undefined. If that's the case, we have to allow it to open in order to handle the\n // case where the window doesn't have an anchor, but is placed at a particular position.\n if (this.infoWindow.get('anchor') !== anchorObject || !anchorObject) {\n // If no explicit content is provided, it is taken from the DOM node.\n // If it is, we need to hide it so it doesn't take up space on the page.\n this._elementRef.nativeElement.style.display = content ? 'none' : '';\n if (content) {\n this.infoWindow.setContent(content);\n }\n this.infoWindow.open({\n map: this._googleMap.googleMap,\n anchor: anchorObject,\n shouldFocus\n });\n }\n }\n _combineOptions() {\n return combineLatest([this._options, this._position]).pipe(map(([options, position]) => {\n const combinedOptions = {\n ...options,\n position: position || options.position,\n content: this._elementRef.nativeElement\n };\n return combinedOptions;\n }));\n }\n _watchForOptionsChanges() {\n this._options.pipe(takeUntil(this._destroy)).subscribe(options => {\n this._assertInitialized();\n this.infoWindow.setOptions(options);\n });\n }\n _watchForPositionChanges() {\n this._position.pipe(takeUntil(this._destroy)).subscribe(position => {\n if (position) {\n this._assertInitialized();\n this.infoWindow.setPosition(position);\n }\n });\n }\n _assertInitialized() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this.infoWindow) {\n throw Error('Cannot interact with a Google Map Info Window before it has been ' + 'initialized. Please wait for the Info Window to load before trying to interact with ' + 'it.');\n }\n }\n }\n static ɵfac = function MapInfoWindow_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MapInfoWindow)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MapInfoWindow,\n selectors: [[\"map-info-window\"]],\n hostAttrs: [2, \"display\", \"none\"],\n inputs: {\n options: \"options\",\n position: \"position\"\n },\n outputs: {\n closeclick: \"closeclick\",\n contentChanged: \"contentChanged\",\n domready: \"domready\",\n positionChanged: \"positionChanged\",\n zindexChanged: \"zindexChanged\",\n infoWindowInitialized: \"infoWindowInitialized\"\n },\n exportAs: [\"mapInfoWindow\"]\n });\n }\n return MapInfoWindow;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/**\n * Angular component that renders a Google Maps KML Layer via the Google Maps JavaScript API.\n *\n * See developers.google.com/maps/documentation/javascript/reference/kml#KmlLayer\n */\nlet MapKmlLayer = /*#__PURE__*/(() => {\n class MapKmlLayer {\n _map = inject(GoogleMap);\n _ngZone = inject(NgZone);\n _eventManager = new MapEventManager(inject(NgZone));\n _options = new BehaviorSubject({});\n _url = new BehaviorSubject('');\n _destroyed = new Subject();\n /**\n * The underlying google.maps.KmlLayer object.\n *\n * See developers.google.com/maps/documentation/javascript/reference/kml#KmlLayer\n */\n kmlLayer;\n set options(options) {\n this._options.next(options || {});\n }\n set url(url) {\n this._url.next(url);\n }\n /**\n * See developers.google.com/maps/documentation/javascript/reference/kml#KmlLayer.click\n */\n kmlClick = this._eventManager.getLazyEmitter('click');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/kml\n * #KmlLayer.defaultviewport_changed\n */\n defaultviewportChanged = this._eventManager.getLazyEmitter('defaultviewport_changed');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/kml#KmlLayer.status_changed\n */\n statusChanged = this._eventManager.getLazyEmitter('status_changed');\n /** Event emitted when the KML layer is initialized. */\n kmlLayerInitialized = new EventEmitter();\n constructor() {}\n ngOnInit() {\n if (this._map._isBrowser) {\n this._combineOptions().pipe(take(1)).subscribe(options => {\n if (google.maps.KmlLayer && this._map.googleMap) {\n this._initialize(this._map.googleMap, google.maps.KmlLayer, options);\n } else {\n this._ngZone.runOutsideAngular(() => {\n Promise.all([this._map._resolveMap(), google.maps.importLibrary('maps')]).then(([map, lib]) => {\n this._initialize(map, lib.KmlLayer, options);\n });\n });\n }\n });\n }\n }\n _initialize(map, layerConstructor, options) {\n // Create the object outside the zone so its events don't trigger change detection.\n // We'll bring it back in inside the `MapEventManager` only for the events that the\n // user has subscribed to.\n this._ngZone.runOutsideAngular(() => {\n this.kmlLayer = new layerConstructor(options);\n this._assertInitialized();\n this.kmlLayer.setMap(map);\n this._eventManager.setTarget(this.kmlLayer);\n this.kmlLayerInitialized.emit(this.kmlLayer);\n this._watchForOptionsChanges();\n this._watchForUrlChanges();\n });\n }\n ngOnDestroy() {\n this._eventManager.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n this.kmlLayer?.setMap(null);\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/kml#KmlLayer.getDefaultViewport\n */\n getDefaultViewport() {\n this._assertInitialized();\n return this.kmlLayer.getDefaultViewport();\n }\n /**\n * See developers.google.com/maps/documentation/javascript/reference/kml#KmlLayer.getMetadata\n */\n getMetadata() {\n this._assertInitialized();\n return this.kmlLayer.getMetadata();\n }\n /**\n * See developers.google.com/maps/documentation/javascript/reference/kml#KmlLayer.getStatus\n */\n getStatus() {\n this._assertInitialized();\n return this.kmlLayer.getStatus();\n }\n /**\n * See developers.google.com/maps/documentation/javascript/reference/kml#KmlLayer.getUrl\n */\n getUrl() {\n this._assertInitialized();\n return this.kmlLayer.getUrl();\n }\n /**\n * See developers.google.com/maps/documentation/javascript/reference/kml#KmlLayer.getZIndex\n */\n getZIndex() {\n this._assertInitialized();\n return this.kmlLayer.getZIndex();\n }\n _combineOptions() {\n return combineLatest([this._options, this._url]).pipe(map(([options, url]) => {\n const combinedOptions = {\n ...options,\n url: url || options.url\n };\n return combinedOptions;\n }));\n }\n _watchForOptionsChanges() {\n this._options.pipe(takeUntil(this._destroyed)).subscribe(options => {\n if (this.kmlLayer) {\n this._assertInitialized();\n this.kmlLayer.setOptions(options);\n }\n });\n }\n _watchForUrlChanges() {\n this._url.pipe(takeUntil(this._destroyed)).subscribe(url => {\n if (url && this.kmlLayer) {\n this._assertInitialized();\n this.kmlLayer.setUrl(url);\n }\n });\n }\n _assertInitialized() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this.kmlLayer) {\n throw Error('Cannot interact with a Google Map KmlLayer before it has been ' + 'initialized. Please wait for the KmlLayer to load before trying to interact with it.');\n }\n }\n }\n static ɵfac = function MapKmlLayer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MapKmlLayer)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MapKmlLayer,\n selectors: [[\"map-kml-layer\"]],\n inputs: {\n options: \"options\",\n url: \"url\"\n },\n outputs: {\n kmlClick: \"kmlClick\",\n defaultviewportChanged: \"defaultviewportChanged\",\n statusChanged: \"statusChanged\",\n kmlLayerInitialized: \"kmlLayerInitialized\"\n },\n exportAs: [\"mapKmlLayer\"]\n });\n }\n return MapKmlLayer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Token that marker directives can use to expose themselves to the clusterer. */\nconst MAP_MARKER = /*#__PURE__*/new InjectionToken('MAP_MARKER');\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/**\n * Default options for the Google Maps marker component. Displays a marker\n * at the Googleplex.\n */\nconst DEFAULT_MARKER_OPTIONS$1 = {\n position: {\n lat: 37.421995,\n lng: -122.084092\n }\n};\n/**\n * Angular component that renders a Google Maps marker via the Google Maps JavaScript API.\n *\n * See developers.google.com/maps/documentation/javascript/reference/marker\n */\nlet MapMarker = /*#__PURE__*/(() => {\n class MapMarker {\n _googleMap = inject(GoogleMap);\n _ngZone = inject(NgZone);\n _eventManager = new MapEventManager(inject(NgZone));\n /**\n * Title of the marker.\n * See: developers.google.com/maps/documentation/javascript/reference/marker#MarkerOptions.title\n */\n set title(title) {\n this._title = title;\n }\n _title;\n /**\n * Position of the marker. See:\n * developers.google.com/maps/documentation/javascript/reference/marker#MarkerOptions.position\n */\n set position(position) {\n this._position = position;\n }\n _position;\n /**\n * Label for the marker.\n * See: developers.google.com/maps/documentation/javascript/reference/marker#MarkerOptions.label\n */\n set label(label) {\n this._label = label;\n }\n _label;\n /**\n * Whether the marker is clickable. See:\n * developers.google.com/maps/documentation/javascript/reference/marker#MarkerOptions.clickable\n */\n set clickable(clickable) {\n this._clickable = clickable;\n }\n _clickable;\n /**\n * Options used to configure the marker.\n * See: developers.google.com/maps/documentation/javascript/reference/marker#MarkerOptions\n */\n set options(options) {\n this._options = options;\n }\n _options;\n /**\n * Icon to be used for the marker.\n * See: https://developers.google.com/maps/documentation/javascript/reference/marker#Icon\n */\n set icon(icon) {\n this._icon = icon;\n }\n _icon;\n /**\n * Whether the marker is visible.\n * See: developers.google.com/maps/documentation/javascript/reference/marker#MarkerOptions.visible\n */\n set visible(value) {\n this._visible = value;\n }\n _visible;\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.animation_changed\n */\n animationChanged = this._eventManager.getLazyEmitter('animation_changed');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.click\n */\n mapClick = this._eventManager.getLazyEmitter('click');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.clickable_changed\n */\n clickableChanged = this._eventManager.getLazyEmitter('clickable_changed');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.cursor_changed\n */\n cursorChanged = this._eventManager.getLazyEmitter('cursor_changed');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.dblclick\n */\n mapDblclick = this._eventManager.getLazyEmitter('dblclick');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.drag\n */\n mapDrag = this._eventManager.getLazyEmitter('drag');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.dragend\n */\n mapDragend = this._eventManager.getLazyEmitter('dragend');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.draggable_changed\n */\n draggableChanged = this._eventManager.getLazyEmitter('draggable_changed');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.dragstart\n */\n mapDragstart = this._eventManager.getLazyEmitter('dragstart');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.flat_changed\n */\n flatChanged = this._eventManager.getLazyEmitter('flat_changed');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.icon_changed\n */\n iconChanged = this._eventManager.getLazyEmitter('icon_changed');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.mousedown\n */\n mapMousedown = this._eventManager.getLazyEmitter('mousedown');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.mouseout\n */\n mapMouseout = this._eventManager.getLazyEmitter('mouseout');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.mouseover\n */\n mapMouseover = this._eventManager.getLazyEmitter('mouseover');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.mouseup\n */\n mapMouseup = this._eventManager.getLazyEmitter('mouseup');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.position_changed\n */\n positionChanged = this._eventManager.getLazyEmitter('position_changed');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.rightclick\n */\n mapRightclick = this._eventManager.getLazyEmitter('rightclick');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.shape_changed\n */\n shapeChanged = this._eventManager.getLazyEmitter('shape_changed');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.title_changed\n */\n titleChanged = this._eventManager.getLazyEmitter('title_changed');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.visible_changed\n */\n visibleChanged = this._eventManager.getLazyEmitter('visible_changed');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.zindex_changed\n */\n zindexChanged = this._eventManager.getLazyEmitter('zindex_changed');\n /** Event emitted when the marker is initialized. */\n markerInitialized = new EventEmitter();\n /**\n * The underlying google.maps.Marker object.\n *\n * See developers.google.com/maps/documentation/javascript/reference/marker#Marker\n */\n marker;\n constructor() {}\n ngOnInit() {\n if (!this._googleMap._isBrowser) {\n return;\n }\n if (google.maps.Marker && this._googleMap.googleMap) {\n this._initialize(this._googleMap.googleMap, google.maps.Marker);\n } else {\n this._ngZone.runOutsideAngular(() => {\n Promise.all([this._googleMap._resolveMap(), google.maps.importLibrary('marker')]).then(([map, lib]) => {\n this._initialize(map, lib.Marker);\n });\n });\n }\n }\n _initialize(map, markerConstructor) {\n // Create the object outside the zone so its events don't trigger change detection.\n // We'll bring it back in inside the `MapEventManager` only for the events that the\n // user has subscribed to.\n this._ngZone.runOutsideAngular(() => {\n this.marker = new markerConstructor(this._combineOptions());\n this._assertInitialized();\n this.marker.setMap(map);\n this._eventManager.setTarget(this.marker);\n this.markerInitialized.next(this.marker);\n });\n }\n ngOnChanges(changes) {\n const {\n marker,\n _title,\n _position,\n _label,\n _clickable,\n _icon,\n _visible\n } = this;\n if (marker) {\n if (changes['options']) {\n marker.setOptions(this._combineOptions());\n }\n if (changes['title'] && _title !== undefined) {\n marker.setTitle(_title);\n }\n if (changes['position'] && _position) {\n marker.setPosition(_position);\n }\n if (changes['label'] && _label !== undefined) {\n marker.setLabel(_label);\n }\n if (changes['clickable'] && _clickable !== undefined) {\n marker.setClickable(_clickable);\n }\n if (changes['icon'] && _icon) {\n marker.setIcon(_icon);\n }\n if (changes['visible'] && _visible !== undefined) {\n marker.setVisible(_visible);\n }\n }\n }\n ngOnDestroy() {\n this.markerInitialized.complete();\n this._eventManager.destroy();\n this.marker?.setMap(null);\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.getAnimation\n */\n getAnimation() {\n this._assertInitialized();\n return this.marker.getAnimation() || null;\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.getClickable\n */\n getClickable() {\n this._assertInitialized();\n return this.marker.getClickable();\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.getCursor\n */\n getCursor() {\n this._assertInitialized();\n return this.marker.getCursor() || null;\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.getDraggable\n */\n getDraggable() {\n this._assertInitialized();\n return !!this.marker.getDraggable();\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.getIcon\n */\n getIcon() {\n this._assertInitialized();\n return this.marker.getIcon() || null;\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.getLabel\n */\n getLabel() {\n this._assertInitialized();\n return this.marker.getLabel() || null;\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.getOpacity\n */\n getOpacity() {\n this._assertInitialized();\n return this.marker.getOpacity() || null;\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.getPosition\n */\n getPosition() {\n this._assertInitialized();\n return this.marker.getPosition() || null;\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.getShape\n */\n getShape() {\n this._assertInitialized();\n return this.marker.getShape() || null;\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.getTitle\n */\n getTitle() {\n this._assertInitialized();\n return this.marker.getTitle() || null;\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.getVisible\n */\n getVisible() {\n this._assertInitialized();\n return this.marker.getVisible();\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/marker#Marker.getZIndex\n */\n getZIndex() {\n this._assertInitialized();\n return this.marker.getZIndex() || null;\n }\n /** Gets the anchor point that can be used to attach other Google Maps objects. */\n getAnchor() {\n this._assertInitialized();\n return this.marker;\n }\n /** Returns a promise that resolves when the marker has been initialized. */\n _resolveMarker() {\n return this.marker ? Promise.resolve(this.marker) : this.markerInitialized.pipe(take(1)).toPromise();\n }\n /** Creates a combined options object using the passed-in options and the individual inputs. */\n _combineOptions() {\n const options = this._options || DEFAULT_MARKER_OPTIONS$1;\n return {\n ...options,\n title: this._title || options.title,\n position: this._position || options.position,\n label: this._label || options.label,\n clickable: this._clickable ?? options.clickable,\n map: this._googleMap.googleMap,\n icon: this._icon || options.icon,\n visible: this._visible ?? options.visible\n };\n }\n _assertInitialized() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this.marker) {\n throw Error('Cannot interact with a Google Map Marker before it has been ' + 'initialized. Please wait for the Marker to load before trying to interact with it.');\n }\n }\n }\n static ɵfac = function MapMarker_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MapMarker)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MapMarker,\n selectors: [[\"map-marker\"]],\n inputs: {\n title: \"title\",\n position: \"position\",\n label: \"label\",\n clickable: \"clickable\",\n options: \"options\",\n icon: \"icon\",\n visible: \"visible\"\n },\n outputs: {\n animationChanged: \"animationChanged\",\n mapClick: \"mapClick\",\n clickableChanged: \"clickableChanged\",\n cursorChanged: \"cursorChanged\",\n mapDblclick: \"mapDblclick\",\n mapDrag: \"mapDrag\",\n mapDragend: \"mapDragend\",\n draggableChanged: \"draggableChanged\",\n mapDragstart: \"mapDragstart\",\n flatChanged: \"flatChanged\",\n iconChanged: \"iconChanged\",\n mapMousedown: \"mapMousedown\",\n mapMouseout: \"mapMouseout\",\n mapMouseover: \"mapMouseover\",\n mapMouseup: \"mapMouseup\",\n positionChanged: \"positionChanged\",\n mapRightclick: \"mapRightclick\",\n shapeChanged: \"shapeChanged\",\n titleChanged: \"titleChanged\",\n visibleChanged: \"visibleChanged\",\n zindexChanged: \"zindexChanged\",\n markerInitialized: \"markerInitialized\"\n },\n exportAs: [\"mapMarker\"],\n features: [i0.ɵɵProvidersFeature([{\n provide: MAP_MARKER,\n useExisting: MapMarker\n }]), i0.ɵɵNgOnChangesFeature]\n });\n }\n return MapMarker;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/** Default options for a clusterer. */\nconst DEFAULT_CLUSTERER_OPTIONS = {};\n/**\n * Angular component for implementing a Google Maps Marker Clusterer.\n * See https://developers.google.com/maps/documentation/javascript/marker-clustering\n *\n * @deprecated This component is using a deprecated clustering implementation. Use the\n * `map-marker-clusterer` component instead.\n * @breaking-change 21.0.0\n *\n */\nlet DeprecatedMapMarkerClusterer = /*#__PURE__*/(() => {\n class DeprecatedMapMarkerClusterer {\n _googleMap = inject(GoogleMap);\n _ngZone = inject(NgZone);\n _currentMarkers = new Set();\n _eventManager = new MapEventManager(inject(NgZone));\n _destroy = new Subject();\n /** Whether the clusterer is allowed to be initialized. */\n _canInitialize = this._googleMap._isBrowser;\n ariaLabelFn = () => '';\n set averageCenter(averageCenter) {\n this._averageCenter = averageCenter;\n }\n _averageCenter;\n batchSize;\n set batchSizeIE(batchSizeIE) {\n this._batchSizeIE = batchSizeIE;\n }\n _batchSizeIE;\n set calculator(calculator) {\n this._calculator = calculator;\n }\n _calculator;\n set clusterClass(clusterClass) {\n this._clusterClass = clusterClass;\n }\n _clusterClass;\n set enableRetinaIcons(enableRetinaIcons) {\n this._enableRetinaIcons = enableRetinaIcons;\n }\n _enableRetinaIcons;\n set gridSize(gridSize) {\n this._gridSize = gridSize;\n }\n _gridSize;\n set ignoreHidden(ignoreHidden) {\n this._ignoreHidden = ignoreHidden;\n }\n _ignoreHidden;\n set imageExtension(imageExtension) {\n this._imageExtension = imageExtension;\n }\n _imageExtension;\n set imagePath(imagePath) {\n this._imagePath = imagePath;\n }\n _imagePath;\n set imageSizes(imageSizes) {\n this._imageSizes = imageSizes;\n }\n _imageSizes;\n set maxZoom(maxZoom) {\n this._maxZoom = maxZoom;\n }\n _maxZoom;\n set minimumClusterSize(minimumClusterSize) {\n this._minimumClusterSize = minimumClusterSize;\n }\n _minimumClusterSize;\n set styles(styles) {\n this._styles = styles;\n }\n _styles;\n set title(title) {\n this._title = title;\n }\n _title;\n set zIndex(zIndex) {\n this._zIndex = zIndex;\n }\n _zIndex;\n set zoomOnClick(zoomOnClick) {\n this._zoomOnClick = zoomOnClick;\n }\n _zoomOnClick;\n set options(options) {\n this._options = options;\n }\n _options;\n /**\n * See\n * googlemaps.github.io/v3-utility-library/modules/\n * _google_markerclustererplus.html#clusteringbegin\n */\n clusteringbegin = this._eventManager.getLazyEmitter('clusteringbegin');\n /**\n * See\n * googlemaps.github.io/v3-utility-library/modules/_google_markerclustererplus.html#clusteringend\n */\n clusteringend = this._eventManager.getLazyEmitter('clusteringend');\n /** Emits when a cluster has been clicked. */\n clusterClick = this._eventManager.getLazyEmitter('click');\n _markers;\n /**\n * The underlying MarkerClusterer object.\n *\n * See\n * googlemaps.github.io/v3-utility-library/classes/\n * _google_markerclustererplus.markerclusterer.html\n */\n markerClusterer;\n /** Event emitted when the clusterer is initialized. */\n markerClustererInitialized = new EventEmitter();\n constructor() {}\n ngOnInit() {\n if (this._canInitialize) {\n this._ngZone.runOutsideAngular(() => {\n this._googleMap._resolveMap().then(map => {\n if (typeof MarkerClusterer !== 'function' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('MarkerClusterer class not found, cannot construct a marker cluster. ' + 'Please install the MarkerClustererPlus library: ' + 'https://github.com/googlemaps/js-markerclustererplus');\n }\n // Create the object outside the zone so its events don't trigger change detection.\n // We'll bring it back in inside the `MapEventManager` only for the events that the\n // user has subscribed to.\n this.markerClusterer = this._ngZone.runOutsideAngular(() => {\n return new MarkerClusterer(map, [], this._combineOptions());\n });\n this._assertInitialized();\n this._eventManager.setTarget(this.markerClusterer);\n this.markerClustererInitialized.emit(this.markerClusterer);\n });\n });\n }\n }\n ngAfterContentInit() {\n if (this._canInitialize) {\n if (this.markerClusterer) {\n this._watchForMarkerChanges();\n } else {\n this.markerClustererInitialized.pipe(take(1), takeUntil(this._destroy)).subscribe(() => this._watchForMarkerChanges());\n }\n }\n }\n ngOnChanges(changes) {\n const {\n markerClusterer: clusterer,\n ariaLabelFn,\n _averageCenter,\n _batchSizeIE,\n _calculator,\n _styles,\n _clusterClass,\n _enableRetinaIcons,\n _gridSize,\n _ignoreHidden,\n _imageExtension,\n _imagePath,\n _imageSizes,\n _maxZoom,\n _minimumClusterSize,\n _title,\n _zIndex,\n _zoomOnClick\n } = this;\n if (clusterer) {\n if (changes['options']) {\n clusterer.setOptions(this._combineOptions());\n }\n if (changes['ariaLabelFn']) {\n clusterer.ariaLabelFn = ariaLabelFn;\n }\n if (changes['averageCenter'] && _averageCenter !== undefined) {\n clusterer.setAverageCenter(_averageCenter);\n }\n if (changes['batchSizeIE'] && _batchSizeIE !== undefined) {\n clusterer.setBatchSizeIE(_batchSizeIE);\n }\n if (changes['calculator'] && !!_calculator) {\n clusterer.setCalculator(_calculator);\n }\n if (changes['clusterClass'] && _clusterClass !== undefined) {\n clusterer.setClusterClass(_clusterClass);\n }\n if (changes['enableRetinaIcons'] && _enableRetinaIcons !== undefined) {\n clusterer.setEnableRetinaIcons(_enableRetinaIcons);\n }\n if (changes['gridSize'] && _gridSize !== undefined) {\n clusterer.setGridSize(_gridSize);\n }\n if (changes['ignoreHidden'] && _ignoreHidden !== undefined) {\n clusterer.setIgnoreHidden(_ignoreHidden);\n }\n if (changes['imageExtension'] && _imageExtension !== undefined) {\n clusterer.setImageExtension(_imageExtension);\n }\n if (changes['imagePath'] && _imagePath !== undefined) {\n clusterer.setImagePath(_imagePath);\n }\n if (changes['imageSizes'] && _imageSizes) {\n clusterer.setImageSizes(_imageSizes);\n }\n if (changes['maxZoom'] && _maxZoom !== undefined) {\n clusterer.setMaxZoom(_maxZoom);\n }\n if (changes['minimumClusterSize'] && _minimumClusterSize !== undefined) {\n clusterer.setMinimumClusterSize(_minimumClusterSize);\n }\n if (changes['styles'] && _styles) {\n clusterer.setStyles(_styles);\n }\n if (changes['title'] && _title !== undefined) {\n clusterer.setTitle(_title);\n }\n if (changes['zIndex'] && _zIndex !== undefined) {\n clusterer.setZIndex(_zIndex);\n }\n if (changes['zoomOnClick'] && _zoomOnClick !== undefined) {\n clusterer.setZoomOnClick(_zoomOnClick);\n }\n }\n }\n ngOnDestroy() {\n this._destroy.next();\n this._destroy.complete();\n this._eventManager.destroy();\n this.markerClusterer?.setMap(null);\n }\n fitMapToMarkers(padding) {\n this._assertInitialized();\n this.markerClusterer.fitMapToMarkers(padding);\n }\n getAverageCenter() {\n this._assertInitialized();\n return this.markerClusterer.getAverageCenter();\n }\n getBatchSizeIE() {\n this._assertInitialized();\n return this.markerClusterer.getBatchSizeIE();\n }\n getCalculator() {\n this._assertInitialized();\n return this.markerClusterer.getCalculator();\n }\n getClusterClass() {\n this._assertInitialized();\n return this.markerClusterer.getClusterClass();\n }\n getClusters() {\n this._assertInitialized();\n return this.markerClusterer.getClusters();\n }\n getEnableRetinaIcons() {\n this._assertInitialized();\n return this.markerClusterer.getEnableRetinaIcons();\n }\n getGridSize() {\n this._assertInitialized();\n return this.markerClusterer.getGridSize();\n }\n getIgnoreHidden() {\n this._assertInitialized();\n return this.markerClusterer.getIgnoreHidden();\n }\n getImageExtension() {\n this._assertInitialized();\n return this.markerClusterer.getImageExtension();\n }\n getImagePath() {\n this._assertInitialized();\n return this.markerClusterer.getImagePath();\n }\n getImageSizes() {\n this._assertInitialized();\n return this.markerClusterer.getImageSizes();\n }\n getMaxZoom() {\n this._assertInitialized();\n return this.markerClusterer.getMaxZoom();\n }\n getMinimumClusterSize() {\n this._assertInitialized();\n return this.markerClusterer.getMinimumClusterSize();\n }\n getStyles() {\n this._assertInitialized();\n return this.markerClusterer.getStyles();\n }\n getTitle() {\n this._assertInitialized();\n return this.markerClusterer.getTitle();\n }\n getTotalClusters() {\n this._assertInitialized();\n return this.markerClusterer.getTotalClusters();\n }\n getTotalMarkers() {\n this._assertInitialized();\n return this.markerClusterer.getTotalMarkers();\n }\n getZIndex() {\n this._assertInitialized();\n return this.markerClusterer.getZIndex();\n }\n getZoomOnClick() {\n this._assertInitialized();\n return this.markerClusterer.getZoomOnClick();\n }\n _combineOptions() {\n const options = this._options || DEFAULT_CLUSTERER_OPTIONS;\n return {\n ...options,\n ariaLabelFn: this.ariaLabelFn ?? options.ariaLabelFn,\n averageCenter: this._averageCenter ?? options.averageCenter,\n batchSize: this.batchSize ?? options.batchSize,\n batchSizeIE: this._batchSizeIE ?? options.batchSizeIE,\n calculator: this._calculator ?? options.calculator,\n clusterClass: this._clusterClass ?? options.clusterClass,\n enableRetinaIcons: this._enableRetinaIcons ?? options.enableRetinaIcons,\n gridSize: this._gridSize ?? options.gridSize,\n ignoreHidden: this._ignoreHidden ?? options.ignoreHidden,\n imageExtension: this._imageExtension ?? options.imageExtension,\n imagePath: this._imagePath ?? options.imagePath,\n imageSizes: this._imageSizes ?? options.imageSizes,\n maxZoom: this._maxZoom ?? options.maxZoom,\n minimumClusterSize: this._minimumClusterSize ?? options.minimumClusterSize,\n styles: this._styles ?? options.styles,\n title: this._title ?? options.title,\n zIndex: this._zIndex ?? options.zIndex,\n zoomOnClick: this._zoomOnClick ?? options.zoomOnClick\n };\n }\n _watchForMarkerChanges() {\n this._assertInitialized();\n this._ngZone.runOutsideAngular(() => {\n this._getInternalMarkers(this._markers).then(markers => {\n const initialMarkers = [];\n for (const marker of markers) {\n this._currentMarkers.add(marker);\n initialMarkers.push(marker);\n }\n this.markerClusterer.addMarkers(initialMarkers);\n });\n });\n this._markers.changes.pipe(takeUntil(this._destroy)).subscribe(markerComponents => {\n this._assertInitialized();\n this._ngZone.runOutsideAngular(() => {\n this._getInternalMarkers(markerComponents).then(markers => {\n const newMarkers = new Set(markers);\n const markersToAdd = [];\n const markersToRemove = [];\n for (const marker of Array.from(newMarkers)) {\n if (!this._currentMarkers.has(marker)) {\n this._currentMarkers.add(marker);\n markersToAdd.push(marker);\n }\n }\n for (const marker of Array.from(this._currentMarkers)) {\n if (!newMarkers.has(marker)) {\n markersToRemove.push(marker);\n }\n }\n this.markerClusterer.addMarkers(markersToAdd, true);\n this.markerClusterer.removeMarkers(markersToRemove, true);\n this.markerClusterer.repaint();\n for (const marker of markersToRemove) {\n this._currentMarkers.delete(marker);\n }\n });\n });\n });\n }\n _getInternalMarkers(markers) {\n return Promise.all(markers.map(markerComponent => markerComponent._resolveMarker()));\n }\n _assertInitialized() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this.markerClusterer) {\n throw Error('Cannot interact with a MarkerClusterer before it has been initialized. ' + 'Please wait for the MarkerClusterer to load before trying to interact with it.');\n }\n }\n }\n static ɵfac = function DeprecatedMapMarkerClusterer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DeprecatedMapMarkerClusterer)();\n };\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: DeprecatedMapMarkerClusterer,\n selectors: [[\"deprecated-map-marker-clusterer\"]],\n contentQueries: function DeprecatedMapMarkerClusterer_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MapMarker, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._markers = _t);\n }\n },\n inputs: {\n ariaLabelFn: \"ariaLabelFn\",\n averageCenter: \"averageCenter\",\n batchSize: \"batchSize\",\n batchSizeIE: \"batchSizeIE\",\n calculator: \"calculator\",\n clusterClass: \"clusterClass\",\n enableRetinaIcons: \"enableRetinaIcons\",\n gridSize: \"gridSize\",\n ignoreHidden: \"ignoreHidden\",\n imageExtension: \"imageExtension\",\n imagePath: \"imagePath\",\n imageSizes: \"imageSizes\",\n maxZoom: \"maxZoom\",\n minimumClusterSize: \"minimumClusterSize\",\n styles: \"styles\",\n title: \"title\",\n zIndex: \"zIndex\",\n zoomOnClick: \"zoomOnClick\",\n options: \"options\"\n },\n outputs: {\n clusteringbegin: \"clusteringbegin\",\n clusteringend: \"clusteringend\",\n clusterClick: \"clusterClick\",\n markerClustererInitialized: \"markerClustererInitialized\"\n },\n exportAs: [\"mapMarkerClusterer\"],\n features: [i0.ɵɵNgOnChangesFeature],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function DeprecatedMapMarkerClusterer_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n encapsulation: 2,\n changeDetection: 0\n });\n }\n return DeprecatedMapMarkerClusterer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/**\n * Angular component that renders a Google Maps Polygon via the Google Maps JavaScript API.\n *\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polygon\n */\nlet MapPolygon = /*#__PURE__*/(() => {\n class MapPolygon {\n _map = inject(GoogleMap);\n _ngZone = inject(NgZone);\n _eventManager = new MapEventManager(inject(NgZone));\n _options = new BehaviorSubject({});\n _paths = new BehaviorSubject(undefined);\n _destroyed = new Subject();\n /**\n * The underlying google.maps.Polygon object.\n *\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polygon\n */\n polygon;\n set options(options) {\n this._options.next(options || {});\n }\n set paths(paths) {\n this._paths.next(paths);\n }\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polygon.click\n */\n polygonClick = this._eventManager.getLazyEmitter('click');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polygon.dblclick\n */\n polygonDblclick = this._eventManager.getLazyEmitter('dblclick');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polygon.drag\n */\n polygonDrag = this._eventManager.getLazyEmitter('drag');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polygon.dragend\n */\n polygonDragend = this._eventManager.getLazyEmitter('dragend');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polygon.dragstart\n */\n polygonDragstart = this._eventManager.getLazyEmitter('dragstart');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polygon.mousedown\n */\n polygonMousedown = this._eventManager.getLazyEmitter('mousedown');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polygon.mousemove\n */\n polygonMousemove = this._eventManager.getLazyEmitter('mousemove');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polygon.mouseout\n */\n polygonMouseout = this._eventManager.getLazyEmitter('mouseout');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polygon.mouseover\n */\n polygonMouseover = this._eventManager.getLazyEmitter('mouseover');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polygon.mouseup\n */\n polygonMouseup = this._eventManager.getLazyEmitter('mouseup');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polygon.rightclick\n */\n polygonRightclick = this._eventManager.getLazyEmitter('rightclick');\n /** Event emitted when the polygon is initialized. */\n polygonInitialized = new EventEmitter();\n constructor() {}\n ngOnInit() {\n if (this._map._isBrowser) {\n this._combineOptions().pipe(take(1)).subscribe(options => {\n if (google.maps.Polygon && this._map.googleMap) {\n this._initialize(this._map.googleMap, google.maps.Polygon, options);\n } else {\n this._ngZone.runOutsideAngular(() => {\n Promise.all([this._map._resolveMap(), google.maps.importLibrary('maps')]).then(([map, lib]) => {\n this._initialize(map, lib.Polygon, options);\n });\n });\n }\n });\n }\n }\n _initialize(map, polygonConstructor, options) {\n // Create the object outside the zone so its events don't trigger change detection.\n // We'll bring it back in inside the `MapEventManager` only for the events that the\n // user has subscribed to.\n this._ngZone.runOutsideAngular(() => {\n this.polygon = new polygonConstructor(options);\n this._assertInitialized();\n this.polygon.setMap(map);\n this._eventManager.setTarget(this.polygon);\n this.polygonInitialized.emit(this.polygon);\n this._watchForOptionsChanges();\n this._watchForPathChanges();\n });\n }\n ngOnDestroy() {\n this._eventManager.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n this.polygon?.setMap(null);\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/polygon#Polygon.getDraggable\n */\n getDraggable() {\n this._assertInitialized();\n return this.polygon.getDraggable();\n }\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polygon.getEditable\n */\n getEditable() {\n this._assertInitialized();\n return this.polygon.getEditable();\n }\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polygon.getPath\n */\n getPath() {\n this._assertInitialized();\n return this.polygon.getPath();\n }\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polygon.getPaths\n */\n getPaths() {\n this._assertInitialized();\n return this.polygon.getPaths();\n }\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polygon.getVisible\n */\n getVisible() {\n this._assertInitialized();\n return this.polygon.getVisible();\n }\n _combineOptions() {\n return combineLatest([this._options, this._paths]).pipe(map(([options, paths]) => {\n const combinedOptions = {\n ...options,\n paths: paths || options.paths\n };\n return combinedOptions;\n }));\n }\n _watchForOptionsChanges() {\n this._options.pipe(takeUntil(this._destroyed)).subscribe(options => {\n this._assertInitialized();\n this.polygon.setOptions(options);\n });\n }\n _watchForPathChanges() {\n this._paths.pipe(takeUntil(this._destroyed)).subscribe(paths => {\n if (paths) {\n this._assertInitialized();\n this.polygon.setPaths(paths);\n }\n });\n }\n _assertInitialized() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this.polygon) {\n throw Error('Cannot interact with a Google Map Polygon before it has been ' + 'initialized. Please wait for the Polygon to load before trying to interact with it.');\n }\n }\n }\n static ɵfac = function MapPolygon_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MapPolygon)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MapPolygon,\n selectors: [[\"map-polygon\"]],\n inputs: {\n options: \"options\",\n paths: \"paths\"\n },\n outputs: {\n polygonClick: \"polygonClick\",\n polygonDblclick: \"polygonDblclick\",\n polygonDrag: \"polygonDrag\",\n polygonDragend: \"polygonDragend\",\n polygonDragstart: \"polygonDragstart\",\n polygonMousedown: \"polygonMousedown\",\n polygonMousemove: \"polygonMousemove\",\n polygonMouseout: \"polygonMouseout\",\n polygonMouseover: \"polygonMouseover\",\n polygonMouseup: \"polygonMouseup\",\n polygonRightclick: \"polygonRightclick\",\n polygonInitialized: \"polygonInitialized\"\n },\n exportAs: [\"mapPolygon\"]\n });\n }\n return MapPolygon;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/**\n * Angular component that renders a Google Maps Polyline via the Google Maps JavaScript API.\n *\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polyline\n */\nlet MapPolyline = /*#__PURE__*/(() => {\n class MapPolyline {\n _map = inject(GoogleMap);\n _ngZone = inject(NgZone);\n _eventManager = new MapEventManager(inject(NgZone));\n _options = new BehaviorSubject({});\n _path = new BehaviorSubject(undefined);\n _destroyed = new Subject();\n /**\n * The underlying google.maps.Polyline object.\n *\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polyline\n */\n polyline;\n set options(options) {\n this._options.next(options || {});\n }\n set path(path) {\n this._path.next(path);\n }\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.click\n */\n polylineClick = this._eventManager.getLazyEmitter('click');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.dblclick\n */\n polylineDblclick = this._eventManager.getLazyEmitter('dblclick');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.drag\n */\n polylineDrag = this._eventManager.getLazyEmitter('drag');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.dragend\n */\n polylineDragend = this._eventManager.getLazyEmitter('dragend');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.dragstart\n */\n polylineDragstart = this._eventManager.getLazyEmitter('dragstart');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mousedown\n */\n polylineMousedown = this._eventManager.getLazyEmitter('mousedown');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mousemove\n */\n polylineMousemove = this._eventManager.getLazyEmitter('mousemove');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mouseout\n */\n polylineMouseout = this._eventManager.getLazyEmitter('mouseout');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mouseover\n */\n polylineMouseover = this._eventManager.getLazyEmitter('mouseover');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mouseup\n */\n polylineMouseup = this._eventManager.getLazyEmitter('mouseup');\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.rightclick\n */\n polylineRightclick = this._eventManager.getLazyEmitter('rightclick');\n /** Event emitted when the polyline is initialized. */\n polylineInitialized = new EventEmitter();\n constructor() {}\n ngOnInit() {\n if (this._map._isBrowser) {\n this._combineOptions().pipe(take(1)).subscribe(options => {\n if (google.maps.Polyline && this._map.googleMap) {\n this._initialize(this._map.googleMap, google.maps.Polyline, options);\n } else {\n this._ngZone.runOutsideAngular(() => {\n Promise.all([this._map._resolveMap(), google.maps.importLibrary('maps')]).then(([map, lib]) => {\n this._initialize(map, lib.Polyline, options);\n });\n });\n }\n });\n }\n }\n _initialize(map, polylineConstructor, options) {\n // Create the object outside the zone so its events don't trigger change detection.\n // We'll bring it back in inside the `MapEventManager` only for the events that the\n // user has subscribed to.\n this._ngZone.runOutsideAngular(() => {\n this.polyline = new polylineConstructor(options);\n this._assertInitialized();\n this.polyline.setMap(map);\n this._eventManager.setTarget(this.polyline);\n this.polylineInitialized.emit(this.polyline);\n this._watchForOptionsChanges();\n this._watchForPathChanges();\n });\n }\n ngOnDestroy() {\n this._eventManager.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n this.polyline?.setMap(null);\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.getDraggable\n */\n getDraggable() {\n this._assertInitialized();\n return this.polyline.getDraggable();\n }\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.getEditable\n */\n getEditable() {\n this._assertInitialized();\n return this.polyline.getEditable();\n }\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.getPath\n */\n getPath() {\n this._assertInitialized();\n return this.polyline.getPath();\n }\n /**\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.getVisible\n */\n getVisible() {\n this._assertInitialized();\n return this.polyline.getVisible();\n }\n _combineOptions() {\n return combineLatest([this._options, this._path]).pipe(map(([options, path]) => {\n const combinedOptions = {\n ...options,\n path: path || options.path\n };\n return combinedOptions;\n }));\n }\n _watchForOptionsChanges() {\n this._options.pipe(takeUntil(this._destroyed)).subscribe(options => {\n this._assertInitialized();\n this.polyline.setOptions(options);\n });\n }\n _watchForPathChanges() {\n this._path.pipe(takeUntil(this._destroyed)).subscribe(path => {\n if (path) {\n this._assertInitialized();\n this.polyline.setPath(path);\n }\n });\n }\n _assertInitialized() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this.polyline) {\n throw Error('Cannot interact with a Google Map Polyline before it has been ' + 'initialized. Please wait for the Polyline to load before trying to interact with it.');\n }\n }\n }\n static ɵfac = function MapPolyline_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MapPolyline)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MapPolyline,\n selectors: [[\"map-polyline\"]],\n inputs: {\n options: \"options\",\n path: \"path\"\n },\n outputs: {\n polylineClick: \"polylineClick\",\n polylineDblclick: \"polylineDblclick\",\n polylineDrag: \"polylineDrag\",\n polylineDragend: \"polylineDragend\",\n polylineDragstart: \"polylineDragstart\",\n polylineMousedown: \"polylineMousedown\",\n polylineMousemove: \"polylineMousemove\",\n polylineMouseout: \"polylineMouseout\",\n polylineMouseover: \"polylineMouseover\",\n polylineMouseup: \"polylineMouseup\",\n polylineRightclick: \"polylineRightclick\",\n polylineInitialized: \"polylineInitialized\"\n },\n exportAs: [\"mapPolyline\"]\n });\n }\n return MapPolyline;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/**\n * Angular component that renders a Google Maps Rectangle via the Google Maps JavaScript API.\n *\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Rectangle\n */\nlet MapRectangle = /*#__PURE__*/(() => {\n class MapRectangle {\n _map = inject(GoogleMap);\n _ngZone = inject(NgZone);\n _eventManager = new MapEventManager(inject(NgZone));\n _options = new BehaviorSubject({});\n _bounds = new BehaviorSubject(undefined);\n _destroyed = new Subject();\n /**\n * The underlying google.maps.Rectangle object.\n *\n * See developers.google.com/maps/documentation/javascript/reference/polygon#Rectangle\n */\n rectangle;\n set options(options) {\n this._options.next(options || {});\n }\n set bounds(bounds) {\n this._bounds.next(bounds);\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/polygon#Rectangle.boundsChanged\n */\n boundsChanged = this._eventManager.getLazyEmitter('bounds_changed');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/polygon#Rectangle.click\n */\n rectangleClick = this._eventManager.getLazyEmitter('click');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/polygon#Rectangle.dblclick\n */\n rectangleDblclick = this._eventManager.getLazyEmitter('dblclick');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/polygon#Rectangle.drag\n */\n rectangleDrag = this._eventManager.getLazyEmitter('drag');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/polygon#Rectangle.dragend\n */\n rectangleDragend = this._eventManager.getLazyEmitter('dragend');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/polygon#Rectangle.dragstart\n */\n rectangleDragstart = this._eventManager.getLazyEmitter('dragstart');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/polygon#Rectangle.mousedown\n */\n rectangleMousedown = this._eventManager.getLazyEmitter('mousedown');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/polygon#Rectangle.mousemove\n */\n rectangleMousemove = this._eventManager.getLazyEmitter('mousemove');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/polygon#Rectangle.mouseout\n */\n rectangleMouseout = this._eventManager.getLazyEmitter('mouseout');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/polygon#Rectangle.mouseover\n */\n rectangleMouseover = this._eventManager.getLazyEmitter('mouseover');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/polygon#Rectangle.mouseup\n */\n rectangleMouseup = this._eventManager.getLazyEmitter('mouseup');\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/polygon#Rectangle.rightclick\n */\n rectangleRightclick = this._eventManager.getLazyEmitter('rightclick');\n /** Event emitted when the rectangle is initialized. */\n rectangleInitialized = new EventEmitter();\n constructor() {}\n ngOnInit() {\n if (this._map._isBrowser) {\n this._combineOptions().pipe(take(1)).subscribe(options => {\n if (google.maps.Rectangle && this._map.googleMap) {\n this._initialize(this._map.googleMap, google.maps.Rectangle, options);\n } else {\n this._ngZone.runOutsideAngular(() => {\n Promise.all([this._map._resolveMap(), google.maps.importLibrary('maps')]).then(([map, lib]) => {\n this._initialize(map, lib.Rectangle, options);\n });\n });\n }\n });\n }\n }\n _initialize(map, rectangleConstructor, options) {\n // Create the object outside the zone so its events don't trigger change detection.\n // We'll bring it back in inside the `MapEventManager` only for the events that the\n // user has subscribed to.\n this._ngZone.runOutsideAngular(() => {\n this.rectangle = new rectangleConstructor(options);\n this._assertInitialized();\n this.rectangle.setMap(map);\n this._eventManager.setTarget(this.rectangle);\n this.rectangleInitialized.emit(this.rectangle);\n this._watchForOptionsChanges();\n this._watchForBoundsChanges();\n });\n }\n ngOnDestroy() {\n this._eventManager.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n this.rectangle?.setMap(null);\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/polygon#Rectangle.getBounds\n */\n getBounds() {\n this._assertInitialized();\n return this.rectangle.getBounds();\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/polygon#Rectangle.getDraggable\n */\n getDraggable() {\n this._assertInitialized();\n return this.rectangle.getDraggable();\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/polygon#Rectangle.getEditable\n */\n getEditable() {\n this._assertInitialized();\n return this.rectangle.getEditable();\n }\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/polygon#Rectangle.getVisible\n */\n getVisible() {\n this._assertInitialized();\n return this.rectangle.getVisible();\n }\n _combineOptions() {\n return combineLatest([this._options, this._bounds]).pipe(map(([options, bounds]) => {\n const combinedOptions = {\n ...options,\n bounds: bounds || options.bounds\n };\n return combinedOptions;\n }));\n }\n _watchForOptionsChanges() {\n this._options.pipe(takeUntil(this._destroyed)).subscribe(options => {\n this._assertInitialized();\n this.rectangle.setOptions(options);\n });\n }\n _watchForBoundsChanges() {\n this._bounds.pipe(takeUntil(this._destroyed)).subscribe(bounds => {\n if (bounds) {\n this._assertInitialized();\n this.rectangle.setBounds(bounds);\n }\n });\n }\n _assertInitialized() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this.rectangle) {\n throw Error('Cannot interact with a Google Map Rectangle before it has been initialized. ' + 'Please wait for the Rectangle to load before trying to interact with it.');\n }\n }\n }\n static ɵfac = function MapRectangle_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MapRectangle)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MapRectangle,\n selectors: [[\"map-rectangle\"]],\n inputs: {\n options: \"options\",\n bounds: \"bounds\"\n },\n outputs: {\n boundsChanged: \"boundsChanged\",\n rectangleClick: \"rectangleClick\",\n rectangleDblclick: \"rectangleDblclick\",\n rectangleDrag: \"rectangleDrag\",\n rectangleDragend: \"rectangleDragend\",\n rectangleDragstart: \"rectangleDragstart\",\n rectangleMousedown: \"rectangleMousedown\",\n rectangleMousemove: \"rectangleMousemove\",\n rectangleMouseout: \"rectangleMouseout\",\n rectangleMouseover: \"rectangleMouseover\",\n rectangleMouseup: \"rectangleMouseup\",\n rectangleRightclick: \"rectangleRightclick\",\n rectangleInitialized: \"rectangleInitialized\"\n },\n exportAs: [\"mapRectangle\"]\n });\n }\n return MapRectangle;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/**\n * Angular component that renders a Google Maps Traffic Layer via the Google Maps JavaScript API.\n *\n * See developers.google.com/maps/documentation/javascript/reference/map#TrafficLayer\n */\nlet MapTrafficLayer = /*#__PURE__*/(() => {\n class MapTrafficLayer {\n _map = inject(GoogleMap);\n _ngZone = inject(NgZone);\n _autoRefresh = new BehaviorSubject(true);\n _destroyed = new Subject();\n /**\n * The underlying google.maps.TrafficLayer object.\n *\n * See developers.google.com/maps/documentation/javascript/reference/map#TrafficLayer\n */\n trafficLayer;\n /**\n * Whether the traffic layer refreshes with updated information automatically.\n */\n set autoRefresh(autoRefresh) {\n this._autoRefresh.next(autoRefresh);\n }\n /** Event emitted when the traffic layer is initialized. */\n trafficLayerInitialized = new EventEmitter();\n constructor() {}\n ngOnInit() {\n if (this._map._isBrowser) {\n this._combineOptions().pipe(take(1)).subscribe(options => {\n if (google.maps.TrafficLayer && this._map.googleMap) {\n this._initialize(this._map.googleMap, google.maps.TrafficLayer, options);\n } else {\n this._ngZone.runOutsideAngular(() => {\n Promise.all([this._map._resolveMap(), google.maps.importLibrary('maps')]).then(([map, lib]) => {\n this._initialize(map, lib.TrafficLayer, options);\n });\n });\n }\n });\n }\n }\n _initialize(map, layerConstructor, options) {\n this._ngZone.runOutsideAngular(() => {\n this.trafficLayer = new layerConstructor(options);\n this._assertInitialized();\n this.trafficLayer.setMap(map);\n this.trafficLayerInitialized.emit(this.trafficLayer);\n this._watchForAutoRefreshChanges();\n });\n }\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n this.trafficLayer?.setMap(null);\n }\n _combineOptions() {\n return this._autoRefresh.pipe(map(autoRefresh => {\n const combinedOptions = {\n autoRefresh\n };\n return combinedOptions;\n }));\n }\n _watchForAutoRefreshChanges() {\n this._combineOptions().pipe(takeUntil(this._destroyed)).subscribe(options => {\n this._assertInitialized();\n this.trafficLayer.setOptions(options);\n });\n }\n _assertInitialized() {\n if (!this.trafficLayer) {\n throw Error('Cannot interact with a Google Map Traffic Layer before it has been initialized. ' + 'Please wait for the Traffic Layer to load before trying to interact with it.');\n }\n }\n static ɵfac = function MapTrafficLayer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MapTrafficLayer)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MapTrafficLayer,\n selectors: [[\"map-traffic-layer\"]],\n inputs: {\n autoRefresh: \"autoRefresh\"\n },\n outputs: {\n trafficLayerInitialized: \"trafficLayerInitialized\"\n },\n exportAs: [\"mapTrafficLayer\"]\n });\n }\n return MapTrafficLayer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/**\n * Angular component that renders a Google Maps Transit Layer via the Google Maps JavaScript API.\n *\n * See developers.google.com/maps/documentation/javascript/reference/map#TransitLayer\n */\nlet MapTransitLayer = /*#__PURE__*/(() => {\n class MapTransitLayer {\n _map = inject(GoogleMap);\n _zone = inject(NgZone);\n /**\n * The underlying google.maps.TransitLayer object.\n *\n * See developers.google.com/maps/documentation/javascript/reference/map#TransitLayer\n */\n transitLayer;\n /** Event emitted when the transit layer is initialized. */\n transitLayerInitialized = new EventEmitter();\n ngOnInit() {\n if (this._map._isBrowser) {\n if (google.maps.TransitLayer && this._map.googleMap) {\n this._initialize(this._map.googleMap, google.maps.TransitLayer);\n } else {\n this._zone.runOutsideAngular(() => {\n Promise.all([this._map._resolveMap(), google.maps.importLibrary('maps')]).then(([map, lib]) => {\n this._initialize(map, lib.TransitLayer);\n });\n });\n }\n }\n }\n _initialize(map, layerConstructor) {\n this._zone.runOutsideAngular(() => {\n this.transitLayer = new layerConstructor();\n this.transitLayerInitialized.emit(this.transitLayer);\n this._assertLayerInitialized();\n this.transitLayer.setMap(map);\n });\n }\n ngOnDestroy() {\n this.transitLayer?.setMap(null);\n }\n _assertLayerInitialized() {\n if (!this.transitLayer) {\n throw Error('Cannot interact with a Google Map Transit Layer before it has been initialized. ' + 'Please wait for the Transit Layer to load before trying to interact with it.');\n }\n }\n static ɵfac = function MapTransitLayer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MapTransitLayer)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MapTransitLayer,\n selectors: [[\"map-transit-layer\"]],\n outputs: {\n transitLayerInitialized: \"transitLayerInitialized\"\n },\n exportAs: [\"mapTransitLayer\"]\n });\n }\n return MapTransitLayer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/**\n * Angular directive that renders a Google Maps heatmap via the Google Maps JavaScript API.\n *\n * See: https://developers.google.com/maps/documentation/javascript/reference/visualization\n */\nlet MapHeatmapLayer = /*#__PURE__*/(() => {\n class MapHeatmapLayer {\n _googleMap = inject(GoogleMap);\n _ngZone = inject(NgZone);\n /**\n * Data shown on the heatmap.\n * See: https://developers.google.com/maps/documentation/javascript/reference/visualization\n */\n set data(data) {\n this._data = data;\n }\n _data;\n /**\n * Options used to configure the heatmap. See:\n * developers.google.com/maps/documentation/javascript/reference/visualization#HeatmapLayerOptions\n */\n set options(options) {\n this._options = options;\n }\n _options;\n /**\n * The underlying google.maps.visualization.HeatmapLayer object.\n *\n * See: https://developers.google.com/maps/documentation/javascript/reference/visualization\n */\n heatmap;\n /** Event emitted when the heatmap is initialized. */\n heatmapInitialized = new EventEmitter();\n constructor() {}\n ngOnInit() {\n if (this._googleMap._isBrowser) {\n if (!window.google?.maps?.visualization && !window.google?.maps.importLibrary && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Namespace `google.maps.visualization` not found, cannot construct heatmap. ' + 'Please install the Google Maps JavaScript API with the \"visualization\" library: ' + 'https://developers.google.com/maps/documentation/javascript/visualization');\n }\n if (google.maps.visualization?.HeatmapLayer && this._googleMap.googleMap) {\n this._initialize(this._googleMap.googleMap, google.maps.visualization.HeatmapLayer);\n } else {\n this._ngZone.runOutsideAngular(() => {\n Promise.all([this._googleMap._resolveMap(), google.maps.importLibrary('visualization')]).then(([map, lib]) => {\n this._initialize(map, lib.HeatmapLayer);\n });\n });\n }\n }\n }\n _initialize(map, heatmapConstructor) {\n // Create the object outside the zone so its events don't trigger change detection.\n // We'll bring it back in inside the `MapEventManager` only for the events that the\n // user has subscribed to.\n this._ngZone.runOutsideAngular(() => {\n this.heatmap = new heatmapConstructor(this._combineOptions());\n this._assertInitialized();\n this.heatmap.setMap(map);\n this.heatmapInitialized.emit(this.heatmap);\n });\n }\n ngOnChanges(changes) {\n const {\n _data,\n heatmap\n } = this;\n if (heatmap) {\n if (changes['options']) {\n heatmap.setOptions(this._combineOptions());\n }\n if (changes['data'] && _data !== undefined) {\n heatmap.setData(this._normalizeData(_data));\n }\n }\n }\n ngOnDestroy() {\n this.heatmap?.setMap(null);\n }\n /**\n * Gets the data that is currently shown on the heatmap.\n * See: developers.google.com/maps/documentation/javascript/reference/visualization#HeatmapLayer\n */\n getData() {\n this._assertInitialized();\n return this.heatmap.getData();\n }\n /** Creates a combined options object using the passed-in options and the individual inputs. */\n _combineOptions() {\n const options = this._options || {};\n return {\n ...options,\n data: this._normalizeData(this._data || options.data || []),\n map: this._googleMap.googleMap\n };\n }\n /**\n * Most Google Maps APIs support both `LatLng` objects and `LatLngLiteral`. The latter is more\n * convenient to write out, because the Google Maps API doesn't have to have been loaded in order\n * to construct them. The `HeatmapLayer` appears to be an exception that only allows a `LatLng`\n * object, or it throws a runtime error. Since it's more convenient and we expect that Angular\n * users will load the API asynchronously, we allow them to pass in a `LatLngLiteral` and we\n * convert it to a `LatLng` object before passing it off to Google Maps.\n */\n _normalizeData(data) {\n const result = [];\n data.forEach(item => {\n result.push(isLatLngLiteral(item) ? new google.maps.LatLng(item.lat, item.lng) : item);\n });\n return result;\n }\n /** Asserts that the heatmap object has been initialized. */\n _assertInitialized() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this.heatmap) {\n throw Error('Cannot interact with a Google Map HeatmapLayer before it has been ' + 'initialized. Please wait for the heatmap to load before trying to interact with it.');\n }\n }\n }\n static ɵfac = function MapHeatmapLayer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MapHeatmapLayer)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MapHeatmapLayer,\n selectors: [[\"map-heatmap-layer\"]],\n inputs: {\n data: \"data\",\n options: \"options\"\n },\n outputs: {\n heatmapInitialized: \"heatmapInitialized\"\n },\n exportAs: [\"mapHeatmapLayer\"],\n features: [i0.ɵɵNgOnChangesFeature]\n });\n }\n return MapHeatmapLayer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Asserts that an object is a `LatLngLiteral`. */\nfunction isLatLngLiteral(value) {\n return value && typeof value.lat === 'number' && typeof value.lng === 'number';\n}\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/**\n * Default options for the Google Maps marker component. Displays a marker\n * at the Googleplex.\n */\nconst DEFAULT_MARKER_OPTIONS = {\n position: {\n lat: 37.221995,\n lng: -122.184092\n }\n};\n/**\n * Angular component that renders a Google Maps marker via the Google Maps JavaScript API.\n *\n * See developers.google.com/maps/documentation/javascript/reference/marker\n */\nlet MapAdvancedMarker = /*#__PURE__*/(() => {\n class MapAdvancedMarker {\n _googleMap = inject(GoogleMap);\n _ngZone = inject(NgZone);\n _eventManager = new MapEventManager(inject(NgZone));\n /**\n * Rollover text. If provided, an accessibility text (e.g. for use with screen readers) will be added to the AdvancedMarkerElement with the provided value.\n * See: https://developers.google.com/maps/documentation/javascript/reference/advanced-markers#AdvancedMarkerElementOptions.title\n */\n set title(title) {\n this._title = title;\n }\n _title;\n /**\n * Sets the AdvancedMarkerElement's position. An AdvancedMarkerElement may be constructed without a position, but will not be displayed until its position is provided - for example, by a user's actions or choices. An AdvancedMarkerElement's position can be provided by setting AdvancedMarkerElement.position if not provided at the construction.\n * Note: AdvancedMarkerElement with altitude is only supported on vector maps.\n * https://developers.google.com/maps/documentation/javascript/reference/advanced-markers#AdvancedMarkerElementOptions.position\n */\n set position(position) {\n this._position = position;\n }\n _position;\n /**\n * The DOM Element backing the visual of an AdvancedMarkerElement.\n * Note: AdvancedMarkerElement does not clone the passed-in DOM element. Once the DOM element is passed to an AdvancedMarkerElement, passing the same DOM element to another AdvancedMarkerElement will move the DOM element and cause the previous AdvancedMarkerElement to look empty.\n * See: https://developers.google.com/maps/documentation/javascript/reference/advanced-markers#AdvancedMarkerElementOptions.content\n */\n set content(content) {\n this._content = content;\n }\n _content;\n /**\n * If true, the AdvancedMarkerElement can be dragged.\n * Note: AdvancedMarkerElement with altitude is not draggable.\n * https://developers.google.com/maps/documentation/javascript/reference/advanced-markers#AdvancedMarkerElementOptions.gmpDraggable\n */\n set gmpDraggable(draggable) {\n this._draggable = draggable;\n }\n _draggable;\n /**\n * Options for constructing an AdvancedMarkerElement.\n * https://developers.google.com/maps/documentation/javascript/reference/advanced-markers#AdvancedMarkerElementOptions\n */\n set options(options) {\n this._options = options;\n }\n _options;\n /**\n * AdvancedMarkerElements on the map are prioritized by zIndex, with higher values indicating higher display.\n * https://developers.google.com/maps/documentation/javascript/reference/advanced-markers#AdvancedMarkerElementOptions.zIndex\n */\n set zIndex(zIndex) {\n this._zIndex = zIndex;\n }\n _zIndex;\n /**\n * This event is fired when the AdvancedMarkerElement element is clicked.\n * https://developers.google.com/maps/documentation/javascript/reference/advanced-markers#AdvancedMarkerElement.click\n */\n mapClick = this._eventManager.getLazyEmitter('click');\n /**\n * This event is fired when the AdvancedMarkerElement is double-clicked.\n */\n mapDblclick = this._eventManager.getLazyEmitter('dblclick');\n /**\n * This event is fired when the mouse moves out of the AdvancedMarkerElement.\n */\n mapMouseout = this._eventManager.getLazyEmitter('mouseout');\n /**\n * This event is fired when the mouse moves over the AdvancedMarkerElement.\n */\n mapMouseover = this._eventManager.getLazyEmitter('mouseover');\n /**\n * This event is fired when the mouse button is released over the AdvancedMarkerElement.\n */\n mapMouseup = this._eventManager.getLazyEmitter('mouseup');\n /**\n * This event is fired when the AdvancedMarkerElement is right-clicked.\n */\n mapRightclick = this._eventManager.getLazyEmitter('rightclick');\n /**\n * This event is repeatedly fired while the user drags the AdvancedMarkerElement.\n * https://developers.google.com/maps/documentation/javascript/reference/advanced-markers#AdvancedMarkerElement.drag\n */\n mapDrag = this._eventManager.getLazyEmitter('drag');\n /**\n * This event is fired when the user stops dragging the AdvancedMarkerElement.\n * https://developers.google.com/maps/documentation/javascript/reference/advanced-markers#AdvancedMarkerElement.dragend\n */\n mapDragend = this._eventManager.getLazyEmitter('dragend');\n /**\n * This event is fired when the user starts dragging the AdvancedMarkerElement.\n * https://developers.google.com/maps/documentation/javascript/reference/advanced-markers#AdvancedMarkerElement.dragstart\n */\n mapDragstart = this._eventManager.getLazyEmitter('dragstart');\n /** Event emitted when the marker is initialized. */\n markerInitialized = new EventEmitter();\n /**\n * The underlying google.maps.marker.AdvancedMarkerElement object.\n *\n * See developers.google.com/maps/documentation/javascript/reference/advanced-markers#AdvancedMarkerElement\n */\n advancedMarker;\n constructor() {}\n ngOnInit() {\n if (!this._googleMap._isBrowser) {\n return;\n }\n if (google.maps.marker?.AdvancedMarkerElement && this._googleMap.googleMap) {\n this._initialize(this._googleMap.googleMap, google.maps.marker.AdvancedMarkerElement);\n } else {\n this._ngZone.runOutsideAngular(() => {\n Promise.all([this._googleMap._resolveMap(), google.maps.importLibrary('marker')]).then(([map, lib]) => {\n this._initialize(map, lib.AdvancedMarkerElement);\n });\n });\n }\n }\n _initialize(map, advancedMarkerConstructor) {\n // Create the object outside the zone so its events don't trigger change detection.\n // We'll bring it back in inside the `MapEventManager` only for the events that the\n // user has subscribed to.\n this._ngZone.runOutsideAngular(() => {\n this.advancedMarker = new advancedMarkerConstructor(this._combineOptions());\n this._assertInitialized();\n this.advancedMarker.map = map;\n this._eventManager.setTarget(this.advancedMarker);\n this.markerInitialized.next(this.advancedMarker);\n });\n }\n ngOnChanges(changes) {\n const {\n advancedMarker,\n _content,\n _position,\n _title,\n _draggable,\n _zIndex\n } = this;\n if (advancedMarker) {\n if (changes['title']) {\n advancedMarker.title = _title;\n }\n if (changes['gmpDraggable']) {\n advancedMarker.gmpDraggable = _draggable;\n }\n if (changes['content']) {\n advancedMarker.content = _content;\n }\n if (changes['position']) {\n advancedMarker.position = _position;\n }\n if (changes['zIndex']) {\n advancedMarker.zIndex = _zIndex;\n }\n }\n }\n ngOnDestroy() {\n this.markerInitialized.complete();\n this._eventManager.destroy();\n if (this.advancedMarker) {\n this.advancedMarker.map = null;\n }\n }\n getAnchor() {\n this._assertInitialized();\n return this.advancedMarker;\n }\n /** Returns a promise that resolves when the marker has been initialized. */\n _resolveMarker() {\n return this.advancedMarker ? Promise.resolve(this.advancedMarker) : this.markerInitialized.pipe(take(1)).toPromise();\n }\n /** Creates a combined options object using the passed-in options and the individual inputs. */\n _combineOptions() {\n const options = this._options || DEFAULT_MARKER_OPTIONS;\n return {\n ...options,\n title: this._title || options.title,\n position: this._position || options.position,\n content: this._content || options.content,\n zIndex: this._zIndex ?? options.zIndex,\n gmpDraggable: this._draggable ?? options.gmpDraggable,\n map: this._googleMap.googleMap\n };\n }\n /** Asserts that the map has been initialized. */\n _assertInitialized() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this.advancedMarker) {\n throw Error('Cannot interact with a Google Map Marker before it has been ' + 'initialized. Please wait for the Marker to load before trying to interact with it.');\n }\n }\n }\n static ɵfac = function MapAdvancedMarker_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MapAdvancedMarker)();\n };\n static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: MapAdvancedMarker,\n selectors: [[\"map-advanced-marker\"]],\n inputs: {\n title: \"title\",\n position: \"position\",\n content: \"content\",\n gmpDraggable: \"gmpDraggable\",\n options: \"options\",\n zIndex: \"zIndex\"\n },\n outputs: {\n mapClick: \"mapClick\",\n mapDblclick: \"mapDblclick\",\n mapMouseout: \"mapMouseout\",\n mapMouseover: \"mapMouseover\",\n mapMouseup: \"mapMouseup\",\n mapRightclick: \"mapRightclick\",\n mapDrag: \"mapDrag\",\n mapDragend: \"mapDragend\",\n mapDragstart: \"mapDragstart\",\n markerInitialized: \"markerInitialized\"\n },\n exportAs: [\"mapAdvancedMarker\"],\n features: [i0.ɵɵProvidersFeature([{\n provide: MAP_MARKER,\n useExisting: MapAdvancedMarker\n }]), i0.ɵɵNgOnChangesFeature]\n });\n }\n return MapAdvancedMarker;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/**\n * Angular component for implementing a Google Maps Marker Clusterer.\n *\n * See https://developers.google.com/maps/documentation/javascript/marker-clustering\n */\nlet MapMarkerClusterer = /*#__PURE__*/(() => {\n class MapMarkerClusterer {\n _googleMap = inject(GoogleMap);\n _ngZone = inject(NgZone);\n _currentMarkers = new Set();\n _closestMapEventManager = new MapEventManager(this._ngZone);\n _markersSubscription = Subscription.EMPTY;\n /** Whether the clusterer is allowed to be initialized. */\n _canInitialize = this._googleMap._isBrowser;\n /**\n * Used to customize how the marker cluster is rendered.\n * See https://googlemaps.github.io/js-markerclusterer/interfaces/Renderer.html.\n */\n renderer;\n /**\n * Algorithm used to cluster the markers.\n * See https://googlemaps.github.io/js-markerclusterer/interfaces/Algorithm.html.\n */\n algorithm;\n /** Emits when clustering has started. */\n clusteringbegin = this._closestMapEventManager.getLazyEmitter('clusteringbegin');\n /** Emits when clustering is done. */\n clusteringend = this._closestMapEventManager.getLazyEmitter('clusteringend');\n /** Emits when a cluster has been clicked. */\n clusterClick = new EventEmitter();\n /** Event emitted when the marker clusterer is initialized. */\n markerClustererInitialized = new EventEmitter();\n _markers;\n /** Underlying MarkerClusterer object used to interact with Google Maps. */\n markerClusterer;\n async ngOnInit() {\n if (this._canInitialize) {\n await this._createCluster();\n // The `clusteringbegin` and `clusteringend` events are\n // emitted on the map so that's why set it as the target.\n this._closestMapEventManager.setTarget(this._googleMap.googleMap);\n }\n }\n async ngOnChanges(changes) {\n const change = changes['renderer'] || changes['algorithm'];\n // Since the options are set in the constructor, we have to recreate the cluster if they change.\n if (this.markerClusterer && change && !change.isFirstChange()) {\n await this._createCluster();\n }\n }\n ngOnDestroy() {\n this._markersSubscription.unsubscribe();\n this._closestMapEventManager.destroy();\n this._destroyCluster();\n }\n async _createCluster() {\n if (!markerClusterer?.MarkerClusterer && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('MarkerClusterer class not found, cannot construct a marker cluster. ' + 'Please install the MarkerClusterer library: ' + 'https://github.com/googlemaps/js-markerclusterer');\n }\n const map = await this._googleMap._resolveMap();\n this._destroyCluster();\n // Create the object outside the zone so its events don't trigger change detection.\n // We'll bring it back in inside the `MapEventManager` only for the events that the\n // user has subscribed to.\n this._ngZone.runOutsideAngular(() => {\n this.markerClusterer = new markerClusterer.MarkerClusterer({\n map,\n renderer: this.renderer,\n algorithm: this.algorithm,\n onClusterClick: (event, cluster, map) => {\n if (this.clusterClick.observers.length) {\n this._ngZone.run(() => this.clusterClick.emit(cluster));\n } else {\n markerClusterer.defaultOnClusterClickHandler(event, cluster, map);\n }\n }\n });\n this.markerClustererInitialized.emit(this.markerClusterer);\n });\n await this._watchForMarkerChanges();\n }\n async _watchForMarkerChanges() {\n this._assertInitialized();\n const initialMarkers = [];\n const markers = await this._getInternalMarkers(this._markers.toArray());\n for (const marker of markers) {\n this._currentMarkers.add(marker);\n initialMarkers.push(marker);\n }\n this.markerClusterer.addMarkers(initialMarkers);\n this._markersSubscription.unsubscribe();\n this._markersSubscription = this._markers.changes.subscribe(async markerComponents => {\n this._assertInitialized();\n const newMarkers = new Set(await this._getInternalMarkers(markerComponents));\n const markersToAdd = [];\n const markersToRemove = [];\n for (const marker of Array.from(newMarkers)) {\n if (!this._currentMarkers.has(marker)) {\n this._currentMarkers.add(marker);\n markersToAdd.push(marker);\n }\n }\n for (const marker of Array.from(this._currentMarkers)) {\n if (!newMarkers.has(marker)) {\n markersToRemove.push(marker);\n }\n }\n this.markerClusterer.addMarkers(markersToAdd, true);\n this.markerClusterer.removeMarkers(markersToRemove, true);\n this.markerClusterer.render();\n for (const marker of markersToRemove) {\n this._currentMarkers.delete(marker);\n }\n });\n }\n _destroyCluster() {\n // TODO(crisbeto): the naming here seems odd, but the `MarkerCluster` method isn't\n // exposed. All this method seems to do at the time of writing is to call into `reset`.\n // See: https://github.com/googlemaps/js-markerclusterer/blob/main/src/markerclusterer.ts#L205\n this.markerClusterer?.onRemove();\n this.markerClusterer = undefined;\n }\n _getInternalMarkers(markers) {\n return Promise.all(markers.map(marker => marker._resolveMarker()));\n }\n _assertInitialized() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!this._googleMap.googleMap) {\n throw Error('Cannot access Google Map information before the API has been initialized. ' + 'Please wait for the API to load before trying to interact with it.');\n }\n if (!this.markerClusterer) {\n throw Error('Cannot interact with a MarkerClusterer before it has been initialized. ' + 'Please wait for the MarkerClusterer to load before trying to interact with it.');\n }\n }\n }\n static ɵfac = function MapMarkerClusterer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MapMarkerClusterer)();\n };\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: MapMarkerClusterer,\n selectors: [[\"map-marker-clusterer\"]],\n contentQueries: function MapMarkerClusterer_ContentQueries(rf, ctx, dirIndex) {\n if (rf & 1) {\n i0.ɵɵcontentQuery(dirIndex, MAP_MARKER, 5);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._markers = _t);\n }\n },\n inputs: {\n renderer: \"renderer\",\n algorithm: \"algorithm\"\n },\n outputs: {\n clusteringbegin: \"clusteringbegin\",\n clusteringend: \"clusteringend\",\n clusterClick: \"clusterClick\",\n markerClustererInitialized: \"markerClustererInitialized\"\n },\n exportAs: [\"mapMarkerClusterer\"],\n features: [i0.ɵɵNgOnChangesFeature],\n ngContentSelectors: _c0,\n decls: 1,\n vars: 0,\n template: function MapMarkerClusterer_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵprojectionDef();\n i0.ɵɵprojection(0);\n }\n },\n encapsulation: 2,\n changeDetection: 0\n });\n }\n return MapMarkerClusterer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst COMPONENTS = [GoogleMap, MapBaseLayer, MapBicyclingLayer, MapCircle, MapDirectionsRenderer, MapGroundOverlay, MapHeatmapLayer, MapInfoWindow, MapKmlLayer, MapMarker, MapAdvancedMarker, DeprecatedMapMarkerClusterer, MapPolygon, MapPolyline, MapRectangle, MapTrafficLayer, MapTransitLayer, MapMarkerClusterer];\nlet GoogleMapsModule = /*#__PURE__*/(() => {\n class GoogleMapsModule {\n static ɵfac = function GoogleMapsModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || GoogleMapsModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: GoogleMapsModule\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n return GoogleMapsModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/**\n * Angular service that wraps the Google Maps DirectionsService from the Google Maps JavaScript\n * API.\n *\n * See developers.google.com/maps/documentation/javascript/reference/directions#DirectionsService\n */\nlet MapDirectionsService = /*#__PURE__*/(() => {\n class MapDirectionsService {\n _ngZone = inject(NgZone);\n _directionsService;\n constructor() {}\n /**\n * See\n * developers.google.com/maps/documentation/javascript/reference/directions\n * #DirectionsService.route\n */\n route(request) {\n return new Observable(observer => {\n this._getService().then(service => {\n service.route(request, (result, status) => {\n this._ngZone.run(() => {\n observer.next({\n result: result || undefined,\n status\n });\n observer.complete();\n });\n });\n });\n });\n }\n _getService() {\n if (!this._directionsService) {\n if (google.maps.DirectionsService) {\n this._directionsService = new google.maps.DirectionsService();\n } else {\n return google.maps.importLibrary('routes').then(lib => {\n this._directionsService = new lib.DirectionsService();\n return this._directionsService;\n });\n }\n }\n return Promise.resolve(this._directionsService);\n }\n static ɵfac = function MapDirectionsService_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MapDirectionsService)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MapDirectionsService,\n factory: MapDirectionsService.ɵfac,\n providedIn: 'root'\n });\n }\n return MapDirectionsService;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/**\n * Angular service that wraps the Google Maps Geocoder from the Google Maps JavaScript API.\n * See developers.google.com/maps/documentation/javascript/reference/geocoder#Geocoder\n */\nlet MapGeocoder = /*#__PURE__*/(() => {\n class MapGeocoder {\n _ngZone = inject(NgZone);\n _geocoder;\n constructor() {}\n /**\n * See developers.google.com/maps/documentation/javascript/reference/geocoder#Geocoder.geocode\n */\n geocode(request) {\n return new Observable(observer => {\n this._getGeocoder().then(geocoder => {\n geocoder.geocode(request, (results, status) => {\n this._ngZone.run(() => {\n observer.next({\n results: results || [],\n status\n });\n observer.complete();\n });\n });\n });\n });\n }\n _getGeocoder() {\n if (!this._geocoder) {\n if (google.maps.Geocoder) {\n this._geocoder = new google.maps.Geocoder();\n } else {\n return google.maps.importLibrary('geocoding').then(lib => {\n this._geocoder = new lib.Geocoder();\n return this._geocoder;\n });\n }\n }\n return Promise.resolve(this._geocoder);\n }\n static ɵfac = function MapGeocoder_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || MapGeocoder)();\n };\n static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: MapGeocoder,\n factory: MapGeocoder.ɵfac,\n providedIn: 'root'\n });\n }\n return MapGeocoder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { DeprecatedMapMarkerClusterer, GoogleMap, GoogleMapsModule, MapAdvancedMarker, MapBaseLayer, MapBicyclingLayer, MapCircle, MapDirectionsRenderer, MapDirectionsService, MapEventManager, MapGeocoder, MapGroundOverlay, MapHeatmapLayer, MapInfoWindow, MapKmlLayer, MapMarker, MapMarkerClusterer, MapPolygon, MapPolyline, MapRectangle, MapTrafficLayer, MapTransitLayer };\n","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { ProductComponent } from 'src/@omnial/pages/product/product.component';\nimport { ProductDetail } from 'src/@omnial/_models/catalog/product.model';\n\n@Component({\n selector: 'app-afterpay-dialog',\n templateUrl: './../../../app/shared/afterpay-dialog/afterpay-dialog.component.html',\n styleUrls: ['./../../../app/shared/afterpay-dialog/afterpay-dialog.component.scss'],\n standalone: false\n})\nexport class AfterpayDialogComponent {\n\n constructor(\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: { product: ProductDetail, content: string }) { }\n\n public close(): void {\n this.dialogRef.close();\n }\n}\n","
\n
\n \n
\n
\n
\n
\n","import { ProductFilterGroup } from \"./product-filter.model\";\r\nimport { Product } from \"./product.model\";\r\n\r\nexport class ProductsPaged {\r\n products: Product[];\r\n pageIndex: number;\r\n pageSize: number;\r\n lastPage: boolean;\r\n seName: string;\r\n visible: boolean;\r\n filterGroups: ProductFilterGroup[];\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { BehaviorSubject } from \"rxjs\";\r\nimport { Category } from \"src/@omnial/_models/catalog/category.model\";\r\nimport { ProductsPaged } from \"src/@omnial/_models/catalog/products.paged.model\";\r\n\r\n@Injectable()\r\nexport class ProductCategoryService {\r\n public category: BehaviorSubject = new BehaviorSubject(null);\r\n private $category: Category = null;\r\n public categoryProducts: BehaviorSubject = new BehaviorSubject(null);\r\n private $products: ProductsPaged = null;\r\n\r\n constructor() { }\r\n\r\n public load(): void {\r\n this.$category = null;\r\n this.category.next(null);\r\n this.$products = null;\r\n this.categoryProducts.next(null);\r\n }\r\n\r\n public replaceCategory(category: Category): void {\r\n this.$category = category;\r\n this.category.next(this.$category);\r\n this.categoryProducts.next(null);\r\n }\r\n\r\n public replaceProducts(products: ProductsPaged): void {\r\n this.$products = products;\r\n this.categoryProducts.next(this.$products);\r\n }\r\n\r\n public seName(): string {\r\n return this.$products?.seName;\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { BehaviorSubject } from \"rxjs\";\r\nimport { Manufacturer } from \"src/@omnial/_models/catalog/manufacturer.model\";\r\nimport { ProductsPaged } from \"src/@omnial/_models/catalog/products.paged.model\";\r\n\r\n@Injectable()\r\nexport class ProductManufacturerService {\r\n public manufacturer: BehaviorSubject = new BehaviorSubject(null);\r\n private $manufacturer: Manufacturer = null;\r\n public manufacturerProducts: BehaviorSubject = new BehaviorSubject(null);\r\n private $products: ProductsPaged = null;\r\n\r\n constructor() { }\r\n\r\n public load(): void {\r\n this.$products = null;\r\n this.manufacturerProducts.next(null);\r\n }\r\n\r\n public replaceManufacturer(manufacturer: Manufacturer): void {\r\n this.$manufacturer = manufacturer;\r\n this.manufacturer.next(this.$manufacturer);\r\n this.manufacturerProducts.next(null);\r\n }\r\n\r\n public replaceProducts(products: ProductsPaged): void {\r\n this.$products = products;\r\n this.manufacturerProducts.next(this.$products);\r\n }\r\n}\r\n","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { RepositoryService } from '../repository.service';\r\nimport { RepositoryStaticService } from '../repository-static.service';\r\nimport { ProductCategoryService } from './product-category.service';\r\nimport { ProductManufacturerService } from './product-manufacturer.service';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Category } from 'src/@omnial/_models/catalog/category.model';\r\nimport { Manufacturer } from 'src/@omnial/_models/catalog/manufacturer.model';\r\nimport { Product, ProductDetail } from 'src/@omnial/_models/catalog/product.model';\r\nimport { Customer } from 'src/@omnial/_models/customer/customer.model';\r\nimport { environment } from 'src/environments/environment';\r\nimport { KlaviyoService } from '../external/klaviyo.service';\r\nimport { ProductsPaged } from 'src/@omnial/_models/catalog/products.paged.model';\r\n\r\n@Injectable()\r\nexport class CatalogService implements OnDestroy {\r\n public customer: Customer = null;\r\n public categoryPageIndex = 0;\r\n public currentCategory: string;\r\n public manufacturerPageIndex = 0;\r\n public currentManufacturer: string;\r\n private subscriptions: Subscription[] = [];\r\n private useCache = environment.useCache;\r\n\r\n constructor(\r\n public staticService: RepositoryStaticService,\r\n public repoService: RepositoryService,\r\n public snackBar: MatSnackBar,\r\n public klaviyoService: KlaviyoService,\r\n public router: Router,\r\n public productCategoryService: ProductCategoryService,\r\n public productManufacturerService: ProductManufacturerService,\r\n private route: ActivatedRoute) {\r\n this.route.fragment.subscribe((fragment: string) => {\r\n if (fragment && fragment === 'CacheBust') {\r\n this.useCache = false;\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscriptions && this.subscriptions.length > 0) {\r\n this.subscriptions.forEach((sub) => { sub.unsubscribe() });\r\n }\r\n }\r\n\r\n public getProduct(id: number, bypassCache?: boolean): Observable {\r\n return new Observable((observer) => {\r\n if (this.useCache && !bypassCache) {\r\n let product: Product = null;\r\n this.subscriptions.push(this.staticService.getById('Product', id).subscribe({\r\n next: (staticRes) => {\r\n product = staticRes as Product;\r\n if (product) {\r\n observer.next(staticRes as Product);\r\n observer.complete();\r\n } else {\r\n this.subscriptions.push(this.repoService.getData(`Product/${id}`).subscribe({\r\n next: (apiRes) => {\r\n observer.next(apiRes as Product);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n const errMessage = 'Sorry we could get the product. Please try again later or hit refresh.';\r\n this.snackBar.open(errMessage, 'X', { panelClass: ['error'], verticalPosition: 'top', duration: 3000 });\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n },\r\n error: (e) => {\r\n this.subscriptions.push(this.repoService.getData(`Product/${id}`).subscribe({\r\n next: (apiRes) => {\r\n observer.next(apiRes as Product);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n const errMessage = 'Sorry we could get the product. Please try again later or hit refresh.';\r\n this.snackBar.open(errMessage, 'X', { panelClass: ['error'], verticalPosition: 'top', duration: 3000 });\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n }));\r\n } else {\r\n this.subscriptions.push(this.repoService.getData(`Product/${id}`).subscribe({\r\n next: (res) => {\r\n observer.next(res as Product);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n const errMessage = 'Sorry we could get the product. Please try again later or hit refresh.';\r\n this.snackBar.open(errMessage, 'X', { panelClass: ['error'], verticalPosition: 'top', duration: 3000 });\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n });\r\n }\r\n\r\n public getProductDetail(id: number, bypassCache?: boolean): Observable {\r\n return new Observable((observer) => {\r\n if (this.useCache && !bypassCache) {\r\n this.subscriptions.push(this.staticService.getById('Product', id).subscribe({\r\n next: (staticRes) => {\r\n if (staticRes) {\r\n this.klaviyoService.viewProduct(staticRes as ProductDetail, this.router.url);\r\n observer.next(staticRes as ProductDetail);\r\n observer.complete();\r\n } else {\r\n this.subscriptions.push(this.repoService.getData(`Product/${id}`).subscribe({\r\n next: (apiRes) => {\r\n if (apiRes) {\r\n this.klaviyoService.viewProduct(apiRes as ProductDetail, this.router.url);\r\n observer.next(apiRes as ProductDetail);\r\n observer.complete();\r\n } else {\r\n const errMessage = 'Sorry we could get the product. Please try again later or hit refresh.';\r\n this.snackBar.open(errMessage, 'X', { panelClass: ['error'], verticalPosition: 'top', duration: 3000 });\r\n observer.error(null);\r\n observer.complete();\r\n }\r\n },\r\n error: (e) => {\r\n const errMessage = 'Sorry we could get the product. Please try again later or hit refresh.';\r\n this.snackBar.open(errMessage, 'X', { panelClass: ['error'], verticalPosition: 'top', duration: 3000 });\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n },\r\n error: (e) => {\r\n this.subscriptions.push(this.repoService.getData(`Product/${id}`).subscribe({\r\n next: (apiRes) => {\r\n this.klaviyoService.viewProduct(apiRes as ProductDetail, this.router.url);\r\n observer.next(apiRes as ProductDetail);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n const errMessage = 'Sorry we could get the product. Please try again later or hit refresh.';\r\n this.snackBar.open(errMessage, 'X', { panelClass: ['error'], verticalPosition: 'top', duration: 3000 });\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n }));\r\n } else {\r\n this.subscriptions.push(this.repoService.getData(`Product/${id}`).subscribe({\r\n next: (res) => {\r\n this.klaviyoService.viewProduct(res as ProductDetail, this.router.url);\r\n observer.next(res as ProductDetail);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n const errMessage = 'Sorry we could get the product. Please try again later or hit refresh.';\r\n this.snackBar.open(errMessage, 'X', { panelClass: ['error'], verticalPosition: 'top', duration: 3000 });\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n });\r\n }\r\n\r\n public getRelatedProducts(id: number, bypassCache?: boolean): Observable {\r\n return new Observable((observer) => {\r\n if (this.useCache && !bypassCache) {\r\n let related: Product[] = null;\r\n this.subscriptions.push(this.staticService.getById('Product/Related', id).subscribe({\r\n next: (staticRes) => {\r\n related = staticRes as Product[];\r\n if (related) {\r\n observer.next(staticRes as Product[]);\r\n observer.complete();\r\n } else {\r\n this.subscriptions.push(this.repoService.getData(`Product/Related/${id}`).subscribe({\r\n next: (apiRes) => {\r\n observer.next(apiRes as Product[]);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n },\r\n error: (e) => {\r\n this.subscriptions.push(this.repoService.getData(`Product/Related/${id}`).subscribe({\r\n next: (apiRes) => {\r\n observer.next(apiRes as Product[]);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n }));\r\n } else {\r\n this.subscriptions.push(this.repoService.getData(`Product/Related/${id}`).subscribe({\r\n next: (apiRes) => {\r\n observer.next(apiRes as Product[]);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n });\r\n }\r\n\r\n public getCategoryProducts(category: Category) {\r\n this.currentCategory = category?.seName;\r\n this.categoryPageIndex = 0;\r\n this.productCategoryService.replaceProducts(null);\r\n this.getCategoryProductsRecursive(category);\r\n }\r\n\r\n private getCategoryProductsRecursive(category: Category) {\r\n if (!category || this.currentCategory !== category.seName) { // To stop recursive calls no longer needed\r\n return;\r\n }\r\n if (this.categoryPageIndex * environment.pageSize > category.products) {\r\n if (this.subscriptions && this.subscriptions.length > 0) {\r\n this.subscriptions.forEach((sub) => {\r\n sub.unsubscribe();\r\n });\r\n }\r\n } else {\r\n const subscription = this.getCategoryProductsPaged(category.seName, this.categoryPageIndex, environment.pageSize).subscribe({\r\n next: (res) => {\r\n if (this.currentCategory === category?.seName) { // To stop recursive calls no longer needed\r\n const page = new ProductsPaged();\r\n page.products = res as Product[];\r\n page.pageIndex = this.categoryPageIndex;\r\n page.pageSize = environment.pageSize;\r\n page.lastPage = (this.categoryPageIndex + 1) * environment.pageSize > category.products - 1;\r\n page.seName = category.seName;\r\n page.visible = page.pageIndex === 0;\r\n this.productCategoryService.replaceProducts(page);\r\n try {\r\n subscription.unsubscribe();\r\n } catch (e) {\r\n // Nothing - Not initialised - TODO - Deal with this.\r\n }\r\n this.categoryPageIndex++;\r\n this.getCategoryProductsRecursive(category);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n private getCategoryProductsPaged(seName: string, pageIndex: number, pageSize: number, bypassCache?: boolean): Observable {\r\n return new Observable((observer) => {\r\n if (this.useCache && !bypassCache) {\r\n this.subscriptions.push(this.staticService.getProducts('Category', seName, pageIndex, pageSize).subscribe({\r\n next: (staticRes) => {\r\n const pagedProducts = staticRes as Product[];\r\n if (pagedProducts) {\r\n observer.next(pagedProducts);\r\n observer.complete();\r\n } else {\r\n this.subscriptions.push(this.repoService.getData(`Category/${seName}/${pageIndex}/${pageSize}`).subscribe({\r\n next: (apiRes) => {\r\n observer.next(apiRes as Product[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n },\r\n error: (e) => {\r\n this.subscriptions.push(this.repoService.getData(`Category/${seName}/${pageIndex}/${pageSize}`).subscribe({\r\n next: (apiRes) => {\r\n observer.next(apiRes as Product[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n }));\r\n } else {\r\n this.subscriptions.push(this.repoService.getData(`Category/${seName}/${this.categoryPageIndex}/${environment.pageSize}`).subscribe({\r\n next: (apiRes) => {\r\n observer.next(apiRes as Product[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n });\r\n }\r\n\r\n public getManufacturerProducts(manufacturer: Manufacturer) {\r\n this.categoryPageIndex = 0;\r\n this.productManufacturerService.replaceProducts(null);\r\n this.currentManufacturer = manufacturer?.seName;\r\n this.getManufacturerProductsRecursive(manufacturer);\r\n }\r\n\r\n private getManufacturerProductsRecursive(manufacturer: Manufacturer) {\r\n if (!manufacturer || this.currentManufacturer !== manufacturer.seName) { // To stop recursive calls no longer needed\r\n return;\r\n }\r\n if (this.categoryPageIndex * environment.pageSize > manufacturer.products) {\r\n if (this.subscriptions && this.subscriptions.length > 0) {\r\n this.subscriptions.forEach((sub) => {\r\n sub.unsubscribe();\r\n });\r\n }\r\n } else {\r\n const subscription = this.getManufacturerProductsPaged(manufacturer.seName, this.categoryPageIndex, environment.pageSize).subscribe({\r\n next: (res) => {\r\n if (this.currentManufacturer === manufacturer?.seName) { // To stop recursive calls no longer needed\r\n const page = new ProductsPaged();\r\n page.products = res as Product[];\r\n page.pageIndex = this.categoryPageIndex;\r\n page.pageSize = environment.pageSize;\r\n page.lastPage = (this.categoryPageIndex + 1) * environment.pageSize > manufacturer.products - 1;\r\n page.seName = manufacturer.seName;\r\n page.visible = page.pageIndex === 0;\r\n this.productManufacturerService.replaceProducts(page);\r\n subscription.unsubscribe();\r\n this.categoryPageIndex++;\r\n this.getManufacturerProductsRecursive(manufacturer);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n private getManufacturerProductsPaged(seName: string, pageIndex: number, pageSize: number, bypassCache?: boolean): Observable {\r\n return new Observable((observer) => {\r\n if (this.useCache && !bypassCache) {\r\n this.subscriptions.push(this.staticService.getProducts('Manufacturer', seName, pageIndex, pageSize).subscribe({\r\n next: (staticRes) => {\r\n const pagedProducts = staticRes as Product[];\r\n if (pagedProducts) {\r\n observer.next(pagedProducts);\r\n observer.complete();\r\n } else {\r\n this.subscriptions.push(this.repoService.getData(`Manufacturer/${seName}/${pageIndex}/${pageSize}`).subscribe({\r\n next: (apiRes) => {\r\n observer.next(apiRes as Product[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n },\r\n error: (e) => {\r\n this.subscriptions.push(this.repoService.getData(`Manufacturer/${seName}/${pageIndex}/${pageSize}`).subscribe({\r\n next: (apiRes) => {\r\n observer.next(apiRes as Product[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n }));\r\n } else {\r\n this.subscriptions.push(this.repoService.getData(`Manufacturer/${seName}/${this.categoryPageIndex}/${environment.pageSize}`).subscribe({\r\n next: (apiRes) => {\r\n observer.next(apiRes as Product[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n });\r\n }\r\n}\r\n","import { Injectable, OnDestroy } from \"@angular/core\";\r\nimport { BehaviorSubject, Subscription } from \"rxjs\";\r\nimport { ThemeSettings } from \"src/@omnial/_models/catalog/theme-settings.model\";\r\nimport { SevenSpikesService } from \"./seven.spikes.service\";\r\n\r\n@Injectable()\r\nexport class ThemeService implements OnDestroy {\r\n public themeSettings: BehaviorSubject = new BehaviorSubject(null);\r\n private $themeSettings: ThemeSettings = null;\r\n private subscriptions: Subscription[] = [];\r\n\r\n constructor(public sevenSpikesService: SevenSpikesService) { }\r\n\r\n public load(init?: ThemeSettings): void {\r\n if (init) {\r\n this.$themeSettings = init;\r\n this.themeSettings.next(this.$themeSettings);\r\n return;\r\n }\r\n if (!this.$themeSettings) {\r\n this.subscriptions.push(this.sevenSpikesService.getThemeSettings().subscribe({\r\n next: (res: ThemeSettings) => {\r\n this.$themeSettings = res;\r\n this.themeSettings.next(this.$themeSettings);\r\n },\r\n error: () => {\r\n this.$themeSettings = null;\r\n this.themeSettings.next(this.$themeSettings);\r\n }\r\n }));\r\n } else{\r\n this.themeSettings.next(this.$themeSettings);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscriptions && this.subscriptions.length > 0) {\r\n this.subscriptions.forEach((sub) => { sub.unsubscribe() });\r\n }\r\n }\r\n}\r\n","import { Component, OnDestroy, Input } from '@angular/core';\nimport { Validators, FormGroup, FormBuilder, FormControl } from '@angular/forms';\nimport { MatCheckboxChange } from '@angular/material/checkbox';\nimport { MatRadioChange } from '@angular/material/radio';\nimport { MatSelectChange } from '@angular/material/select';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { ReCaptchaV3Service } from 'ng-recaptcha-2';\nimport { ToastrService } from 'ngx-toastr';\nimport { Subscription } from 'rxjs';\nimport { ProductAttribute } from 'src/@omnial/_models/catalog/product-attribute.model';\nimport { ProductDetail, ProductOption, SelectAttribute } from 'src/@omnial/_models/catalog/product.model';\nimport { RegRequest, RegResult, LogonRequest, LogonResult, RefreshResponse } from 'src/@omnial/_models/customer/account.model';\nimport { Customer } from 'src/@omnial/_models/customer/customer.model';\nimport { AccountService } from 'src/@omnial/_services/customer/account.service';\nimport { ClaimsService } from 'src/@omnial/_services/customer/claims.service';\nimport { CustomerService } from 'src/@omnial/_services/customer/customer.service';\nimport { CartService } from 'src/@omnial/_services/order/cart.service';\nimport { CurrencyService } from 'src/@omnial/_services/price/currency.service';\nimport { AppSettings } from 'src/app/app.settings';\nimport { EmailRegEx, MatchValidator } from 'src/@omnial/_utils/app-validators';\n\n@Component({\n selector: 'app-controls-detail',\n templateUrl: './../../../app/product-controls/controls-detail/controls-detail.component.html',\n styleUrls: ['./../../../app/product-controls/controls-detail/controls-detail.component.scss'],\n standalone: false\n})\nexport class ControlsDetailComponent implements OnDestroy {\n @Input() product: ProductDetail;\n @Input() listId: string;\n public customer: Customer;\n public productAvailable = true;\n public hasAttributes = false;\n public loggedIn = false;\n public stockRegister = false;\n public hidePassword = false;\n public resetHeader = 'Need a new Password?';\n public recentToken = '';\n\n public attributeForms: FormGroup[] = [];\n\n public cartForm = new FormGroup({\n quantity: new FormControl(1, Validators.compose([Validators.required]))\n });\n\n public loginForm = new FormGroup({\n email: new FormControl('', Validators.compose([Validators.required, Validators.email, EmailRegEx])),\n password: new FormControl('', Validators.compose([Validators.required, Validators.minLength(6)])),\n });\n\n public registerForm = new FormGroup({\n firstName: new FormControl('', Validators.compose([Validators.required])),\n lastName: new FormControl('', Validators.compose([Validators.required])),\n email: new FormControl('', Validators.compose([Validators.required, Validators.email, EmailRegEx])),\n newsLetter: new FormControl(true),\n password: new FormControl('', Validators.compose([Validators.required, Validators.minLength(6)])),\n confirmPassword: new FormControl('', Validators.compose([Validators.required, Validators.minLength(6)]))\n }, {\n validators: MatchValidator\n });\n\n informed = false;\n public subscriptions: Subscription[] = [];\n public multiples: string[] = [];\n\n constructor(\n public settings: AppSettings,\n public customerService: CustomerService,\n public cartService: CartService,\n public formBuilder: FormBuilder,\n public recaptchaV3Service: ReCaptchaV3Service,\n public accountService: AccountService,\n public claimsService: ClaimsService,\n public snackBar: MatSnackBar,\n public toastr: ToastrService,\n public currencyService: CurrencyService) {\n this.subscriptions.push(this.customerService.customer.subscribe(\n res => {\n this.customer = res as Customer;\n if (this.customer) {\n this.isLoggedIn();\n }\n }));\n }\n\n ngOnDestroy(): void {\n if (this.subscriptions && this.subscriptions.length > 0) {\n this.subscriptions.forEach((sub) => { sub.unsubscribe(); });\n }\n }\n\n public init(product?: ProductDetail): void {\n if (product) {\n this.product = product;\n }\n if (this.attributeForms?.length > 0) { // Timing issue to prevent duplicate display or attributes\n return;\n }\n if (this.product?.stockQuantity > 0) {\n this.productAvailable = true;\n } else {\n this.productAvailable = false;\n }\n if (this.product?.attributes && this.product?.attributes.length > 0) {\n this.hasAttributes = true;\n this.product.attributes.forEach((attribute) => {\n // We need to check to see if this is a \"Multi\" attribute\n // We can tell when the 'textPrompt', 'controlType' and Options are all equal\n const multiple = attribute.controlType === 'RadioList' && this.product.attributes.some(a => a.productAttributeId !== attribute.productAttributeId && a.textPrompt === attribute.textPrompt && a.controlType === attribute.controlType && this.optionsEqual(a.options, attribute.options))\n if (multiple) {\n if (!this.multiples.some(m => m === attribute.textPrompt)) {\n this.addMultiAttribute(this.product.attributes.filter(a => a.textPrompt === attribute.textPrompt && a.controlType === attribute.controlType && this.optionsEqual(a.options, attribute.options)));\n this.multiples.push(attribute.textPrompt);\n }\n } else {\n this.addStandardAttribute(attribute);\n }\n });\n } else {\n this.hasAttributes = false;\n }\n }\n\n public tierFlex(): number {\n switch (this.product?.tierPrices?.length) {\n case 7:\n case 6:\n case 5:\n return 20;\n case 4:\n return 25;\n case 3:\n return 33;\n case 2:\n return 50;\n default:\n return 25;\n }\n }\n\n private optionsEqual(optionsOne: ProductOption[], optionsTwo: ProductOption[]): boolean {\n if (optionsOne.length !== optionsTwo.length) {\n return false;\n }\n optionsOne.forEach((option) => {\n if (!this.optionEqual(option, optionsTwo)) {\n return false;\n }\n });\n optionsTwo.forEach((option) => {\n if (!this.optionEqual(option, optionsOne)) {\n return false;\n }\n });\n return true;\n }\n\n private optionEqual(option: ProductOption, options: ProductOption[]): boolean {\n if (option.valueType !== 'AssociatedToProduct') {\n return false;\n }\n return options.some(o => o.attributeValueTypeId === option.attributeValueTypeId && o.associatedProductId === option.associatedProductId && o.quantity === option.quantity)\n }\n\n public addMultiAttribute(attributes: ProductAttribute[]) {\n // Get the options\n let options: ProductOption[] = [];\n attributes.forEach((attribute) => {\n options = options.concat(attribute.options);\n })\n var distinct: ProductOption[] = [];\n options.forEach((option) => {\n if (!distinct.some(o => o.attributeValueTypeId === option.attributeValueTypeId && o.associatedProductId === option.associatedProductId && o.quantity === option.quantity)) {\n distinct.push(option);\n }\n });\n const attributeForm = this.formBuilder.group({\n multi: true,\n textPrompt: attributes[0].textPrompt,\n productAttributeId: attributes[0].productAttributeId, // not really needed\n maximum: attributes.length,\n noSelected: 0,\n controlType: 'Multi',\n options: null,\n productAttributeIds: null\n });\n let productAttributeIds: number[] = [];\n attributes.forEach((attribute) => { productAttributeIds.push(attribute.productAttributeId); })\n attributeForm.patchValue({ productAttributeIds });\n\n distinct.forEach((option) => {\n const selectAttribute = new SelectAttribute();\n selectAttribute.attributeId = attributes[0].id;\n selectAttribute.optionId = option.id;\n selectAttribute.attributeId = attributes[0].id;\n selectAttribute.name = option.name;\n selectAttribute.productId = option.associatedProductId;\n selectAttribute.noSelected = 0;\n let options = attributeForm.controls.options.value as SelectAttribute[];\n if (options) {\n options.push(selectAttribute);\n } else {\n options = [selectAttribute];\n }\n attributeForm.patchValue({ options });\n });\n if (this.attributeForms) {\n this.attributeForms.push(attributeForm);\n } else {\n this.attributeForms = [attributeForm];\n }\n }\n\n public addStandardAttribute(attribute: ProductAttribute) {\n if (attribute.options && attribute.options.length > 0) {\n const attributeForm = this.formBuilder.group({\n multi: false,\n textPrompt: attribute.textPrompt,\n productAttributeId: attribute.productAttributeId,\n controlType: attribute.controlType,\n options: null,\n selectedOptions: null,\n selectedOption: null\n });\n if (attributeForm.controls.controlType.value === 'Checkboxes' || attributeForm.controls.controlType.value === 'ReadonlyCheckboxes') {\n attributeForm.addControl('selectedOptions', new FormControl({ value: null, disabled: attributeForm.controls.controlType.value === 'ReadonlyCheckboxes' }));\n } else {\n attributeForm.addControl('selectedOption', new FormControl(null, Validators.required)); // TODO - Are they required? e.g. Text box\n }\n attribute.options.forEach((option) => {\n const selectAttribute = new SelectAttribute();\n selectAttribute.attributeId = attribute.id;\n selectAttribute.optionId = option.id;\n selectAttribute.attributeId = attribute.id;\n selectAttribute.selected = option.isPreSelected || attribute.controlType === 'ReadonlyCheckboxes'; // Assume RO Checkboxes are mandatory?\n selectAttribute.name = option.name;\n selectAttribute.productId = option.associatedProductId;\n if (this.product?.attributes?.length === 1 && option.isPreSelected && option.associatedProductId) {\n // this.parent.swapProduct(option.associatedProductId); TODO - Use emitter\n }\n let options = attributeForm.controls.options.value as SelectAttribute[];\n if (options) {\n options.push(selectAttribute);\n } else {\n options = [selectAttribute];\n }\n attributeForm.patchValue({ options });\n if (selectAttribute.selected) {\n if (attribute.controlType === 'Checkboxes' || attribute.controlType === 'ReadonlyCheckboxes') {\n let selectedOptions = attributeForm.controls.selectedOptions.value as SelectAttribute[];\n if (selectedOptions) {\n selectedOptions.push(selectAttribute);\n } else {\n selectedOptions = [selectAttribute];\n }\n attributeForm.patchValue({ selectedOptions });\n } else {\n attributeForm.patchValue({ selectedOption: selectAttribute });\n }\n }\n });\n if (this.attributeForms) {\n this.attributeForms.push(attributeForm);\n } else {\n this.attributeForms = [attributeForm];\n }\n }\n }\n\n public addToWishList(): void {\n if (this.attributeForms && this.attributeForms.length > 0) {\n let attributesValid = true;\n this.attributeForms.forEach((attributeForm) => {\n const attribute = this.product.attributes.find(a => a.productAttributeId === attributeForm.controls.productAttributeId.value);\n attribute.options.forEach((option) => {\n option.selected = false;\n });\n attributesValid = attributesValid && attributeForm.valid;\n if (attributeForm.controls.selectedOptions?.value) {\n attributeForm.controls.selectedOptions.value.forEach((selectedValue: SelectAttribute) => {\n attribute.options.find(o => o.id === selectedValue.optionId).selected = true;\n });\n } else if (attributeForm.controls.selectedOption?.value) {\n const selectedValue = attributeForm.controls.selectedOption.value as SelectAttribute;\n attribute.options.find(o => o.id === selectedValue.optionId).selected = true;\n }\n });\n if (attributesValid) {\n this.product.listName = \"Product Detail\";\n this.product.listId = this.listId;\n this.cartService.addToWishListWithAttributes(this.product);\n } else {\n const message = 'please ensure you have chosen the options correctly';\n this.snackBar.open(message, 'X', { panelClass: ['error'], verticalPosition: 'top', duration: 3000 });\n }\n } else {\n this.product.listName = \"Product Detail\";\n this.product.listId = this.listId;\n this.cartService.addToWishListDetail(this.product);\n }\n }\n\n public addToCart(quantity?: number): void {\n if (quantity) {\n this.cartForm.patchValue({ quantity });\n }\n if (this.attributeForms && this.attributeForms.length > 0) {\n let attributesValid = true;\n this.attributeForms.forEach((attributeForm) => {\n if (attributeForm.controls.multi.value) {\n // We may have pre-selected values ... get rid\n // First have we chosen the correct amount\n if (attributeForm.controls.maximum.value !== attributeForm.controls.noSelected.value) {\n attributesValid = false;\n } else {\n const productAttributeIds: number[] = attributeForm.controls.productAttributeIds.value;\n // Set all selections to false (maybe there are some pre-selected ... sanity check)\n productAttributeIds.forEach((productAttributeId) => {\n const attribute = this.product.attributes.find(a => a.productAttributeId === productAttributeId);\n attribute.options.forEach((option) => {\n option.selected = false;\n });\n });\n productAttributeIds.forEach((productAttributeId) => {\n const attribute = this.product.attributes.find(a => a.productAttributeId === productAttributeId);\n let attributeSet = false;\n attribute.options.forEach((option) => {\n const formOptions: SelectAttribute[] = attributeForm.controls.options.value;\n const productOption = formOptions.find(o => o.productId === option.associatedProductId);\n if (!attributeSet && productOption && productOption.noSelected > 0 && !option.selected) {\n option.selected = true;\n attributeSet = true;\n productOption.noSelected = productOption.noSelected - 1;\n }\n });\n });\n }\n } else {\n const attribute = this.product.attributes.find(a => a.productAttributeId === attributeForm.controls.productAttributeId.value);\n attribute.options.forEach((option) => {\n option.selected = false;\n });\n attributesValid = attributesValid && attributeForm.valid;\n if (attributeForm.controls.selectedOptions?.value) {\n attributeForm.controls.selectedOptions.value.forEach((selectedValue: SelectAttribute) => {\n const selected = attribute.options.find(o => o.id === selectedValue.optionId);\n if (selected) {\n selected.selected = true\n }\n });\n } else if (attributeForm.controls.selectedOption?.value) {\n const selectedValue = attributeForm.controls.selectedOption.value as SelectAttribute;\n const selected = attribute.options.find(o => o.id === selectedValue.optionId);\n if (selected) {\n selected.selected = true\n }\n }\n }\n });\n if (attributesValid) {\n this.product.listName = \"Product Detail\";\n this.product.listId = this.listId;\n this.cartService.addToCartWithAttributes(this.product, this.cartForm.controls.quantity.value, this.listId);\n } else {\n const message = 'Please ensure you have chosen the options correctly';\n this.snackBar.open(message, 'X', { panelClass: ['error'], verticalPosition: 'top', duration: 3000 });\n }\n } else {\n this.product.listName = \"Product Detail\";\n this.product.listId = this.listId;\n this.cartService.addToCartDetail(this.product, this.cartForm.controls.quantity.value);\n }\n }\n\n public backSoon(): void {\n const message = 'Sorry, this product will be available again soon';\n this.snackBar.open(message, 'X', { panelClass: ['error'], verticalPosition: 'top', duration: 3000 });\n }\n\n public adjustPrice(): void {\n if (this.attributeForms && this.attributeForms.length > 0) {\n let addedPrice = 0;\n this.attributeForms.forEach((attributeForm) => {\n const attribute = this.product.attributes.find(a => a.productAttributeId === attributeForm.controls.productAttributeId.value);\n if (attributeForm.controls.selectedOptions?.value) {\n attributeForm.controls.selectedOptions.value.forEach((selectedValue: SelectAttribute) => {\n addedPrice += attribute.options.find(o => o.id === selectedValue.optionId)?.priceAdjustment;\n });\n } else if (attributeForm.controls.selectedOption?.value) {\n const selectedValue = attributeForm.controls.selectedOption.value as SelectAttribute;\n addedPrice += attribute.options.find(o => o.id === selectedValue.optionId)?.priceAdjustment;\n }\n });\n if (addedPrice) {\n this.product.adjustedPrice = this.product.newPrice + addedPrice;\n this.product.adjustedPriceDisplay = this.currencyService.formatCurrency(this.product.currency, this.product.adjustedPrice);\n this.product.adjustedInstallmentPrice = this.currencyService.installmentPrice(this.product.adjustedPrice);\n this.product.adjustedInstallmentPriceDisplay = this.currencyService.formatCurrency(this.product.currency, this.product.adjustedInstallmentPrice);\n } else {\n this.product.adjustedPrice = 0;\n this.product.adjustedPriceDisplay = '';\n this.product.adjustedInstallmentPrice = 0;\n this.product.adjustedInstallmentPriceDisplay = '';\n }\n } else {\n this.product.adjustedPrice = 0;\n this.product.adjustedPriceDisplay = '';\n this.product.adjustedInstallmentPrice = 0;\n this.product.adjustedInstallmentPriceDisplay = '';\n }\n }\n\n public attChangeDropDown(event: MatSelectChange, attributeForm: FormGroup): void {\n const selectedOption = event.value as SelectAttribute;\n attributeForm.patchValue({ selectedOption });\n if (this.product?.attributes?.length === 1 && selectedOption.productId) {\n //this.parent.swapProduct(selectedOption.productId);\n }\n this.adjustPrice();\n }\n\n public attChangeRadio(event: MatRadioChange, attributeForm: FormGroup): void {\n const selectedOption = event.value as SelectAttribute;\n attributeForm.patchValue({ selectedOption });\n if (this.product?.attributes?.length === 1 && selectedOption.productId) {\n //this.parent.swapProduct(selectedOption.productId);\n }\n this.adjustPrice();\n }\n\n public attChangeCheckboxes(event: MatCheckboxChange, selectedOption: SelectAttribute, attributeForm: FormGroup): void {\n let selectedOptions = attributeForm.controls.selectedOptions.value as SelectAttribute[];\n if (event.checked) {\n if (selectedOptions) {\n selectedOptions.push(selectedOption);\n } else {\n selectedOptions = [selectedOption];\n }\n attributeForm.patchValue({ selectedOptions });\n } else {\n if (selectedOptions) {\n selectedOptions = selectedOptions.filter(o => o.optionId !== selectedOption.optionId);\n } else {\n selectedOptions = null;\n }\n attributeForm.patchValue({ selectedOptions });\n }\n this.adjustPrice();\n }\n\n public multiOptionClick(attributeForm: FormGroup, optionId: number, count: number): void {\n // See if we are over the number\n var noSelected = 0;\n let options = attributeForm.controls.options.value as SelectAttribute[];\n options.forEach((option) => {\n if (option.optionId !== optionId) {\n noSelected = noSelected + option.noSelected;\n }\n });\n const option = options.find(o => o.optionId === optionId);\n if (!option) {\n // Something wrong here\n attributeForm.patchValue({ selected: 0 });\n return;\n }\n if (noSelected + count > attributeForm.controls.maximum.value) {\n const message = `${attributeForm.controls.textPrompt.value} - please select a maximum of ${attributeForm.controls.maximum.value}`;\n this.snackBar.open(message, 'X', { panelClass: ['error'], verticalPosition: 'top', duration: 3000 });\n } else {\n option.noSelected = count;\n attributeForm.patchValue({ noSelected: noSelected + count });\n attributeForm.patchValue({ options });\n }\n }\n\n // ---------------------------------------------------------------\n // Back in Stock Sub - Logon and registration\n // ---------------------------------------------------------------\n public onRegisterFormSubmit(): void {\n if (this.registerForm.valid) {\n this.subscriptions.push(this.recaptchaV3Service.execute('Register').subscribe(\n token => {\n this.recentToken = token;\n const regRequest = new RegRequest();\n regRequest.token = token;\n regRequest.email = this.registerForm.controls.email.value;\n regRequest.customer = new Customer();\n regRequest.customer.firstName = this.registerForm.controls.firstName.value;\n regRequest.customer.lastName = this.registerForm.controls.lastName.value;\n regRequest.password = this.registerForm.controls.password.value;\n regRequest.newsLetter = this.registerForm.controls.newsLetter.value;\n regRequest.isApproved = true;\n this.subscriptions.push(this.accountService.register(regRequest).subscribe(\n regRes => {\n const result = regRes as RegResult;\n if (result.success && result.jwtToken && result.customer) {\n this.backInStock();\n } else {\n let errMessage = 'Registration failed';\n if (result.errors?.length > 0) {\n for (const error of result.errors) {\n errMessage += ` ... ${error}`;\n }\n }\n this.snackBar.open(errMessage, 'X', { panelClass: 'error', verticalPosition: 'top', duration: 3000 });\n }\n }));\n }));\n } else {\n const errMessage = 'There is something wrong with the registration values, please review them';\n this.snackBar.open(errMessage, 'X', { panelClass: 'error', verticalPosition: 'top', duration: 3000 });\n }\n }\n\n public onLoginFormSubmit(): void {\n if (this.loginForm.valid) {\n this.subscriptions.push(this.recaptchaV3Service.execute('Logon').subscribe(\n token => {\n this.recentToken = token;\n const request = new LogonRequest();\n request.token = token;\n request.email = this.loginForm.controls.email.value;\n request.password = this.loginForm.controls.password.value;\n request.checkout = false;\n this.subscriptions.push(this.accountService.logon(request).subscribe(\n logonRes => {\n const result = logonRes as LogonResult;\n if (result.success === true && result.jwtToken) {\n this.backInStock();\n } else {\n let errMessage = 'Logon failed';\n if (result.errors?.length > 0) {\n for (const error of result.errors) {\n errMessage += ` ... ${error}`;\n }\n }\n this.snackBar.open(errMessage, 'X', { panelClass: 'error', verticalPosition: 'top', duration: 3000 });\n }\n }));\n }));\n } else {\n const errMessage = 'There is something wrong with the logon values, please review them';\n this.snackBar.open(errMessage, 'X', { panelClass: 'error', verticalPosition: 'top', duration: 3000 });\n }\n }\n\n public resetPassword(): void {\n if (this.loginForm.controls.email.valid) {\n this.subscriptions.push(this.recaptchaV3Service.execute('ResetPasswordReq').subscribe(\n token => {\n this.recentToken = token;\n const request = new LogonRequest();\n request.token = token;\n request.email = this.loginForm.controls.email.value;\n request.password = '';\n request.checkout = false;\n this.subscriptions.push(this.accountService.reset(request).subscribe(\n resetRes => {\n const result = resetRes as LogonResult;\n if (result.success) {\n const infoMessage = 'Please check your email to get your reset link.';\n this.snackBar.open(infoMessage, 'X', { panelClass: 'success', verticalPosition: 'top', duration: 6000 });\n } else {\n const errMessage = 'Could not find a user with that email. If you had an account on the previous site we will be migrating them soon.';\n this.snackBar.open(errMessage, 'X', { panelClass: 'error', verticalPosition: 'top', duration: 6000 });\n }\n }));\n }));\n } else {\n const errMessage = 'Enter your account email address then click the button.';\n this.snackBar.open(errMessage, 'X', { panelClass: 'error', verticalPosition: 'top', duration: 3000 });\n }\n }\n\n public backInStock(): void {\n this.subscriptions.push(this.customerService.backInStock(this.customerService.getCustomerGuid(), this.product).subscribe(\n res => {\n this.informed = res as boolean;\n if (res) {\n this.toastr.success('You will receive an email when we have more stock.', 'Stock Subscribe');\n } else {\n this.toastr.warning('Sorry, something went wrong with the out of stock subscription.', 'Stock Subscribe');\n }\n }));\n }\n\n public isLoggedIn(): void {\n this.loginForm.patchValue({ email: this.customer?.email });\n this.registerForm.patchValue({ email: this.customer?.email });\n this.registerForm.patchValue({ firstName: this.customer?.firstName });\n this.registerForm.patchValue({ lastName: this.customer?.lastName });\n this.loggedIn = false;\n if (localStorage.getItem('token')) {\n this.subscriptions.push(this.accountService.refresh(localStorage.getItem('token'), this.customerService.getCustomerGuid()).subscribe(\n resRefresh => {\n const result = resRefresh as RefreshResponse;\n if (result?.jwtToken) {\n localStorage.setItem('token', result.jwtToken);\n this.claimsService.set(result.claims);\n this.loggedIn = true;\n }\n if (result?.isGuest) {\n this.stockRegister = true; // Register\n } else {\n this.stockRegister = false; // Logon\n }\n }));\n } else if (this.customerService.getCustomerGuid()) {\n this.subscriptions.push(this.accountService.isGuest(this.customerService.getCustomerGuid()).subscribe(\n resGuest => {\n const isGuest = resGuest as boolean;\n if (isGuest) {\n this.stockRegister = true; // Register\n } else {\n this.stockRegister = false; // Logon\n }\n }));\n } else {\n this.stockRegister = true; // Register\n }\n }\n counter(i: number) {\n return new Array(i);\n }\n}\n","
\n
0\">\n
\n
\n
\n \n {{attributeForm.controls.textPrompt.value}}\n \n {{attributeForm.controls.textPrompt.value}}\n \n \n {{option?.name}}\n \n \n \n \n \n {{attributeForm.controls.textPrompt.value}}\n \n \n {{option?.name}}\n \n \n \n \n
\n
\n {{attributeForm.controls.textPrompt.value}} Choose {{attributeForm.controls.maximum?.value}} ({{attributeForm.controls.noSelected.value}} Selected)\n done\n
\n
\n
\n {{option?.name}}\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n =5\">\n
\n
\n {{attributeForm.controls.textPrompt.value}} Choose {{attributeForm.controls.maximum?.value}} ({{attributeForm.controls.noSelected.value}} Selected)\n done\n done\n
\n
\n
\n {{option?.noSelected}}\n x \n x\n
\n
\n {{option?.name}}\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n
\n \n {{attributeForm.controls.textPrompt.value}}\n \n \n {{option?.name}}\n \n \n \n \n {{attributeForm.controls.textPrompt.value}}\n \n \n \n {{attributeForm.controls.textPrompt.value}}\n \n \n \n {{attributeForm.controls.textPrompt.value}}\n \n \n \n {{attributeForm.controls.textPrompt.value}}\n \n \n \n {{attributeForm.controls.textPrompt.value}}\n \n \n \n {{attributeForm.controls.textPrompt.value}}\n \n \n \n {{attributeForm.controls.textPrompt.value}}\n \n \n {{option?.name}}\n \n \n \n
\n
\n
\n
\n
0\">\n
0\">\n
Buy More &\n save\n
\n
\n
\n
\n
\n \n
\n
\n {{tier.price | currency}} each
\n
\n
\n
\n
\n
\n
0\" class=\"d-flex flex-row flex-wrap justify-content-start align-items-start\">\n
\n 0\" appearance=\"outline\" class=\"quantity\">\n Qty\n \n \n
\n
0\" class=\"px-1\">\n \n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n

Hey {{this.customer.firstName}}, want to know when '{{product?.name}}' has arrived back in stock?

\n
\n
\n \n
\n
\n
\n
\n

Hey {{customer?.firstName}}!

\n

Want to know when the \n {{product?.name}} has more stock?\n

\n \n \n \n \n alarmSign up or Log in to be kept in the loop!\n \n \n \n
\n
\n \n First Name\n \n Full Name is required\n \n \n Last Name\n \n Full Name is required\n \n \n Email\n \n Email is required\n Invalid email address\n \n \n Password\n \n Password is required\n Password isn't long enough, minimum of 6 characters\n \n \n Confirm Password\n \n Confirm Password is required\n Passwords do not match\n \n Sign me up for news and offers\n
\n \n
\n
\n
\n
\n
\n \n Email\n \n Email is required\n Invalid email address\n \n \n Password\n \n Password is required\n Password isn't long enough, minimum of 6 characters\n \n
\n \n
\n
\n \n \n \n \n Fill in your email above and click the request password button. We will send you instructions.\n

\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n Thank you, we will let you know as soon as the stock arrives.\n
\n
\n
\n Loading Product Details\n
\n
\n \"Product\n
\n
\n","import { Component, Input } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { ProductDetail } from 'src/@omnial/_models/catalog/product.model';\nimport { CartService } from 'src/@omnial/_services/order/cart.service';\n\n@Component({\n selector: 'app-controls-mini',\n templateUrl: './../../../app/product-controls/controls-mini/controls-mini.component.html',\n styleUrls: ['./../../../app/product-controls/controls-mini/controls-mini.component.scss'],\n standalone: false\n})\nexport class ControlsMiniComponent {\n @Input() listId: string;\n @Input() listName: string;\n @Input() product: ProductDetail;\n\n public productAvailable = true;\n public hasAttributes = false;\n\n public cartForm = new FormGroup({ quantity: new FormControl(1, Validators.compose([Validators.required]))});\n\n constructor(\n public cartService: CartService,\n public snackBar: MatSnackBar) { }\n\n init(product?: ProductDetail): void {\n if (product) {\n this.product = product;\n }\n if (this.product?.stockQuantity > 0) {\n this.productAvailable = true;\n } else {\n this.productAvailable = false;\n }\n if (this.product?.attributes && this.product?.attributes.length > 0) {\n this.hasAttributes = true;\n } else {\n this.hasAttributes = false;\n }\n }\n\n public addToCart(): void {\n if (this.hasAttributes) {\n this.scrollToOptions();\n } else {\n this.product.listName = this.listName ?? \"Product Detail\";\n this.product.listId = this.listId ?? 'none';\n this.cartService.addToCartDetail(this.product, this.cartForm.controls.quantity.value);\n }\n }\n\n public backSoon(): void {\n const message = 'Sorry, this product will be available again soon';\n this.snackBar.open(message, 'X', { panelClass: ['error'], verticalPosition: 'top', duration: 3000 });\n }\n\n public addToWishList(): void {\n if (this.hasAttributes) {\n this.scrollToOptions();\n } else {\n this.product.listName = \"Product Details Mini\";\n this.product.listId = this.listId ?? 'none';\n this.cartService.addToWishListDetail(this.product);\n }\n }\n\n public scrollToOptions(): void {\n window.scrollBy(0, 500);\n }\n}\n","
\n
\n
\n
\n \n
\n \n Qty\n \n \n
\n
\n \n
\n \n
\n
\n","import { ProductFilterGroup } from \"./product-filter.model\";\r\n\r\nexport class Manufacturer {\r\n id: number;\r\n name: string;\r\n seName: string;\r\n description: string;\r\n manufacturerTemplateId: number;\r\n metaKeywords: string;\r\n metaDescription: string;\r\n metaTitle: string;\r\n pictureId: number;\r\n pictureUrl: string;\r\n displayOrder: number;\r\n products: number;\r\n public filterGroups: ProductFilterGroup[];\r\n published: boolean;\r\n}\r\n","import { Manufacturer } from \"../catalog/manufacturer.model\";\r\n\r\nexport class OmnialMarker {\r\n dealerId: number;\r\n lat: number;\r\n lng: number;\r\n position: google.maps.LatLng;\r\n draggable: boolean;\r\n title: string;\r\n icon: string;\r\n street: string;\r\n city: string;\r\n state: string;\r\n postalCode: string;\r\n email: string;\r\n phone: string;\r\n website: string;\r\n detail?: string;\r\n distance: number;\r\n manufacturers: Manufacturer[];\r\n pin: string;\r\n}\r\n","import { Injectable, OnDestroy } from \"@angular/core\";\r\nimport { MatSnackBar } from \"@angular/material/snack-bar\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { NgxSpinnerService } from \"ngx-spinner\";\r\nimport { BehaviorSubject, Observable, Subject, Subscription } from \"rxjs\";\r\nimport { Manufacturer } from \"src/@omnial/_models/catalog/manufacturer.model\";\r\nimport { DealerLocatorSettings } from \"src/@omnial/_models/dealer-locator/dealer-locator.settings.model\";\r\nimport { Dealer } from \"src/@omnial/_models/dealer-locator/dealer.model\";\r\nimport { OmnialMarker } from \"src/@omnial/_models/dealer-locator/marker.model\";\r\nimport { FieldProperty } from \"src/@omnial/_models/field-prompt.model\";\r\nimport { environment } from \"src/environments/environment\";\r\nimport { RepositoryStaticService } from \"../repository-static.service\";\r\nimport { RepositoryService } from \"../repository.service\";\r\n\r\n@Injectable()\r\nexport class DealerService implements OnDestroy {\r\n public dealers: BehaviorSubject = new BehaviorSubject(null);\r\n private $dealers: Dealer[] = null;\r\n public settings: BehaviorSubject = new BehaviorSubject(null);\r\n private $settings: DealerLocatorSettings = null;\r\n private subscriptions: Subscription[] = [];\r\n private useCache = environment.useCache;\r\n public lat: number;\r\n public lng: number;\r\n public zoom: number;\r\n\r\n constructor(public spinner: NgxSpinnerService,\r\n public staticService: RepositoryStaticService,\r\n public repoService: RepositoryService,\r\n public snackBar: MatSnackBar,\r\n private route: ActivatedRoute) {\r\n this.route.fragment.subscribe((fragment: string) => {\r\n if (fragment && fragment === 'CacheBust') {\r\n this.useCache = false;\r\n }\r\n });\r\n }\r\n\r\n public load(init?: Dealer[]): void {\r\n if (init) {\r\n this.$dealers = init;\r\n this.dealers.next(this.$dealers);\r\n return;\r\n }\r\n if (!this.$dealers) {\r\n this.subscriptions.push(this.getDealers().subscribe({\r\n next: (res: Dealer[]) => {\r\n if (res) {\r\n res.forEach((dealer) => {\r\n if (dealer.webSite && dealer.webSite.indexOf('http') === -1) {\r\n dealer.webSite = `https://${dealer.webSite}`;\r\n }\r\n });\r\n }\r\n this.$dealers = res;\r\n this.dealers.next(this.$dealers);\r\n },\r\n error: () => {\r\n this.$dealers = null;\r\n this.dealers.next(this.$dealers);\r\n }\r\n }));\r\n } else {\r\n this.dealers.next(this.$dealers);\r\n }\r\n }\r\n\r\n public loadAll(init?: Dealer[]): void {\r\n if (init) {\r\n this.$dealers = init;\r\n this.dealers.next(this.$dealers);\r\n return;\r\n }\r\n if (!this.$dealers) {\r\n this.subscriptions.push(this.getAllDealers().subscribe({\r\n next: (res: Dealer[]) => {\r\n if (res) {\r\n res.forEach((dealer) => {\r\n if (dealer.webSite && dealer.webSite.indexOf('http') === -1) {\r\n dealer.webSite = `https://${dealer.webSite}`;\r\n }\r\n });\r\n }\r\n this.$dealers = res;\r\n this.dealers.next(this.$dealers);\r\n },\r\n error: () => {\r\n this.$dealers = null;\r\n this.dealers.next(this.$dealers);\r\n }\r\n }));\r\n } else {\r\n this.dealers.next(this.$dealers);\r\n }\r\n }\r\n\r\n public loadSettings(init?: DealerLocatorSettings): void {\r\n if (init) {\r\n this.$settings = init;\r\n this.settings.next(this.$settings);\r\n return;\r\n }\r\n if (!this.$settings) {\r\n this.subscriptions.push(this.getSettings().subscribe({\r\n next: (res: DealerLocatorSettings) => {\r\n this.$settings = res;\r\n this.settings.next(this.$settings);\r\n },\r\n error: () => {\r\n this.$settings = null;\r\n this.settings.next(this.$settings);\r\n }\r\n }));\r\n } else {\r\n this.settings.next(this.$settings);\r\n }\r\n }\r\n\r\n public getDealers(bypassCache?: boolean): Observable {\r\n return new Observable((observer) => {\r\n if (this.useCache && !bypassCache) {\r\n this.subscriptions.push(this.getDealersFromCache().subscribe({\r\n next: (cacheResult) => {\r\n observer.next(cacheResult as Dealer[]);\r\n observer.complete();\r\n }\r\n }));\r\n } else {\r\n this.subscriptions.push(this.getDealersFromNop().subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as Dealer[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n });\r\n }\r\n\r\n public getAllDealers(bypassCache?: boolean): Observable {\r\n return new Observable((observer) => {\r\n if (this.useCache && !bypassCache) {\r\n this.subscriptions.push(this.getAllDealersFromCache().subscribe({\r\n next: (cacheResult) => {\r\n observer.next(cacheResult as Dealer[]);\r\n observer.complete();\r\n }\r\n }));\r\n } else {\r\n this.subscriptions.push(this.getAllDealersFromNop().subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as Dealer[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n });\r\n }\r\n\r\n public getFieldProperties(): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.repoService.getData('StoreLocator/FieldProperties').subscribe({\r\n next: (res) => {\r\n observer.next(res as FieldProperty[]);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getDealersFromCache(): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.staticService.get('Generic/Key/storelocator').subscribe({\r\n next: (cacheResult) => {\r\n if (cacheResult) {\r\n observer.next(cacheResult as Dealer[]);\r\n observer.complete();\r\n } else {\r\n this.subscriptions.push(this.getDealersFromNop().subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as Dealer[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n },\r\n error: () => {\r\n this.subscriptions.push(this.getDealersFromNop().subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as Dealer[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getAllDealersFromCache(): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.staticService.get('Generic/Key/storelocator').subscribe({\r\n next: (cacheResult) => {\r\n if (cacheResult) {\r\n observer.next(cacheResult as Dealer[]);\r\n observer.complete();\r\n } else {\r\n this.subscriptions.push(this.getAllDealersFromNop().subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as Dealer[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n },\r\n error: () => {\r\n this.subscriptions.push(this.getAllDealersFromNop().subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as Dealer[]);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getDealersFromNop(): Observable {\r\n return new Observable((observer) => {\r\n let endpoint = 'StoreLocator';\r\n this.subscriptions.push(this.repoService.getData(endpoint).subscribe({\r\n next: (res) => {\r\n observer.next(res as Dealer[]);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getAllDealersFromNop(): Observable {\r\n return new Observable((observer) => {\r\n let endpoint = 'StoreLocator/All';\r\n this.subscriptions.push(this.repoService.getData(endpoint).subscribe({\r\n next: (res) => {\r\n observer.next(res as Dealer[]);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n });\r\n }\r\n\r\n public getSettings(bypassCache?: boolean): Observable {\r\n return new Observable((observer) => {\r\n if (this.useCache && !bypassCache) {\r\n this.subscriptions.push(this.getSettingsFromCache().subscribe({\r\n next: (cacheResult) => {\r\n if (cacheResult) {\r\n observer.next(cacheResult as DealerLocatorSettings);\r\n observer.complete();\r\n } else {\r\n this.subscriptions.push(this.getSettingsFromNop().subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as DealerLocatorSettings);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n }\r\n }));\r\n } else {\r\n this.subscriptions.push(this.getSettingsFromNop().subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as DealerLocatorSettings);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n });\r\n }\r\n\r\n public createDealer(dealer: Dealer): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.repoService.create('StoreLocator', dealer).subscribe({\r\n next: (res) => {\r\n observer.next(res as Dealer);\r\n observer.complete();\r\n },\r\n error: (err) => {\r\n observer.error(err);\r\n observer.complete();\r\n }\r\n }));\r\n });\r\n }\r\n\r\n public updateDealer(dealer: Dealer): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.repoService.update('StoreLocator', dealer).subscribe({\r\n next: (res) => {\r\n observer.next(res as Dealer);\r\n observer.complete();\r\n },\r\n error: (err) => {\r\n observer.error(err);\r\n observer.complete();\r\n }\r\n }));\r\n });\r\n }\r\n\r\n public geoLocateDealer(dealer: Dealer): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.repoService.update('StoreLocator/GeoLocate', dealer).subscribe({\r\n next: (res) => {\r\n observer.next(res as Dealer);\r\n observer.complete();\r\n },\r\n error: (err) => {\r\n observer.error(err);\r\n observer.complete();\r\n }\r\n }));\r\n });\r\n }\r\n\r\n public deleteDealer(dealer: Dealer): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.repoService.delete(`StoreLocator/${dealer.id}`).subscribe({\r\n next: (res) => {\r\n observer.next(res as boolean);\r\n observer.complete();\r\n },\r\n error: (err) => {\r\n observer.error(err);\r\n observer.complete();\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getSettingsFromCache(): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.staticService.get('Generic/Key/storelocatorsettings').subscribe({\r\n next: (cacheResult) => {\r\n if (cacheResult) {\r\n observer.next(cacheResult as DealerLocatorSettings);\r\n observer.complete();\r\n } else {\r\n this.subscriptions.push(this.getSettingsFromNop().subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as DealerLocatorSettings);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n },\r\n error: () => {\r\n this.subscriptions.push(this.getSettingsFromNop().subscribe({\r\n next: (nopResult) => {\r\n observer.next(nopResult as DealerLocatorSettings);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n }));\r\n });\r\n }\r\n\r\n private getSettingsFromNop(): Observable {\r\n return new Observable((observer) => {\r\n let endpoint = 'StoreLocator/Settings';\r\n this.subscriptions.push(this.repoService.getData(endpoint).subscribe({\r\n next: (res) => {\r\n observer.next(res as DealerLocatorSettings);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscriptions && this.subscriptions.length > 0) {\r\n this.subscriptions.forEach((sub) => { sub.unsubscribe() });\r\n }\r\n }\r\n\r\n public newCoordinators = new Subject();\r\n\r\n public openWindow = new Subject();\r\n\r\n public getMarkers(dealers: Dealer[]): OmnialMarker[] {\r\n const markers: OmnialMarker[] = [];\r\n dealers?.forEach((dealer) => {\r\n if (dealer?.address && dealer?.coordinates) {\r\n let marker = new OmnialMarker();\r\n marker.dealerId = dealer.id;\r\n marker.lat = dealer.coordinates?.latitude;\r\n marker.lng = dealer.coordinates?.longitude\r\n marker.title = dealer.name;\r\n marker.icon = '/assets/images/map/marker.png'; // TODO\r\n marker.draggable = false;\r\n marker.street = dealer.address.address2 ? `${dealer.address.address1}; ${dealer.address.address2}` : dealer.address.address1;\r\n marker.city = dealer.address.city;\r\n marker.state = dealer.address.state?.name ? dealer.address.state?.name : dealer.address.stateName;\r\n marker.postalCode = dealer.address.zipPostalCode;\r\n marker.email = dealer.address.email;\r\n marker.phone = dealer.address.phoneNumber;\r\n marker.website = dealer.webSite;\r\n marker.detail = 'InfoWindow content';\r\n marker.position = new google.maps.LatLng(dealer.coordinates?.latitude, dealer.coordinates?.longitude);\r\n marker.manufacturers = [];\r\n dealer.manufacturerIds?.forEach(manufacturerId => {\r\n const manufacturer = new Manufacturer();\r\n manufacturer.id = manufacturerId; // The rest will be fleshed out on the dealer locator if we need it\r\n if (!marker.manufacturers.some(m => m.id === manufacturerId)) {\r\n marker.manufacturers.push(manufacturer);\r\n }\r\n });\r\n markers.push(marker);\r\n }\r\n });\r\n return markers;\r\n }\r\n}\r\n","import { Injectable, OnDestroy } from \"@angular/core\";\r\nimport { MatSnackBar } from \"@angular/material/snack-bar\";\r\nimport { BehaviorSubject, Observable, Subscription } from \"rxjs\";\r\nimport { Manufacturer } from \"src/@omnial/_models/catalog/manufacturer.model\";\r\nimport { environment } from \"src/environments/environment\";\r\nimport { RepositoryStaticService } from \"../repository-static.service\";\r\nimport { RepositoryService } from \"../repository.service\";\r\n\r\n@Injectable()\r\nexport class ManufacturerService implements OnDestroy {\r\n public manufacturers: BehaviorSubject = new BehaviorSubject(null);\r\n private $manufacturers: Manufacturer[] = null;\r\n private subscriptions: Subscription[] = [];\r\n private useCache = environment.useCache;\r\n\r\n constructor( public staticService: RepositoryStaticService,\r\n public repoService: RepositoryService,\r\n public snackBar: MatSnackBar) { }\r\n\r\n public load(init?: Manufacturer[]): void {\r\n if (init) {\r\n this.$manufacturers = init;\r\n this.manufacturers.next(this.$manufacturers);\r\n return;\r\n }\r\n if (!this.$manufacturers) {\r\n this.subscriptions.push(this.getManufacturers().subscribe({\r\n next: (res: Manufacturer[]) => {\r\n this.$manufacturers = res;\r\n this.manufacturers.next(this.$manufacturers);\r\n },\r\n error: () => {\r\n this.$manufacturers = null;\r\n this.manufacturers.next(this.$manufacturers);\r\n }\r\n }));\r\n } else{\r\n this.manufacturers.next(this.$manufacturers);\r\n }\r\n }\r\n public getManufacturers(bypassCache?: boolean): Observable {\r\n return new Observable((observer) => {\r\n if (this.useCache && !bypassCache) {\r\n this.subscriptions.push(this.staticService.get('Manufacturer').subscribe({\r\n next: (staticRes) => {\r\n if (staticRes) {\r\n observer.next(staticRes as Manufacturer[]);\r\n observer.complete();\r\n } else {\r\n this.subscriptions.push(this.repoService.getData(`Manufacturer`).subscribe({\r\n next: apiRes => {\r\n observer.next(apiRes as Manufacturer[]);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n const message = 'Sorry we could not get the information for the manufacturers, please try again later';\r\n this.snackBar.open(message, 'X', { panelClass: ['error'], verticalPosition: 'top', duration: 3000 });\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n },\r\n error: (e) => {\r\n this.subscriptions.push(this.repoService.getData(`Manufacturer`).subscribe({\r\n next: (apiRes) => {\r\n observer.next(apiRes as Manufacturer[]);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n const message = 'Sorry we could not get the information for the manufacturers, please try again later';\r\n this.snackBar.open(message, 'X', { panelClass: ['error'], verticalPosition: 'top', duration: 3000 });\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n }));\r\n } else {\r\n this.subscriptions.push(this.repoService.getData(`Manufacturer`).subscribe({\r\n next: (resNoCache) => {\r\n observer.next(resNoCache as Manufacturer[]);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n });\r\n }\r\n\r\n public getManufacturer(slug: string, bypassCache?: boolean): Observable {\r\n return new Observable((observer) => {\r\n if (this.useCache && !bypassCache) {\r\n this.subscriptions.push(this.staticService.getBySeName('Manufacturer', slug).subscribe({\r\n next: (staticRes) => {\r\n if (staticRes) {\r\n observer.next(staticRes as Manufacturer);\r\n observer.complete();\r\n } else {\r\n this.subscriptions.push(this.repoService.getData(`Manufacturer/${slug}`).subscribe({\r\n next: apiRes => {\r\n observer.next(apiRes as Manufacturer);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n const message = 'Sorry we could not get the information for this manufacturer page, please try again later';\r\n this.snackBar.open(message, 'X', { panelClass: ['error'], verticalPosition: 'top', duration: 3000 });\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n },\r\n error: () => {\r\n this.subscriptions.push(this.repoService.getData(`Manufacturer/${slug}`).subscribe({\r\n next: (apiRes) => {\r\n observer.next(apiRes as Manufacturer);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n const message = 'Sorry we could not get the information for this manufacturer page, please try again later';\r\n this.snackBar.open(message, 'X', { panelClass: ['error'], verticalPosition: 'top', duration: 3000 });\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n }));\r\n } else {\r\n this.subscriptions.push(this.repoService.getData(`Manufacturer/${slug}`).subscribe({\r\n next: (resNoCache) => {\r\n observer.next(resNoCache as Manufacturer);\r\n observer.complete();\r\n },\r\n error: (e) => {\r\n observer.error(e);\r\n observer.complete();\r\n }\r\n }));\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscriptions && this.subscriptions.length > 0) {\r\n this.subscriptions.forEach((sub) => { sub.unsubscribe() });\r\n }\r\n }\r\n}\r\n","import { ChangeDetectorRef, Component, EventEmitter, HostListener, Inject, NgZone, OnDestroy, Output, QueryList, ViewChild, ViewChildren } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { DealerLocatorSettings } from 'src/@omnial/_models/dealer-locator/dealer-locator.settings.model';\r\nimport { Dealer } from 'src/@omnial/_models/dealer-locator/dealer.model';\r\nimport { DealerService } from 'src/@omnial/_services/dealers/dealer.service';\r\nimport { OmnialMarker } from 'src/@omnial/_models/dealer-locator/marker.model';\r\nimport { GoogleMap, MapInfoWindow, MapMarker } from '@angular/google-maps';\r\nimport { ScriptLoaderService } from 'src/@omnial/_services/external/script-load.service';\r\nimport PlaceResult = google.maps.places.PlaceResult;\r\nimport { Country } from 'src/@omnial/_models/order/country.model';\r\nimport { Manufacturer } from 'src/@omnial/_models/catalog/manufacturer.model';\r\nimport { TrackingService } from 'src/@omnial/_services/external/tracking.service';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Component({\n selector: 'app-dealer-locator-map',\n templateUrl: './../../../../app/shared/dealer-locator/dealer-locator-map/dealer-locator-map.component.html',\n styleUrls: ['./../../../../app/shared/dealer-locator/dealer-locator-map/dealer-locator-map.component.scss'],\n standalone: false\n})\r\n\r\nexport class DealerLocatorMapComponent implements OnDestroy {\r\n @Output() dealerSelected = new EventEmitter();\r\n @ViewChild('googleMap', { static: false }) map: GoogleMap;\r\n @ViewChildren(MapInfoWindow) infoWindowsView: QueryList;\r\n @ViewChildren(MapMarker) mapMarker: QueryList;\r\n public settings: DealerLocatorSettings;\r\n public dealers: Dealer[];\r\n public manufacturers: Manufacturer[];\r\n public isMobile = false;\r\n public mapInit = false;\r\n public lat: number = 0;\r\n public lng: number = 0;\r\n public zoom: number = 4;\r\n public style: any[] = [];\r\n public radius: number = 20;\r\n public openedWindow: number;\r\n public markers: any[] = [];\r\n public infoContent: string;\r\n public searchControl: FormControl;\r\n public locations: OmnialMarker[];\r\n public locationList: OmnialMarker[];\r\n public selectedLocation: OmnialMarker;\r\n public subscriptions: Subscription[] = [];\r\n public center: google.maps.LatLng;\r\n public options: google.maps.MapOptions;\r\n public autoCompleteOptions: any;\r\n public countries: Country[] = [];\r\n public mapMoveTimer: NodeJS.Timeout;\r\n\r\n constructor(@Inject(DOCUMENT) private _document: Document,\r\n public dealerService: DealerService,\r\n public scriptLoaderService: ScriptLoaderService,\r\n public cd: ChangeDetectorRef,\r\n public zone: NgZone,\r\n public trackingService: TrackingService) {\r\n }\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize() {\r\n this.isMobile = window.innerWidth < 768;\r\n if (this.isMobile) {\r\n this.zoom = 2;\r\n } else {\r\n this.zoom = 4;\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscriptions && this.subscriptions.length > 0) {\r\n this.subscriptions.forEach((sub) => { sub.unsubscribe(); });\r\n }\r\n }\r\n\r\n init() {\r\n window['angularGoogleMapsReference'] = { component: this, zone: this.zone, googleMapsLoaded: () => this.googleMapsLoaded() };\r\n this.subscriptions.push(this.scriptLoaderService.scripts.subscribe(\r\n res => {\r\n const googleScript = res?.find(s => s.ref === 'Google Maps');\r\n const googleClusterScript = res?.find(s => s.ref === 'Google Maps Cluster');\r\n if (googleScript?.loaded && googleClusterScript?.loaded) {\r\n this.initComponent();\r\n }\r\n else {\r\n if (!googleScript?.loading) {\r\n this.scriptLoaderService.load('Google Maps');\r\n }\r\n if (!googleClusterScript?.loading) {\r\n this.scriptLoaderService.load('Google Maps Cluster');\r\n }\r\n }\r\n }));\r\n }\r\n\r\n initComponent() {\r\n // HACK Styles are added TIME AND TIME again by Google Maps so for the pre render site we want to save a bit of file space\r\n if (environment.versionCheckUrl.indexOf(\"://pre.\") !== -1) {\r\n const styleTags = this._document.head.getElementsByTagName('style');\r\n let deleteIndexes: number[] = [];\r\n if (styleTags) {\r\n for (var i = 0; i < styleTags.length; i++) {\r\n if (styleTags[i].innerText.startsWith('@keyframes beginBrowserAutofill{0%{}to{}}@keyframes endBrowserAutofill{0%{}to{}}.pac-container')) {\r\n deleteIndexes.push(i);\r\n }\r\n }\r\n for (var i = 0; i < deleteIndexes.length - 2; i++) {\r\n styleTags[deleteIndexes[i]].remove();\r\n }\r\n }\r\n }\r\n if (this.subscriptions && this.subscriptions.length > 0) {\r\n this.subscriptions.forEach((sub) => { sub.unsubscribe(); });\r\n }\r\n this.isMobile = window.innerWidth < 768;\r\n this.subscriptions.push(this.scriptLoaderService.scripts.subscribe(\r\n res => {\r\n if (res && res.find(s => s.ref === 'Google Maps')?.loaded && res.find(s => s.ref === 'Google Maps Cluster')?.loaded) {\r\n this.zoom = this.settings.mapZoomLevel;\r\n if (this.isMobile) {\r\n this.zoom = this.zoom - 2;\r\n }\r\n if (this.settings.mapStyleJson) {\r\n this.style = JSON.parse(this.settings.mapStyleJson) as any[];\r\n }\r\n this.radius = this.settings.radius;\r\n this.center = new google.maps.LatLng(this.settings.latitude, this.settings.longitude);\r\n this.options = {\r\n maxZoom: 18,\r\n minZoom: this.zoom,\r\n fullscreenControl: true,\r\n styles: this.style\r\n }\r\n this.mapInit = true;\r\n this.initMap();\r\n }\r\n }));\r\n }\r\n\r\n public initMap() {\r\n const defaultBounds = {\r\n north: this.settings.latitudeNorthWest,\r\n south: this.settings.latitudeSouthEast,\r\n east: this.settings.longitudeSouthEast,\r\n west: this.settings.longitudeNorthWest\r\n };\r\n this.autoCompleteOptions = {\r\n bounds: defaultBounds,\r\n fields: [\"formatted_address\", \"geometry\"],\r\n strictBounds: true,\r\n types: ['(regions)']\r\n };\r\n this.searchControl = new FormControl();\r\n this.locations = this.dealerService.getMarkers(this.dealers);\r\n // Ensure we have the Manufacturers\r\n this.locations?.forEach((location) => {\r\n location.pin = 'pin';\r\n location.manufacturers?.forEach(manufacturer => {\r\n const manufacturerFound = this.manufacturers.find(m => m.id === manufacturer.id);\r\n if (manufacturerFound) {\r\n location.pin = manufacturerFound.seName; // So we can customise the pin if we want\r\n manufacturer.name = manufacturerFound.name;\r\n manufacturer.pictureUrl = manufacturerFound.pictureUrl;\r\n }\r\n });\r\n });\r\n this.locationList = this.locations;\r\n this.markers = this.locations;\r\n this.sortLocations();\r\n if (this.lat && this.lng) {\r\n this.zoomToNewLocation(this.lat, this.lng, 11, true, true);\r\n }\r\n }\r\n\r\n public setCurrentPosition() {\r\n if ('geolocation' in navigator) {\r\n navigator.geolocation.getCurrentPosition((position) => {\r\n this.lat = position.coords.latitude;\r\n this.lng = position.coords.longitude;\r\n this.center = new google.maps.LatLng(this.lat, this.lng);\r\n this.zoom = 11;\r\n this.sortLocations();\r\n this.mapInit = false;\r\n setTimeout(() => { this.mapInit = true });\r\n });\r\n }\r\n }\r\n\r\n public autoComplete(result: PlaceResult) {\r\n if (result?.geometry?.location) {\r\n this.zoomToNewLocation(result.geometry.location.lat(), result.geometry.location.lng(), 11, true, true)\r\n }\r\n }\r\n\r\n public formatRadius(value: number) {\r\n return value + 'km';\r\n }\r\n\r\n public onRadiusChange(radius: number) {\r\n if (radius) {\r\n this.radius = radius;\r\n }\r\n }\r\n\r\n public moveMap() {\r\n if (this.mapMoveTimer) {\r\n return;\r\n }\r\n const center = this.map.getCenter();\r\n if (center.lat() === this.center.lat() && center.lng() == this.center.lng()) { // Map has not moved yet\r\n return;\r\n }\r\n this.mapMoveTimer = setTimeout(() => {\r\n this.lat = center.lat();\r\n this.lng = center.lng();\r\n this.mapMoveTimer = null;\r\n this.sortLocations();\r\n }, 500);\r\n }\r\n\r\n public zoomToNewLocation(lat: number, lng: number, zoom: number, sort: boolean, init: boolean) {\r\n this.lat = lat;\r\n this.lng = lng;\r\n this.center = new google.maps.LatLng(this.lat, this.lng);\r\n this.zoom = zoom;\r\n if (sort) {\r\n this.sortLocations();\r\n }\r\n if (init) {\r\n this.mapInit = false;\r\n setTimeout(() => { this.mapInit = true; this.cd.detectChanges(); }, 200);\r\n }\r\n }\r\n\r\n public isInfoWindowOpen(index: number) {\r\n return this.openedWindow === index;\r\n }\r\n\r\n public openWindow(marker: MapMarker, index: number) {\r\n var location = this.locations[index];\r\n if (!location) {\r\n return;\r\n }\r\n this.zoomToNewLocation(location.lat, location.lng, 13, true, false);\r\n setTimeout(() => {\r\n this.infoWindowsView.forEach((infoWindow: MapInfoWindow) => {\r\n infoWindow.open(marker);\r\n this.selectedLocation = location;\r\n this.emitDealer(location);\r\n });\r\n });\r\n }\r\n\r\n public showDealer(location: OmnialMarker) {\r\n this.zoomToNewLocation(location.lat, location.lng, 13, false, false);\r\n setTimeout(() => {\r\n this.infoWindowsView.forEach((infoWindow: MapInfoWindow) => {\r\n const marker = this.mapMarker.find(m => m.getTitle() == location.title);\r\n if (marker) {\r\n infoWindow.open(marker);\r\n }\r\n this.selectedLocation = location;\r\n this.emitDealer(location);\r\n const dealer = this.dealers.find(d => d.id === location.dealerId);\r\n if (dealer) {\r\n this.trackingService.pushPage(`dealer/${dealer.code}`, `${dealer.name} ${dealer.address?.city} ${dealer.address?.state}`);\r\n }\r\n });\r\n this.sortLocations();\r\n this.cd.detectChanges();\r\n });\r\n }\r\n\r\n public dealerWebsiteClick(marker: OmnialMarker): void {\r\n const dealer = this.dealers.find(d => d.id === marker.dealerId);\r\n if (dealer) {\r\n this.trackingService.pushPage(`dealer-website/${dealer.code}`, `${dealer.name} ${dealer.address?.city} ${dealer.address?.state}`);\r\n this.trackingService.pushSelectContent('DealerWebsite', dealer.code);\r\n }\r\n }\r\n\r\n public setDealer(dealer: Dealer): void {\r\n if (dealer) {\r\n const location = this.locations.find(l => l.dealerId === dealer.id);\r\n if (location) {\r\n this.showDealer(location);\r\n }\r\n }\r\n }\r\n\r\n public emitDealer(location: OmnialMarker): void {\r\n if (location) {\r\n const selectedDealer = this.dealers.find(d => d.id === location.dealerId);\r\n if (selectedDealer) {\r\n this.dealerSelected.emit(selectedDealer);\r\n }\r\n }\r\n }\r\n\r\n distanceToCenter(lat: number, lng: number): number {\r\n const R = 6371; // mean radius of earth\r\n const lat1 = this.toRad(this.lat);\r\n const lng1 = this.toRad(this.lng);\r\n const lat2 = this.toRad(lat);\r\n const lng2 = this.toRad(lng);\r\n const dLat = lat2 - lat1;\r\n const dLng = lng2 - lng1;\r\n const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(lat1) * Math.cos(lat2) * Math.sin(dLng / 2) * Math.sin(dLng / 2);\r\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n return R * c;\r\n }\r\n\r\n toRad(degrees) {\r\n return degrees * Math.PI / 180;\r\n }\r\n\r\n sortLocations() {\r\n this.locations?.forEach((location) => {\r\n location.distance = this.distanceToCenter(location.lat, location.lng);\r\n });\r\n this.locationList = this.locations?.sort((n1, n2) => {\r\n if (n1.distance > n2.distance) {\r\n return 1;\r\n }\r\n if (n1.distance < n2.distance) {\r\n return -1;\r\n }\r\n return 0;\r\n });\r\n }\r\n\r\n googleMapsLoaded() {\r\n // Google Maps requires a callback method ... even if it does not do anything\r\n }\r\n\r\n}\r\n","
\r\n \r\n
\r\n \r\n
\r\n
\r\n Find Retailers within {{radius}}km: \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
{{ selectedLocation?.title }}
\r\n
{{selectedLocation?.street}}\r\n
{{selectedLocation?.city}}, {{selectedLocation?.state}}, {{selectedLocation?.postalCode}}\r\n
\r\n
{{selectedLocation?.phone}}
\r\n
{{selectedLocation?.email}}
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
{{ location.title }}
\r\n
{{location.street}}\r\n
{{location.city}}, {{location.state}}, {{location.postalCode}}\r\n
\r\n
{{location.phone}}
\r\n
{{location.email}}
\r\n
\r\n
Distance to map centre: {{location.distance | number:'1.1-1'}}km
\r\n \r\n 0\">\r\n Brands Stocked by this Retailer\r\n \r\n
\r\n
\r\n \r\n
{{manufacturer.name}}
\r\n
{{manufacturer.name}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n","import { AfterViewInit, Component, EventEmitter, Input, OnDestroy, OnInit, Output, QueryList, ViewChildren } from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { Manufacturer } from 'src/@omnial/_models/catalog/manufacturer.model';\r\nimport { ProductDetail } from 'src/@omnial/_models/catalog/product.model';\r\nimport { DealerLocatorSettings } from 'src/@omnial/_models/dealer-locator/dealer-locator.settings.model';\r\nimport { Dealer } from 'src/@omnial/_models/dealer-locator/dealer.model';\r\nimport { Country } from 'src/@omnial/_models/order/country.model';\r\nimport { ManufacturerService } from 'src/@omnial/_services/catalog/manufacturer.service';\r\nimport { DealerService } from 'src/@omnial/_services/dealers/dealer.service';\r\nimport { CheckoutService } from 'src/@omnial/_services/order/checkout.service';\r\nimport { environment } from 'src/environments/environment';\r\nimport { DealerLocatorMapComponent } from './dealer-locator-map/dealer-locator-map.component';\r\n\r\n@Component({\n selector: 'app-dealer-locator',\n templateUrl: './../../../app/shared/dealer-locator/dealer-locator.component.html',\n styleUrls: ['./../../../app/shared/dealer-locator/dealer-locator.component.scss'],\n standalone: false\n})\r\n\r\nexport class DealerLocatorComponent implements OnInit, OnDestroy, AfterViewInit {\r\n @Output() dealerSelected = new EventEmitter();\r\n @Input() product: ProductDetail;\r\n @Input() lookupType: 'manufacturer' | 'specificationOption' = 'manufacturer';\r\n @Input() specificationOptionName: string;\r\n @Input() manufacturer: Manufacturer;\r\n @Input() dealers: Dealer[];\r\n @Input() allSelection: boolean = true;\r\n @Input() loadAll: boolean = false;\r\n @Input() manufacturerPreSelect: boolean = false;\r\n @ViewChildren('dealerLocatorMap') dealerLocatorMap: QueryList;\r\n public allDealers: Dealer[];\r\n public manufacturers: Manufacturer[] = [];\r\n public settings: DealerLocatorSettings;\r\n public countries: Country[];\r\n public preRender = false;\r\n\r\n public manufacturerFilter: Manufacturer[] = [];\r\n public selectedManufacturer: Manufacturer = null;\r\n public showManufacturerFilter = false;\r\n public subscriptions: Subscription[] = [];\r\n\r\n public manufacturerForm = new FormGroup({ manufacturerId: new FormControl(0) });\r\n\r\n constructor(private dealerService: DealerService,\r\n public manufacturerService: ManufacturerService,\r\n public checkoutService: CheckoutService) { }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscriptions && this.subscriptions.length > 0) {\r\n this.subscriptions.forEach((sub) => { sub.unsubscribe(); });\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.manufacturerForm?.controls?.manufacturerId?.value) {\r\n this.changeManufacturer(this.manufacturerForm?.controls?.manufacturerId?.value);\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n if (environment.versionCheckUrl.indexOf(\"://pre.\") !== -1) {\r\n this.preRender = true;\r\n }\r\n this.init();\r\n }\r\n\r\n public init(product?: ProductDetail) {\r\n if (product) {\r\n this.product = product;\r\n }\r\n if (this.subscriptions && this.subscriptions.length > 0) {\r\n this.subscriptions.forEach((sub) => { sub.unsubscribe(); });\r\n }\r\n this.subscriptions.push(this.dealerService.settings.subscribe(\r\n settings => {\r\n if (settings) {\r\n this.settings = settings;\r\n this.initLocator();\r\n } else {\r\n this.dealerService.loadSettings();\r\n }\r\n }));\r\n if (!this.manufacturer) {\r\n this.subscriptions.push(this.manufacturerService.manufacturers.subscribe(manufacturers => {\r\n if (manufacturers) {\r\n this.manufacturers = manufacturers;\r\n this.initLocator();\r\n } else {\r\n this.manufacturerService.load();\r\n }\r\n }));\r\n } else {\r\n this.manufacturers = [this.manufacturer];\r\n }\r\n if (!this.dealers) {\r\n this.subscriptions.push(this.dealerService.dealers.subscribe(\r\n dealers => {\r\n if (dealers) {\r\n this.allDealers = dealers.filter(d => d.isVisible);\r\n if (!this.allDealers) {\r\n this.allDealers = [];\r\n }\r\n this.initLocator();\r\n } else {\r\n if (this.loadAll) {\r\n this.dealerService.loadAll();\r\n } else {\r\n this.dealerService.load();\r\n }\r\n }\r\n }));\r\n } else {\r\n this.allDealers = this.dealers;\r\n }\r\n this.subscriptions.push(this.checkoutService.getAllowableCountries(true).subscribe(\r\n resShip => {\r\n this.countries = resShip as Country[];\r\n this.initLocator();\r\n }));\r\n }\r\n\r\n public initLocator(): void {\r\n if (this.preRender || !this.settings || !this.allDealers || !this.countries || !this.manufacturers) {\r\n return;\r\n }\r\n if (this.product && this.settings.linkToManufacturers && this.lookupType == 'manufacturer') {\r\n const filteredDealers: Dealer[] = [];\r\n this.selectedManufacturer = this.manufacturers.find(m => m.id === this.product.manufacturer?.id)\r\n this.allDealers.forEach((dealer) => {\r\n if (dealer.manufacturerIds.some(m => m === this.product?.manufacturer?.id)) {\r\n filteredDealers.push(dealer);\r\n };\r\n });\r\n this.initMap(filteredDealers);\r\n } else if (this.product && this.lookupType == 'specificationOption') {\r\n const filteredDealers: Dealer[] = [];\r\n const optionIds: number[] = [];\r\n this.product.specifications?.forEach((specification) => {\r\n if (!this.specificationOptionName) {\r\n optionIds.push(specification.id);\r\n } else if (this.specificationOptionName == specification.specificationAttributeName) {\r\n optionIds.push(specification.id);\r\n }\r\n });\r\n this.allDealers.forEach((dealer) => {\r\n dealer.specificationOptionIds.forEach((spec) => {\r\n if (optionIds.find(s => s == spec)) {\r\n filteredDealers.push(dealer);\r\n }\r\n });\r\n });\r\n this.initMap(filteredDealers);\r\n } else if (!this.allSelection) {\r\n this.manufacturerFilter = this.getManufacturerFilter();\r\n const filteredDealers: Dealer[] = [];\r\n if (this.manufacturerFilter && this.manufacturerFilter.length > 0) {\r\n this.selectedManufacturer = this.manufacturers.find(m => m.id === this.manufacturerFilter[0].id);\r\n }\r\n this.allDealers.forEach((dealer) => {\r\n if (dealer.manufacturerIds.some(m => m === this.selectedManufacturer?.id)) {\r\n filteredDealers.push(dealer);\r\n };\r\n });\r\n if (this.manufacturerFilter?.length > 1) {\r\n this.showManufacturerFilter = true;\r\n }\r\n this.initMap(filteredDealers);\r\n } else {\r\n if (this.settings.linkToManufacturers) {\r\n this.manufacturerFilter = this.getManufacturerFilter();\r\n if (this.manufacturerFilter?.length > 1) {\r\n this.showManufacturerFilter = true;\r\n if (this.manufacturerPreSelect) {\r\n this.changeManufacturer(this.manufacturerFilter[0].id);\r\n } else{\r\n this.initMap(this.allDealers);\r\n }\r\n } else{\r\n this.initMap(this.allDealers);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public getManufacturerFilter(): Manufacturer[] {\r\n const manufacturerFilter: Manufacturer[] = [];\r\n this.allDealers.forEach((dealer) => {\r\n dealer.manufacturerIds.forEach((manufacturerId) => {\r\n if (!manufacturerFilter.find(m => m.id == manufacturerId)) {\r\n const manufacturer = this.manufacturers.find(m => m.id === manufacturerId);\r\n if (manufacturer) {\r\n manufacturerFilter.push(manufacturer);\r\n }\r\n }\r\n });\r\n });\r\n return manufacturerFilter.sort(function (a, b) { return a.displayOrder - b.displayOrder });\r\n }\r\n\r\n public setDealer(dealer: Dealer) {\r\n this.dealerLocatorMap?.forEach((dealerLocatorMap) => {\r\n dealerLocatorMap.setDealer(dealer);\r\n })\r\n }\r\n\r\n public emitDealer(dealer: Dealer) {\r\n this.dealerSelected.emit(dealer);\r\n }\r\n\r\n public changeManufacturer(id?: number): void {\r\n // Get the Dealer Associated with the Manufacturer\r\n let selectedManufacturerId = id;\r\n if (!selectedManufacturerId) {\r\n selectedManufacturerId = this.manufacturerForm.controls.manufacturerId.value;\r\n }\r\n if (selectedManufacturerId && selectedManufacturerId !== 0) {\r\n this.selectedManufacturer = this.manufacturerFilter.find(m => m.id === selectedManufacturerId)\r\n const dealers: Dealer[] = [];\r\n this.allDealers.forEach((dealer) => {\r\n if (dealer.manufacturerIds.some(m => m === selectedManufacturerId)) {\r\n dealers.push(dealer);\r\n };\r\n });\r\n this.initMap(dealers);\r\n } else {\r\n this.selectedManufacturer = null;\r\n this.initMap(this.allDealers);\r\n }\r\n }\r\n\r\n public initMap(dealers: Dealer[]): void {\r\n this.dealerLocatorMap?.forEach((dealerLocatorMap) => {\r\n dealerLocatorMap.manufacturers = this.manufacturers;\r\n dealerLocatorMap.dealers = dealers;\r\n dealerLocatorMap.settings = this.settings;\r\n dealerLocatorMap.init();\r\n });\r\n }\r\n\r\n public showMap(): void {\r\n this.preRender = false;\r\n setTimeout(() => { this.initLocator(); }, 200);\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n \r\n Show me only retailers that stock this Brand\r\n \r\n All Brands\r\n \r\n {{manufacturer.name}}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n

\r\n \r\n {{selectedManufacturer?.name}}\r\n

\r\n \r\n
\r\n \r\n
\r\n
\r\n","import { ChangeDetectorRef, ViewEncapsulation } from '@angular/core';\r\nimport { Component, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { StateChange } from 'ng-lazyload-image';\r\nimport { NgxSpinnerService } from 'ngx-spinner';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { OmnialMedia } from 'src/@omnial/_models/catalog/omnial-media.model';\r\nimport { AppSettings } from 'src/app/app.settings';\r\n\r\n@Component({\n selector: 'app-product-zoom',\n templateUrl: './../../../../app/pages/product/product-zoom/product-zoom.component.html',\n styleUrls: ['./../../../../app/pages/product/product-zoom/product-zoom.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\r\n\r\nexport class ProductZoomComponent {\r\n public zoomLevel;\r\n public imageWidth = '';\r\n public blurr = false;\r\n public width: number;\r\n public height: number;\r\n public zoomWidth: number;\r\n public zoomHeight: number;\r\n public zoomTimer: NodeJS.Timeout;\r\n public initialized = false;\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public image: OmnialMedia,\r\n public settings: AppSettings,\r\n public spinner: NgxSpinnerService,\r\n public cd: ChangeDetectorRef,\r\n public toastr: ToastrService) { }\r\n\r\n public close(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n public zoomIn(zoomLevel: number): void {\r\n if (this.zoomLevel > 500) {\r\n this.toastr.warning(\"Maximum zoom reached\");\r\n } else {\r\n this.changeZoom(this.zoomLevel + zoomLevel);\r\n }\r\n }\r\n\r\n public zoomOut(zoomLevel: number): void {\r\n if (this.zoomLevel < 30) {\r\n this.toastr.warning(\"Minimum zoom reached\");\r\n } else {\r\n this.changeZoom(this.zoomLevel - zoomLevel)\r\n }\r\n }\r\n\r\n public changeZoom(zoomLevel: number): void {\r\n this.zoomLevel = zoomLevel;\r\n this.zoomWidth = (this.zoomLevel / 100) * this.width;\r\n this.zoomHeight = (this.zoomLevel / 100) * this.height;\r\n this.imageWidth = this.zoomWidth.toString() + 'px';\r\n if (this.zoomWidth > this.width) {\r\n this.blurr = true;\r\n } else {\r\n this.blurr = false;\r\n }\r\n const img = document.getElementById('zoomImage') as HTMLImageElement;\r\n this.setScroll(img, false);\r\n }\r\n\r\n public imageStateChange(event: StateChange): void {\r\n if (event?.reason === 'finally') {\r\n const img = document.getElementById('zoomImage') as HTMLImageElement;\r\n if (img) {\r\n this.setScroll(img, true);\r\n }\r\n }\r\n }\r\n\r\n private setScroll(img: HTMLImageElement, initial: boolean): void {\r\n if (this.zoomTimer) {\r\n clearTimeout(this.zoomTimer);\r\n }\r\n const container = document.getElementById('zoomContainer') as HTMLElement;\r\n if (container) {\r\n if (initial && (img.clientWidth !== img.naturalWidth)) { // Event Finally may not have the correct image yet ... so we HACK it here with a timeout\r\n this.zoomTimer = setTimeout(() => { this.setScroll(img, true); }, 100);\r\n return;\r\n }\r\n if (initial) {\r\n this.width = img.clientWidth;\r\n this.height = img.clientHeight;\r\n if (img.clientWidth / 4 > container.clientWidth) {\r\n this.changeZoom(20);\r\n } else if (img.clientWidth / 3 > container.clientWidth) {\r\n this.changeZoom(30);\r\n } else if (img.clientWidth / 2 > container.clientWidth) {\r\n this.changeZoom(50);\r\n } else {\r\n this.changeZoom(100);\r\n }\r\n this.initialized = true;\r\n setTimeout(() => { container.click(); this.cd.detectChanges(); }, 200); // HACK - Testing required\r\n return;\r\n }\r\n let scrollX = 0;\r\n let scrollY = 0;\r\n if (this.zoomWidth > container.clientWidth) {\r\n scrollX = (this.zoomWidth - container.clientWidth) / 2;\r\n }\r\n if (this.zoomHeight > container.clientHeight) {\r\n scrollY = (this.zoomHeight - container.clientHeight) / 2;\r\n }\r\n container.scrollTo(scrollX, scrollY);\r\n }\r\n this.cd.detectChanges();\r\n }\r\n\r\n public formatLabel(value: number): string {\r\n return `${value}%`;\r\n }\r\n\r\n}\r\n","
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n Zoom Level - {{zoomLevel}}%\r\n
\r\n You are zooming beyond the size of the image. Image quality may suffer\r\n
\r\n
\r\n
\r\n \"Zoomed\r\n
\r\n","import * as i0 from '@angular/core';\nimport { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, InjectionToken, numberAttribute, inject, NgZone, CSP_NONCE, ChangeDetectorRef, ElementRef, EventEmitter, PLATFORM_ID, booleanAttribute, Output, ViewChild, NgModule } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Subject, BehaviorSubject, fromEventPattern, of, Observable } from 'rxjs';\nimport { switchMap, takeUntil } from 'rxjs/operators';\nconst _c0 = [\"youtubeContainer\"];\nfunction YouTubePlayer_Conditional_0_Template(rf, ctx) {\n if (rf & 1) {\n const _r1 = i0.ɵɵgetCurrentView();\n i0.ɵɵelementStart(0, \"youtube-player-placeholder\", 2);\n i0.ɵɵlistener(\"click\", function YouTubePlayer_Conditional_0_Template_youtube_player_placeholder_click_0_listener() {\n i0.ɵɵrestoreView(_r1);\n const ctx_r1 = i0.ɵɵnextContext();\n return i0.ɵɵresetView(ctx_r1._load(true));\n });\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n const ctx_r1 = i0.ɵɵnextContext();\n i0.ɵɵproperty(\"videoId\", ctx_r1.videoId)(\"width\", ctx_r1.width)(\"height\", ctx_r1.height)(\"isLoading\", ctx_r1._isLoading)(\"buttonLabel\", ctx_r1.placeholderButtonLabel)(\"quality\", ctx_r1.placeholderImageQuality);\n }\n}\nlet YouTubePlayerPlaceholder = /*#__PURE__*/(() => {\n class YouTubePlayerPlaceholder {\n /** ID of the video for which to show the placeholder. */\n videoId;\n /** Width of the video for which to show the placeholder. */\n width;\n /** Height of the video for which to show the placeholder. */\n height;\n /** Whether the video is currently being loaded. */\n isLoading;\n /** Accessible label for the play button. */\n buttonLabel;\n /** Quality of the placeholder image. */\n quality;\n /** Gets the background image showing the placeholder. */\n _getBackgroundImage() {\n let url;\n if (this.quality === 'low') {\n url = `https://i.ytimg.com/vi/${this.videoId}/hqdefault.jpg`;\n } else if (this.quality === 'high') {\n url = `https://i.ytimg.com/vi/${this.videoId}/maxresdefault.jpg`;\n } else {\n url = `https://i.ytimg.com/vi_webp/${this.videoId}/sddefault.webp`;\n }\n return `url(${url})`;\n }\n static ɵfac = function YouTubePlayerPlaceholder_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || YouTubePlayerPlaceholder)();\n };\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: YouTubePlayerPlaceholder,\n selectors: [[\"youtube-player-placeholder\"]],\n hostAttrs: [1, \"youtube-player-placeholder\"],\n hostVars: 8,\n hostBindings: function YouTubePlayerPlaceholder_HostBindings(rf, ctx) {\n if (rf & 2) {\n i0.ɵɵstyleProp(\"background-image\", ctx._getBackgroundImage())(\"width\", ctx.width, \"px\")(\"height\", ctx.height, \"px\");\n i0.ɵɵclassProp(\"youtube-player-placeholder-loading\", ctx.isLoading);\n }\n },\n inputs: {\n videoId: \"videoId\",\n width: \"width\",\n height: \"height\",\n isLoading: \"isLoading\",\n buttonLabel: \"buttonLabel\",\n quality: \"quality\"\n },\n decls: 4,\n vars: 1,\n consts: [[\"type\", \"button\", 1, \"youtube-player-placeholder-button\"], [\"height\", \"100%\", \"version\", \"1.1\", \"viewBox\", \"0 0 68 48\", \"focusable\", \"false\", \"aria-hidden\", \"true\"], [\"d\", \"M66.52,7.74c-0.78-2.93-2.49-5.41-5.42-6.19C55.79,.13,34,0,34,0S12.21,.13,6.9,1.55 C3.97,2.33,2.27,4.81,1.48,7.74C0.06,13.05,0,24,0,24s0.06,10.95,1.48,16.26c0.78,2.93,2.49,5.41,5.42,6.19 C12.21,47.87,34,48,34,48s21.79-0.13,27.1-1.55c2.93-0.78,4.64-3.26,5.42-6.19C67.94,34.95,68,24,68,24S67.94,13.05,66.52,7.74z\", \"fill\", \"#f00\"], [\"d\", \"M 45,24 27,14 27,34\", \"fill\", \"#fff\"]],\n template: function YouTubePlayerPlaceholder_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵelementStart(0, \"button\", 0);\n i0.ɵɵnamespaceSVG();\n i0.ɵɵelementStart(1, \"svg\", 1);\n i0.ɵɵelement(2, \"path\", 2)(3, \"path\", 3);\n i0.ɵɵelementEnd()();\n }\n if (rf & 2) {\n i0.ɵɵattribute(\"aria-label\", ctx.buttonLabel);\n }\n },\n styles: [\".youtube-player-placeholder{display:flex;align-items:center;justify-content:center;width:100%;overflow:hidden;cursor:pointer;background-color:#000;background-position:center center;background-size:cover;transition:box-shadow 300ms ease;box-shadow:inset 0 120px 90px -90px rgba(0,0,0,.8)}:fullscreen .youtube-player-placeholder{min-width:100vw;min-height:100vh}.youtube-player-placeholder-button{transition:opacity 300ms ease;-moz-appearance:none;-webkit-appearance:none;background:none;border:none;padding:0;display:flex}.youtube-player-placeholder-button svg{width:68px;height:48px}.youtube-player-placeholder-loading{box-shadow:none}.youtube-player-placeholder-loading .youtube-player-placeholder-button{opacity:0}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n return YouTubePlayerPlaceholder;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/** Injection token used to configure the `YouTubePlayer`. */\nconst YOUTUBE_PLAYER_CONFIG = /*#__PURE__*/new InjectionToken('YOUTUBE_PLAYER_CONFIG');\nconst DEFAULT_PLAYER_WIDTH = 640;\nconst DEFAULT_PLAYER_HEIGHT = 390;\n/** Coercion function for time values. */\nfunction coerceTime(value) {\n return value == null ? value : numberAttribute(value, 0);\n}\n/**\n * Equivalent of `YT.PlayerState` which we can't use, because it's meant to\n * be read off the `window` which we can't do before the API has been loaded.\n */\nvar PlayerState = /*#__PURE__*/function (PlayerState) {\n PlayerState[PlayerState[\"UNSTARTED\"] = -1] = \"UNSTARTED\";\n PlayerState[PlayerState[\"ENDED\"] = 0] = \"ENDED\";\n PlayerState[PlayerState[\"PLAYING\"] = 1] = \"PLAYING\";\n PlayerState[PlayerState[\"PAUSED\"] = 2] = \"PAUSED\";\n PlayerState[PlayerState[\"BUFFERING\"] = 3] = \"BUFFERING\";\n PlayerState[PlayerState[\"CUED\"] = 5] = \"CUED\";\n return PlayerState;\n}(PlayerState || {});\n/**\n * Angular component that renders a YouTube player via the YouTube player\n * iframe API.\n * @see https://developers.google.com/youtube/iframe_api_reference\n */\nlet YouTubePlayer = /*#__PURE__*/(() => {\n class YouTubePlayer {\n _ngZone = inject(NgZone);\n _nonce = inject(CSP_NONCE, {\n optional: true\n });\n _changeDetectorRef = inject(ChangeDetectorRef);\n _elementRef = inject(ElementRef);\n _player;\n _pendingPlayer;\n _existingApiReadyCallback;\n _pendingPlayerState;\n _destroyed = new Subject();\n _playerChanges = new BehaviorSubject(undefined);\n _isLoading = false;\n _hasPlaceholder = true;\n /** Whether we're currently rendering inside a browser. */\n _isBrowser;\n /** YouTube Video ID to view */\n videoId;\n /** Height of video player */\n get height() {\n return this._height;\n }\n set height(height) {\n this._height = height == null || isNaN(height) ? DEFAULT_PLAYER_HEIGHT : height;\n }\n _height = DEFAULT_PLAYER_HEIGHT;\n /** Width of video player */\n get width() {\n return this._width;\n }\n set width(width) {\n this._width = width == null || isNaN(width) ? DEFAULT_PLAYER_WIDTH : width;\n }\n _width = DEFAULT_PLAYER_WIDTH;\n /** The moment when the player is supposed to start playing */\n startSeconds;\n /** The moment when the player is supposed to stop playing */\n endSeconds;\n /** The suggested quality of the player */\n suggestedQuality;\n /**\n * Extra parameters used to configure the player. See:\n * https://developers.google.com/youtube/player_parameters.html?playerVersion=HTML5#Parameters\n */\n playerVars;\n /** Whether cookies inside the player have been disabled. */\n disableCookies = false;\n /** Whether to automatically load the YouTube iframe API. Defaults to `true`. */\n loadApi;\n /**\n * By default the player shows a placeholder image instead of loading the YouTube API which\n * improves the initial page load performance. This input allows for the behavior to be disabled.\n */\n disablePlaceholder = false;\n /**\n * Whether the iframe will attempt to load regardless of the status of the api on the\n * page. Set this to true if you don't want the `onYouTubeIframeAPIReady` field to be\n * set on the global window.\n */\n showBeforeIframeApiLoads = false;\n /** Accessible label for the play button inside of the placeholder. */\n placeholderButtonLabel;\n /**\n * Quality of the displayed placeholder image. Defaults to `standard`,\n * because not all video have a high-quality placeholder.\n */\n placeholderImageQuality;\n // Note: ready event can't go through the lazy emitter, because it\n // happens before the `_playerChanges` stream emits the new player.\n /** Emits when the player is initialized. */\n ready = new EventEmitter();\n /** Emits when the state of the player has changed. */\n stateChange = this._getLazyEmitter('onStateChange');\n /** Emits when there's an error while initializing the player. */\n error = this._getLazyEmitter('onError');\n /** Emits when the underlying API of the player has changed. */\n apiChange = this._getLazyEmitter('onApiChange');\n /** Emits when the playback quality has changed. */\n playbackQualityChange = this._getLazyEmitter('onPlaybackQualityChange');\n /** Emits when the playback rate has changed. */\n playbackRateChange = this._getLazyEmitter('onPlaybackRateChange');\n /** The element that will be replaced by the iframe. */\n youtubeContainer;\n constructor() {\n const platformId = inject(PLATFORM_ID);\n const config = inject(YOUTUBE_PLAYER_CONFIG, {\n optional: true\n });\n this.loadApi = config?.loadApi ?? true;\n this.disablePlaceholder = !!config?.disablePlaceholder;\n this.placeholderButtonLabel = config?.placeholderButtonLabel || 'Play video';\n this.placeholderImageQuality = config?.placeholderImageQuality || 'standard';\n this._isBrowser = isPlatformBrowser(platformId);\n }\n ngAfterViewInit() {\n this._conditionallyLoad();\n }\n ngOnChanges(changes) {\n if (this._shouldRecreatePlayer(changes)) {\n this._conditionallyLoad();\n } else if (this._player) {\n if (changes['width'] || changes['height']) {\n this._setSize();\n }\n if (changes['suggestedQuality']) {\n this._setQuality();\n }\n if (changes['startSeconds'] || changes['endSeconds'] || changes['suggestedQuality']) {\n this._cuePlayer();\n }\n }\n }\n ngOnDestroy() {\n this._pendingPlayer?.destroy();\n if (this._player) {\n this._player.destroy();\n window.onYouTubeIframeAPIReady = this._existingApiReadyCallback;\n }\n this._playerChanges.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** See https://developers.google.com/youtube/iframe_api_reference#playVideo */\n playVideo() {\n if (this._player) {\n this._player.playVideo();\n } else {\n this._getPendingState().playbackState = PlayerState.PLAYING;\n this._load(true);\n }\n }\n /** See https://developers.google.com/youtube/iframe_api_reference#pauseVideo */\n pauseVideo() {\n if (this._player) {\n this._player.pauseVideo();\n } else {\n this._getPendingState().playbackState = PlayerState.PAUSED;\n }\n }\n /** See https://developers.google.com/youtube/iframe_api_reference#stopVideo */\n stopVideo() {\n if (this._player) {\n this._player.stopVideo();\n } else {\n // It seems like YouTube sets the player to CUED when it's stopped.\n this._getPendingState().playbackState = PlayerState.CUED;\n }\n }\n /** See https://developers.google.com/youtube/iframe_api_reference#seekTo */\n seekTo(seconds, allowSeekAhead) {\n if (this._player) {\n this._player.seekTo(seconds, allowSeekAhead);\n } else {\n this._getPendingState().seek = {\n seconds,\n allowSeekAhead\n };\n }\n }\n /** See https://developers.google.com/youtube/iframe_api_reference#mute */\n mute() {\n if (this._player) {\n this._player.mute();\n } else {\n this._getPendingState().muted = true;\n }\n }\n /** See https://developers.google.com/youtube/iframe_api_reference#unMute */\n unMute() {\n if (this._player) {\n this._player.unMute();\n } else {\n this._getPendingState().muted = false;\n }\n }\n /** See https://developers.google.com/youtube/iframe_api_reference#isMuted */\n isMuted() {\n if (this._player) {\n return this._player.isMuted();\n }\n if (this._pendingPlayerState) {\n return !!this._pendingPlayerState.muted;\n }\n return false;\n }\n /** See https://developers.google.com/youtube/iframe_api_reference#setVolume */\n setVolume(volume) {\n if (this._player) {\n this._player.setVolume(volume);\n } else {\n this._getPendingState().volume = volume;\n }\n }\n /** See https://developers.google.com/youtube/iframe_api_reference#getVolume */\n getVolume() {\n if (this._player) {\n return this._player.getVolume();\n }\n if (this._pendingPlayerState && this._pendingPlayerState.volume != null) {\n return this._pendingPlayerState.volume;\n }\n return 0;\n }\n /** See https://developers.google.com/youtube/iframe_api_reference#setPlaybackRate */\n setPlaybackRate(playbackRate) {\n if (this._player) {\n return this._player.setPlaybackRate(playbackRate);\n } else {\n this._getPendingState().playbackRate = playbackRate;\n }\n }\n /** See https://developers.google.com/youtube/iframe_api_reference#getPlaybackRate */\n getPlaybackRate() {\n if (this._player) {\n return this._player.getPlaybackRate();\n }\n if (this._pendingPlayerState && this._pendingPlayerState.playbackRate != null) {\n return this._pendingPlayerState.playbackRate;\n }\n return 0;\n }\n /** See https://developers.google.com/youtube/iframe_api_reference#getAvailablePlaybackRates */\n getAvailablePlaybackRates() {\n return this._player ? this._player.getAvailablePlaybackRates() : [];\n }\n /** See https://developers.google.com/youtube/iframe_api_reference#getVideoLoadedFraction */\n getVideoLoadedFraction() {\n return this._player ? this._player.getVideoLoadedFraction() : 0;\n }\n /** See https://developers.google.com/youtube/iframe_api_reference#getPlayerState */\n getPlayerState() {\n if (!this._isBrowser || !window.YT) {\n return undefined;\n }\n if (this._player) {\n return this._player.getPlayerState();\n }\n if (this._pendingPlayerState && this._pendingPlayerState.playbackState != null) {\n return this._pendingPlayerState.playbackState;\n }\n return PlayerState.UNSTARTED;\n }\n /** See https://developers.google.com/youtube/iframe_api_reference#getCurrentTime */\n getCurrentTime() {\n if (this._player) {\n return this._player.getCurrentTime();\n }\n if (this._pendingPlayerState && this._pendingPlayerState.seek) {\n return this._pendingPlayerState.seek.seconds;\n }\n return 0;\n }\n /** See https://developers.google.com/youtube/iframe_api_reference#getPlaybackQuality */\n getPlaybackQuality() {\n return this._player ? this._player.getPlaybackQuality() : 'default';\n }\n /** See https://developers.google.com/youtube/iframe_api_reference#getAvailableQualityLevels */\n getAvailableQualityLevels() {\n return this._player ? this._player.getAvailableQualityLevels() : [];\n }\n /** See https://developers.google.com/youtube/iframe_api_reference#getDuration */\n getDuration() {\n return this._player ? this._player.getDuration() : 0;\n }\n /** See https://developers.google.com/youtube/iframe_api_reference#getVideoUrl */\n getVideoUrl() {\n return this._player ? this._player.getVideoUrl() : '';\n }\n /** See https://developers.google.com/youtube/iframe_api_reference#getVideoEmbedCode */\n getVideoEmbedCode() {\n return this._player ? this._player.getVideoEmbedCode() : '';\n }\n /**\n * Attempts to put the player into fullscreen mode, depending on browser support.\n * @param options Options controlling how the element behaves in fullscreen mode.\n */\n async requestFullscreen(options) {\n // Note that we do this on the host, rather than the iframe, because it allows us to handle the\n // placeholder in fullscreen mode. Null check the method since it's not supported everywhere.\n const element = this._elementRef.nativeElement;\n return element.requestFullscreen ? element.requestFullscreen(options) : Promise.reject(new Error('Fullscreen API not supported by browser.'));\n }\n /**\n * Loads the YouTube API and sets up the player.\n * @param playVideo Whether to automatically play the video once the player is loaded.\n */\n _load(playVideo) {\n // Don't do anything if we're not in a browser environment.\n if (!this._isBrowser) {\n return;\n }\n if (!window.YT || !window.YT.Player) {\n if (this.loadApi) {\n this._isLoading = true;\n loadApi(this._nonce);\n } else if (this.showBeforeIframeApiLoads && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw new Error('Namespace YT not found, cannot construct embedded youtube player. ' + 'Please install the YouTube Player API Reference for iframe Embeds: ' + 'https://developers.google.com/youtube/iframe_api_reference');\n }\n this._existingApiReadyCallback = window.onYouTubeIframeAPIReady;\n window.onYouTubeIframeAPIReady = () => {\n this._existingApiReadyCallback?.();\n this._ngZone.run(() => this._createPlayer(playVideo));\n };\n } else {\n this._createPlayer(playVideo);\n }\n }\n /** Loads the player depending on the internal state of the component. */\n _conditionallyLoad() {\n // If the placeholder isn't shown anymore, we have to trigger a load.\n if (!this._shouldShowPlaceholder()) {\n this._load(false);\n } else if (this.playerVars?.autoplay === 1) {\n // If it's an autoplaying video, we have to hide the placeholder and start playing.\n this._load(true);\n }\n }\n /** Whether to show the placeholder element. */\n _shouldShowPlaceholder() {\n if (this.disablePlaceholder) {\n return false;\n }\n // Since we don't load the API on the server, we show the placeholder permanently.\n if (!this._isBrowser) {\n return true;\n }\n return this._hasPlaceholder && !!this.videoId && !this._player;\n }\n /** Gets an object that should be used to store the temporary API state. */\n _getPendingState() {\n if (!this._pendingPlayerState) {\n this._pendingPlayerState = {};\n }\n return this._pendingPlayerState;\n }\n /**\n * Determines whether a change in the component state\n * requires the YouTube player to be recreated.\n */\n _shouldRecreatePlayer(changes) {\n const change = changes['videoId'] || changes['playerVars'] || changes['disableCookies'] || changes['disablePlaceholder'];\n return !!change && !change.isFirstChange();\n }\n /**\n * Creates a new YouTube player and destroys the existing one.\n * @param playVideo Whether to play the video once it loads.\n */\n _createPlayer(playVideo) {\n this._player?.destroy();\n this._pendingPlayer?.destroy();\n // A player can't be created if the API isn't loaded,\n // or there isn't a video or playlist to be played.\n if (typeof YT === 'undefined' || !this.videoId && !this.playerVars?.list) {\n return;\n }\n // Important! We need to create the Player object outside of the `NgZone`, because it kicks\n // off a 250ms setInterval which will continually trigger change detection if we don't.\n const player = this._ngZone.runOutsideAngular(() => new YT.Player(this.youtubeContainer.nativeElement, {\n videoId: this.videoId,\n host: this.disableCookies ? 'https://www.youtube-nocookie.com' : undefined,\n width: this.width,\n height: this.height,\n // Calling `playVideo` on load doesn't appear to actually play\n // the video so we need to trigger it through `playerVars` instead.\n playerVars: playVideo ? {\n ...(this.playerVars || {}),\n autoplay: 1\n } : this.playerVars\n }));\n const whenReady = event => {\n // Only assign the player once it's ready, otherwise YouTube doesn't expose some APIs.\n this._ngZone.run(() => {\n this._isLoading = false;\n this._hasPlaceholder = false;\n this._player = player;\n this._pendingPlayer = undefined;\n player.removeEventListener('onReady', whenReady);\n this._playerChanges.next(player);\n this.ready.emit(event);\n this._setSize();\n this._setQuality();\n if (this._pendingPlayerState) {\n this._applyPendingPlayerState(player, this._pendingPlayerState);\n this._pendingPlayerState = undefined;\n }\n // Only cue the player when it either hasn't started yet or it's cued,\n // otherwise cuing it can interrupt a player with autoplay enabled.\n const state = player.getPlayerState();\n if (state === PlayerState.UNSTARTED || state === PlayerState.CUED || state == null) {\n this._cuePlayer();\n } else if (playVideo && this.startSeconds && this.startSeconds > 0) {\n // We have to use `seekTo` when `startSeconds` are specified to simulate it playing from\n // a specific time. The \"proper\" way to do it would be to either go through `cueVideoById`\n // or `playerVars.start`, but at the time of writing both end up resetting the video\n // to the state as if the user hasn't interacted with it.\n player.seekTo(this.startSeconds, true);\n }\n this._changeDetectorRef.markForCheck();\n });\n };\n this._pendingPlayer = player;\n player.addEventListener('onReady', whenReady);\n }\n /** Applies any state that changed before the player was initialized. */\n _applyPendingPlayerState(player, pendingState) {\n const {\n playbackState,\n playbackRate,\n volume,\n muted,\n seek\n } = pendingState;\n switch (playbackState) {\n case PlayerState.PLAYING:\n player.playVideo();\n break;\n case PlayerState.PAUSED:\n player.pauseVideo();\n break;\n case PlayerState.CUED:\n player.stopVideo();\n break;\n }\n if (playbackRate != null) {\n player.setPlaybackRate(playbackRate);\n }\n if (volume != null) {\n player.setVolume(volume);\n }\n if (muted != null) {\n muted ? player.mute() : player.unMute();\n }\n if (seek != null) {\n player.seekTo(seek.seconds, seek.allowSeekAhead);\n }\n }\n /** Cues the player based on the current component state. */\n _cuePlayer() {\n if (this._player && this.videoId) {\n this._player.cueVideoById({\n videoId: this.videoId,\n startSeconds: this.startSeconds,\n endSeconds: this.endSeconds,\n suggestedQuality: this.suggestedQuality\n });\n }\n }\n /** Sets the player's size based on the current input values. */\n _setSize() {\n this._player?.setSize(this.width, this.height);\n }\n /** Sets the player's quality based on the current input values. */\n _setQuality() {\n if (this._player && this.suggestedQuality) {\n this._player.setPlaybackQuality(this.suggestedQuality);\n }\n }\n /** Gets an observable that adds an event listener to the player when a user subscribes to it. */\n _getLazyEmitter(name) {\n // Start with the stream of players. This way the events will be transferred\n // over to the new player if it gets swapped out under-the-hood.\n return this._playerChanges.pipe(\n // Switch to the bound event. `switchMap` ensures that the old event is removed when the\n // player is changed. If there's no player, return an observable that never emits.\n switchMap(player => {\n return player ? fromEventPattern(listener => {\n player.addEventListener(name, listener);\n }, listener => {\n // The API seems to throw when we try to unbind from a destroyed player and it doesn't\n // expose whether the player has been destroyed so we have to wrap it in a try/catch to\n // prevent the entire stream from erroring out.\n try {\n player?.removeEventListener?.(name, listener);\n } catch {}\n }) : of();\n }),\n // By default we run all the API interactions outside the zone\n // so we have to bring the events back in manually when they emit.\n source => new Observable(observer => source.subscribe({\n next: value => this._ngZone.run(() => observer.next(value)),\n error: error => observer.error(error),\n complete: () => observer.complete()\n })),\n // Ensures that everything is cleared out on destroy.\n takeUntil(this._destroyed));\n }\n static ɵfac = function YouTubePlayer_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || YouTubePlayer)();\n };\n static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n type: YouTubePlayer,\n selectors: [[\"youtube-player\"]],\n viewQuery: function YouTubePlayer_Query(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵviewQuery(_c0, 7);\n }\n if (rf & 2) {\n let _t;\n i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.youtubeContainer = _t.first);\n }\n },\n inputs: {\n videoId: \"videoId\",\n height: [2, \"height\", \"height\", numberAttribute],\n width: [2, \"width\", \"width\", numberAttribute],\n startSeconds: [2, \"startSeconds\", \"startSeconds\", coerceTime],\n endSeconds: [2, \"endSeconds\", \"endSeconds\", coerceTime],\n suggestedQuality: \"suggestedQuality\",\n playerVars: \"playerVars\",\n disableCookies: [2, \"disableCookies\", \"disableCookies\", booleanAttribute],\n loadApi: [2, \"loadApi\", \"loadApi\", booleanAttribute],\n disablePlaceholder: [2, \"disablePlaceholder\", \"disablePlaceholder\", booleanAttribute],\n showBeforeIframeApiLoads: [2, \"showBeforeIframeApiLoads\", \"showBeforeIframeApiLoads\", booleanAttribute],\n placeholderButtonLabel: \"placeholderButtonLabel\",\n placeholderImageQuality: \"placeholderImageQuality\"\n },\n outputs: {\n ready: \"ready\",\n stateChange: \"stateChange\",\n error: \"error\",\n apiChange: \"apiChange\",\n playbackQualityChange: \"playbackQualityChange\",\n playbackRateChange: \"playbackRateChange\"\n },\n features: [i0.ɵɵNgOnChangesFeature],\n decls: 4,\n vars: 3,\n consts: [[\"youtubeContainer\", \"\"], [3, \"videoId\", \"width\", \"height\", \"isLoading\", \"buttonLabel\", \"quality\"], [3, \"click\", \"videoId\", \"width\", \"height\", \"isLoading\", \"buttonLabel\", \"quality\"]],\n template: function YouTubePlayer_Template(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵtemplate(0, YouTubePlayer_Conditional_0_Template, 1, 6, \"youtube-player-placeholder\", 1);\n i0.ɵɵelementStart(1, \"div\");\n i0.ɵɵelement(2, \"div\", null, 0);\n i0.ɵɵelementEnd();\n }\n if (rf & 2) {\n i0.ɵɵconditional(ctx._shouldShowPlaceholder() ? 0 : -1);\n i0.ɵɵadvance();\n i0.ɵɵstyleProp(\"display\", ctx._shouldShowPlaceholder() ? \"none\" : \"\");\n }\n },\n dependencies: [YouTubePlayerPlaceholder],\n styles: [\"youtube-player:fullscreen,youtube-player:fullscreen iframe{min-width:100vw;min-height:100vh}\"],\n encapsulation: 2,\n changeDetection: 0\n });\n }\n return YouTubePlayer;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet apiLoaded = false;\n/** Loads the YouTube API from a specified URL only once. */\nfunction loadApi(nonce) {\n if (apiLoaded) {\n return;\n }\n // We can use `document` directly here, because this logic doesn't run outside the browser.\n const url = 'https://www.youtube.com/iframe_api';\n const script = document.createElement('script');\n const callback = event => {\n script.removeEventListener('load', callback);\n script.removeEventListener('error', callback);\n if (event.type === 'error') {\n apiLoaded = false;\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n console.error(`Failed to load YouTube API from ${url}`);\n }\n }\n };\n script.addEventListener('load', callback);\n script.addEventListener('error', callback);\n script.src = url;\n script.async = true;\n if (nonce) {\n script.setAttribute('nonce', nonce);\n }\n // Set this immediately to true so we don't start loading another script\n // while this one is pending. If loading fails, we'll flip it back to false.\n apiLoaded = true;\n document.body.appendChild(script);\n}\nlet YouTubePlayerModule = /*#__PURE__*/(() => {\n class YouTubePlayerModule {\n static ɵfac = function YouTubePlayerModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || YouTubePlayerModule)();\n };\n static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: YouTubePlayerModule\n });\n static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n return YouTubePlayerModule;\n})();\n/*#__PURE__*/(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { YOUTUBE_PLAYER_CONFIG, YouTubePlayer, YouTubePlayerModule };\n","import { AfterViewChecked, AfterViewInit, ChangeDetectorRef, Component, ElementRef, Input, QueryList, ViewChildren } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Subscription } from 'rxjs';\r\nimport { fadeInLeftAnimation } from 'src/@omnial/_animations/fade-in-left.animation';\r\nimport { fadeInRightAnimation } from 'src/@omnial/_animations/fade-in-right.animation';\r\nimport { fadeInUpAnimation } from 'src/@omnial/_animations/fade-in-up.animation';\r\nimport { scaleInAnimation } from 'src/@omnial/_animations/scale-in.animation';\r\nimport { ProductDetail, ProductSlide } from 'src/@omnial/_models/catalog/product.model';\r\nimport { ScriptLoaderService } from 'src/@omnial/_services/external/script-load.service';\r\nimport { ProductZoomComponent } from 'src/@omnial/pages/product/product-zoom/product-zoom.component';\r\nimport { SwiperOptions } from 'swiper/types';\r\nimport { ThumbsOptions } from 'swiper/types';\r\nimport { AppSettings } from 'src/app/app.settings';\r\nimport { YouTubePlayer } from '@angular/youtube-player';\r\n\r\n@Component({\n selector: 'app-product-swiper',\n templateUrl: './../../../../app/pages/product/product-swiper/product-swiper.component.html',\n styleUrls: ['./../../../../app/pages/product/product-swiper/product-swiper.component.scss'],\n animations: [fadeInUpAnimation, fadeInRightAnimation, fadeInLeftAnimation, scaleInAnimation],\n standalone: false\n})\r\n\r\nexport class ProductSwiperComponent implements AfterViewInit, AfterViewChecked {\r\n @Input() effect: \"slide\" | \"fade\" | \"cube\" | \"coverflow\" | \"flip\" = 'slide';\r\n @Input() zoomButton: boolean = true;\r\n @Input() product: ProductDetail;\r\n @Input() startingSlide: number;\r\n\r\n @ViewChildren('productSwiper') productSwiper: QueryList;\r\n @ViewChildren('productThumbsSwiper') productThumbsSwiper: QueryList;\r\n @ViewChildren('youTubePlayer') youTubePlayer: QueryList;\r\n\r\n public isGallery = false;\r\n public image = '';\r\n public config: SwiperOptions = null;\r\n public thumbsConfig: SwiperOptions = {\r\n spaceBetween: 1,\r\n slidesPerView: 4,\r\n loop: false,\r\n freeMode: true,\r\n watchSlidesProgress: true\r\n };\r\n public thumbsOptions: ThumbsOptions = null;\r\n public slides: ProductSlide[] = [];\r\n public subscriptions: Subscription[] = [];\r\n public showZoom: boolean = false;\r\n\r\n constructor(public dialog: MatDialog,\r\n public settings: AppSettings,\r\n public scriptLoaderService: ScriptLoaderService,\r\n public cd: ChangeDetectorRef) { }\r\n\r\n ngAfterViewChecked(): void {\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n }\r\n\r\n public initSwiper(product?: ProductDetail) {\r\n this.config = null;\r\n this.slides = [];\r\n if (product) {\r\n this.product = product;\r\n }\r\n\r\n // For nopCommerce products we add a product attribute for a Video ref in YouTube with the default value as the Youtube ref\r\n const slides: ProductSlide[] = [];\r\n var videoAttributes = this.product.attributes?.filter(a => a.textPrompt.toLowerCase() === 'youtube');\r\n if (videoAttributes && videoAttributes.length > 0) {\r\n this.product.youTubeVideoAttributes = [];\r\n videoAttributes.forEach(va => {\r\n if (va.defaultValue) {\r\n this.product.youTubeVideoAttributes.push(va.defaultValue);\r\n }\r\n })\r\n }\r\n if (this.product.youTubeVideoAttributes?.length > 0) {\r\n this.product.youTubeVideoAttributes.forEach((video) => {\r\n const newSlide = new ProductSlide();\r\n newSlide.youTubeRef = video;\r\n newSlide.alt = this.product.name;\r\n newSlide.index = 0;\r\n newSlide.imageIndex = -1;\r\n newSlide.isVideo = true;\r\n slides.push(newSlide);\r\n });\r\n }\r\n if (this.product.images?.length > 0) {\r\n let index = 0;\r\n this.product.images.forEach((image) => {\r\n const newSlide = new ProductSlide();\r\n newSlide.imgUrl = image.large;\r\n newSlide.alt = this.product.name;\r\n newSlide.index = index;\r\n newSlide.imageIndex = index;\r\n slides.push(newSlide);\r\n index++;\r\n })\r\n }\r\n setTimeout(() => {\r\n this.slides = slides;\r\n if (this.product.youTubeVideoAttributes) {\r\n this.scriptLoaderService.load('Youtube');\r\n this.subscriptions.push(this.scriptLoaderService.scripts.subscribe(\r\n res => {\r\n if (res && res.find(s => s.ref === 'Youtube')?.loaded) {\r\n this.swiperConfig();\r\n }\r\n }));\r\n } else {\r\n this.swiperConfig();\r\n }\r\n });\r\n }\r\n\r\n public swiperConfig(): void {\r\n let initialSlide = 0;\r\n if (this.startingSlide && this.startingSlide < this.slides.length) {\r\n initialSlide = this.startingSlide;\r\n }\r\n this.config = {\r\n initialSlide: initialSlide,\r\n effect: this.effect,\r\n cubeEffect: {\r\n slideShadows: false,\r\n shadow: false\r\n },\r\n resizeObserver: true,\r\n slidesPerView: 1,\r\n spaceBetween: 0,\r\n on: {\r\n slideChange: () => { this.onSlideChange() }\r\n }\r\n };\r\n this.productThumbsSwiper?.forEach((swiper) => {\r\n Object.assign(swiper.nativeElement, this.thumbsConfig);\r\n swiper.nativeElement.initialize();\r\n this.config.thumbs = swiper.nativeElement;\r\n });\r\n this.productSwiper?.forEach((swiper) => {\r\n Object.assign(swiper.nativeElement, this.config);\r\n swiper.nativeElement.initialize();\r\n this.zoomDisplay();\r\n setTimeout(() => { this.thumbActive() }, 500);\r\n });\r\n }\r\n\r\n public zoomDisplay(): void {\r\n if (!this.zoomButton) {\r\n this.showZoom = false;\r\n }\r\n let index = this.getCurrentSlideIndex();\r\n this.showZoom = !this.slides[index]?.youTubeRef;\r\n this.cd.detectChanges();\r\n }\r\n\r\n public thumbActive(): void {\r\n if (this.slides.length < 1) {\r\n return;\r\n }\r\n let index = this.getCurrentSlideIndex();\r\n for (var i = 0; i < this.slides.length; i++) {\r\n const thumbImage = document.getElementsByClassName('pdp-swipe-thumb-' + i);\r\n if (thumbImage) {\r\n for (var j = 0; j < thumbImage.length; j++) {\r\n if (i == index) {\r\n thumbImage[j].classList.add('swiper-thumb-active');\r\n } else {\r\n thumbImage[j].classList.remove('swiper-thumb-active');\r\n }\r\n }\r\n }\r\n }\r\n this.showZoom = !this.slides[index]?.youTubeRef;\r\n this.cd.detectChanges();\r\n }\r\n\r\n public slideNext() {\r\n this.productSwiper.forEach((swiper) => {\r\n swiper.nativeElement?.swiper?.slideNext(500);\r\n })\r\n }\r\n public slidePrev() {\r\n this.productSwiper.forEach((swiper) => {\r\n swiper.nativeElement?.swiper?.slidePrev(500);\r\n })\r\n }\r\n\r\n public onSlideChange() {\r\n this.zoomDisplay();\r\n this.thumbActive();\r\n this.youTubePlayer?.forEach((player) => {\r\n if (player?.getCurrentTime()) {\r\n player?.pauseVideo();\r\n }\r\n });\r\n }\r\n\r\n public openZoom(): void {\r\n let index = this.getCurrentSlideIndex();\r\n let imageIndex = index;\r\n if (this.product.youTubeVideoAttributes && this.product.youTubeVideoAttributes.length > 0) {\r\n imageIndex -= this.product.youTubeVideoAttributes.length;\r\n }\r\n if (index !== -1 && this.product.images[imageIndex]) {\r\n this.dialog.open(ProductZoomComponent, {\r\n data: this.product.images[imageIndex],\r\n panelClass: 'product-zoom',\r\n direction: (this.settings.rtl) ? 'rtl' : 'ltr'\r\n });\r\n }\r\n }\r\n\r\n public getCurrentSlideIndex(): number {\r\n let index = -1;\r\n this.productSwiper?.forEach((swiper) => {\r\n index = swiper?.nativeElement?.swiper?.activeIndex ?? -1;\r\n });\r\n return index;\r\n }\r\n}\r\n","
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
1\" class=\"swiper-button-prev-product\">\r\n \r\n arrow_circle_left\r\n \r\n
\r\n
1\" class=\"swiper-button-next-product\">\r\n \r\n arrow_circle_right\r\n \r\n
\r\n
\r\n\r\n \r\n 1 && !slide.youTubeRef\" [src]=\"slide.imgUrl\" [alt]=\"slide.alt\" [class]=\"'pdp-swipe-thumb-' + i + ' swiper-thumb'\">\r\n
1 && slide.youTubeRef\" style=\"position: relative;\">\r\n \r\n play_circle\r\n
\r\n
\r\n
\r\n","import { Subscription } from 'rxjs';\r\nimport { Component, OnInit, OnDestroy, Input, ViewChildren, QueryList, AfterViewInit, ElementRef } from '@angular/core';\r\nimport { AfterpayDialogComponent } from 'src/@omnial/shared/afterpay-dialog/afterpay-dialog.component';\r\nimport { fadeInLeftAnimation } from 'src/@omnial/_animations/fade-in-left.animation';\r\nimport { fadeInRightAnimation } from 'src/@omnial/_animations/fade-in-right.animation';\r\nimport { fadeInUpAnimation } from 'src/@omnial/_animations/fade-in-up.animation';\r\nimport { scaleInAnimation } from 'src/@omnial/_animations/scale-in.animation';\r\nimport { ProductDetail, Product, ProductSpecification } from 'src/@omnial/_models/catalog/product.model';\r\nimport { UrlRecord } from 'src/@omnial/_models/catalog/url-record.model';\r\nimport { Customer } from 'src/@omnial/_models/customer/customer.model';\r\nimport { AfterpayLimits } from 'src/@omnial/_models/external/afterpay-config.model';\r\nimport { SiteMapItem } from 'src/@omnial/_models/navigation/site-map.model';\r\nimport { AfterpayService } from 'src/@omnial/_payments/afterpay.service';\r\nimport { CatalogService } from 'src/@omnial/_services/catalog/catalog.service';\r\nimport { CustomerService } from 'src/@omnial/_services/customer/customer.service';\r\nimport { CanonicalService } from 'src/@omnial/_services/navigation/canonical.service';\r\nimport { SiteMapService } from 'src/@omnial/_services/navigation/sitemap.service';\r\nimport { ThemeService } from 'src/@omnial/_services/catalog/theme.service';\r\nimport { TopicService } from 'src/@omnial/_services/catalog/topic.service';\r\nimport { Category } from 'src/@omnial/_models/catalog/category.model';\r\nimport { Topic } from 'src/@omnial/_models/catalog/topic.model';\r\nimport { NgxSpinnerService } from 'ngx-spinner';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ProductSwiperComponent } from 'src/@omnial/pages/product/product-swiper/product-swiper.component';\r\nimport { ProductReviewComponent } from 'src/@omnial/shared/product-review/product-review.component';\r\nimport { DealerLocatorComponent } from 'src/@omnial/shared/dealer-locator/dealer-locator.component';\r\nimport { AppSettings } from 'src/app/app.settings';\r\nimport { Manufacturer } from 'src/@omnial/_models/catalog/manufacturer.model';\r\nimport { RatingComponent } from 'src/@omnial/shared/rating/rating.component';\r\nimport { ControlsMiniComponent } from 'src/@omnial/product-controls/controls-mini/controls-mini.component';\r\nimport { ControlsDetailComponent } from 'src/@omnial/product-controls/controls-detail/controls-detail.component';\r\n\r\n@Component({\n selector: 'app-product-detail',\n templateUrl: './../../../../app/pages/product/product-detail/product-detail.component.html',\n styleUrls: ['./../../../../app/pages/product/product-detail/product-detail.component.scss'],\n animations: [fadeInUpAnimation, fadeInRightAnimation, fadeInLeftAnimation, scaleInAnimation],\n standalone: false\n})\r\n\r\nexport class ProductDetailComponent implements OnDestroy, OnInit, AfterViewInit {\r\n @Input() currentProduct: ProductDetail;\r\n @Input() currentCategory: Category;\r\n @Input() currentManufacturer: Manufacturer;\r\n @Input() quickView: boolean;\r\n @ViewChildren('expandedProductText') expandedProductText: QueryList;\r\n @ViewChildren('rating') rating: QueryList;\r\n @ViewChildren('controlsMini') controlsMini: QueryList;\r\n @ViewChildren('controlsDetail') controlsDetail: QueryList;\r\n @ViewChildren('productSwiper') productSwipers: QueryList;\r\n @ViewChildren('productReview') productReviews: QueryList;\r\n @ViewChildren('dealerLocator') dealerLocators: QueryList;\r\n public smallImage = false;\r\n public expandedText = true;\r\n public needsExpand = false;\r\n public afterpayLimits: AfterpayLimits;\r\n public productWaiting = true;\r\n public customer: Customer;\r\n public urlRecord: UrlRecord;\r\n public productFail = false;\r\n public relatedProducts: Array;\r\n public sitemapItems: SiteMapItem[];\r\n public flexGtMd = 78;\r\n public flexMd = 74;\r\n public afterpayPop = false;\r\n public productAvailable = true;\r\n public tabIndex = 0;\r\n public subscriptions: Subscription[] = [];\r\n\r\n constructor(\r\n public afterpayService: AfterpayService,\r\n public dialog: MatDialog,\r\n public catalogService: CatalogService,\r\n public topicService: TopicService,\r\n public sitemapService: SiteMapService,\r\n public canonicalService: CanonicalService,\r\n public themeService: ThemeService,\r\n public customerService: CustomerService,\r\n public settings: AppSettings,\r\n public spinner: NgxSpinnerService) {\r\n this.subscriptions.push(this.afterpayService.limits.subscribe(res => { this.afterpayLimits = res as AfterpayLimits; }));\r\n this.subscriptions.push(this.customerService.customer.subscribe(res => { this.customer = res as Customer; }));\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.setChildControls();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscriptions && this.subscriptions.length > 0) {\r\n this.subscriptions.forEach((sub) => { sub.unsubscribe(); });\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.currentProduct) {\r\n this.spinner.hide();\r\n this.initProduct();\r\n } else {\r\n this.productWaiting = false;\r\n this.productFail = true;\r\n }\r\n }\r\n\r\n initProduct(product?: ProductDetail) {\r\n if (product) {\r\n this.currentProduct = product;\r\n this.setChildControls();\r\n }\r\n this.productWaiting = false;\r\n this.productFail = false;\r\n this.spinner.hide();\r\n if (this.currentProduct.stockQuantity > 0) {\r\n this.productAvailable = true;\r\n } else {\r\n this.productAvailable = false;\r\n }\r\n this.productLayout();\r\n setTimeout(() => {\r\n this.needsExpand = this.needsToExpand(this.settings.productDetailExpandHeightLimit);\r\n this.expandedText = !this.needsExpand });\r\n }\r\n\r\n needsToExpand(minHeight: number): boolean {\r\n let showExpand = false;\r\n this.expandedProductText?.forEach((text) => {\r\n if (text.nativeElement.offsetHeight > minHeight) {\r\n showExpand = true;\r\n }\r\n });\r\n return showExpand;\r\n }\r\n\r\n public setChildControls(): void {\r\n if (this.currentProduct) {\r\n this.rating?.forEach((rating) => {\r\n rating.init(this.currentProduct);\r\n });\r\n this.controlsMini?.forEach((controlMini) => {\r\n controlMini.init(this.currentProduct);\r\n });\r\n this.controlsDetail?.forEach((controlDetail) => {\r\n controlDetail.init(this.currentProduct);\r\n });\r\n this.productSwipers?.forEach((productSwiper) => {\r\n productSwiper.initSwiper(this.currentProduct);\r\n });\r\n this.productReviews?.forEach((productReview) => {\r\n productReview.init(this.currentProduct);\r\n });\r\n this.dealerLocators?.forEach((dealerLocator) => {\r\n dealerLocator.init(this.currentProduct);\r\n });\r\n }\r\n }\r\n\r\n public productLayout(): void {\r\n this.subscriptions.push(this.sitemapService.siteMap.subscribe(\r\n res => {\r\n this.sitemapItems = res as SiteMapItem[];\r\n this.flexGtMd = 78;\r\n this.flexMd = 74;\r\n }));\r\n }\r\n\r\n public openAfterpay(): void {\r\n this.subscriptions.push(this.topicService.getTopicBySlug('afterpay').subscribe(\r\n res => {\r\n const topic = res as Topic;\r\n if (topic) {\r\n this.dialog.open(AfterpayDialogComponent, {\r\n data: { product: this.currentProduct, content: topic.body },\r\n autoFocus: false,\r\n maxHeight: '90vh',\r\n maxWidth: '90%'\r\n });\r\n }\r\n }));\r\n }\r\n\r\n public swapProduct(productId: number): void {\r\n // This is called for attribute changes so the correct Product Detail is shown\r\n this.spinner.show();\r\n this.subscriptions.push(this.catalogService.getProductDetail(productId).subscribe(\r\n res => {\r\n this.spinner.hide();\r\n const attributeProduct = res as ProductDetail;\r\n if (attributeProduct) {\r\n this.currentProduct.images = attributeProduct.images;\r\n this.currentProduct.shortDescription = attributeProduct.shortDescription;\r\n this.currentProduct.fullDescription = attributeProduct.fullDescription;\r\n }\r\n }));\r\n }\r\n\r\n public specification(name: string): ProductSpecification {\r\n if (this.currentProduct?.specifications) {\r\n return this.currentProduct.specifications.find(s => s.specificationAttributeName === name);\r\n }\r\n return null;\r\n }\r\n\r\n public scrollTitle(): void {\r\n setTimeout(() => {\r\n const reviewContent = document.getElementById('pdp-name');\r\n if (reviewContent?.offsetTop) {\r\n window.scrollTo({ top: reviewContent.offsetTop - 20, behavior: 'smooth' });\r\n }\r\n }, 10);\r\n }\r\n\r\n public scrollReviews(): void {\r\n setTimeout(() => {\r\n const reviewContent = document.getElementById('productReviews');\r\n if (reviewContent?.offsetTop) {\r\n window.scrollTo({ top: reviewContent.offsetTop - 20, behavior: 'smooth' });\r\n }\r\n }, 500);\r\n }\r\n}\r\n","
\r\n
\r\n \r\n
\r\n
\r\n  \r\n
\r\n
\r\n

{{currentProduct?.name}}

\r\n
Code: {{currentProduct?.sku}}
\r\n
\r\n \r\n \r\n \r\n \r\n Brand: {{currentProduct?.manufacturer?.name}}\r\n \r\n \r\n {{currentProduct?.availability}}\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n ${{currentProduct?.oldPrice | number : '1.2-2'}}\r\n
\r\n
\r\n
${{currentProduct?.newPrice | number : '1.2-2'}}
\r\n
${{currentProduct?.adjustedPrice | number : '1.2-2'}}
\r\n
afterpayLimits.min && afterpayLimits.max > currentProduct?.newPrice\">\r\n 4 interest free payments of ${{currentProduct?.installmentPrice | number : '1.2-2'}} with\r\n \r\n \"Pay\r\n \r\n \r\n
\r\n
afterpayLimits.min && afterpayLimits.max > currentProduct?.adjustedPrice\">\r\n 4 interest free payments of ${{currentProduct?.adjustedInstallmentPrice | number : '1.2-2'}} with\r\n \r\n \"Pay\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
0\">\r\n This product has the follows discounts:\r\n
    \r\n
  • {{discount.name}}
  • \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
Find a Retailer
\r\n
\r\n \r\n music_note\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
{{tab.displayName}}
\r\n
\r\n \r\n more_vert\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
Reviews
\r\n
\r\n \r\n thumb_up\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n","import { Component, ViewEncapsulation, Inject, OnDestroy, AfterViewInit } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { NgxSpinnerService } from 'ngx-spinner';\r\nimport { Subscription } from 'rxjs';\r\nimport { Category } from 'src/@omnial/_models/catalog/category.model';\r\nimport { ProductDetail } from 'src/@omnial/_models/catalog/product.model';\r\nimport { AfterpayLimits } from 'src/@omnial/_models/external/afterpay-config.model';\r\nimport { AfterpayService } from 'src/@omnial/_payments/afterpay.service';\r\nimport { CatalogService } from 'src/@omnial/_services/catalog/catalog.service';\r\nimport { TrackingService } from 'src/@omnial/_services/external/tracking.service';\r\n\r\n\r\n@Component({\n selector: 'app-product-dialog',\n templateUrl: './../../../app/shared/product-dialog/product-dialog.component.html',\n styleUrls: ['./../../../app/shared/product-dialog/product-dialog.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\r\n\r\nexport class ProductDialogComponent implements OnDestroy, AfterViewInit {\r\n public product: ProductDetail;\r\n public category: Category;\r\n public listId: string;\r\n public afterpayLimits: AfterpayLimits;\r\n public afterpayPop = false;\r\n public productAvailable = true;\r\n public subscriptions: Subscription[] = [];\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n public catalogService: CatalogService,\r\n public afterpayService: AfterpayService,\r\n public trackingService: TrackingService,\r\n public spinner: NgxSpinnerService,\r\n @Inject(MAT_DIALOG_DATA) public data: { product: ProductDetail, category: Category, listId: string }) {\r\n if (data?.product) {\r\n this.product = data.product;\r\n }\r\n if (data?.category) {\r\n this.category = data.category;\r\n }\r\n if (data?.listId) {\r\n this.listId = data.listId;\r\n }\r\n if (this.product.stockQuantity > 0) {\r\n this.productAvailable = true;\r\n } else {\r\n this.productAvailable = false;\r\n }\r\n this.trackingService.pushProductView(this.product, this.listId, 'Quick View');\r\n this.subscriptions.push(this.afterpayService.limits.subscribe(res => { this.afterpayLimits = res as AfterpayLimits; }));\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.spinner.hide();\r\n // Scroll fix on iPhones\r\n setTimeout(() => {\r\n var content = document.getElementsByClassName(\"mat-mdc-dialog-surface\");\r\n if (content?.length > 0) {\r\n content[0].scrollTo(0, 0);\r\n }\r\n }, 1000);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscriptions && this.subscriptions.length > 0) {\r\n this.subscriptions.forEach((sub) => { sub.unsubscribe(); });\r\n }\r\n }\r\n\r\n public close(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n public openAfterpay(): void {\r\n this.afterpayPop = true;\r\n }\r\n\r\n public closeAfterpay(): void {\r\n this.afterpayPop = false;\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n","import { AfterViewChecked, AfterViewInit, Component, ElementRef, Input, OnDestroy, OnInit, QueryList, ViewChildren } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Router, ActivatedRoute } from '@angular/router';\r\nimport { StateChange } from 'ng-lazyload-image';\r\nimport { Subscription } from 'rxjs';\r\nimport { NgxSpinnerService } from 'ngx-spinner';\r\nimport { Category } from 'src/@omnial/_models/catalog/category.model';\r\nimport { Product, ProductDetail } from 'src/@omnial/_models/catalog/product.model';\r\nimport { CatalogService } from 'src/@omnial/_services/catalog/catalog.service';\r\nimport { TrackingService } from 'src/@omnial/_services/external/tracking.service';\r\nimport { CanonicalService } from 'src/@omnial/_services/navigation/canonical.service';\r\nimport { environment } from 'src/environments/environment';\r\nimport { ProductDialogComponent } from 'src/@omnial/shared/product-dialog/product-dialog.component';\r\nimport { AppSettings } from 'src/app/app.settings';\r\nimport { SwiperOptions } from 'swiper/types';\r\n\r\n@Component({\n selector: 'app-products-carousel',\n templateUrl: './../../../app/shared/products-carousel/products-carousel.component.html',\n styleUrls: ['./../../../app/shared/products-carousel/products-carousel.component.scss'],\n standalone: false\n})\r\nexport class ProductsCarouselComponent implements OnInit, AfterViewInit, AfterViewChecked, OnDestroy {\r\n @Input() products: Product[];\r\n @Input() carouselName: string;\r\n @Input() listId: string;\r\n @Input() count1700 = 4;\r\n @Input() count1280 = 4;\r\n @Input() count960 = 4;\r\n @Input() count740 = 3;\r\n @Input() count480 = 2;\r\n @ViewChildren('swiper') swiper: QueryList;\r\n public config: SwiperOptions = null;\r\n public category: Category = null;\r\n public subscriptions: Subscription[] = [];\r\n\r\n constructor(\r\n public dialog: MatDialog,\r\n public router: Router,\r\n public activatedRoute: ActivatedRoute,\r\n public catalogService: CatalogService,\r\n public canonicalService: CanonicalService,\r\n public trackingService: TrackingService,\r\n public settings: AppSettings,\r\n public spinner: NgxSpinnerService) { }\r\n\r\n ngOnInit(): void {\r\n if (this.products?.length < 8) {\r\n const dupProducts: Product[] = [];\r\n let numDuplicates = 2;\r\n if (this.products?.length < 2) {\r\n numDuplicates = 8;\r\n } else if (this.products.length < 3) {\r\n numDuplicates = 4;\r\n } else if (this.products.length < 4) {\r\n numDuplicates = 3;\r\n }\r\n for (var i = 0; i <= numDuplicates; i++) {\r\n this.products.forEach((product) => {\r\n dupProducts.push(product);\r\n });\r\n }\r\n this.products = dupProducts;\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.configSwiper();\r\n }\r\n\r\n ngAfterViewChecked(): void {\r\n this.initSwiper();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscriptions && this.subscriptions.length > 0) {\r\n this.subscriptions.forEach((sub) => { sub.unsubscribe(); });\r\n }\r\n }\r\n\r\n configSwiper(): void {\r\n this.config = {\r\n resizeObserver: true,\r\n slidesPerView: 2,\r\n spaceBetween: 16,\r\n pagination: false,\r\n loop: true,\r\n effect: 'slide',\r\n breakpoints: {\r\n 480: { slidesPerView: this.count480 },\r\n 740: { slidesPerView: this.count740 },\r\n 960: { slidesPerView: this.count960 },\r\n 1280: { slidesPerView: this.count1280 },\r\n 1700: { slidesPerView: this.count1700 }\r\n }\r\n };\r\n this.swiper?.forEach((swiper) => {\r\n Object.assign(swiper?.nativeElement, this.config);\r\n });\r\n }\r\n\r\n initSwiper(): void {\r\n this.swiper?.forEach((swiper) => {\r\n swiper.nativeElement?.initialize();\r\n });\r\n }\r\n\r\n public productClick(product: Product, position: number, pageNumber: number): void {\r\n this.trackingService.pushProductClick(product, this.listId, 'Carousel - ' + this.carouselName, position + (pageNumber * environment.pageSize));\r\n this.subscriptions.push(this.canonicalService.productCanonical(product).subscribe(\r\n res => {\r\n if (res) {\r\n this.router.navigate([`${res}/${product.seName}`]);\r\n } else {\r\n this.router.navigate([`/products/${product.id}`]);\r\n }\r\n }\r\n ))\r\n }\r\n\r\n public openProductDialog(productSimple: Product, position: number, pageNumber: number): void {\r\n this.spinner.show();\r\n this.trackingService.pushProductClick(productSimple, this.listId, 'Carousel - ' + this.carouselName, position + (pageNumber * environment.pageSize));\r\n this.subscriptions.push(this.catalogService.getProductDetail(productSimple.id).subscribe(\r\n res => {\r\n this.spinner.hide();\r\n const product = res as ProductDetail;\r\n const dialogRef = this.dialog.open(ProductDialogComponent, {\r\n data: { product, category: null, listId: this.listId },\r\n panelClass: 'product-dialog',\r\n direction: (this.settings.rtl) ? 'rtl' : 'ltr'\r\n });\r\n dialogRef.afterClosed().subscribe(productDialog => {\r\n if (productDialog) {\r\n this.router.navigate([product.seName], { relativeTo: this.activatedRoute });\r\n }\r\n });\r\n }));\r\n }\r\n\r\n public imageStateChange(event: StateChange, product: Product, position: number, pageNumber: number): void {\r\n if (event?.reason === 'loading-succeeded') {\r\n this.trackingService.pushImpression(product, this.listId, 'Carousel - ' + this.carouselName, position + (pageNumber * environment.pageSize));\r\n }\r\n }\r\n\r\n public slideNext() {\r\n this.swiper?.forEach((swiper) => {\r\n swiper?.nativeElement?.swiper?.slideNext(500);\r\n });\r\n }\r\n\r\n public slidePrev() {\r\n this.swiper?.forEach((swiper) => {\r\n swiper?.nativeElement?.swiper?.slidePrev(500);\r\n });\r\n }\r\n\r\n public productSpecificationAttribute(product: Product, specificationAttributeName: string): string {\r\n return product?.specifications?.find(s => s.specificationAttributeName === specificationAttributeName)?.valueRaw;\r\n }\r\n}\r\n","\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { MaterialBaseModule } from 'src/@omnial/material.base.module';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { RatingModule } from '../rating/rating.module';\nimport { MaterialExtendModule } from 'src/@omnial/material.extend.module';\nimport { DealerLocatorComponent } from './dealer-locator.component';\nimport { DealerLocatorMapComponent } from './dealer-locator-map/dealer-locator-map.component';\nimport { GoogleMapsModule } from '@angular/google-maps';\nimport { AutoCompleteModule } from '../autocomplete/autocomplete.module';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n MaterialBaseModule,\n MaterialExtendModule,\n ReactiveFormsModule,\n RatingModule,\n GoogleMapsModule,\n AutoCompleteModule\n ],\n declarations: [DealerLocatorComponent, DealerLocatorMapComponent],\n exports: [DealerLocatorComponent, DealerLocatorMapComponent]\n})\nexport class DealerLocatorModule { }\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\nimport { Banner } from 'src/@omnial/_models/catalog/banner.model';\r\nimport { Slider } from 'src/@omnial/_models/catalog/slider.model';\r\nimport { SevenSpikesService } from 'src/@omnial/_services/catalog/seven.spikes.service';\r\nimport { AppSettings } from 'src/app/app.settings';\r\n\r\n@Component({\n selector: 'app-banners-static',\n templateUrl: './../../../app/shared/banners-static/banners-static.component.html',\n styleUrls: ['./../../../app/shared/banners-static/banners-static.component.scss'],\n standalone: false\n})\r\nexport class BannersStaticComponent implements OnInit, OnDestroy {\r\n @Input() widgetZone: string;\r\n @Input() slug: string;\r\n @Input() contentClass: string = '';\r\n public banners: Banner[];\r\n public subscriptions: Subscription[] = [];\r\n\r\n constructor(private sevenSpikesService: SevenSpikesService, public router: Router, public settings: AppSettings) { }\r\n\r\n ngOnInit(): void {\r\n if (this.widgetZone) {\r\n this.getSlides(this.widgetZone, this.slug);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscriptions && this.subscriptions.length > 0) {\r\n this.subscriptions.forEach((sub) => { sub.unsubscribe(); });\r\n }\r\n }\r\n\r\n public getSlides(widgetZone: string, slug: string): void {\r\n this.subscriptions.push(this.sevenSpikesService.getSlides(widgetZone, slug).subscribe(\r\n data => {\r\n const sliders = data as Slider[];\r\n if (sliders?.length > 0) {\r\n const slider = sliders[0]; // We are only interested in one slider so use the first\r\n this.banners = new Array();\r\n if (slider.slides) {\r\n slider.slides.forEach(slide => {\r\n if (slide.visible) {\r\n this.banners.push(this.sevenSpikesService.banner(slide));\r\n }\r\n });\r\n }\r\n }\r\n }));\r\n }\r\n\r\n public bannerLink(url: string): void {\r\n if (url && url !== null) {\r\n this.router.navigate([url]);\r\n }\r\n }\r\n}\r\n","\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MaterialBaseModule } from 'src/@omnial/material.base.module';\nimport { RouterModule } from '@angular/router';\nimport { BannersStaticComponent } from './banners-static.component';\nimport { PipesModule } from 'src/@omnial/_pipes/pipes.module';\nimport { VgCoreModule } from '@videogular/ngx-videogular/core';\nimport { VgControlsModule } from '@videogular/ngx-videogular/controls';\nimport { VgOverlayPlayModule } from '@videogular/ngx-videogular/overlay-play';\nimport { VgBufferingModule } from '@videogular/ngx-videogular/buffering';\n\n@NgModule({\n imports: [\n CommonModule,\n MaterialBaseModule,\n RouterModule,\n PipesModule,\n VgCoreModule,\n VgControlsModule,\n VgOverlayPlayModule,\n VgBufferingModule\n ],\n declarations: [BannersStaticComponent],\n exports: [BannersStaticComponent]\n})\nexport class BannersStaticModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ProductReviewSubmitComponent } from './product-review-submit.component';\nimport { RouterModule } from '@angular/router';\nimport { MaterialBaseModule } from 'src/@omnial/material.base.module';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { RatingModule } from '../rating/rating.module';\nimport { MaterialExtendModule } from 'src/@omnial/material.extend.module';\n\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n MaterialBaseModule,\n MaterialExtendModule,\n ReactiveFormsModule,\n RatingModule\n ],\n declarations: [ProductReviewSubmitComponent],\n exports: [ProductReviewSubmitComponent]\n})\nexport class ProductReviewSubmitModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ProductReviewSubmitDialogComponent } from './product-review-submit-dialog.component';\nimport { RouterModule } from '@angular/router';\nimport { MaterialBaseModule } from 'src/@omnial/material.base.module';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { RatingModule } from '../rating/rating.module';\nimport { MaterialExtendModule } from 'src/@omnial/material.extend.module';\n\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n MaterialBaseModule,\n MaterialExtendModule,\n ReactiveFormsModule,\n RatingModule\n ],\n declarations: [ProductReviewSubmitDialogComponent],\n exports: [ProductReviewSubmitDialogComponent]\n})\nexport class ProductReviewSubmitDialogModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { ControlsDetailComponent } from './controls-detail.component';\nimport { MaterialBaseModule } from 'src/@omnial/material.base.module';\nimport { MaterialExtendModule } from 'src/@omnial/material.extend.module';\n\n\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n ReactiveFormsModule,\n MaterialBaseModule,\n MaterialExtendModule\n ],\n declarations: [ControlsDetailComponent],\n exports: [ControlsDetailComponent]\n})\nexport class ControlsDetailModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { ControlsMiniComponent } from './controls-mini.component';\nimport { MaterialBaseModule } from 'src/@omnial/material.base.module';\nimport { MaterialExtendModule } from 'src/@omnial/material.extend.module';\n\n\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n ReactiveFormsModule,\n MaterialBaseModule,\n MaterialExtendModule\n ],\n declarations: [ControlsMiniComponent],\n exports: [ControlsMiniComponent]\n})\nexport class ControlsMiniModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { LazyLoadImageModule } from 'ng-lazyload-image';\nimport { MaterialBaseModule } from 'src/@omnial/material.base.module';\nimport { MaterialExtendModule } from 'src/@omnial/material.extend.module';\nimport { ProductZoomComponent } from './product-zoom.component';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n MaterialBaseModule,\n MaterialExtendModule,\n LazyLoadImageModule,\n ],\n declarations: [ProductZoomComponent],\n exports: [ProductZoomComponent]\n})\nexport class ProductZoomModule { }\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { YouTubePlayerModule } from '@angular/youtube-player';\nimport { LazyLoadImageModule } from 'ng-lazyload-image';\nimport { MaterialBaseModule } from 'src/@omnial/material.base.module';\nimport { MaterialExtendModule } from 'src/@omnial/material.extend.module';\nimport { ProductZoomModule } from 'src/@omnial/pages/product/product-zoom/product-zoom.module';\nimport { ProductSwiperComponent } from './product-swiper.component';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n MaterialBaseModule,\n MaterialExtendModule,\n LazyLoadImageModule,\n ProductZoomModule,\n YouTubePlayerModule\n ],\n declarations: [ProductSwiperComponent],\n exports: [ProductSwiperComponent],\n schemas: [ CUSTOM_ELEMENTS_SCHEMA ]\n})\nexport class ProductSwiperModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { MaterialBaseModule } from 'src/@omnial/material.base.module';\nimport { RatingModule } from 'src/@omnial/shared/rating/rating.module';\nimport { ControlsDetailModule } from 'src/@omnial/product-controls/controls-detail/controls-detail.module';\nimport { ControlsMiniModule } from 'src/@omnial/product-controls/controls-mini/controls-mini.module';\nimport { BreadcrumbModule } from 'src/@omnial/navigation/breadcrumbs/breadcrumb.module';\nimport { ProductReviewModule } from 'src/@omnial/shared/product-review/product-review.module';\nimport { MaterialExtendModule } from 'src/@omnial/material.extend.module';\nimport { PipesModule } from 'src/@omnial/_pipes/pipes.module';\nimport { DealerLocatorModule } from 'src/@omnial/shared/dealer-locator/dealer-locator.module';\nimport { ProductSwiperModule } from 'src/@omnial/pages/product/product-swiper/product-swiper.module';\nimport { BannersStaticModule } from 'src/@omnial/shared/banners-static/banners-static.module';\nimport { BannersModule } from 'src/@omnial/shared/banners/banners.module';\nimport { ProductDetailComponent } from './product-detail.component';\nimport { TopicContentModule } from 'src/@omnial/shared/topic-content/topic-content.module';\nimport { ProductReviewSubmitModule } from 'src/@omnial/shared/product-review-submit/product-review-submit.module';\nimport { ProductReviewSubmitDialogModule } from 'src/@omnial/shared/product-review-submit-dialog/product-review-submit-dialog.module';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n MaterialBaseModule,\n MaterialExtendModule,\n ControlsDetailModule,\n ControlsMiniModule,\n BreadcrumbModule,\n RatingModule,\n BannersModule,\n BannersStaticModule,\n ProductReviewModule,\n ProductReviewSubmitModule,\n ProductReviewSubmitDialogModule,\n PipesModule,\n DealerLocatorModule,\n ProductSwiperModule,\n TopicContentModule\n ],\n declarations: [ProductDetailComponent],\n exports: [ProductDetailComponent]\n})\nexport class ProductDetailModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { ControlsQuickviewComponent } from './controls-quickview.component';\nimport { MaterialBaseModule } from 'src/@omnial/material.base.module';\nimport { MaterialExtendModule } from 'src/@omnial/material.extend.module';\n\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n ReactiveFormsModule,\n MaterialBaseModule,\n MaterialExtendModule\n ],\n declarations: [ControlsQuickviewComponent],\n exports: [ControlsQuickviewComponent]\n})\nexport class ControlsQuickviewModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { MaterialBaseModule } from 'src/@omnial/material.base.module';\nimport { ProductDialogComponent } from './product-dialog.component';\nimport { ControlsQuickviewModule } from 'src/@omnial/product-controls/controls-quickview/controls-quickview.module';\nimport { MaterialExtendModule } from 'src/@omnial/material.extend.module';\nimport { ProductDetailModule } from 'src/@omnial/pages/product/product-detail/product-detail.module';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n MaterialBaseModule,\n MaterialExtendModule,\n ControlsQuickviewModule,\n ProductDetailModule\n ],\n declarations: [ProductDialogComponent],\n exports: [ProductDialogComponent]\n})\nexport class ProductDialogModule { }\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ProductsCarouselComponent } from './products-carousel.component';\nimport { RouterModule } from '@angular/router';\nimport { MaterialBaseModule } from 'src/@omnial/material.base.module';\nimport { ProductDialogModule } from '../product-dialog/product-dialog.module';\nimport { RatingModule } from '../rating/rating.module';\nimport { ControlsListModule } from 'src/@omnial/product-controls/controls-list/controls-list.module';\nimport { LazyLoadImageModule } from 'ng-lazyload-image';\nimport { PipesModule } from '../../_pipes/pipes.module';\nimport { MaterialExtendModule } from 'src/@omnial/material.extend.module';\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n MaterialBaseModule,\n MaterialExtendModule,\n ProductDialogModule,\n RatingModule,\n ControlsListModule,\n LazyLoadImageModule,\n PipesModule\n ],\n declarations: [ProductsCarouselComponent],\n exports: [ProductsCarouselComponent],\n schemas: [ CUSTOM_ELEMENTS_SCHEMA ]\n})\nexport class ProductsCarouselModule { }\n"],"mappings":"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","names":["getNavigator","isChildOfPicture","element","isImageElement","setImage","imagePath","useSrcset","setSources","attrName","image","sources","i","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","switchMap","never","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","NgZone","PLATFORM_ID","ɵɵdefineDirective","ɵɵNgOnChangesFeature","LazyLoadImageModule","ɵɵdefineNgModule","ɵɵdefineInjector","Rect","_Rect","left","top","right","bottom","_window","inflateBy","rect","SiteMapItem","fadeInLeftAnimation","trigger","transition","style","transform","opacity","animate","fadeInRightAnimation","trigger","transition","style","transform","opacity","animate","scaleInAnimation","trigger","transition","style","transform","animate","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵproperty","undefined","ɵɵpureFunction1","_c1","breadcrumb_r1","link","ɵɵadvance","ɵɵtextInterpolate","title","routerLink","ɵɵtemplate","BreadCrumbComponent_div_7_a_1_Template","BreadCrumbComponent_div_7_a_2_Template","ctx_r1","localEndNode","breadcrumb_r3","BreadCrumbComponent_li_15_a_1_Template","BreadCrumbComponent_li_15_a_2_Template","BreadCrumbComponent","constructor","router","location","sitemapService","breadCrumbService","settings","breadcrumbs","subscriptions","push","currentEndNode","subscribe","endNode","events","event","NavigationEnd","getCrumbs","url","ngOnDestroy","length","forEach","sub","unsubscribe","ngOnInit","indexOf","accountCrumbs","doCrumbs","breadcrumbItems","navItem","find","i","path","parentArray","split","pop","parentPath","join","endsWith","unshift","findParent","parent","id","parentId","SiteMapItem","href","slug","accountTitle","accountLinks","section","children","name","closeSubMenus","window","innerWidth","closeAllSubMenus","ɵɵdirectiveInject","Router","Location","SiteMapService","BreadCrumbService","AppSettings","selectors","inputs","standalone","features","ɵɵProvidersFeature","decls","vars","consts","template","rf","ctx","BreadCrumbComponent_div_7_Template","BreadCrumbComponent_div_8_Template","BreadCrumbComponent_li_15_Template","BreadCrumbComponent_li_16_Template","ɵɵpureFunction0","_c0","fadeInUpAnimation","fadeInLeftAnimation","fadeInRightAnimation","scaleInAnimation","BreadcrumbModule","CommonModule","RouterModule","MaterialBaseModule","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","ctx_r0","productSimple","manufacturer","pictureUrl","ɵɵsanitizeUrl","name","tmp_2_0","specification","imageUrl","tmp_3_0","ɵɵtext","ɵɵtextInterpolate","ɵɵtemplate","ControlsListComponent_div_1_picture_1_Template","ControlsListComponent_div_1_picture_2_Template","ControlsListComponent_div_1_span_3_Template","tmp_1_0","ControlsListComponent","constructor","router","cartService","toastr","onOpenProductDialog","EventEmitter","cartForm","FormGroup","quantity","FormControl","Validators","compose","required","addToWishList","product","listName","listId","addToWishlist","addToCart","qty","controls","value","outOfStock","message","success","onTap","subscribe","navigate","seName","openProductDialog","event","emit","specifications","find","s","specificationAttributeName","ɵɵdirectiveInject","Router","CartService","ToastrService","selectors","inputs","outputs","standalone","decls","vars","consts","template","rf","ctx","ControlsListComponent_div_1_Template","ɵɵlistener","ControlsListModule","CommonModule","RouterModule","ReactiveFormsModule","MaterialBaseModule","MaterialExtendModule","ɵɵelementStart","ɵɵlistener","i_r2","ɵɵrestoreView","_r1","index","ctx_r2","ɵɵnextContext","ɵɵresetView","rate","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate","star_r4","ɵɵtemplate","RatingComponent_div_0_div_1_mat_icon_1_Template","ɵɵproperty","stars","i_r6","_r5","star_r7","RatingComponent_div_0_div_2_mat_icon_1_Template","RatingComponent_div_0_div_1_Template","RatingComponent_div_0_div_2_Template","ɵɵclassMap","direction","large","RatingComponent","constructor","initialised","ngOnInit","init","product","ratingsCount","ratingsValue","review","rating","calculateAvgValue","value","avg","selectors","inputs","showNumber","showViewLink","standalone","decls","vars","consts","template","rf","ctx","RatingComponent_div_0_Template","RatingModule","CommonModule","MaterialBaseModule","Banner","SevenSpikesService","constructor","staticService","repoService","route","subscriptions","useCache","environment","fragment","subscribe","ngOnDestroy","length","forEach","sub","unsubscribe","getMenus","widgetZone","bypassCache","Observable","observer","push","getMenusFromCache","next","cacheResult","complete","getMenusFromNop","nopResult","banner","slide","Banner","slideType","type","altText","alt","linkUrl","url","content","videoUrl","desktopVideoUrl","videoUrlMobile","mobileVideoUrl","desktopImageUrl","mobileImageUrl","replace","baseUrl","indexOf","split","queryParams","q","getSlides","getSlidesFromCache","getSlidesFromNop","getSlidesBySliderId","sliderId","sliders","getSlidesBySliderIdFromCache","getSlidesBySliderIdFromNop","getProductCollections","getCollectionsFromCache","getCollectionsFromNop","getProductCollectionById","collectionId","collections","getCollectionFromCache","getCollectionFromNop","getBlog","getBlogFromCache","getBlogFromNop","getInfoBoxes","getInfoBoxesFromCache","getInfoBoxesFromNop","getThemeSettings","getThemeSettingsFromCache","getThemeSettingsFromNop","error","e","endpoint","getData","res","getSliders","get","ɵɵinject","RepositoryStaticService","RepositoryService","ActivatedRoute","factory","ɵfac","_c0","VgStates","__ngFactoryType__","ɵɵdefineInjectable","VgApiService","EventEmitter","fsAPI","item","master","id","result","media","seconds","state","volume","rate","value","byPercent","second","duration","type","label","language","property","medias","firstMediaId","elem","VgControlsHiddenService","Subject","hidden","VgUtilsService","zIndex","elementZIndex","tags","i","l","VgFullscreenApiService","APIs","browser","fsElemDispatcher","fromEvent","element","VgEvents","VgMediaDirective","api","ref","VgStates","Subject","fromEvent","VgEvents","Observable","observer","domObs","mutations","canPlayAll","media","combineLatest","map","params","checkReadyState","event","timer","diff","i","l","mut","result","seconds","volume","rate","end","offset","value","byPercent","second","duration","type","label","language","mode","newTrack","__ngFactoryType__","ɵɵdirectiveInject","VgApiService","ChangeDetectorRef","ɵɵdefineDirective","VgPlayerComponent","fsAPI","controlsHidden","EventEmitter","fsState","VgUtilsService","hidden","s","ElementRef","VgFullscreenApiService","VgControlsHiddenService","ɵɵdefineComponent","rf","ctx","dirIndex","ɵɵcontentQuery","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵstyleProp","ɵɵclassProp","ɵɵProvidersFeature","_c0","ɵɵprojectionDef","ɵɵprojection","services","VgCoreModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","services","CommonModule","VgControlsModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","CommonModule","VgCoreModule","VgOverlayPlayComponent","ref","API","fsAPI","controlsHidden","isBuffering","fsState","hidden","VgStates","state","i","l","s","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","VgApiService","VgFullscreenApiService","VgControlsHiddenService","ɵɵdefineComponent","rf","ctx","ɵɵlistener","ɵɵclassProp","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","ɵɵadvance","VgOverlayPlayModule","ɵɵdefineNgModule","ɵɵdefineInjector","CommonModule","VgCoreModule","VgBufferingComponent","ref","API","isBuffering","s","__ngFactoryType__","ɵɵdirectiveInject","ElementRef","VgApiService","ɵɵdefineComponent","rf","ctx","ɵɵclassProp","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","VgBufferingModule","ɵɵdefineNgModule","ɵɵdefineInjector","CommonModule","VgCoreModule","BannersModule","CommonModule","LazyLoadImageModule","MaterialBaseModule","RouterModule","PipesModule","VgCoreModule","VgControlsModule","VgOverlayPlayModule","VgBufferingModule","ReviewRequest","ReviewResult","ReviewService","constructor","repoService","spinner","subscriptions","ngOnDestroy","length","forEach","sub","unsubscribe","submit","reviewRequest","show","Observable","observer","push","create","subscribe","next","res","hide","result","complete","error","ReviewResult","errors","ɵɵinject","RepositoryService","NgxSpinnerService","factory","ɵfac","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵelementContainerStart","ɵɵelement","ɵɵlistener","ɵɵrestoreView","_r1","ctx_r1","ɵɵnextContext","ɵɵresetView","changeRating","$event","changeStars","ɵɵtemplate","ProductReviewSubmitDialogComponent_ng_container_5_mat_error_56_Template","ProductReviewSubmitDialogComponent_ng_container_5_mat_error_62_Template","ProductReviewSubmitDialogComponent_ng_container_5_mat_error_68_Template","ProductReviewSubmitDialogComponent_ng_container_5_mat_error_74_Template","ProductReviewSubmitDialogComponent_ng_container_5_mat_error_80_Template","close","onReviewSubmit","ɵɵadvance","ɵɵtextInterpolate1","product","name","ɵɵproperty","reviewForm","noStars","controls","rating","errors","required","title","reviewText","email","ProductReviewSubmitDialogComponent","constructor","dialogRef","customerService","recaptchaV3Service","reviewService","snackBar","reviewed","subscriptions","FormGroup","FormControl","Validators","compose","EmailRegEx","push","customer","subscribe","res","patchValue","firstName","ngOnDestroy","length","forEach","sub","unsubscribe","event","value","valid","execute","token","review","ReviewRequest","productId","id","customerGuid","submit","resetRes","result","success","Customer","saveCustomerCookie","open","panelClass","verticalPosition","duration","errMessage","error","ɵɵdirectiveInject","MatDialogRef","MAT_DIALOG_DATA","CustomerService","ReCaptchaV3Service","ReviewService","MatSnackBar","selectors","standalone","decls","vars","consts","template","rf","ctx","ProductReviewSubmitDialogComponent_ng_container_5_Template","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r1","ctx_r1","ɵɵnextContext","ɵɵresetView","openSubmitDialog","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate1","review_r3","reviewerName","state","abbreviation","ɵɵtemplate","ProductReviewComponent_div_1_div_1_div_13_span_1_Template","ProductReviewComponent_div_1_div_1_div_13_span_2_Template","ProductReviewComponent_div_1_div_1_div_13_span_3_Template","ɵɵproperty","ɵɵtextInterpolate","replyText","ɵɵelement","ProductReviewComponent_div_1_div_1_div_13_Template","ProductReviewComponent_div_1_div_1_div_14_Template","title","ɵɵpipeBind2","created","reviewText","ProductReviewComponent_div_1_div_1_Template","product","reviews","ProductReviewComponent","constructor","settings","dialog","dialogButton","subscriptions","init","open","ProductReviewSubmitDialogComponent","data","autoFocus","maxHeight","maxWidth","ɵɵdirectiveInject","AppSettings","MatDialog","selectors","inputs","standalone","decls","vars","consts","template","rf","ctx","ProductReviewComponent_div_0_Template","ProductReviewComponent_div_1_Template","ProductReviewModule","CommonModule","RouterModule","MaterialBaseModule","MaterialExtendModule","RatingModule","_c0","MapEventManager","BehaviorSubject","listener","_ngZone","name","switchMap","target","observable","Observable","observer","event","currentTarget","subscriber","DEFAULT_OPTIONS","DEFAULT_HEIGHT","DEFAULT_WIDTH","GoogleMap","inject","ElementRef","NgZone","center","zoom","options","EventEmitter","platformId","PLATFORM_ID","isPlatformBrowser","googleMapsWindow","changes","googleMap","lib","mapConstructor","bounds","padding","x","y","latLng","latLngBounds","take","styles","coerceCssPixelValue","__spreadProps","__spreadValues","__ngFactoryType__","ɵɵdefineComponent","ɵɵNgOnChangesFeature","rf","ctx","ɵɵprojectionDef","ɵɵelement","ɵɵprojection","cssUnitsPattern","value","MapInfoWindow","inject","GoogleMap","ElementRef","NgZone","MapEventManager","BehaviorSubject","Subject","options","position","EventEmitter","take","lib","infoWindowConstructor","advancedMarkerElement","content","anchor","shouldFocus","anchorObject","combineLatest","map","__spreadProps","__spreadValues","takeUntil","__ngFactoryType__","ɵɵdefineDirective","MAP_MARKER","InjectionToken","DEFAULT_MARKER_OPTIONS$1","MapMarker","inject","GoogleMap","NgZone","MapEventManager","title","position","label","clickable","options","icon","value","EventEmitter","map","lib","markerConstructor","changes","marker","_title","_position","_label","_clickable","_icon","_visible","take","__spreadProps","__spreadValues","__ngFactoryType__","ɵɵdefineDirective","ɵɵProvidersFeature","ɵɵNgOnChangesFeature","DEFAULT_CLUSTERER_OPTIONS","DeprecatedMapMarkerClusterer","Subject","averageCenter","batchSizeIE","calculator","clusterClass","enableRetinaIcons","gridSize","ignoreHidden","imageExtension","imagePath","imageSizes","maxZoom","minimumClusterSize","styles","zIndex","zoomOnClick","takeUntil","clusterer","ariaLabelFn","_averageCenter","_batchSizeIE","_calculator","_styles","_clusterClass","_enableRetinaIcons","_gridSize","_ignoreHidden","_imageExtension","_imagePath","_imageSizes","_maxZoom","_minimumClusterSize","_zIndex","_zoomOnClick","padding","markers","initialMarkers","markerComponents","newMarkers","markersToAdd","markersToRemove","markerComponent","ɵɵdefineComponent","rf","ctx","dirIndex","ɵɵcontentQuery","_t","ɵɵqueryRefresh","ɵɵloadQuery","_c0","ɵɵprojectionDef","ɵɵprojection","GoogleMapsModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","AfterpayDialogComponent","constructor","dialogRef","data","close","ɵɵdirectiveInject","MatDialogRef","MAT_DIALOG_DATA","selectors","standalone","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵlistener","ɵɵtext","ɵɵelementEnd","ɵɵelement","ɵɵadvance","ɵɵproperty","content","ɵɵsanitizeHtml","ProductsPaged","ProductCategoryService","constructor","category","BehaviorSubject","$category","categoryProducts","$products","load","next","replaceCategory","replaceProducts","products","seName","factory","ɵfac","ProductManufacturerService","constructor","manufacturer","BehaviorSubject","$manufacturer","manufacturerProducts","$products","load","next","replaceManufacturer","replaceProducts","products","factory","ɵfac","CatalogService","constructor","staticService","repoService","snackBar","klaviyoService","router","productCategoryService","productManufacturerService","route","customer","categoryPageIndex","manufacturerPageIndex","subscriptions","useCache","environment","fragment","subscribe","ngOnDestroy","length","forEach","sub","unsubscribe","getProduct","id","bypassCache","Observable","observer","product","push","getById","next","staticRes","complete","getData","apiRes","error","e","open","panelClass","verticalPosition","duration","res","getProductDetail","viewProduct","url","getRelatedProducts","related","getCategoryProducts","category","currentCategory","seName","replaceProducts","getCategoryProductsRecursive","pageSize","products","subscription","getCategoryProductsPaged","page","ProductsPaged","pageIndex","lastPage","visible","getProducts","pagedProducts","getManufacturerProducts","manufacturer","currentManufacturer","getManufacturerProductsRecursive","getManufacturerProductsPaged","ɵɵinject","RepositoryStaticService","RepositoryService","MatSnackBar","KlaviyoService","Router","ProductCategoryService","ProductManufacturerService","ActivatedRoute","factory","ɵfac","ThemeService","constructor","sevenSpikesService","themeSettings","BehaviorSubject","$themeSettings","subscriptions","load","init","next","push","getThemeSettings","subscribe","res","error","ngOnDestroy","length","forEach","sub","unsubscribe","ɵɵinject","SevenSpikesService","factory","ɵfac","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵproperty","option_r4","ɵɵadvance","ɵɵtextInterpolate1","name","ɵɵelementContainerStart","ɵɵlistener","$event","ɵɵrestoreView","_r1","attributeForm_r2","ɵɵnextContext","$implicit","ctx_r2","ɵɵresetView","attChangeDropDown","ɵɵtemplate","ControlsDetailComponent_div_0_div_1_div_2_ng_container_2_mat_option_7_Template","ɵɵtextInterpolate","controls","textPrompt","value","ɵɵpropertyInterpolate","options","_r5","attChangeRadio","option_r6","selected","ControlsDetailComponent_div_0_div_1_div_2_ng_container_3_mat_card_title_1_Template","ControlsDetailComponent_div_0_div_1_div_2_ng_container_3_mat_radio_button_3_Template","length","i_r8","_r7","index","option_r9","multiOptionClick","optionId","ɵɵclassMap","maximum","noSelected","ControlsDetailComponent_div_0_div_1_div_2_ng_container_4_div_6_div_6_Template","counter","ControlsDetailComponent_div_0_div_1_div_2_ng_container_4_mat_icon_5_Template","ControlsDetailComponent_div_0_div_1_div_2_ng_container_4_div_6_Template","ɵɵtextInterpolate3","option_r11","_r10","ControlsDetailComponent_div_0_div_1_div_2_ng_container_5_mat_icon_5_Template","ControlsDetailComponent_div_0_div_1_div_2_ng_container_5_mat_icon_6_Template","ControlsDetailComponent_div_0_div_1_div_2_ng_container_5_div_7_Template","option_r13","_r12","attChangeCheckboxes","ControlsDetailComponent_div_0_div_1_div_2_ng_container_6_mat_checkbox_4_Template","option_r14","ControlsDetailComponent_div_0_div_1_div_2_ng_container_13_mat_checkbox_4_Template","ControlsDetailComponent_div_0_div_1_div_2_ng_container_2_Template","ControlsDetailComponent_div_0_div_1_div_2_ng_container_3_Template","ControlsDetailComponent_div_0_div_1_div_2_ng_container_4_Template","ControlsDetailComponent_div_0_div_1_div_2_ng_container_5_Template","ControlsDetailComponent_div_0_div_1_div_2_ng_container_6_Template","ControlsDetailComponent_div_0_div_1_div_2_ng_container_7_Template","ControlsDetailComponent_div_0_div_1_div_2_ng_container_8_Template","ControlsDetailComponent_div_0_div_1_div_2_ng_container_9_Template","ControlsDetailComponent_div_0_div_1_div_2_ng_container_10_Template","ControlsDetailComponent_div_0_div_1_div_2_ng_container_11_Template","ControlsDetailComponent_div_0_div_1_div_2_ng_container_12_Template","ControlsDetailComponent_div_0_div_1_div_2_ng_container_13_Template","attributeForms","i_r15","controlType","ControlsDetailComponent_div_0_div_1_div_2_Template","tier_r17","_r16","addToCart","quantity","tierFlex","ɵɵpipeBind1","price","ControlsDetailComponent_div_0_div_2_div_1_div_6_Template","product","tierPrices","ɵɵelement","_r18","_r19","backSoon","ControlsDetailComponent_div_0_div_2_div_3_mat_form_field_2_Template","ControlsDetailComponent_div_0_div_2_div_3_div_3_Template","ControlsDetailComponent_div_0_div_2_div_3_div_4_Template","cartForm","stockQuantity","ControlsDetailComponent_div_0_div_2_div_1_Template","ControlsDetailComponent_div_0_div_2_div_3_Template","attributes","_r20","backInStock","ɵɵtextInterpolate2","customer","firstName","ControlsDetailComponent_div_0_div_3_div_2_div_17_mat_error_6_Template","ControlsDetailComponent_div_0_div_3_div_2_div_17_mat_error_11_Template","ControlsDetailComponent_div_0_div_3_div_2_div_17_mat_error_16_Template","ControlsDetailComponent_div_0_div_3_div_2_div_17_mat_error_17_Template","ControlsDetailComponent_div_0_div_3_div_2_div_17_mat_error_22_Template","ControlsDetailComponent_div_0_div_3_div_2_div_17_mat_error_23_Template","ControlsDetailComponent_div_0_div_3_div_2_div_17_mat_error_28_Template","ControlsDetailComponent_div_0_div_3_div_2_div_17_mat_error_29_Template","_r22","onRegisterFormSubmit","registerForm","errors","required","lastName","email","hasError","password","confirmPassword","ControlsDetailComponent_div_0_div_3_div_2_div_18_mat_error_6_Template","ControlsDetailComponent_div_0_div_3_div_2_div_18_mat_error_7_Template","ControlsDetailComponent_div_0_div_3_div_2_div_18_mat_error_12_Template","ControlsDetailComponent_div_0_div_3_div_2_div_18_mat_error_13_Template","_r23","onLoginFormSubmit","hidePassword","resetHeader","resetPassword","loginForm","ControlsDetailComponent_div_0_div_3_div_2_h3_1_Template","_r21","stockRegister","ControlsDetailComponent_div_0_div_3_div_2_div_17_Template","ControlsDetailComponent_div_0_div_3_div_2_div_18_Template","ControlsDetailComponent_div_0_div_3_div_1_Template","ControlsDetailComponent_div_0_div_3_div_2_Template","loggedIn","settings","holdingImage","medium","ɵɵsanitizeUrl","ControlsDetailComponent_div_0_div_1_Template","ControlsDetailComponent_div_0_div_2_Template","ControlsDetailComponent_div_0_div_3_Template","ControlsDetailComponent_div_0_div_4_Template","ControlsDetailComponent_div_0_div_5_Template","allowBackInStockSubscriptions","informed","ControlsDetailComponent","constructor","customerService","cartService","formBuilder","recaptchaV3Service","accountService","claimsService","snackBar","toastr","currencyService","productAvailable","hasAttributes","recentToken","FormGroup","FormControl","Validators","compose","EmailRegEx","minLength","newsLetter","validators","MatchValidator","subscriptions","multiples","push","subscribe","res","isLoggedIn","ngOnDestroy","forEach","sub","unsubscribe","init","attribute","some","a","productAttributeId","optionsEqual","m","addMultiAttribute","filter","addStandardAttribute","optionsOne","optionsTwo","option","optionEqual","valueType","o","attributeValueTypeId","associatedProductId","concat","distinct","attributeForm","group","multi","productAttributeIds","patchValue","selectAttribute","SelectAttribute","attributeId","id","productId","selectedOptions","selectedOption","addControl","disabled","isPreSelected","addToWishList","attributesValid","find","valid","selectedValue","listName","listId","addToWishListWithAttributes","open","panelClass","verticalPosition","duration","addToWishListDetail","attributeSet","productOption","addToCartWithAttributes","addToCartDetail","adjustPrice","addedPrice","priceAdjustment","adjustedPrice","newPrice","adjustedPriceDisplay","formatCurrency","currency","adjustedInstallmentPrice","installmentPrice","adjustedInstallmentPriceDisplay","event","checked","count","message","execute","token","regRequest","RegRequest","Customer","isApproved","register","regRes","result","success","jwtToken","errMessage","error","request","LogonRequest","checkout","logon","logonRes","reset","resetRes","getCustomerGuid","warning","localStorage","getItem","refresh","resRefresh","setItem","set","claims","isGuest","resGuest","i","Array","ɵɵdirectiveInject","AppSettings","CustomerService","CartService","FormBuilder","ReCaptchaV3Service","AccountService","ClaimsService","MatSnackBar","ToastrService","CurrencyService","selectors","inputs","standalone","decls","vars","consts","template","rf","ctx","ControlsDetailComponent_div_0_Template","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r1","ctx_r1","ɵɵnextContext","ɵɵresetView","addToCart","ɵɵtext","ɵɵelementEnd","ɵɵelement","ɵɵtemplate","ControlsMiniComponent_form_2_button_2_Template","ControlsMiniComponent_form_2_mat_form_field_3_Template","ɵɵproperty","cartForm","ɵɵadvance","productAvailable","_r3","scrollToOptions","ControlsMiniComponent_div_3_button_1_Template","_r4","backSoon","ControlsMiniComponent","constructor","cartService","snackBar","hasAttributes","FormGroup","quantity","FormControl","Validators","compose","required","init","product","stockQuantity","attributes","length","listName","listId","addToCartDetail","controls","value","open","panelClass","verticalPosition","duration","addToWishList","addToWishListDetail","window","scrollBy","ɵɵdirectiveInject","CartService","MatSnackBar","selectors","inputs","standalone","decls","vars","consts","template","rf","ctx","ControlsMiniComponent_form_2_Template","ControlsMiniComponent_div_3_Template","ControlsMiniComponent_button_4_Template","Manufacturer","OmnialMarker","DealerService","constructor","spinner","staticService","repoService","snackBar","route","dealers","BehaviorSubject","$dealers","settings","$settings","subscriptions","useCache","environment","newCoordinators","Subject","openWindow","fragment","subscribe","load","init","next","push","getDealers","res","forEach","dealer","webSite","indexOf","error","loadAll","getAllDealers","loadSettings","getSettings","bypassCache","Observable","observer","getDealersFromCache","cacheResult","complete","getDealersFromNop","nopResult","getAllDealersFromCache","getAllDealersFromNop","getFieldProperties","getData","e","get","getSettingsFromCache","getSettingsFromNop","createDealer","create","err","updateDealer","update","geoLocateDealer","deleteDealer","delete","id","ngOnDestroy","length","sub","unsubscribe","getMarkers","markers","address","coordinates","marker","OmnialMarker","dealerId","lat","latitude","lng","longitude","title","name","icon","draggable","street","address2","address1","city","state","stateName","postalCode","zipPostalCode","email","phone","phoneNumber","website","detail","position","google","maps","LatLng","manufacturers","manufacturerIds","manufacturerId","manufacturer","Manufacturer","some","m","ɵɵinject","NgxSpinnerService","RepositoryStaticService","RepositoryService","MatSnackBar","ActivatedRoute","factory","ɵfac","ManufacturerService","constructor","staticService","repoService","snackBar","manufacturers","BehaviorSubject","$manufacturers","subscriptions","useCache","environment","load","init","next","push","getManufacturers","subscribe","res","error","bypassCache","Observable","observer","get","staticRes","complete","getData","apiRes","e","open","panelClass","verticalPosition","duration","resNoCache","getManufacturer","slug","getBySeName","ngOnDestroy","length","forEach","sub","unsubscribe","ɵɵinject","RepositoryStaticService","RepositoryService","MatSnackBar","factory","ɵfac","ɵɵelementStart","ɵɵlistener","i_r4","ɵɵrestoreView","_r3","index","mapMarker_r5","ɵɵreference","ctx_r1","ɵɵnextContext","ɵɵresetView","openWindow","ɵɵelementEnd","ɵɵproperty","marker_r6","position","label","title","options","_r7","dealerWebsiteClick","selectedLocation","ɵɵtext","ɵɵadvance","ɵɵpropertyInterpolate","website","ɵɵsanitizeUrl","_r1","moveMap","ɵɵtemplate","DealerLocatorMapComponent_div_15_map_marker_4_Template","ɵɵelement","DealerLocatorMapComponent_div_15_div_18_Template","center","zoom","isMobile","markers","ɵɵtextInterpolate","ɵɵtextInterpolate1","street","ɵɵtextInterpolate3","city","state","postalCode","phone","email","_r10","location_r9","$implicit","ɵɵpipeBind2","distance","manufacturer_r11","pictureUrl","name","DealerLocatorMapComponent_div_16_div_1_mat_card_1_mat_expansion_panel_14_div_4_img_1_Template","DealerLocatorMapComponent_div_16_div_1_mat_card_1_mat_expansion_panel_14_div_4_div_2_Template","DealerLocatorMapComponent_div_16_div_1_mat_card_1_mat_expansion_panel_14_div_4_div_3_Template","DealerLocatorMapComponent_div_16_div_1_mat_card_1_mat_expansion_panel_14_div_4_Template","manufacturers","_r8","showDealer","DealerLocatorMapComponent_div_16_div_1_mat_card_1_div_12_Template","DealerLocatorMapComponent_div_16_div_1_mat_card_1_div_13_Template","DealerLocatorMapComponent_div_16_div_1_mat_card_1_mat_expansion_panel_14_Template","ɵɵclassMap","length","DealerLocatorMapComponent_div_16_div_1_mat_card_1_Template","i_r12","radius","DealerLocatorMapComponent_div_16_div_1_Template","locationList","DealerLocatorMapComponent","constructor","_document","dealerService","scriptLoaderService","cd","zone","trackingService","dealerSelected","EventEmitter","mapInit","lat","lng","style","subscriptions","countries","onResize","window","innerWidth","ngOnDestroy","forEach","sub","unsubscribe","init","component","googleMapsLoaded","push","scripts","subscribe","res","googleScript","find","s","ref","googleClusterScript","loaded","initComponent","loading","load","environment","versionCheckUrl","indexOf","styleTags","head","getElementsByTagName","deleteIndexes","i","innerText","startsWith","remove","settings","mapZoomLevel","mapStyleJson","JSON","parse","google","maps","LatLng","latitude","longitude","maxZoom","minZoom","fullscreenControl","styles","initMap","defaultBounds","north","latitudeNorthWest","south","latitudeSouthEast","east","longitudeSouthEast","west","longitudeNorthWest","autoCompleteOptions","bounds","fields","strictBounds","types","searchControl","FormControl","locations","getMarkers","dealers","location","pin","manufacturer","manufacturerFound","m","id","seName","sortLocations","zoomToNewLocation","setCurrentPosition","navigator","geolocation","getCurrentPosition","coords","setTimeout","autoComplete","result","geometry","formatRadius","value","onRadiusChange","mapMoveTimer","map","getCenter","sort","detectChanges","isInfoWindowOpen","openedWindow","marker","infoWindowsView","infoWindow","open","emitDealer","mapMarker","getTitle","dealer","d","dealerId","pushPage","code","address","pushSelectContent","setDealer","l","selectedDealer","emit","distanceToCenter","lat1","toRad","lng1","lat2","lng2","dLat","dLng","a","Math","sin","cos","R","atan2","sqrt","degrees","PI","n1","n2","ɵɵdirectiveInject","DOCUMENT","DealerService","ScriptLoaderService","ChangeDetectorRef","NgZone","TrackingService","selectors","viewQuery","rf","ctx","MapInfoWindow","MapMarker","$event","ɵɵresolveWindow","DealerLocatorMapComponent_div_15_Template","DealerLocatorMapComponent_div_16_Template","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵproperty","manufacturer_r3","id","ɵɵadvance","ɵɵtextInterpolate1","name","ɵɵlistener","ɵɵrestoreView","_r1","ctx_r1","ɵɵnextContext","ɵɵresetView","changeManufacturer","ɵɵtemplate","DealerLocatorComponent_div_1_mat_option_9_Template","manufacturerForm","manufacturerFilter","ɵɵelement","selectedManufacturer","pictureUrl","ɵɵsanitizeUrl","ɵɵtextInterpolate","_r4","showMap","DealerLocatorComponent","constructor","dealerService","manufacturerService","checkoutService","dealerSelected","EventEmitter","lookupType","allSelection","loadAll","manufacturerPreSelect","manufacturers","preRender","showManufacturerFilter","subscriptions","FormGroup","manufacturerId","FormControl","ngOnDestroy","length","forEach","sub","unsubscribe","ngAfterViewInit","controls","value","ngOnInit","environment","versionCheckUrl","indexOf","init","product","push","settings","subscribe","initLocator","loadSettings","manufacturer","load","dealers","allDealers","filter","d","isVisible","getAllowableCountries","resShip","countries","linkToManufacturers","filteredDealers","find","m","dealer","manufacturerIds","some","initMap","optionIds","specifications","specification","specificationOptionName","specificationAttributeName","specificationOptionIds","spec","s","getManufacturerFilter","sort","a","b","displayOrder","setDealer","dealerLocatorMap","emitDealer","emit","selectedManufacturerId","setTimeout","ɵɵdirectiveInject","DealerService","ManufacturerService","CheckoutService","selectors","viewQuery","rf","ctx","DealerLocatorComponent_div_1_Template","DealerLocatorComponent_img_3_Template","DealerLocatorComponent_span_4_Template","DealerLocatorComponent_app_dealer_locator_map_5_Template","DealerLocatorComponent_div_6_Template","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ProductZoomComponent","constructor","dialogRef","image","settings","spinner","cd","toastr","imageWidth","blurr","initialized","close","zoomIn","zoomLevel","warning","changeZoom","zoomOut","zoomWidth","width","zoomHeight","height","toString","img","document","getElementById","setScroll","imageStateChange","event","reason","initial","zoomTimer","clearTimeout","container","clientWidth","naturalWidth","setTimeout","clientHeight","click","detectChanges","scrollX","scrollY","scrollTo","formatLabel","value","ɵɵdirectiveInject","MatDialogRef","MAT_DIALOG_DATA","AppSettings","NgxSpinnerService","ChangeDetectorRef","ToastrService","selectors","standalone","decls","vars","consts","template","rf","ctx","ɵɵlistener","$event","ɵɵelement","ɵɵtemplate","ProductZoomComponent_span_12_Template","ɵɵadvance","ɵɵproperty","ɵɵtextInterpolate1","ɵɵstyleProp","holdingImage","medium","full","_c0","YouTubePlayer_Conditional_0_Template","rf","ctx","_r1","ɵɵgetCurrentView","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","ctx_r1","ɵɵnextContext","ɵɵresetView","ɵɵelementEnd","ɵɵproperty","YouTubePlayerPlaceholder","url","__ngFactoryType__","ɵɵdefineComponent","ɵɵstyleProp","ɵɵclassProp","ɵɵnamespaceSVG","ɵɵelement","ɵɵattribute","YOUTUBE_PLAYER_CONFIG","InjectionToken","DEFAULT_PLAYER_WIDTH","DEFAULT_PLAYER_HEIGHT","coerceTime","value","numberAttribute","PlayerState","YouTubePlayer","inject","NgZone","CSP_NONCE","ChangeDetectorRef","ElementRef","Subject","BehaviorSubject","height","width","EventEmitter","platformId","PLATFORM_ID","config","isPlatformBrowser","changes","seconds","allowSeekAhead","volume","playbackRate","options","__async","element","playVideo","loadApi","change","player","__spreadProps","__spreadValues","whenReady","event","state","pendingState","playbackState","muted","seek","name","switchMap","fromEventPattern","listener","of","source","Observable","observer","error","takeUntil","ɵɵviewQuery","_t","ɵɵqueryRefresh","ɵɵloadQuery","booleanAttribute","ɵɵNgOnChangesFeature","ɵɵtemplate","ɵɵconditional","ɵɵadvance","apiLoaded","nonce","script","callback","YouTubePlayerModule","ɵɵdefineNgModule","ɵɵdefineInjector","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r1","ctx_r1","ɵɵnextContext","ɵɵresetView","openZoom","ɵɵtext","ɵɵelementEnd","ɵɵelement","ɵɵadvance","ɵɵproperty","i_r5","slide_r4","imgUrl","ɵɵsanitizeUrl","alt","youTubeRef","ɵɵtemplate","ProductSwiperComponent_swiper_slide_4_picture_2_Template","ProductSwiperComponent_swiper_slide_4_youtube_player_3_Template","_r6","slidePrev","_r7","slideNext","ɵɵclassMap","i_r10","slide_r9","ProductSwiperComponent_swiper_slide_9_img_1_Template","ProductSwiperComponent_swiper_slide_9_div_2_Template","slides","length","ProductSwiperComponent","constructor","dialog","settings","scriptLoaderService","cd","effect","zoomButton","isGallery","image","config","thumbsConfig","spaceBetween","slidesPerView","loop","freeMode","watchSlidesProgress","thumbsOptions","subscriptions","showZoom","ngAfterViewChecked","ngAfterViewInit","initSwiper","product","videoAttributes","attributes","filter","a","textPrompt","toLowerCase","youTubeVideoAttributes","forEach","va","defaultValue","push","video","newSlide","ProductSlide","name","index","imageIndex","isVideo","images","large","setTimeout","load","scripts","subscribe","res","find","s","ref","loaded","swiperConfig","initialSlide","startingSlide","cubeEffect","slideShadows","shadow","resizeObserver","on","slideChange","onSlideChange","productThumbsSwiper","swiper","Object","assign","nativeElement","initialize","thumbs","productSwiper","zoomDisplay","thumbActive","getCurrentSlideIndex","detectChanges","i","thumbImage","document","getElementsByClassName","j","classList","add","remove","youTubePlayer","player","getCurrentTime","pauseVideo","open","ProductZoomComponent","data","panelClass","direction","rtl","activeIndex","ɵɵdirectiveInject","MatDialog","AppSettings","ScriptLoaderService","ChangeDetectorRef","selectors","viewQuery","rf","ctx","ProductSwiperComponent_button_1_Template","ProductSwiperComponent_swiper_slide_4_Template","ProductSwiperComponent_div_5_Template","ProductSwiperComponent_div_6_Template","ProductSwiperComponent_swiper_slide_9_Template","fadeInUpAnimation","fadeInRightAnimation","fadeInLeftAnimation","scaleInAnimation","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","ctx_r0","specification","imageUrl","ɵɵsanitizeUrl","tmp_8_0","valueRaw","ɵɵtext","ɵɵtextInterpolate1","currentProduct","manufacturer","name","pictureUrl","ɵɵtextInterpolate","availability","ɵɵlistener","ɵɵrestoreView","_r2","ɵɵnextContext","expandedText","smallImage","ɵɵresetView","scrollTitle","ɵɵpipeBind2","oldPrice","newPrice","adjustedPrice","_r3","openAfterpay","installmentPrice","_r4","adjustedInstallmentPrice","ɵɵtemplate","ProductDetailComponent_div_20_div_2_div_1_Template","ProductDetailComponent_div_20_div_2_div_2_Template","ProductDetailComponent_div_20_div_2_div_3_Template","ProductDetailComponent_div_20_div_2_div_4_Template","afterpayLimits","min","max","discount_r5","ProductDetailComponent_div_20_div_9_li_4_Template","discounts","ProductDetailComponent_div_20_div_1_Template","ProductDetailComponent_div_20_div_2_Template","ProductDetailComponent_div_20_div_9_Template","length","tab_r6","displayName","ɵɵpipeBind1","description","ɵɵsanitizeHtml","i_r8","tab_r7","ProductDetailComponent","constructor","afterpayService","dialog","catalogService","topicService","sitemapService","canonicalService","themeService","customerService","settings","spinner","needsExpand","productWaiting","productFail","flexGtMd","flexMd","afterpayPop","productAvailable","tabIndex","subscriptions","push","limits","subscribe","res","customer","ngAfterViewInit","setChildControls","ngOnDestroy","forEach","sub","unsubscribe","ngOnInit","hide","initProduct","product","stockQuantity","productLayout","setTimeout","needsToExpand","productDetailExpandHeightLimit","minHeight","showExpand","expandedProductText","text","nativeElement","offsetHeight","rating","init","controlsMini","controlMini","controlsDetail","controlDetail","productSwipers","productSwiper","initSwiper","productReviews","productReview","dealerLocators","dealerLocator","siteMap","sitemapItems","getTopicBySlug","topic","open","AfterpayDialogComponent","data","content","body","autoFocus","maxHeight","maxWidth","swapProduct","productId","show","getProductDetail","attributeProduct","images","shortDescription","fullDescription","specifications","find","s","specificationAttributeName","reviewContent","document","getElementById","offsetTop","window","scrollTo","top","behavior","scrollReviews","ɵɵdirectiveInject","AfterpayService","MatDialog","CatalogService","TopicService","SiteMapService","CanonicalService","ThemeService","CustomerService","AppSettings","NgxSpinnerService","selectors","viewQuery","rf","ctx","ProductDetailComponent_span_12_Template","ProductDetailComponent_span_13_Template","ProductDetailComponent_span_14_Template","ProductDetailComponent_div_19_Template","ProductDetailComponent_div_20_Template","ProductDetailComponent_app_controls_detail_22_Template","ProductDetailComponent_mat_tab_30_Template","ProductDetailComponent_mat_expansion_panel_48_Template","ɵɵclassMapInterpolate1","undefined","sku","tmp_16_0","tmp_17_0","ɵɵclassMap","showPriceDetail","tabs","fadeInUpAnimation","fadeInRightAnimation","fadeInLeftAnimation","scaleInAnimation","ProductDialogComponent","constructor","dialogRef","catalogService","afterpayService","trackingService","spinner","data","afterpayPop","productAvailable","subscriptions","product","category","listId","stockQuantity","pushProductView","push","limits","subscribe","res","afterpayLimits","ngAfterViewInit","hide","setTimeout","content","document","getElementsByClassName","length","scrollTo","ngOnDestroy","forEach","sub","unsubscribe","close","openAfterpay","closeAfterpay","ɵɵdirectiveInject","MatDialogRef","CatalogService","AfterpayService","TrackingService","NgxSpinnerService","MAT_DIALOG_DATA","selectors","standalone","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵlistener","ɵɵtext","ɵɵelementEnd","ɵɵelement","ɵɵadvance","ɵɵproperty","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","ɵɵpipeBind1","ctx_r3","productSpecificationAttribute","product_r3","ɵɵsanitizeHtml","ɵɵtext","ɵɵtextInterpolate1","ɵɵpipeBind2","oldPrice","ɵɵtemplate","ProductsCarouselComponent_swiper_slide_3_div_21_div_1_Template","newPrice","ProductsCarouselComponent_swiper_slide_3_div_2_Template","ɵɵlistener","ctx_r4","ɵɵrestoreView","_r2","$implicit","i_r6","index","ɵɵnextContext","ɵɵresetView","productClick","$event","ctx_r6","imageStateChange","ctx_r7","ProductsCarouselComponent_swiper_slide_3_div_21_Template","ctx_r8","openProductDialog","settings","holdingImage","small","id","images","name","ɵɵpureFunction1","_c1","seName","ɵɵtextInterpolate","sku","showPrice","ProductsCarouselComponent","constructor","dialog","router","activatedRoute","catalogService","canonicalService","trackingService","spinner","count1700","count1280","count960","count740","count480","config","category","subscriptions","ngOnInit","products","length","dupProducts","numDuplicates","i","forEach","product","push","ngAfterViewInit","configSwiper","ngAfterViewChecked","initSwiper","ngOnDestroy","sub","unsubscribe","resizeObserver","slidesPerView","spaceBetween","pagination","loop","effect","breakpoints","swiper","Object","assign","nativeElement","initialize","position","pageNumber","pushProductClick","listId","carouselName","environment","pageSize","productCanonical","subscribe","res","navigate","productSimple","show","getProductDetail","hide","open","ProductDialogComponent","data","panelClass","direction","rtl","afterClosed","productDialog","relativeTo","event","reason","pushImpression","slideNext","slidePrev","specificationAttributeName","specifications","find","s","valueRaw","ɵɵdirectiveInject","MatDialog","Router","ActivatedRoute","CatalogService","CanonicalService","TrackingService","AppSettings","NgxSpinnerService","selectors","viewQuery","rf","ctx","ProductsCarouselComponent_swiper_slide_3_Template","i0","_r1","DealerLocatorModule","CommonModule","RouterModule","MaterialBaseModule","MaterialExtendModule","ReactiveFormsModule","RatingModule","GoogleMapsModule","AutoCompleteModule","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","ɵɵproperty","media_r1","banner_r2","id","ɵɵadvance","videoUrl","ɵɵsanitizeUrl","media_r3","videoUrlMobile","ɵɵtemplate","BannersStaticComponent_div_1_a_1_vg_player_1_video_1_Template","BannersStaticComponent_div_1_a_1_vg_player_1_video_2_Template","type","desktopImageUrl","altText","mobileImageUrl","ɵɵclassMap","ctx_r3","contentClass","ɵɵpipeBind1","content","ɵɵsanitizeHtml","BannersStaticComponent_div_1_a_1_vg_player_1_Template","BannersStaticComponent_div_1_a_1_picture_2_Template","BannersStaticComponent_div_1_a_1_picture_3_Template","BannersStaticComponent_div_1_a_1_div_4_Template","ɵɵpureFunction1","_c0","linkUrl","BannersStaticComponent_div_1_a_1_Template","BannersStaticComponent","constructor","sevenSpikesService","router","settings","subscriptions","ngOnInit","widgetZone","getSlides","slug","ngOnDestroy","length","forEach","sub","unsubscribe","push","subscribe","data","sliders","slider","banners","Array","slides","slide","visible","banner","bannerLink","url","navigate","ɵɵdirectiveInject","SevenSpikesService","Router","AppSettings","selectors","inputs","standalone","decls","vars","consts","template","rf","ctx","BannersStaticComponent_div_1_Template","BannersStaticModule","CommonModule","MaterialBaseModule","RouterModule","PipesModule","VgCoreModule","VgControlsModule","VgOverlayPlayModule","VgBufferingModule","ProductReviewSubmitModule","CommonModule","RouterModule","MaterialBaseModule","MaterialExtendModule","ReactiveFormsModule","RatingModule","ProductReviewSubmitDialogModule","CommonModule","RouterModule","MaterialBaseModule","MaterialExtendModule","ReactiveFormsModule","RatingModule","ControlsDetailModule","CommonModule","RouterModule","ReactiveFormsModule","MaterialBaseModule","MaterialExtendModule","ControlsMiniModule","CommonModule","RouterModule","ReactiveFormsModule","MaterialBaseModule","MaterialExtendModule","ProductZoomModule","CommonModule","RouterModule","MaterialBaseModule","MaterialExtendModule","LazyLoadImageModule","ProductSwiperModule","CommonModule","RouterModule","MaterialBaseModule","MaterialExtendModule","LazyLoadImageModule","ProductZoomModule","YouTubePlayerModule","ProductDetailModule","CommonModule","RouterModule","MaterialBaseModule","MaterialExtendModule","ControlsDetailModule","ControlsMiniModule","BreadcrumbModule","RatingModule","BannersModule","BannersStaticModule","ProductReviewModule","ProductReviewSubmitModule","ProductReviewSubmitDialogModule","PipesModule","DealerLocatorModule","ProductSwiperModule","TopicContentModule","ControlsQuickviewModule","CommonModule","RouterModule","ReactiveFormsModule","MaterialBaseModule","MaterialExtendModule","ProductDialogModule","CommonModule","RouterModule","MaterialBaseModule","MaterialExtendModule","ControlsQuickviewModule","ProductDetailModule","ProductsCarouselModule","CommonModule","RouterModule","MaterialBaseModule","MaterialExtendModule","ProductDialogModule","RatingModule","ControlsListModule","LazyLoadImageModule","PipesModule"],"x_google_ignoreList":[0,16,17,18,19,28,50]}