{"version":3,"file":"881.js","mappings":"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","sources":["./src/app/components/product-card/product-card.component.html","./src/app/components/product-card/product-card.component.ts","./src/app/layout/common/category-page.abstract.ts","./src/app/shared/directives/scroll-list/scroll-item.directive.ts","./src/app/shared/directives/scroll-list/scroll-list.directive.ts","./src/app/layout/default/default-category-page/default-category-page.component.html","./src/app/layout/default/default-category-page/default-category-page.component.ts","./src/app/layout/fresh/fresh-category-page/fresh-category-page.component.html","./src/app/layout/fresh/fresh-category-page/fresh-category-page.component.ts","./src/app/pages/category/category.component.html","./src/app/pages/category/category.routes.ts","./src/app/pages/category/category.component.ts","./node_modules/@angular/cdk/fesm2022/collections.mjs"],"sourcesContent":["\n
\n \n \n \"\"\n \n
\n
\n
\n
\n {{ data.name }}\n A\n
\n\n \n
\n \n
\n
\n
\n\n
{{ data.description }}
\n\n \n
\n
\n \n {{ energy | number: '1.0-0' }} kcal |\n \n \n {{ currentSize.portionWeightGrams | number: '1.0-0' }}\n\n \n g\n ml\n kg\n l\n \n \n
\n\n
\n
\n
{{ label.name }}
\n
\n
\n
\n
\n
\n
\n","import {\n CommonModule,\n NgOptimizedImage,\n} from '@angular/common';\nimport { Component, inject, Input, OnChanges } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { MenuItemSizeDto } from '../../api/v1/models/menu-item-size-dto';\nimport { CurrencyComponent } from '../../shared/components/price/currency.component';\nimport { MenuListRepository } from '../../shared/repositories/menu-list.repository';\nimport { UIMenuItemDto } from 'src/app/shared/interfaces/ui-menu-item-dto.interface';\nimport { Observable } from 'rxjs';\n\n@Component({\n selector: 'app-product-card',\n templateUrl: './product-card.component.html',\n standalone: true,\n imports: [\n CommonModule,\n NgOptimizedImage,\n CurrencyComponent,\n ]\n})\nexport class ProductCardComponent implements OnChanges {\n @Input() data: UIMenuItemDto;\n\n public energy: number;\n public currentSize!: MenuItemSizeDto;\n public defaultPrice$: Observable;\n\n private menuListRepository = inject(MenuListRepository);\n private router = inject(Router);\n\n ngOnChanges(): void {\n this.prepareData();\n }\n\n private prepareData(): void {\n if (this.data) {\n this.currentSize = this.menuListRepository.getDefaultSize(this.data);\n this.defaultPrice$ = this.menuListRepository.getDefaultPriceObservable(this.currentSize);\n const energy = this.currentSize.nutritionPerHundredGrams?.energy ?? 0;\n const weight = this.currentSize.portionWeightGrams ?? 0;\n this.energy = weight * energy / 100;\n }\n }\n\n onOpenCard(slug: string | null): void {\n if (!slug) { return }\n void this.router.navigate([`/category/${this.data.categorySlug}/${slug}`]);\n }\n}\n","import { AfterViewInit, Directive, inject, Input } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { combineLatestWith, map, Observable, shareReplay, tap } from 'rxjs';\nimport { MenuScheduleDto } from 'src/app/api/v1/models';\nimport { ScrollListService } from 'src/app/services/scroll-list.sevice';\nimport { MenuListRepository } from 'src/app/shared/repositories/menu-list.repository';\nimport { SessionRepository } from 'src/app/shared/repositories/session.repository';\n\n@UntilDestroy()\n@Directive()\nexport abstract class CategoryPageAbstract implements AfterViewInit {\n protected menuListRepository = inject(MenuListRepository);\n private scrollListService = inject(ScrollListService);\n private router = inject(Router);\n private sessionRepository = inject(SessionRepository)\n\n intersectionOptions = { rootMargin: '80px 0px 0px 0px', threshold: 0.3 };\n\n @Input() slug: string;\n\n schedule$: Observable = this.menuListRepository.activeCategorySchedule$;\n categories$ = this.menuListRepository.menuNavCategories$.pipe(\n map(categories => categories?.filter(c => !c.isScheduleAvailable))\n );\n items$ = this.menuListRepository.showItems$.pipe(\n combineLatestWith(\n this.sessionRepository.activeLabelFilter$,\n this.sessionRepository.activeAllergenFilter$\n ),\n map(([items, activeLabelFilter, activeAllergenFilter]) =>\n items?.filter(i =>\n !activeLabelFilter?.length && !activeAllergenFilter?.length ||\n activeLabelFilter?.length && i.labels.some(l => activeLabelFilter.includes(l.name)) ||\n activeAllergenFilter?.length && i.allergens.some(a => activeAllergenFilter.includes(a.name))\n )\n ),\n map(items => items?.reduce(\n (arr, item) => arr.set(item.categoryId, (arr.get(item.categoryId) ?? []).concat([item])),\n new Map()\n )),\n shareReplay(1),\n );\n activeCategoryIndex$: Observable = this.scrollListService.activeIndexItem$;\n isSearching$: Observable = this.menuListRepository.searchString$.pipe(map(str => !!str));\n\n ngAfterViewInit() {\n this.categories$.pipe(\n tap(categories => {\n const activeCategorySlug = categories?.find(c => c.id === this.menuListRepository.activeCategoryId)?.slug;\n const currentCategoryId = categories?.find(c => c.slug === this.slug)?.id;\n if (activeCategorySlug !== this.slug && currentCategoryId) {\n this.menuListRepository.setActiveCategory(currentCategoryId);\n }\n }),\n map(categories => categories?.map((x, i) => x.slug === this.slug ? i : 0).filter(x => !!x)[0] ?? 0),\n tap(i => setTimeout(() => this.scrollListService.setActiveIndex(i), 300)),\n untilDestroyed(this)\n ).subscribe();\n }\n\n leaveEnd(slug: string, isSearching: boolean | null) {\n if (isSearching || /\\/category\\/([\\w|-]+)\\/([\\w|-]+)/.test(this.router.url)) { return; }\n this.menuListRepository.setActiveCategoryBySlug(slug);\n }\n}\n","import { Directive, ElementRef } from '@angular/core';\n\n@Directive({\n selector: '[appScrollItem]',\n standalone: true\n})\nexport class ScrollItemDirective {\n constructor(private elRef: ElementRef) { }\n\n setActive(): void {\n window.scrollTo({ left: 0, top: this.elRef.nativeElement.offsetTop, behavior: 'instant' });\n }\n}\n","import { ContentChildren, Directive, Input, OnChanges, QueryList, SimpleChanges } from '@angular/core';\nimport { ScrollItemDirective } from './scroll-item.directive';\n\n@Directive({\n selector: '[appScrollList]',\n standalone: true\n})\nexport class ScrollListDirective implements OnChanges {\n constructor() { }\n\n @Input() activeIndex: number = 0;\n @ContentChildren(ScrollItemDirective, { descendants: true }) scrollButtons: QueryList;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['activeIndex'] && !changes['activeIndex'].firstChange) {\n this.scrollButtons.get(this.activeIndex)?.setActive();\n }\n }\n}\n","
\n
\n
\n
{{ category.name }}
\n
\n
\n Available from {{ schedule.from }} to {{ schedule.to }}\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n\n\n","import { Component } from '@angular/core';\nimport { AsyncPipe, NgFor, NgIf } from '@angular/common';\nimport { ProductCardComponent } from '../../../components/product-card/product-card.component';\nimport { RouterOutlet } from '@angular/router';\nimport { CategoryPageAbstract } from '../../common/category-page.abstract';\nimport { ObserverDirective } from 'src/app/shared/directives/observer/observer.directive';\nimport { ScrollListDirective } from 'src/app/shared/directives/scroll-list/scroll-list.directive';\nimport { ScrollItemDirective } from 'src/app/shared/directives/scroll-list/scroll-item.directive';\n\n@Component({\n selector: 'app-default-category-page',\n templateUrl: './default-category-page.component.html',\n styleUrls: ['./default-category-page.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n NgFor,\n AsyncPipe,\n RouterOutlet,\n ProductCardComponent,\n ObserverDirective,\n ScrollListDirective,\n ScrollItemDirective\n ]\n})\nexport class DefaultCategoryPageComponent extends CategoryPageAbstract { }\n","
\n
\n \n
\n
{{ category.name }}
\n
\n
\n Available from {{ schedule.from }} to {{ schedule.to }}\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n\n\n","import { Component } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { AsyncPipe, NgFor, NgIf } from '@angular/common';\nimport { RouterOutlet } from '@angular/router';\nimport { ProductCardComponent } from '../components/product-card/product-card.component';\nimport { CategoryPageAbstract } from '../../common/category-page.abstract';\nimport { ObserverDirective } from 'src/app/shared/directives/observer/observer.directive';\nimport { ScrollListDirective } from 'src/app/shared/directives/scroll-list/scroll-list.directive';\nimport { ScrollItemDirective } from 'src/app/shared/directives/scroll-list/scroll-item.directive';\n\n@Component({\n selector: 'app-fresh-category-page',\n templateUrl: './fresh-category-page.component.html',\n styleUrls: ['./fresh-category-page.component.scss'],\n standalone: true,\n imports: [\n NgIf,\n NgFor,\n AsyncPipe,\n RouterOutlet,\n ProductCardComponent,\n ObserverDirective,\n ScrollListDirective,\n ScrollItemDirective\n ]\n})\nexport class FreshCategoryPageComponent extends CategoryPageAbstract {\n searchString$: Observable = this.menuListRepository.searchString$;\n}\n","\n \n \n\n","import { Routes } from '@angular/router';\n\nimport { CategoryComponent } from './category.component';\n\nexport const routes: Routes = [\n {\n path: '',\n component: CategoryComponent,\n children: [\n {\n path: ':slug',\n loadComponent: () => import('../product-info/product-info.component')\n },\n ]\n },\n]\n","import { AsyncPipe, NgSwitch, NgSwitchCase } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Layout } from 'src/app/api/v1/models';\nimport { ConfigRepository } from '../../shared/repositories/config.repository';\nimport {\n DefaultCategoryPageComponent\n} from '../../layout/default/default-category-page/default-category-page.component';\nimport { FreshCategoryPageComponent } from '../../layout/fresh/fresh-category-page/fresh-category-page.component';\n\n@Component({\n selector: 'app-category',\n templateUrl: './category.component.html',\n standalone: true,\n imports: [\n AsyncPipe,\n NgSwitch,\n NgSwitchCase,\n DefaultCategoryPageComponent,\n FreshCategoryPageComponent,\n ]\n})\nexport class CategoryComponent{\n constructor(\n private config: ConfigRepository,\n ) {}\n @Input() slug: string;\n\n layout$: Observable = this.config.layout$;\n layouts = Layout;\n}\n","import { ConnectableObservable, isObservable, of, Subject } from 'rxjs';\nimport * as i0 from '@angular/core';\nimport { Injectable, InjectionToken } from '@angular/core';\n\nclass DataSource {\n}\n/** Checks whether an object is a data source. */\nfunction isDataSource(value) {\n // Check if the value is a DataSource by observing if it has a connect function. Cannot\n // be checked as an `instanceof DataSource` since people could create their own sources\n // that match the interface, but don't extend DataSource. We also can't use `isObservable`\n // here, because of some internal apps.\n return value && typeof value.connect === 'function' && !(value instanceof ConnectableObservable);\n}\n\n/** DataSource wrapper for a native array. */\nclass ArrayDataSource extends DataSource {\n constructor(_data) {\n super();\n this._data = _data;\n }\n connect() {\n return isObservable(this._data) ? this._data : of(this._data);\n }\n disconnect() { }\n}\n\n/**\n * A repeater that destroys views when they are removed from a\n * {@link ViewContainerRef}. When new items are inserted into the container,\n * the repeater will always construct a new embedded view for each item.\n *\n * @template T The type for the embedded view's $implicit property.\n * @template R The type for the item in each IterableDiffer change record.\n * @template C The type for the context passed to each embedded view.\n */\nclass _DisposeViewRepeaterStrategy {\n applyChanges(changes, viewContainerRef, itemContextFactory, itemValueResolver, itemViewChanged) {\n changes.forEachOperation((record, adjustedPreviousIndex, currentIndex) => {\n let view;\n let operation;\n if (record.previousIndex == null) {\n const insertContext = itemContextFactory(record, adjustedPreviousIndex, currentIndex);\n view = viewContainerRef.createEmbeddedView(insertContext.templateRef, insertContext.context, insertContext.index);\n operation = 1 /* _ViewRepeaterOperation.INSERTED */;\n }\n else if (currentIndex == null) {\n viewContainerRef.remove(adjustedPreviousIndex);\n operation = 3 /* _ViewRepeaterOperation.REMOVED */;\n }\n else {\n view = viewContainerRef.get(adjustedPreviousIndex);\n viewContainerRef.move(view, currentIndex);\n operation = 2 /* _ViewRepeaterOperation.MOVED */;\n }\n if (itemViewChanged) {\n itemViewChanged({\n context: view?.context,\n operation,\n record,\n });\n }\n });\n }\n detach() { }\n}\n\n/**\n * A repeater that caches views when they are removed from a\n * {@link ViewContainerRef}. When new items are inserted into the container,\n * the repeater will reuse one of the cached views instead of creating a new\n * embedded view. Recycling cached views reduces the quantity of expensive DOM\n * inserts.\n *\n * @template T The type for the embedded view's $implicit property.\n * @template R The type for the item in each IterableDiffer change record.\n * @template C The type for the context passed to each embedded view.\n */\nclass _RecycleViewRepeaterStrategy {\n constructor() {\n /**\n * The size of the cache used to store unused views.\n * Setting the cache size to `0` will disable caching. Defaults to 20 views.\n */\n this.viewCacheSize = 20;\n /**\n * View cache that stores embedded view instances that have been previously stamped out,\n * but don't are not currently rendered. The view repeater will reuse these views rather than\n * creating brand new ones.\n *\n * TODO(michaeljamesparsons) Investigate whether using a linked list would improve performance.\n */\n this._viewCache = [];\n }\n /** Apply changes to the DOM. */\n applyChanges(changes, viewContainerRef, itemContextFactory, itemValueResolver, itemViewChanged) {\n // Rearrange the views to put them in the right location.\n changes.forEachOperation((record, adjustedPreviousIndex, currentIndex) => {\n let view;\n let operation;\n if (record.previousIndex == null) {\n // Item added.\n const viewArgsFactory = () => itemContextFactory(record, adjustedPreviousIndex, currentIndex);\n view = this._insertView(viewArgsFactory, currentIndex, viewContainerRef, itemValueResolver(record));\n operation = view ? 1 /* _ViewRepeaterOperation.INSERTED */ : 0 /* _ViewRepeaterOperation.REPLACED */;\n }\n else if (currentIndex == null) {\n // Item removed.\n this._detachAndCacheView(adjustedPreviousIndex, viewContainerRef);\n operation = 3 /* _ViewRepeaterOperation.REMOVED */;\n }\n else {\n // Item moved.\n view = this._moveView(adjustedPreviousIndex, currentIndex, viewContainerRef, itemValueResolver(record));\n operation = 2 /* _ViewRepeaterOperation.MOVED */;\n }\n if (itemViewChanged) {\n itemViewChanged({\n context: view?.context,\n operation,\n record,\n });\n }\n });\n }\n detach() {\n for (const view of this._viewCache) {\n view.destroy();\n }\n this._viewCache = [];\n }\n /**\n * Inserts a view for a new item, either from the cache or by creating a new\n * one. Returns `undefined` if the item was inserted into a cached view.\n */\n _insertView(viewArgsFactory, currentIndex, viewContainerRef, value) {\n const cachedView = this._insertViewFromCache(currentIndex, viewContainerRef);\n if (cachedView) {\n cachedView.context.$implicit = value;\n return undefined;\n }\n const viewArgs = viewArgsFactory();\n return viewContainerRef.createEmbeddedView(viewArgs.templateRef, viewArgs.context, viewArgs.index);\n }\n /** Detaches the view at the given index and inserts into the view cache. */\n _detachAndCacheView(index, viewContainerRef) {\n const detachedView = viewContainerRef.detach(index);\n this._maybeCacheView(detachedView, viewContainerRef);\n }\n /** Moves view at the previous index to the current index. */\n _moveView(adjustedPreviousIndex, currentIndex, viewContainerRef, value) {\n const view = viewContainerRef.get(adjustedPreviousIndex);\n viewContainerRef.move(view, currentIndex);\n view.context.$implicit = value;\n return view;\n }\n /**\n * Cache the given detached view. If the cache is full, the view will be\n * destroyed.\n */\n _maybeCacheView(view, viewContainerRef) {\n if (this._viewCache.length < this.viewCacheSize) {\n this._viewCache.push(view);\n }\n else {\n const index = viewContainerRef.indexOf(view);\n // The host component could remove views from the container outside of\n // the view repeater. It's unlikely this will occur, but just in case,\n // destroy the view on its own, otherwise destroy it through the\n // container to ensure that all the references are removed.\n if (index === -1) {\n view.destroy();\n }\n else {\n viewContainerRef.remove(index);\n }\n }\n }\n /** Inserts a recycled view from the cache at the given index. */\n _insertViewFromCache(index, viewContainerRef) {\n const cachedView = this._viewCache.pop();\n if (cachedView) {\n viewContainerRef.insert(cachedView, index);\n }\n return cachedView || null;\n }\n}\n\n/**\n * Class to be used to power selecting one or more options from a list.\n */\nclass SelectionModel {\n /** Selected values. */\n get selected() {\n if (!this._selected) {\n this._selected = Array.from(this._selection.values());\n }\n return this._selected;\n }\n constructor(_multiple = false, initiallySelectedValues, _emitChanges = true, compareWith) {\n this._multiple = _multiple;\n this._emitChanges = _emitChanges;\n this.compareWith = compareWith;\n /** Currently-selected values. */\n this._selection = new Set();\n /** Keeps track of the deselected options that haven't been emitted by the change event. */\n this._deselectedToEmit = [];\n /** Keeps track of the selected options that haven't been emitted by the change event. */\n this._selectedToEmit = [];\n /** Event emitted when the value has changed. */\n this.changed = new Subject();\n if (initiallySelectedValues && initiallySelectedValues.length) {\n if (_multiple) {\n initiallySelectedValues.forEach(value => this._markSelected(value));\n }\n else {\n this._markSelected(initiallySelectedValues[0]);\n }\n // Clear the array in order to avoid firing the change event for preselected values.\n this._selectedToEmit.length = 0;\n }\n }\n /**\n * Selects a value or an array of values.\n * @param values The values to select\n * @return Whether the selection changed as a result of this call\n * @breaking-change 16.0.0 make return type boolean\n */\n select(...values) {\n this._verifyValueAssignment(values);\n values.forEach(value => this._markSelected(value));\n const changed = this._hasQueuedChanges();\n this._emitChangeEvent();\n return changed;\n }\n /**\n * Deselects a value or an array of values.\n * @param values The values to deselect\n * @return Whether the selection changed as a result of this call\n * @breaking-change 16.0.0 make return type boolean\n */\n deselect(...values) {\n this._verifyValueAssignment(values);\n values.forEach(value => this._unmarkSelected(value));\n const changed = this._hasQueuedChanges();\n this._emitChangeEvent();\n return changed;\n }\n /**\n * Sets the selected values\n * @param values The new selected values\n * @return Whether the selection changed as a result of this call\n * @breaking-change 16.0.0 make return type boolean\n */\n setSelection(...values) {\n this._verifyValueAssignment(values);\n const oldValues = this.selected;\n const newSelectedSet = new Set(values);\n values.forEach(value => this._markSelected(value));\n oldValues\n .filter(value => !newSelectedSet.has(value))\n .forEach(value => this._unmarkSelected(value));\n const changed = this._hasQueuedChanges();\n this._emitChangeEvent();\n return changed;\n }\n /**\n * Toggles a value between selected and deselected.\n * @param value The value to toggle\n * @return Whether the selection changed as a result of this call\n * @breaking-change 16.0.0 make return type boolean\n */\n toggle(value) {\n return this.isSelected(value) ? this.deselect(value) : this.select(value);\n }\n /**\n * Clears all of the selected values.\n * @param flushEvent Whether to flush the changes in an event.\n * If false, the changes to the selection will be flushed along with the next event.\n * @return Whether the selection changed as a result of this call\n * @breaking-change 16.0.0 make return type boolean\n */\n clear(flushEvent = true) {\n this._unmarkAll();\n const changed = this._hasQueuedChanges();\n if (flushEvent) {\n this._emitChangeEvent();\n }\n return changed;\n }\n /**\n * Determines whether a value is selected.\n */\n isSelected(value) {\n return this._selection.has(this._getConcreteValue(value));\n }\n /**\n * Determines whether the model does not have a value.\n */\n isEmpty() {\n return this._selection.size === 0;\n }\n /**\n * Determines whether the model has a value.\n */\n hasValue() {\n return !this.isEmpty();\n }\n /**\n * Sorts the selected values based on a predicate function.\n */\n sort(predicate) {\n if (this._multiple && this.selected) {\n this._selected.sort(predicate);\n }\n }\n /**\n * Gets whether multiple values can be selected.\n */\n isMultipleSelection() {\n return this._multiple;\n }\n /** Emits a change event and clears the records of selected and deselected values. */\n _emitChangeEvent() {\n // Clear the selected values so they can be re-cached.\n this._selected = null;\n if (this._selectedToEmit.length || this._deselectedToEmit.length) {\n this.changed.next({\n source: this,\n added: this._selectedToEmit,\n removed: this._deselectedToEmit,\n });\n this._deselectedToEmit = [];\n this._selectedToEmit = [];\n }\n }\n /** Selects a value. */\n _markSelected(value) {\n value = this._getConcreteValue(value);\n if (!this.isSelected(value)) {\n if (!this._multiple) {\n this._unmarkAll();\n }\n if (!this.isSelected(value)) {\n this._selection.add(value);\n }\n if (this._emitChanges) {\n this._selectedToEmit.push(value);\n }\n }\n }\n /** Deselects a value. */\n _unmarkSelected(value) {\n value = this._getConcreteValue(value);\n if (this.isSelected(value)) {\n this._selection.delete(value);\n if (this._emitChanges) {\n this._deselectedToEmit.push(value);\n }\n }\n }\n /** Clears out the selected values. */\n _unmarkAll() {\n if (!this.isEmpty()) {\n this._selection.forEach(value => this._unmarkSelected(value));\n }\n }\n /**\n * Verifies the value assignment and throws an error if the specified value array is\n * including multiple values while the selection model is not supporting multiple values.\n */\n _verifyValueAssignment(values) {\n if (values.length > 1 && !this._multiple && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMultipleValuesInSingleSelectionError();\n }\n }\n /** Whether there are queued up change to be emitted. */\n _hasQueuedChanges() {\n return !!(this._deselectedToEmit.length || this._selectedToEmit.length);\n }\n /** Returns a value that is comparable to inputValue by applying compareWith function, returns the same inputValue otherwise. */\n _getConcreteValue(inputValue) {\n if (!this.compareWith) {\n return inputValue;\n }\n else {\n for (let selectedValue of this._selection) {\n if (this.compareWith(inputValue, selectedValue)) {\n return selectedValue;\n }\n }\n return inputValue;\n }\n }\n}\n/**\n * Returns an error that reports that multiple values are passed into a selection model\n * with a single value.\n * @docs-private\n */\nfunction getMultipleValuesInSingleSelectionError() {\n return Error('Cannot pass multiple values into SelectionModel with single-value mode.');\n}\n\n/**\n * Class to coordinate unique selection based on name.\n * Intended to be consumed as an Angular service.\n * This service is needed because native radio change events are only fired on the item currently\n * being selected, and we still need to uncheck the previous selection.\n *\n * This service does not *store* any IDs and names because they may change at any time, so it is\n * less error-prone if they are simply passed through when the events occur.\n */\nclass UniqueSelectionDispatcher {\n constructor() {\n this._listeners = [];\n }\n /**\n * Notify other items that selection for the given name has been set.\n * @param id ID of the item.\n * @param name Name of the item.\n */\n notify(id, name) {\n for (let listener of this._listeners) {\n listener(id, name);\n }\n }\n /**\n * Listen for future changes to item selection.\n * @return Function used to deregister listener\n */\n listen(listener) {\n this._listeners.push(listener);\n return () => {\n this._listeners = this._listeners.filter((registered) => {\n return listener !== registered;\n });\n };\n }\n ngOnDestroy() {\n this._listeners = [];\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: UniqueSelectionDispatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: UniqueSelectionDispatcher, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"16.1.1\", ngImport: i0, type: UniqueSelectionDispatcher, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\n/**\n * Injection token for {@link _ViewRepeater}. This token is for use by Angular Material only.\n * @docs-private\n */\nconst _VIEW_REPEATER_STRATEGY = new InjectionToken('_ViewRepeater');\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ArrayDataSource, DataSource, SelectionModel, UniqueSelectionDispatcher, _DisposeViewRepeaterStrategy, _RecycleViewRepeaterStrategy, _VIEW_REPEATER_STRATEGY, getMultipleValuesInSingleSelectionError, isDataSource };\n"],"names":["i0","ctx_r1","currentSize","buttonImage","src","data","name","defaultPrice_r6","ctx_r4","description","ctx_r7","energy","ProductCardComponent_a_0_ng_container_10_ng_container_4_span_4_Template","ProductCardComponent_a_0_ng_container_10_ng_container_4_span_5_Template","ProductCardComponent_a_0_ng_container_10_ng_container_4_span_6_Template","ProductCardComponent_a_0_ng_container_10_ng_container_4_span_7_Template","ctx_r8","portionWeightGrams","measureUnitType","label_r15","ProductCardComponent_a_0_ng_container_10_div_5_div_2_Template","ctx_r9","labels","ProductCardComponent_a_0_ng_container_10_ng_container_3_Template","ProductCardComponent_a_0_ng_container_10_ng_container_4_Template","ProductCardComponent_a_0_ng_container_10_div_5_Template","ctx_r5","length","_r17","ctx_r16","onOpenCard","balance","slug","ProductCardComponent_a_0_div_1_Template","ProductCardComponent_a_0_span_6_Template","ProductCardComponent_a_0_ng_container_7_Template","ProductCardComponent_a_0_div_9_Template","ProductCardComponent_a_0_ng_container_10_Template","_c10","ctx_r0","allergens","defaultPrice$","itemSizes","ProductCardComponent","constructor","this","menuListRepository","inject","MenuListRepository","router","Router","ngOnChanges","prepareData","getDefaultSize","getDefaultPriceObservable","nutritionPerHundredGrams","navigate","categorySlug","static","t","core","Xpm","selectors","inputs","standalone","features","decls","vars","consts","i18n_0","$localize","ProductCardComponent_a_0_Template","ctx","CommonModule","i1","NgOptimizedImage","CurrencyComponent","encapsulation","CategoryPageAbstract","scrollListService","ScrollListService","sessionRepository","SessionRepository","intersectionOptions","rootMargin","threshold","schedule$","activeCategorySchedule$","categories$","menuNavCategories$","pipe","map","categories","filter","c","isScheduleAvailable","items$","showItems$","combineLatestWith","activeLabelFilter$","activeAllergenFilter$","items","activeLabelFilter","activeAllergenFilter","i","some","l","includes","a","reduce","arr","item","set","categoryId","get","concat","Map","shareReplay","activeCategoryIndex$","activeIndexItem$","isSearching$","searchString$","str","ngAfterViewInit","tap","activeCategorySlug","find","id","activeCategoryId","currentCategoryId","setActiveCategory","x","setTimeout","setActiveIndex","untilDestroyed","subscribe","leaveEnd","isSearching","test","url","setActiveCategoryBySlug","lG2","__decorate","UntilDestroy","ScrollItemDirective","elRef","setActive","window","scrollTo","left","top","nativeElement","offsetTop","behavior","ScrollListDirective","activeIndex","changes","firstChange","scrollButtons","contentQueries","rf","dirIndex","schedule_r4","from","to","item_r5","category_r1","_r7","$implicit","ctx_r6","DefaultCategoryPageComponent_div_2_div_4_Template","DefaultCategoryPageComponent_div_2_div_7_Template","DefaultCategoryPageComponent","DefaultCategoryPageComponent_div_2_Template","tmp_0_0","undefined","NgIf","NgFor","AsyncPipe","RouterOutlet","ObserverDirective","schedule_r7","item_r8","FreshCategoryPageComponent_div_0_div_2_ng_container_1_div_4_Template","FreshCategoryPageComponent_div_0_div_2_ng_container_1_div_7_Template","category_r3","data_r1","_r12","ngIf","ctx_r11","FreshCategoryPageComponent_div_0_div_2_ng_container_1_Template","ctx_r2","FreshCategoryPageComponent_div_0_div_2_Template","FreshCategoryPageComponent","FreshCategoryPageComponent_div_0_Template","_c4","routes","path","component","CategoryComponent","config","layout$","layouts","Layout","template","CategoryComponent_app_default_category_page_2_Template","CategoryComponent_app_fresh_category_page_3_Template","Default","Fresh","NgSwitch","NgSwitchCase","children","loadComponent","__webpack_require__","e","then","bind","DataSource","isDataSource","value","connect","ConnectableObservable","ArrayDataSource","_data","super","isObservable","of","disconnect","_RecycleViewRepeaterStrategy","viewCacheSize","_viewCache","applyChanges","viewContainerRef","itemContextFactory","itemValueResolver","itemViewChanged","forEachOperation","record","adjustedPreviousIndex","currentIndex","view","operation","previousIndex","_insertView","viewArgsFactory","_detachAndCacheView","_moveView","context","detach","destroy","cachedView","_insertViewFromCache","viewArgs","createEmbeddedView","templateRef","index","detachedView","_maybeCacheView","move","push","indexOf","remove","pop","insert","SelectionModel","selected","_selected","Array","_selection","values","_multiple","initiallySelectedValues","_emitChanges","compareWith","Set","_deselectedToEmit","_selectedToEmit","changed","Subject","forEach","_markSelected","select","_verifyValueAssignment","_hasQueuedChanges","_emitChangeEvent","deselect","_unmarkSelected","setSelection","oldValues","newSelectedSet","has","toggle","isSelected","clear","flushEvent","_unmarkAll","_getConcreteValue","isEmpty","size","hasValue","sort","predicate","isMultipleSelection","next","source","added","removed","add","delete","inputValue","selectedValue","UniqueSelectionDispatcher","_listeners","notify","listener","listen","registered","ngOnDestroy","ɵfac","ɵprov","token","factory","providedIn","_VIEW_REPEATER_STRATEGY","InjectionToken"],"sourceRoot":"webpack:///"}