{"version":3,"file":"857.ab08bcf795b487c7.js","mappings":"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","names":["IntersectionObserverUtil","observeOnce","element","fn","options","root","threshold","observer","IntersectionObserver","entries","disconnect","observe","SliderService","_aChild","this","scrollport","children","clientWidth","_aHint","constructor","scrollHint","document","detector","_current","BehaviorSubject","_atMax","current$","asObservable","atMax$","atMin$","pipe","map","_","setIndex","next","scrollTo","left","scrollLeft","top","behavior","prev","goTo","to","dir","documentDirection","goToElement","delta","Math","abs","offsetLeft","scrollerPadding","parseInt","getComputedStyle","pos","event","setTimeout","ceil","scrollWidth","markForCheck","firstElementChild","getAttribute","i0","item_r1","_c0","findElementsWithQuery","query","retries","Promise","resolve","reject","wrapperElements","querySelectorAll","length","Array","from","then","ProductsElementComponent","SettingsSetterDirective","_document","_elm","_detector","_searchService","super","uuid","Uuid","create","elm","nativeElement","elements","_sliderService","find","ngOnDestroy","head","getElementsByClassName","item","remove","setResults","results","s","createElement","setAttribute","innerHTML","JSON","stringify","itemListElement","r","i","position","url","append","ngAfterContentInit","search","sizeSlider","track","index","id","_this","_asyncToGenerator","result","searchFn","getModel","queueMicrotask","items","structuredClone","static","__ngFactoryType__","DOCUMENT","i1","core","VBU","selectors","hostBindings","rf","ctx","RelatedProductsElementComponent","listName","tags","join","tagsModel","productTags","features","CatalogContentAndSearchResolver","decls","vars","consts","template","RelatedProductsElementComponent_For_4_Template","_forTrack0","RelatedProductsElementComponent_ForEmpty_5_Template","tmp_1_0","settings","showSize","undefined","tmp_2_0","gap","DynamicRelatedProductsComponent","customizer","ProductStore","get","product","relatedProducts","optional","DynamicRelatedProductsComponent_For_4_Template","DynamicRelatedProductsComponent_ForEmpty_5_Template","RelatedProductsElementModule","components","relatedProductsElement","dynamicRelatedProductsElement","$C","G2t","CommonModule","MediaModule","ProductCardComponent","CarouselModule","HammerModule","TranslateModule","TagManagerModule","CarouselSimpleComponent","_angular_core__WEBPACK_IMPORTED_MODULE_0__","ViewItemListDirective","ViewDirective","__event_name","data","item_list_name","item_list_id","_angular_core__WEBPACK_IMPORTED_MODULE_1__","FsC","inputs","ngAfterViewInit","Observable","_observer","intersectionObserver","mergeMap","entry","isIntersecting","filter","take","toPromise","GA4","_angular_core__WEBPACK_IMPORTED_MODULE_6__","stepSize","step","window","icon","shownCount","minwidth","atStart","atEnd","mustationObserverConfig","attributes","sub","closed","unsubscribe","ngOnInit","check","Subject","debounceTime","subscribe","dialog","closest","MutationObserver","mutationList","some","mutation","type","open","scrollUpdate","scrollBack","scrollBy","scrollForward","_angular_core__WEBPACK_IMPORTED_MODULE_3__","hostVars","styles","changeDetection"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/utils/intersection-observer.util.ts","./src/business/services/slider.service.ts","./src/business/grid/related-products/related-products.component.html","./src/business/grid/related-products/related-products.component.ts","./src/business/grid/related-products/related-products.module.ts","./src/core-lib/carousel/carousel.module.ts","./src/externals/tag-manager/directives/view-item-list.directive.ts","./src/externals/tag-manager/directives/view.directive.ts","./src/layout/carousel/carousel-simple.component.ts","./src/layout/carousel/carousel-simple.component.html"],"sourcesContent":["export namespace IntersectionObserverUtil {\n export function observeOnce(element: HTMLElement, fn: IntersectionObserverCallback, options: IntersectionObserverInit = {\n root: null,\n threshold: 0.1\n }) {\n var observer = new IntersectionObserver((entries, observer) => {fn(entries,observer); observer.disconnect()}, options);\n observer.observe(element);\n return observer;\n }\n}\n","import { ChangeDetectorRef } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n\nexport class SliderService {\n private get _aChild(): Element {\n return this.scrollport.children[1] ?? { clientWidth: 0 } as HTMLElement;\n }\n private get _aHint(): Element {\n return this.scrollport.children[0] ?? { clientWidth: 0 } as HTMLElement;\n }\n private _current: BehaviorSubject = new BehaviorSubject(null);\n private _atMax: BehaviorSubject = new BehaviorSubject(false);\n current$: Observable;\n atMax$: Observable;\n atMin$: Observable;\n\n constructor(\n private scrollHint: boolean,\n private scrollport: HTMLElement,\n private document: Document,\n private detector: ChangeDetectorRef,\n ) {\n this.current$ = this._current.asObservable();\n this.atMax$ = this._atMax.asObservable();\n this.atMin$ = this._current.pipe(map(_ => _ === 0));\n this.setIndex(null);\n }\n\n next() {\n this.scrollport.scrollTo({\n left: this.scrollport.scrollLeft + this._aChild.clientWidth,\n top: 0,\n behavior: 'smooth'\n })\n }\n\n prev() {\n this.scrollport.scrollTo({\n left: this.scrollport.scrollLeft - this._aChild.clientWidth,\n top: 0,\n behavior: 'smooth'\n })\n }\n\n goTo(to: number) {\n const dir = this.documentDirection();\n const goToElement = this.scrollport.children[to] as HTMLElement;\n if (!goToElement)\n return\n const delta = Math.abs(this.scrollport.offsetLeft - goToElement.offsetLeft);\n const scrollerPadding = parseInt(getComputedStyle(this.scrollport)['padding-left']);\n const pos = this.scrollport.clientWidth / 2 > delta\n ? delta - scrollerPadding\n : delta + scrollerPadding;\n this.scrollport.scrollTo({\n left: dir === 'ltr' ? pos : pos * -1,\n top: 0,\n behavior: 'smooth'\n });\n }\n\n setIndex(event) {\n setTimeout(() => {\n if (this.scrollHint)\n this._current.next(Math.ceil((this.scrollport.scrollLeft - this._aHint.clientWidth) / this.scrollport.children[1].clientWidth) + 1);\n else\n this._current.next(Math.ceil(this.scrollport.scrollLeft / this._aChild.clientWidth));\n this._atMax.next(this.scrollport.scrollLeft + this.scrollport.clientWidth > this.scrollport.scrollWidth - 20);\n\n this.detector.markForCheck();\n }, 512);\n }\n\n private documentDirection() {\n return this.document.firstElementChild?.getAttribute('dir') || 'ltr';\n }\n}\n","\n @for(item of items; track item.id) {\n \n } @empty {\n {{ 'PRODUCTS.EMPTY' | translate }}\n }\n\n\n","import { DOCUMENT } from '@angular/common';\nimport { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostListener, Inject, Input, OnDestroy } from '@angular/core';\nimport { BoxSettings, ColorSettings, SettingsSetterDirective } from 'src/business/models/general-element-settings';\nimport { ProductCardModel, SearchRequestModel } from 'src/business/services/client.generated';\nimport { CatalogContentAndSearchResolver } from 'src/core-lib/navigation/services/content.resolver';\nimport { IntersectionObserverUtil } from 'src/utils/intersection-observer.util';\nimport { ProductStore } from 'src/utils/storage.util';\nimport { Uuid } from 'src/utils/uuid.util';\nimport { SliderService } from '../../services/slider.service';\n\nexport type Product = ProductCardModel;\nfunction findElementsWithQuery(query: string, root: HTMLElement, retries=0): Promise {\n return new Promise((resolve,reject) => {\n if(retries > 30)\n reject('not found')\n const wrapperElements = root?.querySelectorAll(query);\n\n if (wrapperElements?.length > 0) {\n resolve(Array.from(wrapperElements) as Array);\n } else {\n setTimeout(() => {\n findElementsWithQuery(query, root, retries++).then(_ => resolve(_),_ => reject(_));\n }, 2000);\n }\n });\n}\ntype BoxNColors = Partial & Partial;\n\nexport interface BlockSliderSettings extends BoxNColors {\n gap: string;\n arrows: boolean;\n scrollbar: boolean;\n scrollHint: boolean;\n scrollStart: number;\n showSize: number;\n oneAtATime: boolean;\n minWidth: string;\n}\n@Component({\n selector: 'app-products-element',\n template: '',\n styles: [''],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport abstract class ProductsElementComponent extends SettingsSetterDirective implements AfterContentInit, OnDestroy {\n private _sliderService: SliderService;\n private uuid = Uuid.create();\n declare settings: BlockSliderSettings;\n\n\n @Input()\n tags: { alias: \"categoryPage_productFilter\", productTags: string[] }[];\n\n @Input()\n relatedProductLimit: number;\n\n items: ProductCardModel[];\n\n constructor(\n @Inject(DOCUMENT)\n protected _document: Document,\n _elm: ElementRef,\n _detector: ChangeDetectorRef,\n protected _searchService: CatalogContentAndSearchResolver,\n ) {\n super(_elm, _detector);\n\n\n findElementsWithQuery('.wrapper', this?.elm?.nativeElement as HTMLElement).then(elements => {\n this._sliderService = new SliderService(\n false,\n elements.find(() => true) as HTMLElement,\n this._document,\n this._detector,\n );\n this._sliderService.setIndex(null);\n this._detector.markForCheck();\n });\n }\n\n ngOnDestroy(): void {\n document.head.getElementsByClassName(this.uuid)?.item(0)?.remove();\n }\n\n setResults(results: ProductCardModel[]): void {\n document.head.getElementsByClassName(this.uuid)?.item(0)?.remove();\n const s = document.createElement('script');\n s.setAttribute('type', \"application/ld+json\");\n s.setAttribute('class', this.uuid);\n s.innerHTML = JSON.stringify({\n \"@context\": \"https://schema.org\",\n \"@type\": \"ItemList\",\n \"itemListElement\": results.map((r, i) => ({\n \"@type\": \"ListItem\",\n \"position\": i,\n \"url\": r.url\n }))\n });\n document.head.append(s);\n }\n\n ngAfterContentInit(): void {\n this.search();\n this.sizeSlider();\n }\n\n @HostListener('window:resize')\n sizeSlider() {\n this._sliderService?.setIndex(null);\n this._detector.markForCheck();\n }\n\n track(item: ProductCardModel, index: number): string {\n return item.id;\n }\n\n prev() {\n this._sliderService?.prev();\n }\n\n next() {\n this._sliderService?.next();\n }\n\n setIndex(event) {\n this._sliderService?.setIndex(event);\n }\n\n search() {\n IntersectionObserverUtil.observeOnce(this.elm.nativeElement, async () => {\n var result = await this._searchService.searchFn(await this.getModel());\n queueMicrotask(() => { this.setResults(result.results); });\n this.items = structuredClone(result.results);\n this._detector.markForCheck();\n });\n }\n\n abstract getModel(): SearchRequestModel;\n}\n\n@Component({\n selector: 'app-related-products-element',\n templateUrl: './related-products.component.html',\n styleUrls: ['./related-products.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CatalogContentAndSearchResolver]\n})\nexport class RelatedProductsElementComponent extends ProductsElementComponent {\n listName = 'related-products';\n getModel() {\n this.id = this.id ?? this.tags.join('-');\n return this._searchService.tagsModel(this.tags.map(_ => _.productTags), 48);\n }\n}\n\n\n@Component({\n selector: 'app-dynamic-related-products',\n templateUrl: './related-products.component.html',\n styleUrls: ['./related-products.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CatalogContentAndSearchResolver]\n})\nexport class DynamicRelatedProductsComponent extends ProductsElementComponent {\n listName = 'dynamic-related-products';\n getModel() {\n var customizer = ProductStore.get();\n this.id = this.id ?? ([customizer?.product?.relatedProducts??['emptyId']]).join('-');\n return this._searchService.tagsModel([customizer?.product?.relatedProducts['optional']] , 10);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { HammerModule } from '@angular/platform-browser';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ProductCardComponent } from 'src/business/product/components/product-card/product-card.component';\nimport { CarouselModule } from 'src/core-lib/carousel/carousel.module';\nimport { TagManagerModule } from 'src/externals/tag-manager/tag-manager.module';\nimport { CarouselSimpleComponent } from 'src/layout/carousel/carousel-simple.component';\nimport { MediaModule } from 'src/layout/media/media.module';\nimport { DynamicRelatedProductsComponent, RelatedProductsElementComponent } from './related-products.component';\n\n\n\n\n@NgModule({\n declarations: [RelatedProductsElementComponent,DynamicRelatedProductsComponent],\n imports: [\n CommonModule,\n MediaModule,\n ProductCardComponent,\n CarouselModule,\n HammerModule,\n TranslateModule,\n TagManagerModule,\n CarouselModule,\n CarouselSimpleComponent,\n ],\n exports: [RelatedProductsElementComponent,DynamicRelatedProductsComponent],\n})\nexport class RelatedProductsElementModule {\n static components = {\n 'relatedProductsElement': RelatedProductsElementComponent,\n 'dynamicRelatedProductsElement': DynamicRelatedProductsComponent\n };\n }\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CarouselDirective } from './directives/carousel.directive';\n\n\n\n@NgModule({\n declarations: [\n CarouselDirective,\n ],\n imports: [\n CommonModule\n ],\n exports: [\n CarouselDirective,\n ]\n})\nexport class CarouselModule { }\n","import { Directive, Input } from '@angular/core';\nimport { ViewDirective } from './view.directive';\nimport { GA4 } from '../models/ga4.model';\n\n@Directive({\n selector: '[ga4ViewItemList]'\n})\nexport class ViewItemListDirective extends ViewDirective {\n track: GA4.ViewItemList = { __event_name: 'view_item_list' };\n @Input()\n set items(data: Array>) {\n this.track.items = data;\n }\n @Input()\n set item_list_name(data: string) {\n this.track.item_list_name = data;\n }\n @Input()\n set item_list_id(data: string) {\n this.track.item_list_id = data;\n }\n}\n","import { AfterViewInit, Directive, ElementRef } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { filter, map, mergeMap, take } from 'rxjs/operators';\nimport { GA4 } from '../models/ga4.model';\n\n\n\n\n@Directive()\nexport abstract class ViewDirective implements AfterViewInit {\n abstract track: T;\n constructor(private element: ElementRef) {}\n ngAfterViewInit(): void {\n new Observable(_observer => {\n const intersectionObserver = new IntersectionObserver(entries => _observer.next(entries));\n intersectionObserver.observe(this.element.nativeElement);\n return () => intersectionObserver.disconnect();\n }).pipe(\n mergeMap((entries: IntersectionObserverEntry[]) => entries),\n map(entry => entry.isIntersecting),\n filter(_ => _),\n take(1)\n ).toPromise()\n .then(() => new Promise((resolve) => {\n const fn = () => {\n if (this?.track?.items?.length > 0)\n resolve(true);\n else\n setTimeout(() => { fn(); }, 200);\n }\n fn();\n }))\n .then(() => queueMicrotask(() => GA4.track(this.track)));\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostBinding, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { debounceTime, Subject, Subscription } from 'rxjs';\nimport { Uuid } from 'src/utils/uuid.util';\n\n@Component({\n selector: 'app-carousel-simple',\n standalone: true,\n imports: [TranslateModule, CommonModule],\n templateUrl: './carousel-simple.component.html',\n styleUrl: './carousel-simple.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CarouselSimpleComponent implements OnInit, OnDestroy {\n id = 'carousel-' + Uuid.create();\n @Input()\n icon: string = 'arrow';\n @HostBinding('style.--items-shown')\n @Input()\n shownCount: string = '4';\n @HostBinding('style.--min')\n @Input()\n minwidth: string = '260px';\n @HostBinding('style.--gap')\n @Input()\n gap: string = '20px';\n atStart: boolean = true;\n atEnd: boolean = true;\n @Input()\n step: 'item' | 'full' = 'item';\n check: Subject;\n sub: Subscription;\n observer: MutationObserver;\n mustationObserverConfig: MutationObserverInit = {\n attributes: true\n };\n\n get stepSize(): number {\n if (this.step == 'item' && this.track.firstElementChild)\n return this.track.firstElementChild.clientWidth;\n return this.track.clientWidth;\n }\n get track(): HTMLDivElement {\n return window[this.id];\n }\n constructor(\n private _elm: ElementRef,\n private _detector: ChangeDetectorRef,\n ) {}\n\n\n ngOnDestroy(): void {\n if (this.sub != null && !this.sub.closed)\n this.sub.unsubscribe();\n if (this.observer != null)\n this.observer.disconnect();\n\n }\n ngOnInit(): void {\n if (+this.shownCount < 1)\n this.shownCount = '4';\n\n this.check = new Subject();\n this.sub = this.check.pipe(debounceTime(10)).subscribe(() => {\n if (this.track == null || this.track.firstElementChild == null)\n return;\n this.atStart = this.track.scrollLeft < (this.track.firstElementChild.clientWidth / 2);\n this.atEnd = this.track.scrollLeft + this.track.clientWidth + (this.track.firstElementChild.clientWidth / 2) > this.track.scrollWidth;\n this._detector.markForCheck();\n });\n var dialog = this._elm.nativeElement.closest('dialog');\n if (dialog != null) {\n this.observer = new MutationObserver((mutationList, observer) => mutationList.some(mutation => mutation.type ==='attributes' && dialog.open) ? this.scrollUpdate() : null);\n this.observer.observe(dialog, this.mustationObserverConfig);\n }\n else\n setTimeout(() => {\n this.scrollUpdate()\n }, 500);\n }\n scrollBack() {\n this.track.scrollBy({ left: -this.stepSize, top: 0, behavior: 'smooth' });\n this.scrollUpdate();\n }\n scrollForward() {\n this.track.scrollBy({ left: this.stepSize, top: 0, behavior: 'smooth' });\n this.scrollUpdate();\n }\n scrollUpdate() {\n queueMicrotask(() => { this.check.next() });\n }\n}\n","\n
\n \n
\n\n"],"x_google_ignoreList":[]}